卷积神经网络
利用全连接前馈网络处理图像时的问题:
(1)参数太多:
对于输入的1001003的RGB图像,全连接前馈网络,第一个隐藏层的每个神经元到输入层有1001003=30000个独立的连接,即权重参数,隐藏层神经元个数增加,参数规模急剧增加,网络训练效率低,易过拟合。
(2)局部不变性特征:
全连接网络很难提取自然图像中的局部不变性特征:尺度缩放、平移、旋转;这些操作不影响自然图像的语义信息。
卷积神经网络
CNN三个结构特性:局部连接、权重共享、汇聚
这三特性使CNN具有一定的平移、缩放、旋转不变性。参数更少。
感受野
卷积神经网络(CNN)收生物学感受野机制得来。感受野指视觉、听觉系统中的一些神经元只接受其支配的刺激区域内的信号。一个神经元的感受野指视网膜上特定的区域,只有这个区域的刺激才能激活该神经元。
1. 卷积
一维卷积
假设一个信号发生器每个时刻 t t t 产生一个信号 x t x_t xt,其信息的衰减率为 w k w_k wk,即在𝑘 − 1 个时间步长后,信息为原来的 w k w_k wk 倍.我们把 w 1 , w 2 , w 3 , ⋯ w_1, w_2, w_3, ⋯ w1,w2,w3,⋯称为滤波器(Filter)或卷积(Convolution Kernel). 假设滤波器长度为𝐾,它和一个信号序列 x 1 , x 2 , ⋯ x_1, x_2, ⋯ x1,x2,⋯的卷积为:
y t = ∑ k = 1 K w k x t − k + 1 y_t = \sum_{k=1}^{K}{w_kx_{t-k+1}} yt=k=1∑Kwkxt−k+1
信号序列x和滤波器w的卷积定义为:
y = w ∗ x \pmb{y} = \pmb{w}* \pmb{x} yyy=www∗xxx
其中 ∗ * ∗表示卷积运算。
特殊的,当 w k = 1 / k , 1 ≤ k ≤ K w_k = 1/ k, 1 \leq k \leq K wk=1/k,1≤k≤K时,卷积相当于信号序列的简单移动平均。
二维卷积
给定一个图像 X ∈ R M × N \pmb{X} \in \mathbb{R}^{M \times N} XXX∈RM×N和滤波器 W ∈ R U × V \pmb{W} \in \mathbb{R}^{U\times V} WWW∈RU×V,其卷积为:
y i j = ∑ u = 1 U ∑ v = 1 V w u v x t − u + 1 , j − v + 1 y_{ij} = \sum_{u=1}^{U} \sum_{v=1}^{V}w_{uv}x_{t-u+1, j-v+1} yij=u=1∑Uv=1∑Vwuvxt−u+1,j−v+1
一个输入信息X和滤波器W的二维卷积定义为:
Y = W ∗ X Y = \pmb{W} * \pmb{X} Y=WWW∗XXX
其中 ∗ * ∗表示卷积运算。二维卷积实例如图:
均值滤波为将当前位置的像素设置为滤波器窗口中所有像素的平均值,即 w u v = 1 U V w_{uv} = \frac{1}{UV} wuv=UV1.
卷积常作为特征提取的有效方法,图像经过卷积操作得到的结果叫做特征映射(Feature Map)。以下分别是:高斯滤波器、平滑去噪滤波器、边缘特征提取滤波器。
1.1 互相关
在图像处理过程中,计算卷积,需要进行卷积核翻转。在具体实现上,一般使用互相关操作来代替卷积,从而减少开销。互相关是衡量两个序列相关性的函数,使用滑动窗口的点积计算实现,给定一个图像 X ∈ R M × N \pmb{X} \in \mathbb{R}^{M \times N} XXX∈RM×N和卷积核 W ∈ R U × V \pmb{W} \in \mathbb{R}^{U\times V} WWW∈RU×V,它们的互相关为:
y i j = ∑ u = 1 U ∑ v = 1 V w u v x t + u − 1 , j + v − 1 y_{ij} = \sum_{u=1}^{U} \sum_{v=1}^{V}w_{uv}x_{t+u-1, j+v-1} yij=u=1∑Uv=1∑Vwuvxt+u−1,j+v−1
和卷积公式对比:
y i j = ∑ u = 1 U ∑ v = 1 V w u v x t − u + 1 , j − v + 1 y_{ij} = \sum_{u=1}^{U} \sum_{v=1}^{V}w_{uv}x_{t-u+1, j-v+1} yij=u=1∑Uv=1∑Vwuvxt−u+1,j−v+1
互相关和卷积的区别仅仅在于卷积核是否进行翻转。因此互相关也可以称为不翻转卷积。
一个输入信息X和滤波器W的互相关可以定义为:
Y = W ⨂ X = r o t 180 ( W ) ∗ X \begin{aligned} Y & = \pmb{W} \bigotimes \pmb{X} \\ & = rot180(\pmb{W})*\pmb{X} \end{aligned} Y=WWW⨂XXX=rot180(WWW)∗XXX
其中 ⨂ \bigotimes ⨂表示互相关运算, r o t 180 ( ⋅ ) rot180(\cdot) rot180(⋅)表示旋转180度, Y ∈ R M − U + 1 , N − V + 1 \pmb{Y} \in \mathbb{R}^{M-U+1, N-V+1} YYY∈RM−U+1,N−V+1为输出矩阵。
在神经网络中,用卷积进行特征提取,卷积核翻转不影响其特征提取能力,当卷积核为可学习参数时,卷积核互相关在能力上等价,故常用互相关来代替卷积(绝大部分深度学习工具亦如此)。
在后续的文章中,用互相关代替卷积,即本文中的卷积符号用 ⨂ \bigotimes ⨂表示,而真正的卷积用 ∗ * ∗表示。
1.2 卷积的变种
引入滑动步长和零填充增加卷积多样性。滑动步长 (Stride)是指滤波器在滑动时的时间间隔。零填充(Zero Padding)是在输入向量的边界外进行补零。示意图如下:
1.2.1 转置卷积
常见的卷积是进行降维操作,但一些卷积也可以将低维特征映射到高维特征。
对于高维向量 x ∈ R d \pmb{x} \in \mathbb{R}^{d} xxx∈Rd和低维向量 z ∈ R p \pmb{z} \in \mathbb{R}^{p} <