课程视频地址:https://study.163.com/courses-search?keyword=CS231

课程主页:http://cs231n.stanford.edu/2017/

这一讲主要介绍卷积神经网络。

第一部分是介绍历史,这里略过,直接进入正题。

卷积神经网络

卷积神经网络主要用于计算机视觉领域,处理对象为图片,首先来比较卷积神经网络和之前介绍的神经网络的区别。

之前介绍的神经网络每层被称为全连接层,形式如下

而卷积神经网络有卷积层,形式如下

那么为什么要使用卷积层而不是全连接层呢?主要如下两个原因。第一个原因是全连接层的权重太多,例如$200\times 200\times 3$的图像将有$120,000$个权重,这很容易导致过拟合(参数太多)以及计算成本太大;第二个原因是图像中有很多模式重复出现,例如边缘等等,使用滤波器可以复用这些共同特征。

下面详细介绍卷积层。

卷积层

下面假设图像的维度为$W_1 \times H_1 \times D_1​$,一般来说,滤波器前两个维度相等,而第三个维度必须等于图像的第三个维度,从而这里假设滤波器的维度为$F\times F\times D_1​$。之前演示的是一个滤波器的情形,实际中常常使用多个滤波器,此时的输出结果如下

实际中,用$K$表示滤波器的个数。下面以一个例子展示计算步骤,以$D_1= 1$为例

首先将滤波器放在图片左上角,将对应元素相乘并求和,这就得到了$0​$,即输出结果左上角的元素,然后将滤波器向右平移$1​$个像素,继续上述步骤得到$30​$,依次类推可以计算完第一行,接着将滤波器放到图片第二行的位置,重复之前的操作,最终可以得到输出结果。

从这个例子出发,接着介绍卷积层中几个重要概念。

步长(stride)

上面的例子中,我们每次移动一个单位,而实际中可以移动多个单位,每次移动的单位数量就叫做步长,记为$S$。我们来看个具体例子

第一步的计算没有变化,第二步直接将滤波器向右移动两格,来到下图蓝点的位置,得到的结果如下

按照这个步骤继续计算可得

从上述结果不难发现,如果步长为$S$,输出维度为$W_2 \times H_2 \times D_2$,那么

其中$W_1 \times H_1 \times D_1​$为输入的维度,$F\times F\times D_1​$为滤波器的维度,$K​$为滤波器的数量。

注意这里我们要选择$S$,使得$(W_1 - F) / S,(H_1 - F) / S $为整数(这部分和吴恩达老师在Coursera上的课程有些出入,吴恩达老师没有提到这个要求)。

从这个例子中我们不难发现两点,第一点是如果经过几次卷积操作,图像就会缩小太多;第二点是图像角落边缘的像素执行卷积操作的次数太少,会丢失很多信息,于是就有了第二个操作,填充(padding)。

填充(padding)

填充的操作很简单,在执行卷积操作之前现在图像边缘填充$0$,具体效果如下

把上述两点进行总结如下:

假设输入维度为维度为$W_1 \times H_1 \times D_1$,超参数为

  • 滤波器数量$K​$
  • 滤波器的维度$F\times F\times D_1$
  • 步长$S$
  • 填充数量$P$

那么输出维度为$W_2 \times H_2 \times D_2$,其中

注意每个滤波器的参数个数为$F.F. D_1$,所以滤波器的参数个数为$(F.F. D_1).K$,偏差个数为$K$,即一共有$(F.F. D_1+1).K$个参数。

实际应用中,还有一个重要操作为池化。

池化层

池化的目的是降低数据维度,具体效果如下(下图展示的是最大值池化,实际中还有平均值池化)

池化层也有对应的步长,填充参数,计算维度的方式和之前相同。

全连接层

全连接层就是普通的神经网络,这里从略。

卷积神经网络架构

实际的卷积神经网络是由卷积层,池化层以及全连接层组合而成,来看一个例子