卷积神经网络笔记(Week1)
以下内容均为吴恩达教授发布的卷积神经网络课程的相关笔记,一共为4个part,这是第一部分。
1.卷积层
1.1卷积核的计算方式
左侧是一个6
∗
*
∗ 6矩阵,每次选择一个3
∗
*
∗ 3的矩阵(假设是
x
11
x
12
x
13
x
21
x
22
x
23
x
31
x
32
x
33
\begin{matrix} x_{11}&x_{12}&x_{13}\\x_{21}&x_{22}&x_{23}\\x_{31}&x_{32}&x_{33}\end{matrix}
x11x21x31x12x22x32x13x23x33)和卷积
w
11
w
12
w
13
w
21
w
22
w
23
w
31
w
32
w
33
\begin{matrix}w_{11}&w_{12}&w_{13}\\w_{21}&w_{22}&w_{23}\\w_{31}&w_{32}&w_{33}\end{matrix}
w11w21w31w12w22w32w13w23w33做乘法,注意,这里做的不是矩阵乘法,而是对对应下标求积取和,也就是
x
11
∗
w
11
+
x
12
∗
w
12
+
.
.
.
+
x
33
∗
w
33
x_{11} * w_{11}+x_{12}*w_{12}+...+x_{33}*w_{33}
x11∗w11+x12∗w12+...+x33∗w33。
上述的卷积核是一个检测垂直边缘的卷积核。
上述的例子讲解了卷积核如何检测垂直边缘。由这个3*3的矩阵看出卷积核想检测左边是明亮物质(左侧是一列1),右边是暗黑物质的实例(右侧是一列-1)。最终第三幅图中白色的区域表示检测出原始图的中间位置存在垂直界限。这个卷积核可以检测由暗变亮或由亮变暗的转化过程。
- 一些可用于检测边界的filter
filter | name |
---|---|
1 0 − 1 2 0 − 2 1 0 − 1 \begin{matrix}1 &0 & -1\\2 &0 & -2\\1 &0 &-1\end{matrix} 121000−1−2−1 | sobel filter用于检测垂直边界,赋予中间向量更大的权重 |
3 0 − 3 10 0 − 10 3 0 − 3 \begin{matrix}3 &0 & -3\\10 &0 & -10\\3 &0 &-3\end{matrix} 3103000−3−10−3 | scharr filter 用于检测垂直边界 |
注:将上述垂直边缘检测矩阵旋转90度,可以得到水平边缘检测卷积核。
事实上,将卷积参数矩阵内的数字均转换位参数,利用神经网络去学习取参数,可能会得到更好更能捕捉特征的的filter。
1.2 padding 模块
经过卷积层的matrix的维数会不断变小(n-f+1,n是原始矩阵大小,f是filter的size),并且角落或边界上的像素被使用次数很少,例如下图中绿色方块比红色方块使用频率更低。
为解决上述两种问题:(1)输出的逐渐缩小;(2)丢失图片边界信息
在卷积操作前,使用pad方法,对图片做一个填充(padding):在外围做一个像素单位的填充(可以填充0也可以填充1),经填充后再做卷积得到矩阵的size是((n+2p-f)/2+1),这样可以得到初始图片的大小。
- 填充大小
valid 卷积:no padding
same 卷积 :padding使得输出大小等于输入大小 (n+2p-f+1) = n => p=(f-1)/2 所以f(f是卷积核的size)通常是奇数。若f是偶数可能需要一些不对称的填充,一般使用3 ∗ * ∗ 3、5 ∗ * ∗ 5、7 ∗ * ∗ 7的卷积核。
1.3 stride模块
stride是convolution的另一个模块。stride 卷积是指每次移动的步长为S>=1。
经过stride 卷积后得到的outputsize为 floor((n+2p-f)/s)+1
注:上述介绍的卷积相乘的方法实际应称为cross-correlation,而不是convolution ,真正的convolution 是在做乘法之前将filter做一个翻转,如下图所示:
1.4 三维体积中的卷积方式
对于一个三维的输入,定义input 为heightwidthchannels ,相应地卷积核也定义为height
∗
*
∗ width
∗
*
∗ channels 。
在计算output时,将input的红蓝绿三个通道的数分别与对应通道及对应位置的filter数相乘并求和得到output。
检测两个特征时,可以用两个卷积核,分别检测每个特征,比如垂直、水平边缘。
1.5 构建单层的卷积网络
计算卷积层的参数个数:
假设卷积层的filter 是一个3
∗
*
∗ 3
∗
*
∗ 3的矩阵,则共有27个参数,添加一个偏置项,得到28个参数,现在有10个filter,则在这一层共有280个参数。注意:无论input 的size有多大,最终layer内的参数是不变的。
- summary of notation:
其中 A [ l ] A^{[l]} A[l]中的m表示batch的数目(用mini-batch实现梯度下降)
a simple cnn example
在设计网络的过程中,一般需要设计卷积的padding、stride、filter等。可以确定的是,随着网络层数的加深,每层输入的height和width是越来越小的并且channel会越变越大。
在CNN结构中layer的种类
- convolution
- pooling
- fully connected
2.pooling池化层
2.1 Max pooling
其中max_pooling的超参数是 f=2;s=2
2.2 Average pooling
average pooling 用得比 max pooling多,除非是在深度非常大的神经网络中。
在选择pooling中的超参数时,常取f=2,s=2,这将使宽和高的长度缩减为原来的1/2,padding是极少被使用的。此外,在pooling中是没有需要学习的参数的。
2.3 带Pooling的CNN实例
部分超参数的选择源自LeNet-5
对于超参数的选择,不要自己创造,而是通过查阅文献或资料,并从中选择一组适合的超参数。
另一种常见的模型是一个或多个卷积层接着一个池化层,再接一个或多个卷积层叠加一层池化层,然后叠加几个全连接层,最后叠加softmax层。
模型参数个数一览表
注意:池化层没有参数,卷积层参数越来越少;激活函数的size也在不断减少,但如果减少太快通常不利于网络性能。
3.Why convolutions?
比起全连接层,CNN 具有参数共享和连接稀疏性的优点。
如果使用全连接层,则由input到output需要约14万个参数,考虑到这仅仅是一个很小的picture就需要14万个参数,若picture达到10001000,那么权重矩阵将会变得非常大。而卷积层的参数总数仅有6
∗
*
∗ (5
∗
*
∗ 5+1)=156个参数。
卷积网络参数很少的原因有两个:
1.参数共享
源于在特征检测器中,可以用33的矩阵在不同的位置做乘法,这意味着在不同的位置使用相同的参数。
2.参数连接具有稀疏性
每个output只和9/36 的特征相关,而其他像素不会影响这个输出值。
通过这两个机理,一个只有很少参数的神经网络,可以用少于30个单元的训练集数据来训练。CNN还可以用来捕捉平移不变,例如:一只猫的图片向左平移了几个像素之后还是一个清晰的猫的图片;这是由于卷积结构帮神经网络编译了当一张图画移动几个像素格以后,应该产生相似的特征。并且由于使用了相同的滤网,这张图的各个部分,平移前后的图层可以帮助神经网络自然而然学会稳定或者捕捉到平移不变所需要的特性。
Q1:CNN中的反向传播是如何实现的?
卷积神经网络(CNN)反向传播算法
PS:CNN视频链接