zoukankan      html  css  js  c++  java
  • 卷积神经网络导览

    介绍

    这篇文章旨在以全面和简洁的方式介绍卷积神经网络(CNN),目标是建立对这些算法的内部工作的直观理解。因此,这项工作对于刚从这个主题开始的非数学、非计算机科学背景的读者来说意味着特别有价值。

    我写这篇文章的灵感来自于我正在参加的Fast.ai课程'Code Deeprs For Coders v3',导师Jeremy Howard鼓励我们在博客上讲述我们学到的东西。我在这里分享的知识来自于阅读各种材料和参加不同的课程的成果,目的是在以医学影像的学生研究项目。这些帖子的主要部分取自我最近完成的这篇论文。

    在旅程开始之前,必须采取一些预防措施来对卷积神经网络进行透视。机器学习(ML)是计算机科学的子领域,通过具有学习能力的算法解决问题。“学习”通过内部组件的自动优化一个称为参数的权重。适用于ML的问题是两种形式的预测:回归-连续值的预测以及分类-通过类成员预测将对象细分为不同的组。

    深度学习(DL)又是ML的子域,通过将具有特定架构的算法(称为神经网络)应用于机器学习问题来区分。这种架构的灵感来自于自然界中的神经网络,并且包括-稍微简化-表示连接不同神经元的计算单元和边缘以及确保信息流动的神经元。其中存在多种不同类型的神经网络:人工神经网络(ANN),专门用于处理表格数据;用于时间序列数据的递归神经网络(RNN),如语音和卷积神经网络(CNN),特别适用于图像数据。有了这些基础知识,我们就可以开始研究后一种类型了。

    “解剖”CNN

    a03cd382eb5a2be1e95bce6386440c8de43664a2

    图1.示例图

     

    图1是网络的循环示例图,它的灵感来自LeNet(LeCun等,1998)第一个CNN架构。虽然CNN之间的特定架构不同,但它们的特征在于都有该示例网络所涵盖的规定元素。该算法旨在解决二元分类问题,例如猫与狗之间的区别。

    在这一点上,重要的是该图和紧接着的用于为演练创建框架。因此,不需要完全理解和熟悉所有术语。这些更深入的理解在即将到来的部分中逐渐形成,图1将作为便于读者大致的参考。

    从图1中可以看出,网络被细分为前向和后向传递。在前向传递期间,数据通过不同的层(图1:彩色箭头)。由二维阵列表示的输入图像(图1:左空矩形)被提供给给出名称的卷积层。该层识别输入数据上的轮廓和形状,并输出一组特征图(图1:垂直条纹矩形)。最大池层成为卷积层的成功之处,它成功的消除了无关紧要的部分,从而缩小了数据。

    此后,数据通过平均池化操作,将图像数据转换为矢量,进入完全连接的层(图1:水平条纹矩形)。这些图层在此向量中标识特定于类的模式,并在此基础上预测输入数据的类成员资格。

    到目前为止,还没有学习过,因为这是在向后传递中完成的。首先,通过损失函数量化分类误差,基于损失函数的结果,通过反向传播和梯度下降来优化前述层中的参数。很明显更高的迭代次数,即输入更多训练样本图像,是实现正确分类结果所必需的。完整训练数据集通过模型的点称为epoch。

    卷积,线性整流函数和最大池化

    5f217ad09214201b29ac7fd59be4f04e28141fe4

    图2卷积操作

     

    术语“卷积”描述了特定类型的矩阵计算,其中称为滤波器的特殊目的矩阵应用于输入图像,如图2所示。滤波器(3x3矩阵)通常是较小的矩阵,在卷积运算中,它被放置在图像的子部分上:(图2中的3x3青色图像子集)。每对相应值的元素乘法和随后对所有乘积的进行求和,产生单个输出值。换句话说,图像子集的左上角值与滤波器的左上角值相乘,顶部中间值与相应的顶部中间值相乘,最后所有乘积都相加。之后,滤波器以滑动窗口的方式在输入图像的每个拟合子集上执行上述计算的图像上移动。得到的输出值被收集在称为特征图的输出矩阵中,其中特征图中的输出值的位置(图2:青色顶部中间值)对应于计算中涉及的输入图像子集的位置。

    过滤器在图像上的移动方式取决于步幅和填充。一个步骤描述了每个卷积运算将滤波器移动一个像素,从而产生更小的特征图(图2:步幅s=1)。通过向图像的外边界添加零像素来抵消特征图的尺寸减小,称为填充(图2:填充=0)。在卷积操作期间,大多数单独的滤波器应用于输入图像,从而产生每个滤波器的特征图(图2:滤波器和特征图后面的多个silhouttes)。换句话说,卷积层输出与其滤波器计数对应的一叠特征映射。

    4e0eed716f142816d9120c5b69f2f2b94b33d715

    图3.卷积操作

     

    可以将滤波器视为专用轮廓检测​​器,并且得到的特征图报告检测位置。如果过滤器放置在包含边缘的图像子部件上,它会将其转换为特征图中的高值。换句话说,高特征映射值表示特定位置处的输入图像中的轮廓检测。该过程如图3所示:如果过滤器到达由黄色和绿色框标记的子部分,则识别基础轮廓。因此,特征图也可以被视为图像并相应地可视化。

    ab50d82aa6635923bae61dfc854fc3f6f02f2596

    图4.卷积操作示例结果

    图4显示出了对输入图像应用滤波器(图4:底行)以进行垂直或水平边缘检测的结果。

     

    bba6d2e736f6b259b8433922f5d253372676cb1b

    图5.学习后的过滤器,来自Zeiler和Fergus,2014年

    过滤器值是权重、是学习的参数。它们在后向传递期间不断优化,同时更多的数据通过网络。通过这种方式,实现了调整过程:过滤器学习识别输入图像中可用的特定元素,并且可以将其可视化为图片本身。而早期图层中的过滤器(图5:左)将学习基本像素,如轮廓,后期图层中的过滤器(图5:右)将连接上游特征,并学习更复杂的构造,例如眼睛甚至脸部( Zeiler和Fergus,2014)。因此,可以小心地将滤波器与视觉皮层神经元的感受野进行比较。

    f5668fa6a969a26ea53a84af86a3b66893151cd3

    图6.整流线性单元(ReLU)

    这个被称为线性整流单元(ReLU)的函数应用于输出特征图(图6)。在令人生畏的名称下隐藏了一个简单的阈值步骤:零以下的所有值都归零。

    4fc93d91085fa8310a37a8250bafd98d5e163339

    图7.最大池

    阈值化的特征图被移交给最大池化层(图7)。这里,虽然类似于卷积,但实际上发生了更简单的矩阵计算。过滤器再次以滑动窗口方式放置在要素图子集上,并提取子集的最高值,将它们保留在精简输出要素图中。目的是丢弃多余的数据:没有表示任何轮廓检测的值被划掉,而空间信息大致保留,这导致较低的计算成本。

    原文链接
    本文为云栖社区原创内容,未经允许不得转载。

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/yunqishequ/p/10069955.html
Copyright © 2011-2022 走看看