在吴恩达深度学习视频以及大树先生的博客提炼笔记基础上添加个人理解,原大树先生博客可查看该链接地址大树先生的博客- ZJ
CSDN:http://blog.csdn.net/junjun_zhao/article/details/79190634
Convolutional Neural Networks (卷积神经网络)
Week 1: 卷积神经网络基础
1.1 计算机视觉 (Computer Vision)
神经网络让人们兴奋的两点原因:
- 新型应用的产生。
- 想象力和创造力产生新的神经网络结构与算法 ,启发计算机视觉与其他领域的交叉成果。
计算机视觉(Computer Vision)包含很多不同类别的问题,如图片分类 (Image Clasification)、目标检测 (Object detection)、图片风格迁移 (Neural Style Transfer)等等。
计算机视觉 (CV) 的一个挑战:
对于小尺寸的图片问题,也许我们用深度神经网络的结构可以较为简单的解决一定的问题。但是当应用在大尺寸的图片上,输入规模将变得十分庞大,使用神经网络将会有非常多的参数需要去学习,这个时候神经网络就不再适用。
面对数据输入规模大的解决方法:
卷积神经网络(Convolutional Neural Networks)在计算机视觉问题上是一个非常好的网络结构。
1.2 边缘检测示例 (Edge detection example)
卷积运算是卷积神经网络的基本组成部分。
前面的视频提到过的几个步骤,1. 如何检测边缘(前几层)。2. 检测到物体的某一部分(中间几层)。3.检测到整个物体(最后几层)。
接下来重点讲解:如何检测一张图片的边缘。下面以边缘检测的例子来介绍卷积运算。
所谓边缘检测,在下面的图中,分别通过垂直边缘检测(verticla edges)和水平边缘检测 (horizontal edgeds) 得到不同的结果:
垂直边缘检测:
假设对于一个 6×6 大小的图片(以数字表示),以及一个 3×3 大小的 filter(卷积核) 进行卷积运算,以“∗”符号表示。图片和垂直边缘检测器分别如左和中矩阵所示:
filter 不断地和其大小相同的部分做对应元素的乘法运算并求和,(从左上到右下,从左到右,每次移动一格,之后再从最左下一个,在从左向右,循环)最终得到的数字相当于新图片的一个像素值,如右矩阵所示,最终得到一个 4×4 大小的图片。(6×6 ∗ 3×3 = 4×4)
#不同库的代码的卷积运算:
Python: conv_forword
tensorflow: tf.nn.conv2d
keras: conv2D
边缘检测的原理:
以一个有一条垂直边缘线的简单图片来说明。通过垂直边缘 filter 我们得到的最终结果图片可以明显地将边缘和非边缘区分出来:
卷积运算提供了一个方便的方法来检测图像中的边缘,成为卷积神经网络中重要的一部分。
1.3 更多的边缘检测内容(More edge detection)
如何区分正边和负边,从亮到暗,从暗到亮,边缘的过度。
垂直和水平边缘检测
更复杂的filter
对于复杂的图片,我们可以直接将 filter 中的数字直接看作是需要学习的参数,其可以学习到对于图片检测相比上面 filter 更好的更复杂的 filter,如相对于水平和垂直检测器,我们训练的 filter 参数也许可以知道不同角度的边缘。其他应用的过滤器,sobel filter ,scharr filter。
通过卷积运算(convolution operation),在卷积神经网络中通过反向传播算法,去学习这 9 个参数 可以学习到相应于目标结果的 filter ( w1,w2,w3,...w8,w9, w 1 , w 2 , w 3 , . . . w 8 , w 9 , ),将其应用于整个图片,输出其提取到的所有有用的特征。
卷积和互相关: (这部分视频在 1.5 中)
在数学定义上,矩阵的卷积(convolution)操作为首先将卷积核同时在水平和垂直方向上进行翻转,构成一个卷积核的镜像,然后使用该镜像再和前面的矩阵进行移动相乘求和操作。如下面例子所示:
在深度学习中,我们称为的卷积运算实则没有卷积核变换为镜像的这一步操作,因为在权重学习的角度,变换是没有必要的。深度学习的卷积操作在数学上准确度来说称为互相关(cross-correlation)。
1.4 Padding
没有 Padding 的缺点:
- 每次卷积操作,图片会缩小;
就前面的例子来说,6×6 大小的图片,经过 3×3 大小的 filter,缩小成了 4×4 大小 ,神经网络层数越多,则最后输出的图片会很小。
图片: n×n–>(n−f+1)×(n−f+1) n × n – > ( n − f + 1 ) × ( n − f + 1 ) - 角落和边缘位置的像素进行卷积运算的次数少,可能会丢失有用信息。
其中,n 表示图片的长或宽的大小,f 表示 filter 的长或宽的大小。
为了解决上面两个问题:
加 Padding:
为了解决上面的两个缺点,我们在进行卷积运算前为图片加 padding,包围角落和边缘的像素,使得通过 filter 的卷积运算后,图片大小不变,也不会丢失角落和边沿的信息。
以 p 表示 Padding 的值,则输入 n×n 大小的图片,最终得到的图片大小为 (n+2p−f+1)×(n+2p−f+1) ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) ,为使图片大小保持不变,需根据 filter 的大小调整 p 的值。
Valid / Same 卷积:
- Valid:no padding; (n×n–>(n−f+1)×(n−f+1) ( n × n – > ( n − f + 1 ) × ( n − f + 1 )
- Same:padding,输出与输入图片大小相同,
(n+2p−f+1)×(n+2p−f+1)–>n×n ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) – > n × n (p=(f−1)/2) ( p = ( f − 1 ) / 2 ) 。在计算机视觉中,一般来说 padding 的值为奇数 (3×3,5×5,7×7)(因为filter一般为奇数)
1.5 卷积步长(Strided convolutions)
卷积的步长是构建卷积神经网络的一个基本的操作。
如前面的例子中,我们使用的 stride=1,每次的卷积运算以 1 个步长进行移动。下面是 stride=2 时对图片进行卷积的结果:
以 s 表示 stride 的大小,那么在进行卷积运算后,图片的变化为:n×n –> ⌊n+2p−fs+1⌋×⌊n+2p−fs+1⌋ ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋
注意,在当 padding≠1 时,若移动的窗口落在图片外面时,则不要再进行相乘的操作,丢弃边缘的数值信息,所以输出图片的最终维度为向下取整。
卷积和互相关:
在数学定义上,矩阵的卷积(convolution)操作为首先将卷积核同时在水平和垂直方向上进行翻转,构成一个卷积核的镜像,然后使用该镜像再和前面的矩阵进行移动相乘求和操作。如下面例子所示:
在深度学习中,我们称为的卷积运算实则没有卷积核变换为镜像的这一步操作,因为在权重学习的角度,变换是没有必要的。深度学习的卷积操作在数学上准确度来说称为互相关(cross-correlation)。
1.6 立体卷积 :卷积中的“卷”体现之处 (Convolutions over volumes)
引子:从二维到三维。6×6×3 * 3×3×3 -> 4×4
原理:
卷积核的通道数:
对于灰色图像中,卷积核和图像均是二维的。而应用于彩色图像中,因为图片有 R、G、B 三个颜色通道 (channel),所以此时的卷积核应为三维卷积核。
卷积核的第三个维度需要与进行卷积运算的图片的通道数相同。
多卷积核:
单个卷积核应用于图片时,提取图片特定的特征,不同的卷积核提取不同的特征。如两个大小均为 3×3×3 的卷积核分别提取图片的垂直边缘和水平边缘。
由图可知,最终提取到彩色图片的垂直特征图和水平特征图,得到有 2 个通道的 4×4 大小的特征图片 即: 4×4×2。
Summary:
图片:
n×n×nc∗f×f×nc—>n−f+1×n−f+1×n'c
n
×
n
×
n
c
∗
f
×
f
×
n
c
—
>
n
−
f
+
1
×
n
−
f
+
1
×
n
′
c
no padding, stride=1
其中,
nc
n
c
表示通道的数量,
n′c
n
c
′
表示下一层的通道数,同时也等于本层卷积核的个数。
1.7 单层卷积网络 (One layer of convlutional network)
单层卷积网络的例子:
和普通的神经网络单层前向传播的过程类似,卷积神经网络也是一个先由输入和权重及偏置做线性运算,然后得到的结果输入一个激活函数中,得到最终的输出:
不同点是在卷积神经网络中,权重和输入进行的是卷积运算。
单层卷积的参数个数:
在一个卷积层中,如果我们有10个 3×3×3 大小的卷积核,那么加上每个卷积核对应的偏置 (bias),则对于一个卷积层,我们共有的参数个数为:
无论图片大小是多少,该例子中的卷积层参数个数一直都是 280 个,相对于普通的神经网络,卷积神经网络的参数个数要少很多。
标记的总结:
如果 l l 表示一个卷积层:
- : filter 的大小;
- p[l] p [ l ] :padding;
- s[l] s [ l ] :步长(stride);
- 卷积核(过滤器 filter )的个数: n[l]C n C [ l ]
- filter 大小: f[l]×f[l]×n[l−1]C f [ l ] × f [ l ] × n C [ l − 1 ]
- 激活值(Activations): a[l]—>n[l]H×n[l]W×n[l]C a [ l ] — > n H [ l ] × n W [ l ] × n C [ l ]
- 权重(Weights): f[l]×f[l]×n[l−1]C×n[l]C f [ l ] × f [ l ] × n C [ l − 1 ] × n C [ l ] 其中, n[l]C n C [ l ] 是 l l 层 filter 的个数
- 偏置(bias):
- Input: n[l−1]H×n[l−1]W×n[l−1]C n H [ l − 1 ] × n W [ l − 1 ] × n C [ l − 1 ]
- Output: n[l]H×n[l]W×n[l]C n H [ l ] × n W [ l ] × n C [ l ]
- 其中,
n[l]H=⌊n[l−1]H+2p[l]−f[l]s[l]+1⌋
n
H
[
l
]
=
⌊
n
H
[
l
−
1
]
+
2
p
[
l
]
−
f
[
l
]
s
[
l
]
+
1
⌋
n[l]W=⌊n[l−1]W+2p[l]−f[l]s[l]+1⌋ n W [ l ] = ⌊ n W [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ -
1.8 简单卷积网络示例:(A simple convolution network example)
多层卷积构成卷积神经网络,下面是一个卷积神经网络的例子:
一般情况下,图片的大小随着网络的加深逐渐减小,filters 随着层级增多,逐渐加大。
卷积网络层的类型:
- 卷积层(Convolution layers),Conv;
- 池化层(Pooling layers),Pool;
- 全连接层(Fully connected):Fc;
1.9 池化层 (Pooling layers)
池化层 (Pooling layers)缩减模型大小,提高计算速度。提高所提取特征的鲁棒性。
最大池化(Max pooling):
最大池化是对前一层得到的特征图进行池化减小,仅由当前小区域内的最大值来代表最终池化后的值。
二维的最大化池演示。
nc n c 维: nc n c 个信道中的每个信道都单独执行最大化池计算。
在最大池化中,有一组超参数需要进行调整,其中,f 表示池化的大小,s 表示步长。一般情况下,p = 0,因为其目的就是缩减模型大小,所以不会增加 padding。
- 池化前:n × n;
- 池化后: ⌊n+2p−fs+1⌋×⌊n+2p−fs+1⌋ ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋
平均池化(Average pooling):
平均池化与最大池化唯一不同的是其选取的是小区域内的均值来代表该区域内的值。用到的比较少。
池化 Summary:
池化层的超参数:
- f:filter的大小; 一般常用的是 f=2, s=2 ,or f=3 ,s=2
- s:stride大小;
- 最大池化或者平均池化;
- p:padding,这里要注意,几乎很少使用。
- 注意,池化层没有需要学习的参数。No parameters to learn!
1.10 卷积神经网络示例 (Convolutional neural network example)
这里以 LeNet-5 为例,给出一个完整的卷积神经网络。
Guideline :尽量不要自己设置 hyperparameters ,而是查看文献中别人设置的 hyperparameters ,选一个在别人任务中效果很好的架构。
构建深度卷积的模式:
随着网络的深入,提取的特征图片大小( nH,nW n H , n W )将会逐渐减小,但同时通道数量( nC n C )应随之增加;
常见模式:Conv——Pool——Conv——Pool——Fc——Fc——Fc——softmax。
卷积神经网络的参数:
根据上表我们可以看出,对于卷积卷积神经网络的参数:
- 在卷积层,仅有少量的参数;
- 在池化层,没有参数;
- 在全连接层,存在大量的参数。
随着神经网络的加深,激活值会逐渐减少。
神经网络的基本构造模块已经讲完了,一个卷积神经网络包括,卷几层,池化层,全连接层,经验:找到整合基本构造模块的最好的方法是大量阅读别人的案例。
1.11为什么使用卷积?(Why convolutions?)
参数少的优势:
与普通的全连接神经网络相比,卷积神经网络的参数更少。如图中的例子,卷积神经网络仅有6×(5×5+1)=156个参数,而普通的全连接网络有3072×4704≈14M 个参数。
- 参数共享:一个特征检测器(filter)对图片的一部分有用的同时也有可能对图片的另外一部分有用。
- 连接的稀疏性:在每一层中,每个输出值只取决于少量的输入。减少过拟合的情况。
训练卷积神经网络:
我们将训练集输入到卷积神经网络中,对网络进行训练。利用梯度下降(Adam、momentum RMSprop 等优化算法)最小化代价函数来寻找网络最优的参数。
参考文献:
[1]. 大树先生.吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(4-1)– 卷积神经网络基础
PS: 欢迎扫码关注公众号:「SelfImprovementLab」!专注「深度学习」,「机器学习」,「人工智能」。以及 「早起」,「阅读」,「运动」,「英语 」「其他」不定期建群 打卡互助活动。