卷积神经网络入门(一)

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

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

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

2. 卷积运算

2.1. 一维场合

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

\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 + m 1 n+m-1 。此时也称为宽卷积。另一类是窄卷积,输出长度为 n m + 1 n-m+1

2.2. 二维场合

二维卷积经常用在图像处理中。给定一个图像 x i j , 1 i M , 1 j N x_{ij}, 1\le i\le M,1\le j\le N ,和滤波器 f i j , 1 i m , 1 j n f_{ij}, 1\le i\le m,1\le j\le n ,一般 m < < M , n < < N m << M,n << N
卷积的输出为:

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

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

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

假设输入图像形状为 32 × 32 × 3 32\times 32\times 3 ,卷积核形状为 5 × 5 × 6 5\times 5\times 6 ,则卷积后的图像大小为 28 × 28 × 6 28\times 28\times 6 。如果是传统的神经网络,那么参数个数为: 3072 × 4704 14 M 3072\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 × n n\times n ,滤波器大小为 f × f f\times f ,填充的数量为 p p ,下面是两种常用的填充方式:

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

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

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

假设padding p, stride S,则卷积操作的尺寸运算为: ( n × n ) ( f × f )     ( n + 2 p f S + 1 ) × ( n + 2 p f S + 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 + 2 p f S + 1 × n + 2 p f S + 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]})$

猜你喜欢

转载自juejin.im/post/7109101219573923871