1. 计算机视觉
计算机视觉(Computer Vision)包含很多不同类别的问题,如图片分类、目标检测、图片风格迁移等等。
对于小尺寸的图片问题,也许我们用深度神经网络的结构可以较为简单的解决一定的问题。但是当应用在大尺寸的图片上,输入规模将变得十分庞大,使用神经网络将会有非常多的参数需要去学习,这个时候神经网络就不再适用。
卷积神经网络在计算机视觉问题上是一个非常好的网络结构。
2. 边缘检测示例
卷积运算是卷积神经网络最基本的组成部分。前面的课程说过神经网络的前几层是如何检测边缘的,如下图所示,类似的例子,还有如何检测图像中的水平or垂直边缘。
如下图所示,左边是一个661的矩阵,表示一个灰度图像,中间矩阵表示一个kernel or filter。右边矩阵表示运算得到的图像。
为什么这样就可以做垂直边缘检测呢?
区分正边和负边
使用不同的滤波器,可以找出垂直的或水平的边缘:
其它滤波器:
对于复杂的图片,我们可以直接将 filter 中的数字直接看作是需要学习的参数,其可以学习到对于图片检测相比上面filter更好的更复杂的 filter ,如相对于水平和垂直检测器,我们训练的 filter 参数也许可以知道不同角度的边缘。
通过卷积运算,在卷积神经网络中通过反向传播算法,可以学习到相应于目标结果的 filter,将其应用于整个图片,输出其提取到的所有有用的特征。
3. Padding
一个 n n n x n n n的图像,用一个 f f f x f f f的过滤器做卷积,输出结果的维度是 ( n − f + 1 ) (n-f+1) (n−f+1) x ( n − f + 1 ) (n-f+1) (n−f+1)。
两个缺点:
- 每次做卷积操作图像就会缩小。
- 角落或者边缘区域的像素点在输出时采用较少,也就是丢失了图像边缘位置的许多信息。
solution —— pad the image
在图像周围填充 p p p个像素点,输出就变成了 n + 2 ∗ p − f + 1 n+2*p-f+1 n+2∗p−f+1。
关于p的选择,有两种方式:
- Valid:不填充, p = 0 p=0 p=0;
- Same:填充后输出大小和输入大小是一样的, p = ( f − 1 ) / 2 p=(f-1)/2 p=(f−1)/2。
f f f一般是奇数:
- 对称填充;
- 奇数过滤器有中心点。
4. 卷积步长
用一个
f
f
fx
f
f
f的过滤器,卷积一个
n
n
nx
n
n
n的图像,padding为
p
p
p,步长为
s
s
s,那么输出图像的维度为
⌊
n
+
2
p
−
f
s
+
1
⌋
\lfloor\frac{n+2p-f}{s}+1\rfloor
⌊sn+2p−f+1⌋ x
⌊
n
+
2
p
−
f
s
+
1
⌋
\lfloor\frac{n+2p-f}{s}+1\rfloor
⌊sn+2p−f+1⌋(向下取整:只在蓝框完全包括在图像或填充完的图像内部时,才进行运算。即过滤器必须完全处于图像中或填充之后的图像区域内,才输出相应结果。)
卷积和互相关:
5. 立体卷积
Notation:
- 过滤器的通道和图像的通道数要保持一致。
- 可以设置过滤器参数,使只检测红色通道的边缘特征或三种颜色的边缘特征。
- 可以用多个过滤器和图像做卷积,得到多种特征,输出的通道数就是提取的特征种类数(过滤器个数)。
6. 简单卷积网络
卷积神经网络的某一卷积层的工作原理,以及如何计算某一卷积层的激活值并映射到下一层的激活值。
单层卷积网络的例子:
和普通的神经网络单层前向传播的过程类似,卷积神经网络也是一个先由输入和权重及偏置做线性运算,然后得到的结果输入一个激活函数中,得到最终的输出:
z [ 1 ] = w [ 1 ] a [ 0 ] + b [ 1 ] z^{[1]}=w^{[1]}a^{[0]}+b^{[1]} z[1]=w[1]a[0]+b[1]
a [ 1 ] = g ( z [ 1 ] ) a^{[1]}=g(z^{[1]}) a[1]=g(z[1])
不同点是:在卷积神经网络中,权重和输入进行的是卷积运算。
单层卷积的参数个数:
在一个卷积层中,如果我们有10个 3\times3\times3 大小的卷积核,那么加上每个卷积核对应的偏置,则对于一个卷积层,我们共有的参数个数为:
(
3
×
3
×
3
+
1
)
×
10
=
280
(3\times3\times3+1)\times10 = 280
(3×3×3+1)×10=280
无论图片大小是多少,该例子中的卷积层参数个数一直都是280个,相对于普通的神经网络,卷积神经网络的参数个数要少很多。
标记的总结:
如果 l l l 表示一个卷积层:
-
f [ l ] f^{[l]} f[l] :filter 的大小;
-
p [ l ] p^{[l]} p[l] :padding;
-
s [ l ] s^{[l]} s[l] :步长(stride);
-
卷积核的个数: n C [ l ] n^{[l]}_{C} nC[l] ;
-
filter大小: f [ l ] × f [ l ] × n C [ l − 1 ] f^{[l]}\times f^{[l]}\times n^{[l-1]}_{C} f[l]×f[l]×nC[l−1] ;
-
激活值(Activations): a [ l ] — > n H [ l ] × n W [ l ] × n C [ l ] a^{[l]}—>n^{[l]}_{H}\times n^{[l]}_{W}\times n^{[l]}_{C} a[l]—>nH[l]×nW[l]×nC[l];
-
权重(Weights): f [ l ] × f [ l ] × n C [ l − 1 ] × n C [ l ] f^{[l]}\times f^{[l]}\times n^{[l-1]}_{C}\times n^{[l]}_{C} f[l]×f[l]×nC[l−1]×nC[l];
-
偏置(bias): n C [ l ] — — ( 1 , 1 , 1 , n C [ l ] ) n^{[l]}_{C}——(1,1,1,n^{[l]}_{C}) nC[l]——(1,1,1,nC[l])
-
Input: 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] ;
-
Output: 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 W [ l ] = ⌊ n W [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ n^{[l]}_{H} = \left\lfloor \dfrac{n^{[l-1]}_{H}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1 \right\rfloor , n^{[l]}_{W} = \left\lfloor \dfrac{n^{[l-1]}_{W}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1 \right\rfloor nH[l]=⌊s[l]nH[l−1]+2p[l]−f[l]+1⌋,nW[l]=⌊s[l]nW[l−1]+2p[l]−f[l]+1⌋ 。
简单卷积网络示例:
多层卷积构成卷积神经网络,下面是一个卷积神经网络的例子:
卷积网络层的类型:
- 卷积层(Convolution),Conv;
- 池化层(Pooling),Pool;
- 全连接层(Fully connected):Fc;
7. 池化层
除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。
最大池化(Max pooling):
最大池化是对前一层得到的特征图进行池化减小,仅由当前小区域内的最大值来代表最终池化后的值。
在最大池化中,有一组超参数需要进行调整,其中, f 表示池化的大小, s 表示步长。
- 池化前: n × n n\times n n×n ;
- 池化后: ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \left\lfloor \dfrac{n+2p-f}{s}+1 \right\rfloor\times \left\lfloor \dfrac{n+2p-f}{s}+1 \right\rfloor ⌊sn+2p−f+1⌋×⌊sn+2p−f+1⌋ 。
平均池化(Average pooling):
平均池化与最大池化唯一不同的是其选取的是小区域内的均值来代表该区域内的值。
池化 Summary:
池化层的超参数:
- f f f :filter的大小;
- s s s :stride大小;
- 最大池化或者平均池化;
- p p p :padding,这里要注意,几乎很少使用。
注意,池化层没有需要学习的参数。
8. 卷积神经网络实例
这里以 LeNet-5 为例,给出一个完整的卷积神经网络。
构建深度卷积的模式:
- 随着网络的深入,提取的特征图片大小将会逐渐减小,但同时通道数量应随之增加;
- Conv——Pool——Conv——Pool——Fc——Fc——Fc——softmax。
卷积神经网络的参数:
根据上表我们可以看出,对于卷积卷积神经网络的参数:
- 在卷积层,仅有少量的参数;
- 在池化层,没有参数;
- 在全连接层,存在大量的参数。
9. 使用卷积神经网络
参数少的优势:
与普通的全连接神经网络相比,卷积神经网络的参数更少。如图中的例子,卷积神经网络仅有
6
×
(
5
×
5
+
1
)
=
156
6\times(5\times5+1)=156
6×(5×5+1)=156 个参数,而普通的全连接网络有
3072
×
4704
≈
14
M
3072\times4704\approx 14M
3072×4704≈14M个参数。
- 参数共享:一个特征检测器(filter)对图片的一部分有用的同时也有可能对图片的另外一部分有用。
- 连接的稀疏性:在每一层中,每个输出值只取决于少量的输入。
训练卷积神经网络:
我们将训练集输入到卷积神经网络中,对网络进行训练。利用梯度下降(Adam、momentum等优化算法)最小化代价函数来寻找网络的最优参数。
参考资料:
[1] 吴恩达深度学习视频课中文连载笔记:https://zhuanlan.zhihu.com/p/30800318
[2] 吴恩达网易云深度学习视频课
以上内容全部来自参考资料。