Foundations of Convolution Neural Networks

Computer Vision

  • 受益于深度学习 计算机视觉是目前快速发展的领域之一


    image.png
  • 如果你用一个标准的或者全连接的网络 这个矩阵将会是一个一千乘以三百万维的矩阵 x现在的维度是三百万 我用3m来表示3百万 这表示在这里这个矩阵会有 三百万个参数 这是非常非常大的 有这么多的参数 很难获得足够的数据以避免神经网络过拟合 同时 训练一个有三百万个参数的神经网络 对计算量和内存的需求是不太可行的 但对于计算机视觉应用 你不会想要被限制于使用一个小图像 你想要用大图像 为了做到这点 你需要更好地运用卷积运算 它是卷积神经网络的基础之一


    image.png

Edge Detection Example

  • 卷积运算是卷积神经网络的 基础组成单元之一 我们用边缘检测作为引发兴趣的例子 你将了解卷积运算是如何进行的


    image.png
  • 建立一个3x3的过滤器 或者说是3x3的矩阵 像这样 111 000 -1 -1 -1的 有时候科研论文中会将它称为核(kernel)而不是过滤器 但是在这个视频中我将会用过滤器这个术语 你需要做的是获得6x6的图像并求其卷积 卷积运算用这个星号代替 用这个3x3的过滤器去求它的卷积


    image.png
image.png

为什么这是在进行垂直边缘检测呢 让我们看看另一个例子。


image.png
  • 在图像的中间 垂直边缘检测里也许能得到一个直观的理解 一个垂直边缘是一个3x3的区域 因为我们用的是3x3的过滤器 左边有亮像素 你并不在意中间有什么 然后在右边是暗像素 在这个6x6的图像的中间 可能会有亮像素在左边 暗像素在右边 这就是为什么它认为那里有一个垂直边缘 卷积运算提供了一个方便的方法去弄清楚 如何在图像中找到这些垂直边缘 所以现在你知道卷积运算是怎么发挥作用的 在下一个视频中 你会看到如何运用它 作为卷积神经网络中的一个基本构成

More Edge Detection

  • 如果将颜色翻转 即左边是暗的部分 右边是亮的部分 因此 10现在在右半部分0现在在左半部分。 如果将它与相同的边缘检测器做卷积 你将会在中间部分得到-30而不是30 你可以将结果画出来可能看起来是这样 因为亮暗变化是反的 这些30现在也反了 变为-30 表示由暗变亮而不是由亮变暗的转换 如果你不在乎这两个的区别 你可以取输出矩阵的绝对值 但是这个过滤器确实能够区分亮到暗的边界 和暗到亮的边界


    image.png
image.png
  • 随着深度学习的发展 我们发现 如果你想要检测一些复杂图片的边界 可能并不需要计算机视觉的研究人员挑选出这9个矩阵元素 你可以把矩阵里的这9个元素当做参数 通过反向传播来学习得到他们的数值 目标是要获得这9个参数使得对6乘6的图片 用这个3乘3的过滤器进行卷积 能得到一个优良的边界检测器


    image.png

Padding

  • 为了构建深层神经网络 一个你非常需要使用的对基本的卷积操作的改进是填充(padding)


    image.png
image.png

Strided Convolutions

  • Strided(带步长的)卷积是在卷积神经网络中 组成基础卷积模块的另一部分
image.png
image.png
  • 我们在本视频中定义的卷积操作 将翻转操作省略了。 技术层面来说,实际上 我们在之前的视频中进行的操作 应该是叫交叉相关,而不是卷积。 但是在深度学习文献中,由于约定 我们只不过将其称为卷积。
  • 总结一下,在机器学习的约定中, 我们通常忽略掉翻转的操作。 技术上,我们进行的操作最好称之为交叉相关。 但是,大多数深度学习的文献都叫它卷积操作。 所以,在本课程的视频中,我将延续这一约定。 如果你读过许多机器学习的相关文献 你就会发现 大多数人叫这个卷积,并不需要做翻转
  • 事实上,在信号处理或其他数学分支领域 对卷积核进行翻转 会使卷积核保持 (A卷积B)卷积C等于A卷积(B卷积C) 这一性质在数学上叫结合率(associativity) 这一性质在信号处理领域很有用 但对深度神经网络而言,它并不重要 所以元素间相乘并求和简化了代码 而且这一改变后,神经网络照常工作 为了方便,我们大部分人叫这个卷积 即使有时数学家更喜欢管它叫交叉相关

Convolutions Over Volume

已经了解了卷积在二维图像上是如何工作的 现在,让我们看看如何实现这个卷积算法 但不是对二维图像 而是对三维图像


image.png
image.png

如果我们不仅仅想要检测垂直边缘呢? 如果我们想同时检测垂直边缘和水平边缘, 又或者是45度边缘或者70度边缘, 换句话来说,如果你想要同时应用多个过滤器呢?


image.png

