1. 计算机视觉(Computer Vision)领域介绍
图片分类(Image Classification)、目标检测(Object detection)、神经风格转换(Neural Style Transfer)。
计算机视觉的一大挑战就是输入样本的尺寸可以任意大,进一步导致神经网络的参数很多,容易过拟合并且对计算机的内存和运算速度要求极高。为了解决这个问题,可以引入卷积运算。
2. 卷积运算
2.1. 一维场合
卷积的一个重要物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。 对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。 形象的物理含义见怎样通俗易懂地解释卷积? - 知乎
给定一个输入信号序列$x(t), t=1,···,n$,和单位响应序列(有时也称滤波器)$f(t), t=1,···,m$,一般情况下单位响应的长度$m$远小于输入信号长度$n$。 则卷积输出:
在卷积神经网络中,对于不在$[1,n]$范围之内的$x(t)$用零补齐(zero-padding),输出长度一般为$n+m-1$。此时也称为宽卷积。另一类是窄卷积,输出长度为$n-m+1$
2.2. 二维场合
二维卷积经常用在图像处理中。给定一个图像$x_{ij}, 1\le i\le M,1\le j\le N$,和滤波器$f_{ij}, 1\le i\le m,1\le j\le n$,一般$m << M,n << N$。
卷积的输出为:
在图像处理中,常用的均值滤波(mean filter)就是当前位置的像素值设为滤波器窗口中素有像素的平均值,也就是$f_{uv}=\frac{1}{mn}$。
上面的运算是信号与系统里面的定义,在实际的操作中通常要将卷积核进行翻转(水平和竖直方向上分别进行一次翻转)再与输入信号进行逐元素相乘(再相加)。但是在深度学习中,简化了翻转的操作,因此其实不适用于上述的公式。深度学习里面的卷积,更严谨的称呼是交叉相关(cross-correlation),但是由于习惯,还是叫做卷积。
3. 卷积操作的作用和优点
3.1. 参数共享和连接的稀疏性
假设输入图像形状为$32\times 32\times 3$,卷积核形状为$5\times 5\times 6$,则卷积后的图像大小为$28\times 28\times 6$。如果是传统的神经网络,那么参数个数为:$3072\times 4704\approx 14M$,而在卷积神经网络中参数个数为$(5\times 5+1)\times 6=156$
卷积核在图像上移动时,参数不变(参数共享)
输出图像上的每个像素只来源于上一层图像的一个局部(连接的稀疏性)
3.2. 平移不变性
3.2. 边缘检测
4. Padding(填充)
常规卷积操作的后果:
- shrinking image没经过一次卷积操作,图片都会缩小
- throw away info from edge(忽视边界信息) ,角落或者边界上的像素被使用的次数比中间的像素少很多
记输入图片尺寸为$n\times n$,滤波器大小为$f\times f$,填充的数量为$p$,下面是两种常用的填充方式:
- “valid”: no padding $n\times n\ *\ f\times f \rightarrow n-f+1\ \times\ n-f+1$
- “Same”: Pad so that output size is the same as the input size $(n+2p-f+1)\times (n+2p-f+1)$, 其中$p=\frac{f-1}{2}$。
在计算机视觉领域,f基本上是奇数。因为如果是偶数,需要不对称的填充。而且奇数的滤波器有一个中心,这样可以描述滤波器的位置。$3\times3$的滤波器最常见
5. Strided Convolutions(带步长的卷积)
假设padding p, stride S,则卷积操作的尺寸运算为:$(n\times n)*(f\times f)\ \rightarrow\ \left(\frac{n+2p-f}{S}+1\right)\times \left(\frac{n+2p-f}{S}+1\right)$
如果不能整除,则向下取整:$\lfloor\frac{n+2p-f}{S}+1\rfloor\times \lfloor\frac{n+2p-f}{S}+1\rfloor$ ,这意味着滤波器必须全部落在(填充后的)图像上。
6. 对三维图片(RGB)的卷积操作
RGB图像有三个通道(channel),或者叫做深度(depth),因此卷积核也应该有三个通道。卷积核的三个通道分别与RGB图像的三个通道逐元素相乘,再将乘积结果相加,得到卷积后的图像。下图是检测红色垂直边缘(上)和整体图像的垂直边缘(下)的例子:
7. 一层卷积层的例子
卷积核相关说明:
卷积核的形状为:
输入输出的形状:
其中:
Activations: $a^{[l]}=n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}$
Batch or mini batch: $A^{[l]}=m\times n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}$
Weights: $f^{[l]}\times f^{[l]}\times n_c^{[l-1]}\times n_c^{l}$
bias: $n_c^{[l]}\rightarrow (1,1,1,n_c^{[l]})$
8. 卷积神经网络的一个完整例子
一个完整的卷积神经网络模型:
在设计卷积神经网络中的许多工作是选择合适的超参数,例如总单元数多少?步长多少?padding多少?使用了多少滤波器等。
Types of layer in a convolutional network:
- Convolution (CONV)
- Pooling (POOL )
- Fully connected (FC)
9. Pooling layer(池化层)
Max pooling 没有参数,因此不需要通过反向传播来学习参数
多通道图片时,对每个通道分别进行max pooling
pooling层的作用:平移不变性,减少图片尺寸pooling层的作用-知乎
The pooling (POOL) layer reduces the height and width of the input. It helps reduce computation, as well as helps make feature detectors more invariant to its position in the input.
max pooling比较常用,average pooling不常用
hyperparameters:
- f: filter size (f=2,s=2,used quite often)
- s: stride
- Max or average pooling
10. 卷积神经网络经典模型
10.1 Outline
经典的网络结构: - LeNet-5
- AlexNet
- VGG
- ResNet
- Inception
10.1 LeNet-5
在计算层数时通常把有参数的算作一层,因为pooling层没有参数,因此conv层和pooling层放在一起当作一层.
LetNet-5结构图:图10.1 LeNet-5模型结构图 LetNet-5参数表图10.2 LetNet-5参数说明 - 用的是sigmoid/tanh激活函数
- 由于那时的计算机性能比较差,采用了比较复杂的训练技巧
注意: - 最大池化没有任何参数
- 卷积层趋向于拥有越来越少的参数,多数参数集中在神经网络的全连接层上
- 随着神经网络的深入,激活输入大小也逐渐变小。如果减少得太快,通常不利于网络性能
10.2 AlexNet
图10.3 AlexNet模型结构图 - 与LSNet-5架构相似,但是规模大许多,约60M个参数
- 用了ReLU激活函数
- 由于计算机性能仍然不是很好,采用复杂的训练技巧(将不同的层放在两个GPU上分别训练)
- 用了Local Response Normalization,但是后面被发现不太有效
10.3 VGG-16
图10.4 VGG-16模型结构图
138M个参数
16是指有16层含有参数的层。
前面两层都是64个$3\times 3$的卷积核进行卷积操作。