吴恩达深度学习课程笔记(四):卷积神经网络1

吴恩达深度学习课程笔记(四):卷积神经网络1

第一周 卷积神经网络

1.1 计算机视觉

用途:

  • 图像分类;
  • 目标检测;
  • 风格迁移;
  • 。。。。。。

吴恩达深度学习课程笔记(四):卷积神经网络1

挑战:需要的数据量大:

  • 对一个1000*1000的图片,有1000* 1000*3即3 000 000 个输入特征,如果使用全连接网络,假设第一隐层有1000个单元,那么,光第一隐层就有(1000, 3 000 000)这么大的w,即3000 000 000个参数。难以获得足够的数据来防止过拟合。所需要的内存也是无法接受的。
    吴恩达深度学习课程笔记(四):卷积神经网络1

为了能够处理大图,必须使用卷积。

1.2 边缘检测示例

吴恩达深度学习课程笔记(四):卷积神经网络1

上图中,为3×3的过滤器(filter,又叫,kernel);

表示卷积运算(convolution)。

卷积为:用filter和矩阵的第一个3×3部分的元素相乘再相加,然后filter右移一列,相乘再相加。。。到矩阵最右端后下移一行,重复上述操作。最后卷积的结果为一个4×4的矩阵。

上图所使用的过滤器(卷积核)为垂直边缘检测器。

在tensorflow中,卷积为tf.nn.conv2d

在Keras中,卷积为Conv2D

吴恩达深度学习课程笔记(四):卷积神经网络1

这就是垂直边缘检测器。通过该卷积核,卷积出图像的垂直边缘轮廓。

如果图像为1000×1000的,那么卷积出来的轮廓图像为998×998。

1.3 更多边缘检测内容

吴恩达深度学习课程笔记(四):卷积神经网络1

该卷积核(垂直边缘检测器)可以区分明暗,即图像是由明转暗,还是由暗转明。

吴恩达深度学习课程笔记(四):卷积神经网络1

上图,垂直边缘检测器翻转,得到水平边缘检测器。

吴恩达深度学习课程笔记(四):卷积神经网络1

Sobel 边缘检测器,增加了中间一行元素的权重,使得结果鲁棒性更好。

吴恩达深度学习课程笔记(四):卷积神经网络1

Scharr滤波器。

随着深度学习的发展,当需要坚检测出复杂图像的边缘,不一定非要使用类似上边介绍的这九个数字,但可以从这些前人成果中获益。

即,把9个数字作为参数,使用反向传播算法,让神经网络来理解这九个数字。最后得到一个出色的边缘检测器。

使用神经网络能够学习任何改网络所需要的3×3滤波器,并在整幅图上使用该滤波器,检测出图像的边缘。

思想:将滤波器的九个数字作为神经网络的参数来训练。

1.4 Padding

一个n×n的图像和一个f×f的图像卷积后的结果是一个(nf+1)×(nf+1)的图像。

这样卷积的缺点:

  • 图像会缩小;
    • 尤其是深度网络中,一层一层的卷积下去,图像会大幅缩水。
  • 在角落和边缘区域的像素点在输出中采用较少,即丢弃了图像边缘位置。

解决办法:填充图像(Padding)。

一般用0填充。

一个图像的上下左右都填充,每个边填充p行(列),那么,最后的卷积结果变成了(n+2pf+1)×(n+2pf+1)

比如,在6×6的图像周围在加一层像素点,变成8×8。这样,3×3卷积核的结果是6×6

吴恩达深度学习课程笔记(四):卷积神经网络1

现在存在两种卷积:不padding的卷积和padding的卷积:

  • Vaild convolution:
    • 不填充。
  • Same convolution:
    • 填充的效果是,卷积后的图像大小和填充前图像的大小一致。
    • n+2pf+1=n,即p=f12
    • 卷积核的大小f一般是奇数。
      • 可以做到对称填充。
      • 有中心点。
    • 四条边都填充。

1.5 卷积步长

卷积的步长不一定是1。
一个步长为s的卷积的结果如下:
吴恩达深度学习课程笔记(四):卷积神经网络1

数学意义上的卷积,需要先进行翻转,之后再互相关。深度学习没有翻转,只有互相关。但深度学习领域,习惯上,将这种互相关称之为卷积。

  • 数学卷积:翻转,互相关;
  • 深度学习卷积:互相关;

使用的都是符号。

1.6 多维卷积

吴恩达深度学习课程笔记(四):卷积神经网络1

卷积核的通道数 = 图像的通道数;

卷积的结果为二维矩阵。

卷积核还是在二维平面上按照既定步长移动,只不过变成立方体内部数据相乘再相加。

吴恩达深度学习课程笔记(四):卷积神经网络1

n×n×nc  f×f×nc>n+2pfs+1×n+2pfs+1×nc

其中,nc为通道数;nc为卷积核的个数。

图像的通道数(channels)也叫做3维立方体的深度(depth)。