One Layer of a Convolutional Network

  • 这里的过滤器 作用和w[1]类似 之前我们在卷积计算中 我们有27个输入 或者确切的说 是两组27个输入 因为我们有两个过滤器 我们需要把上面这些数字相乘 这其实就是通过一个线性方程计算得到一个4x4的矩阵 这里通过卷积计算得出4x4矩阵 这个过程和 w[1] x a[0] 类似 输出也是一个4x4的矩阵 另外就是添加偏差值 因此方框里的这些 作用和z类似 最后 应用非线性方程


    image.png
  • 现在想象一下 前面我们的图中是两个过滤器 现在这里我们有10个过滤器 1, 2, ... 10个 加起来是28x10 也就是280个参数 注意这里. 一个很好的特性是. 不管输入的图像有多大 比方1000 x 1000 或者5000 x 5000, 这里的参数个数不变. 依然是280个 因此 用这10个过滤器来检测一个图片的不同的特征,比方垂直边缘线, 水平边缘线 或者其他不同的特征 不管图片多大 所用的参数个数都是一样的 这个特征使得卷积神经网络 不太容易过拟合(overfitting) 因此,比方你训练学习得到10个特征检测器(函数) 你可以把它们应用到非常大的图像(特征检测)中 所用的参数数目还是不变的,比方这个例子中的280 相对(图片大小)来说非常小


    image.png
image.png

Simple Convolutional Network Example

  • 随着你建的神经网络越来越深, 通常你开始的时候, 图像都是比较大的,例如39乘39 高度和宽度在保持不变一阵子后 随着你在神经网络中的深入, 逐渐变小 在我们的这个例子里,它从39到37到17到14。 不好意思,是39到37到17到7 而频道的数目一般会增加。 它已经从3到10到20到40, 而你会在许多其他卷积神经网络中 看到这样的一种常见的趋势


    image.png
  • 事实证明, 在一个典型的 ConvNet, 通常有三种类型的层。 一个是卷积层, 通常我们会将其表示为一个Conv层 这就是我们在前面的网络中使用的。 事实证明, 还有两种常见的层类型, 一个称为 "池" 层, 通常我会直接称为池。 最后是一个完全连通的层称为 FC。 虽然我们可能只是使用 卷积层来设计一个相当好的神经网络, 大多数神经网络架构也将有几个池层 和几个完全连接层。


    image.png

Pooling Layers

  • 除卷积层之外 ConvNets通常还使用池化层来减少展示量 以此来提高计算速度 并使一些特征的检测功能更强大

  • 因 max pooling的一个有趣的特性是 它有一套超参 但是它没有任何参数需要学习 实际上 没有任何需要梯度相加算法学习的东西 一旦确定了 f 和 s 就确定了计算 而且梯度下降算法不会对其有任何改变


    image.png
  • 截至目前,演示了在二维输入上的max pooling 如果有一个三维输入 则输出会具有同样的维数


    image.png
  • 目前,最大值采样的使用 通常比均值采样多得多,唯一的例外 是有时候在深度非常大的神经网络 你也许可以使用均值采样来合并表示 例如从7x7x1000 将它们整体取一个均值 得到1x1x1000 在神经网络中最大值采样比均值采样用的更多


    image.png
  • 总结一下 采样的超参是滤波器的大小 f 以及步长 s 或许常见的参数选择可能是 f 等于2,s 等于2 这个相当常用并且其效果是 近似得把高度和宽度缩小了两倍以上 并且一个被普遍选用的超参可能是 f 等于2,s 等于2 它的效果是将表示的 高度和宽度缩小了两倍 我还见过 f 等于3,s 等于2 而其它的超参就像一个二进制位元 指示你是使用最大值采样还是均值采样

  • 如果你愿意,你可以增加一个额外的补位超参 尽管这个是极其罕见被使用的 当你做最大值采样时,通常情况下 不会做任何补位 尽管有一个例外,这个我们下周会看到 但是,对于最大值采样的绝大多数部分 通常情况下,是不进行任何的补位 所以,截至目前 p 最为常用的取值是 p 等于零


    image.png

CNN Example

  • 14 * 14 * 6 我们把这层称之为池1输出 事实上在卷积网文档中中有二种关于层的说法 二者有细微的差别 一种说法是这称为一层 那么这二个单元一起成为神经网络的第一层 另一种说法是卷积层称为一层,池化层单独称为一层 神经网络中当人们说到网络层数的时候,通常指 那些有权重,有参数的网络层数量 因为池化层没有权重,没有参数 只有一些超参数,我会使用 卷积层1和池化层1为一体的说法 把他们作为层一,尽管有时候 当你看在线文章或读研究论文时,你会听到卷积层 和池化层被称为两个独立层 但这不过是二种细微不一致的表示术语 这里当我计算层数,我只会算那些有权重的层 所以我视这二个一起为层一 并且Conv1和Pool1名字末尾是1 也表明了我认为二者都是神经网络层一的组成部分 因为池化层1没有自己的权重,所以被并入层一

  • 通常随着神经网络的深入 高度nh和宽度nw会减小 如之前所示,从3232减到2020,1414 再到1010,最终减到5*5 因此当你深入下去通常高度和宽度将会减小 然而通道数量会增加 这里从3到6再到16,最后是全连通网络层 另一类常见的神经网络模型是 一个或多个卷积层接着一层池化层 再接着一个或多个卷积层叠加一层池化层 然后叠加几层全连接层 也许最后还叠加一个Softmax层

    image.png

image.png

Why Convolutions?

  • 卷积层和 只用完全连接的神经层比起来有两个优势 参数共享和连接的稀疏性


    image.png
image.png

你可能感兴趣的:(Foundations of Convolution Neural Networks)