04. 卷积神经网络
第1周 卷积神经网络
1.1 计算机视觉
- 计算机视觉问题
(1)图像分类
(2)目标检测
(3)风格迁移 - 大规模图片上的深度学习
(1)以往的图片往往大小是 64 × 64 × 3 64\times 64 \times 3 64×64×3的,即总特征数为12288。
(2)若图片大小增加到 1000 × 1000 × 3 1000 \times 1000 \times 3 1000×1000×3,则总特征数增加到3百万。
1.2 边缘检测示例
- 计算机视觉问题
(1)人脸检测距离 - 垂直边缘检测
[ 3 0 1 2 7 4 1 5 8 9 3 1 2 7 2 5 1 3 0 1 3 1 7 8 4 2 1 6 2 8 2 4 5 2 3 9 ] ∗ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = [ − 5 − 4 0 8 − 10 − 2 2 3 0 − 2 − 4 − 7 − 3 − 2 − 3 − 16 ] \left[\begin{matrix} 3 & 0 & 1 & 2 & 7 & 4 \\ 1 & 5 & 8 & 9 & 3 & 1 \\ 2 & 7 & 2 & 5 & 1 & 3 \\ 0 & 1 & 3 & 1 & 7 & 8 \\ 4 & 2 & 1 & 6 & 2 & 8 \\ 2 & 4 & 5 & 2 & 3 & 9 \end{matrix}\right] * \left[\begin{matrix} 1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1 \end{matrix}\right] = \left[\begin{matrix} -5 & -4 & 0 & 8 \\ -10 & -2 & 2 & 3 \\ 0 & -2 & -4 & -7 \\ -3 & -2 & -3 & -16 \end{matrix} \right] ⎣⎢⎢⎢⎢⎢⎢⎡312042057124182315295162731723413889⎦⎥⎥⎥⎥⎥⎥⎤∗⎣⎡111000−1−1−1⎦⎤=⎣⎢⎢⎡−5−100−3−4−2−2−202−4−383−7−16⎦⎥⎥⎤ - 编程实现
(1)python:conv_forward
(2)tensorflow:tf.nn.conv2d - 垂直边缘检测的直观解释
1.3 更多边缘检测内容
- 垂直和水平边缘检测
(1)垂直
[ 1 0 − 1 1 0 − 1 1 0 − 1 ] \left[\begin{matrix} 1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1 \end{matrix}\right] ⎣⎡111000−1−1−1⎦⎤
(2)水平
[ 1 1 1 0 0 0 − 1 − 1 − 1 ] \left[\begin{matrix} 1 & 1 & 1\\ 0 & 0 & 0\\ -1 & -1 & -1 \end{matrix}\right] ⎣⎡10−110−110−1⎦⎤
(3)正负边缘
正边缘指从亮到暗的过渡边缘。 - 学习边缘检测
(1)Sobel滤波器(更鲁棒)
[ 1 0 − 1 2 0 − 2 1 0 − 1 ] \left[\begin{matrix} 1 & 0 & -1\\ 2 & 0 & -2\\ 1 & 0 & -1 \end{matrix}\right] ⎣⎡121000−1−2−1⎦⎤
(2)Scharr滤波器
[ 3 0 − 3 10 0 − 10 3 0 − 3 ] \left[\begin{matrix} 3 & 0 & -3\\ 10 & 0 & -10\\ 3 & 0 & -3 \end{matrix}\right] ⎣⎡3103000−3−10−3⎦⎤
(3)可以将矩阵元素作为学习的参数。
1.4 Padding
- Padding
(1)若有一张图片大小为 n × n n \times n n×n,滤波器大小为 f × f f \times f f×f,则卷积结果大小为 ( n − f + 1 ) × ( n − f + 1 ) (n-f+1)\times (n-f+1) (n−f+1)×(n−f+1)。
(2)缺点:每次卷积图像会变小;边角的像素只在一次卷积中涉及到,中部的像素点被多次采用。
(3)解决方法:在原始图像外围填充一圈像素点。设填充像素点个数为 p p p,则原始图像变为 ( n + 2 p ) × ( n + 2 p ) (n+2p)\times(n+2p) (n+2p)×(n+2p),因此卷积结果大小变为 ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) (n+2p-f+1)\times(n+2p-f+1) (n+2p−f+1)×(n+2p−f+1) - Valid卷积和Same卷积
(1)Valid卷积:不填充
(2)Same卷积:填充,使得卷积结果和原始图像大小相同 - 通常情况下, f f f是奇数。
1.5 卷积步长
- 步幅卷积
(1)之前的卷积过程,步幅为1。
(2)若输入为 n × n n \times n n×n,滤波器为 f × f f \times f f×f,填充大小为 p p p,步幅为 s s s,则输出结果为 ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \lfloor\frac{n+2p-f}{s}+1\rfloor \times \lfloor\frac{n+2p-f}{s}+1\rfloor ⌊sn+2p−f+1⌋×⌊sn+2p−f+1⌋ - 互相关和卷积
机器学习(深度学习)领域中的卷积,和数学领域的卷积有所区别,和数学领域中的互相关更一致。
数学领域中的卷积运算,首先要对滤波器进行水平和垂直翻转,然后再进行计算。
1.6 三维卷积
- RGB图像卷积
(1)原始图像尺寸:高 × \times ×宽 × \times ×通道数
(2)卷积核尺寸:高 × \times ×宽 × \times ×通道数(与原始图像相同)
(3)输出结果:高 × \times ×宽(二维) - 多过滤器
用于检测不同目标,如垂直边缘、水平边缘等。此时输出结果不再是二维的,和过滤器数量有关。
1.7 单层卷积网络
- 单层举例
- 符号说明
若 l l l层为卷积层,则
(1) f [ l ] f^{[l]} f[l]过滤器规模
(2) p [ l ] p^{[l]} p[l]填充像素数量
(3) s [ l ] s^{[l]} s[l]步长
(4) n C [ l ] n^{[l]}_C nC[l]过滤器数量
(5)每个过滤器的大小为 f [ l ] × f [ l ] × n C [ l ] f^{[l]}\times f^{[l]} \times n_C^{[l]} f[l]×f[l]×nC[l]
(6)激活函数 a [ l ] a^{[l]} a[l]为 n H [ l ] × n W [ l ] × n C [ l ] n_H^{[l]}\times n_W^{[l]}\times n_C^{[l]} nH[l]×nW[l]×nC[l]
(7)权重 f [ l ] × f [ l ] × n C [ l ] × n C [ l ] f^{[l]}\times f^{[l]} \times n_C^{[l]}\times n_C^{[l]} f[l]×f[l]×nC[l]×nC[l]
(8)偏差 n C [ l ] n_C^{[l]} nC[l]
(9)输入: n H [ l − 1 ] × n W [ l − 1 ] × n C [ l − 1 ] n^{[l-1]}_H \times n^{[l-1]}_W\times n^{[l-1]}_C nH[l−1]×nW[l−1]×nC[l−1]
(10)输出: n H [ l ] × n W [ l ] × n C [ l ] n^{[l]}_H \times n^{[l]}_W\times n^{[l]}_C nH[l]×nW[l]×nC[l],其中 n H [ l ] = ⌊ n H [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ n^{[l]}_H=\lfloor\frac{n_H^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1\rfloor nH[l]=⌊s[l]nH[l−1]+2p[l]−f[l]+1⌋, n W [ l ] n^{[l]}_W nW[l]类似.
1.8 简单卷积网络示例
- ConvNet举例
(1)问题描述
假设输入是一张图片,目的是分类图片是否有猫。
(2)输入尺寸
n H [ 0 ] = 39 n_{H}^{[0]}=39 nH[0]=39
n W [ 0 ] = 39 n_{W}^{[0]}=39 nW[0]=39
n C [ 0 ] = 3 n_{C}^{[0]}=3 nC[0]=3
(3)第一层过滤器信息
f [ 1 ] = 3 f^{[1]}=3 f[1]=3
s [ 1 ] = 1 s^{[1]}=1 s[1]=1
p [ 1 ] = 0 p^{[1]}=0 p[1]=0
过滤器个数:10
(4)第一层输出信息
n H [ 1 ] = 37 n_{H}^{[1]}=37 nH[1]=37
n W [ 1 ] = 37 n_{W}^{[1]}=37 nW[1]=37
n C [ 1 ] = 10 n_{C}^{[1]}=10 nC[1]=10
(5)第二层过滤器信息
f [ 2 ] = 5 f^{[2]}=5 f[2]=5
s [ 2 ] = 2 s^{[2]}=2 s[2]=2
p [ 1 ] = 0 p^{[1]}=0 p[1]=0
过滤器个数:20
(6)第二层输出信息
n H [ 2 ] = 17 n_{H}^{[2]}=17 nH[2]=17
n W [ 2 ] = 17 n_{W}^{[2]}=17 nW[2]=17
n C [ 2 ] = 20 n_{C}^{[2]}=20 nC[2]=20
(7)第三层过滤器信息
f [ 3 ] = 5 f^{[3]}=5 f[3]=5
s [ 3 ] = 2 s^{[3]}=2 s[3]=2
p [ 3 ] = 0 p^{[3]}=0 p[3]=0
过滤器个数:40
(8)第三层输出信息
n H [ 3 ] = 7 n_{H}^{[3]}=7 nH[3]=7
n W [ 3 ] = 7 n_{W}^{[3]}=7 nW[3]=7
n C [ 3 ] = 40 n_{C}^{[3]}=40 nC[3]=40
(9)通常情况下,将最后一步提取的多维特征展开成一个向量,然后输入到softmax或sigmoid中。 - 卷积网络层中的层的类型
(1)卷积层
(2)池化层
(3)全连接层
1.9 池化层
- 池化层的作用
(1)缩减模型大小
(2)提高计算速度
(3)提高所提取特征的鲁棒性 - 池化层:最大池化
上图中使用的过滤器的信息为: f = 2 f=2 f=2, s = 2 s=2 s=2。 - 平均池化(不常用)
- 池化层总结
(1)超参:常用的参数组有 f = 2 , s = 2 f=2, s=2 f=2,s=2或 f = 3 , s = 2 f=3,s=2 f=3,s=2,通常不使用padding
(2)若输入是 n H × n W × n C n_H\times n_W\times n_C nH×nW×nC,则输出是 ⌊ n H − f s + 1 ⌋ × ⌊ n W − f s + 1 ⌋ × n C \lfloor\frac{n_H-f}{s}+1\rfloor \times \lfloor\frac{n_W-f}{s}+1\rfloor \times n_C ⌊snH−f+1⌋×⌊snW−f+1⌋×nC
1.10 卷积神经网络示例
- 神经网络举例(类似于LeNet-5)
(1)输入为 32 × 32 × 3 32\times32\times3 32×32×3
(2)Conv1信息
f = 5 , s = 1 f=5, s=1 f=5,s=1,过滤器个数6
(3)Pool1信息
f = 2 , s = 2 f=2, s=2 f=2,s=2
(4)Conv2信息
f = 5 , s = 1 f=5, s=1 f=5,s=1,过滤器个数16
(5)Pool2信息
f = 2 , s = 2 f=2, s=2 f=2,s=2
(6)将输出 5 × 5 × 16 5\times5\times16 5×5×16张成一个向量( 400 400 400)
(7)将向量输入到全连接层(FC3),参数为120维
(8)将上一层输出结果输入到全连接层(FC4),参数为84维
(9)将上一层输入到softmax中。
- 因为池化层没有参数需要学习,因此通常将卷积层和池化层称为一层(Layer1)。
- 示例总结
神经网络层 激活函数维度 激活函数规模 参数数量 输入 (32, 32,3) 3072 0 CONV1(f=5,s=1) (28,28,8) 6272 208 POOL1(f=2,s=2) (14,14,8) 1568 0 CONV2(f=5,s=1) (10,10,16) 1600 416 POOL2(f=2,s=2) (5, 5,16) 400 0 FC3 (120,1) 120 48001 FC4 (84,1) 84 10081 Softmax (10,1) 10 841
1.11 为什么使用卷积?
- 为什么使用卷积?
(1)和全连接层相比,卷积层有两个优势,即参数共享和稀疏连接。
(2)参数共享:若特征检测器适用于图像的某个部分,则也很可能适用于其他部分。
(3)稀疏连接:在每一层,每个输出值仅和一小部分输入有关。
(4)卷积层善于捕捉平移不变。 - 总结
确定损失函数后,使用梯度下降等优化方法使损失函数最小。