使用不同的卷积核,比如上图使用垂直边缘检测器和水平边缘检测器,识别图像的不同特征。

1.7 卷积层

如何构建神经网络的卷积层?

吴恩达深度学习课程笔记(四):卷积神经网络1

卷积层的参数w是过滤器的参数。那么,卷积层的参数个数仅由过滤器的size和过滤器个数影响。比如,卷积层有10个3×3×3的过滤器,那么卷积层就是280个参数。不管输入的图像有多大,都是这280个参数。这就是卷积神经网络的一个特征,叫做“避免过拟合”。

吴恩达深度学习课程笔记(四):卷积神经网络1

注:A[l]:m×nH[l]×nW[l]×nc[l]的顺序仅为吴恩达的顺序,并不是同一标准。也有人喜欢将通道放在最前。

再注:以上标记法也仅为吴恩达标记的方式,在今天,深度学习领域还没有达成一致的标记法。

1.8 小例子:一个简单的卷积网络

吴恩达深度学习课程笔记(四):卷积神经网络1
卷积结束后展开成一个向量,给到逻辑回归,判断是否为猫。

可以看到,随着一层一层的卷积,输出的数据大小在不断的减小,但是信道数量在不断的增加。

确定超参数f[l]p[l]s[l]nc[l]是一件费功夫的事情。

一个典型的卷积神经网络有:

  • 卷积层(conv:convolution);
  • 池化层(pool:pooling);
  • 全连接层(FC:fully connected) 。

1.9 池化层

作用:

  • 缩减模型大小,提高运算速度;
  • 提高所提取特征的鲁棒性。

最大池化(max pooling):

吴恩达深度学习课程笔记(四):卷积神经网络1

输入是某些特征的集合。数字大(9)可能意味着提取了某个特定特征。其他的地方没有这个特征。最大化操作的功能就是只要在任何一个框(图中有四个框)内提取到某个特征。它都会保留到最大池化的输出中。

最大池化作用的一种理解:如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,那么最大池化保留的结果也很小。

使用最大池化的原因:在很多实验中效果很好。

最大池化的操作是分别对每个信道单独执行的。
吴恩达深度学习课程笔记(四):卷积神经网络1

比如输入的图像有两个信道,那么分别对两个信道做最大池化。

池化的输出是n+2pfs+1×n+2pfs+1×nc

其中,nc是输入的信道数。

注意:卷积的输出信道数nc = 过滤器的个数。池化的输出信道数 = 输入的信道数。

nc个信道中的每一个信道都是单独地执行最大池化。

平均池化(average pooling):

吴恩达深度学习课程笔记(四):卷积神经网络1

类似最大池化,最大池化选择最大值,平均池化将窗口内的所有值求平均。

最大池化比平均池更常用。

总结:

超参数:

  • f:过滤器大小;
  • s:步长;

常见的参数为f=2,s=2,效果是高度和宽度减半。

也有f=3,s=2。

超参数p很少使用,即p=0

则:

输入:nH×nW×nc

输出:nHfs+1×nWfs+1×nc

池化没有需要学习的参数。池化只是静态属性。

1.10 卷积神经网络示例

吴恩达深度学习课程笔记(四):卷积神经网络1

存在两种计算神经网络层数的方式。

  1. 卷积层 + 池化层 = 一层;
  2. 卷积层 = 一层,池化层 = 一层。

吴恩达采用第一种方式。这种方式,在统计神经网络的层数时,可以只统计具有权重和参数的层(池化层没有权重和参数,只有超参数)。

吴恩达深度学习课程笔记(四):卷积神经网络1

关于超参数选择的常规做法:

尽量不要知己设置超参数;查看文献,看别人采用了哪些超参数;选择一个在别人的任务中效果很好的架构。那么这个架构也有可能使用与自己的应用程序。

随着神经网络深度的加深,高度nH、宽度nW通常都会减小,信道数会增加。

神经网络的一种模式:
conv(一层或多层)- pool - conv - pool - FC - FC - FC - Softmax 。

吴恩达深度学习课程笔记(四):卷积神经网络1
修正:
CONV1的parameters应该为608(5 X 5 X 3 X 8 + 8);
CONV2的parameters应该为3216(5 X 5 X 8 X 16 + 16)。

结论:

  • 池化层无参数;卷积层参数少;绝大部分参数在全连接层;
  • **值数量随着网络深度的增加而减小,但如果**值数量下降的太快,会影响网络性能。

1.11 为什么用卷积?

和只用全连接层(FC)相比,卷积层的两个主要优势:

  • 参数共享;
  • 稀疏连接;

通过这两种机制,神经网络减少了大量参数。以便于我们用更小的训练集来训练它,从而预测过拟合。

CNN具有平移不变属性。比如图像向有移动几个像素,仍然能够识别。因为神经网络的卷积结构即使移动几个像素,这张图像依然具有非常相似的特征,应该属于同样的输出标记。