卷积神经网络入门(一)

534 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 计算机视觉(Computer Vision)领域介绍

图片分类(Image Classification)、目标检测(Object detection)、神经风格转换(Neural Style Transfer)。 计算机视觉的一大挑战就是输入样本的尺寸可以任意大,进一步导致神经网络的参数很多,容易过拟合并且对计算机的内存和运算速度要求极高。为了解决这个问题,可以引入卷积运算。

2. 卷积运算

2.1. 一维场合

卷积的一个重要物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。 对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。 形象的物理含义见怎样通俗易懂地解释卷积? - 知乎
给定一个输入信号序列x(t),t=1,,nx(t), t=1,···,n,和单位响应序列(有时也称滤波器)f(t),t=1,,mf(t), t=1,···,m,一般情况下单位响应的长度mm远小于输入信号长度nn。 则卷积输出:

y(t)=(fx)(t)=k=1f(tk+1)x(k))=k=1f(k)x(tk+1))=k=1mf(k)x(tk+1))\begin{align*} y(t) &=(f*x)(t)\\ &=\sum_{k=1}^{\infty}f(t-k+1)·x(k)) \\ &=\sum_{k=1}^{\infty}f(k)·x(t-k+1)) \\ &=\sum_{k=1}^{m}f(k)·x(t-k+1))\\ \tag{2-1} \end{align*}

在卷积神经网络中,对于不在[1,n][1,n]范围之内的x(t)x(t)用零补齐(zero-padding),输出长度一般为n+m1n+m-1。此时也称为宽卷积。另一类是窄卷积,输出长度为nm+1n-m+1

2.2. 二维场合

二维卷积经常用在图像处理中。给定一个图像xij,1iM,1jNx_{ij}, 1\le i\le M,1\le j\le N,和滤波器fij,1im,1jnf_{ij}, 1\le i\le m,1\le j\le n,一般m<<M,n<<Nm << M,n << N
卷积的输出为:

yij=u=1+v=1+fiu+1,iv+1xu,v=u=1mv=1nfu,vxiu+1,iv+1\begin{align*} y_{ij}&=\sum_{u=1}^{+\infty}\sum_{v=1}^{+\infty}f_{i-u+1,i-v+1}·x_{u,v}\\ &=\sum_{u=1}^{m}\sum_{v=1}^{n}f_{u,v}·x_{i-u+1,i-v+1}\\ \tag{2-2} \end{align*}

在图像处理中,常用的均值滤波(mean filter)就是当前位置的像素值设为滤波器窗口中素有像素的平均值,也就是fuv=1mnf_{uv}=\frac{1}{mn}。 上面的运算是信号与系统里面的定义,在实际的操作中通常要将卷积核进行翻转(水平和竖直方向上分别进行一次翻转)再与输入信号进行逐元素相乘(再相加)。但是在深度学习中,简化了翻转的操作,因此其实不适用于上述的公式。深度学习里面的卷积,更严谨的称呼是交叉相关(cross-correlation),但是由于习惯,还是叫做卷积。

3. 卷积操作的作用和优点

3.1. 参数共享和连接的稀疏性

假设输入图像形状为32×32×332\times 32\times 3,卷积核形状为5×5×65\times 5\times 6,则卷积后的图像大小为28×28×628\times 28\times 6。如果是传统的神经网络,那么参数个数为:3072×470414M3072\times 4704\approx 14M,而在卷积神经网络中参数个数为(5×5+1)×6=156(5\times 5+1)\times 6=156 卷积核在图像上移动时,参数不变(参数共享) 输出图像上的每个像素只来源于上一层图像的一个局部(连接的稀疏性)

3.2. 平移不变性

3.2. 边缘检测

4. Padding(填充)

常规卷积操作的后果:

  • shrinking image没经过一次卷积操作,图片都会缩小
  • throw away info from edge(忽视边界信息) ,角落或者边界上的像素被使用的次数比中间的像素少很多

记输入图片尺寸为n×nn\times n,滤波器大小为f×ff\times f,填充的数量为pp,下面是两种常用的填充方式:

  • "valid": no padding n×n  f×fnf+1 × nf+1n\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+2pf+1)×(n+2pf+1)(n+2p-f+1)\times (n+2p-f+1), 其中p=f12p=\frac{f-1}{2}

在计算机视觉领域,f基本上是奇数。因为如果是偶数,需要不对称的填充。而且奇数的滤波器有一个中心,这样可以描述滤波器的位置。3×33\times3的滤波器最常见

5. Strided Convolutions(带步长的卷积)

假设padding p, stride S,则卷积操作的尺寸运算为:(n×n)(f×f)  (n+2pfS+1)×(n+2pfS+1)(n\times n)*(f\times f)\ \rightarrow\ \left(\frac{n+2p-f}{S}+1\right)\times \left(\frac{n+2p-f}{S}+1\right)
如果不能整除,则向下取整:n+2pfS+1×n+2pfS+1\lfloor\frac{n+2p-f}{S}+1\rfloor\times \lfloor\frac{n+2p-f}{S}+1\rfloor ,这意味着滤波器必须全部落在(填充后的)图像上。

6. 对三维图片(RGB)的卷积操作

RGB图像有三个通道(channel),或者叫做深度(depth),因此卷积核也应该有三个通道。卷积核的三个通道分别与RGB图像的三个通道逐元素相乘,再将乘积结果相加,得到卷积后的图像。下图是检测红色垂直边缘(上)和整体图像的垂直边缘(下)的例子:

图6.1 RGB图像卷积操作例子 有时为了检测多种类型的边缘,可以用同时多个滤波器对图像进行卷积操作,具体的尺寸运算总结如下: $n\times n\times n_c\ *\ f\times f\times n_c\ \rightarrow\ n-f+1\times n-f+1\times n_c'$ 其中$n_c$代表通道数,通常图像的通道数与滤波器的通道数相等;$n$和$f$分别代表图像和滤波器每个通道的尺寸;$n_c'$代表滤波器的个数 图6.2 同时用多个卷积核对图像进行卷积操作

7. 一层卷积层的例子

图7.1 一层卷积层的例子 卷积核相关说明: $$ \begin{align*} f^{[l]}&=filter\ size,\\ p^{[l]}&=padding\\ s^{[l]}&=stride\\ \tag{7-1} \end{align*} $$ 卷积核的形状为: $$f^{[l]}\times f^{[l]}\times n_c^{[l-1]}\tag{7-2}$$ 输入输出的形状: $$ \begin{align*} Input&: n_H^{[l-1]}\times n_W^{[l-1]}\times n_c^{[l-1]}\\ Output&: n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}\\ \tag{7-3} \end{align*} $$ 其中: $$ \begin{align*} n_H^{[l]}&=\lfloor\frac{n_H^{[l-1]}+2p^{[l]}-f^{l}}{S^{[l]}}+1\rfloor\\ n_W^{[l]}&=\lfloor\frac{n_W^{[l-1]}+2p^{[l]}-f^{l}}{S^{[l]}}+1\rfloor\\ \tag{7-4} \end{align*} $$ 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]})$