从全连接层到卷积
两个原则
- 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
- 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。
从全连接层到卷积
- 将输入和输出变为矩阵
- 将权重变为4-D张量
h_{i, j}= \sum_{k, l}w_{i, j, k, l}x_{k, l} = \sum_{a, b}v_{i, j, a, b}x_{i + a, j + b}
- V是W的重新索引,令
k = i + a, l = l + b
即可
原则
1.平移不变性
- x的平移导致h的平移
h_{i, j}= \sum_{a, b}v_{i, j, a, b}x_{i + a, j + b}
- v不依赖于(i, j)
- 因此令
v_{i,j,a,b}=v_{a,b}
,h_{i, j}= \sum_{a, b}v_{a, b}x_{i + a, j + b}
2.局部性
- 当评估
h_{i, j}
时,不应该用远离x_{i, j}
的参数 - 因此令
v_{a, b} = 0, |a|, |b| >\Delta
这样得到了二维卷积(交叉相关)
卷积层
二维卷积层
- 输入
X: n_h \times n_w
- 核(Kernel)
W: k_h \times K_w
- 偏差
b \in \mathbb{R}
- 输出
Y: (n_h - k_h + 1) \times (n_w - k_w + 1)
Y = W * X + b
W和b是可学习的参数
stride和padding
padding 填充
在输入周围添加额外的行和列
通常,如果我们添加
p_h
行填充(大约一半在顶部,一半在底部)和p_w
列填充(左侧大约一半,右侧一半),则输出形状将为
(n_h-k_h+p_h+1)\times(n_w-k_w+p_w+1)
这意味着输出的高度和宽度将分别增加p_h
和p_w
。
在许多情况下,我们需要设置p_h=k_h-1
和p_w=k_w-1
,使输入和输出具有相同的高度和宽度。
stride 步幅
行列的滑动步长
通常,当垂直步幅为s_h
、水平步幅为s_w
时,输出形状为
\lfloor(n_h-k_h+p_h+s_h)/s_h\rfloor \times \lfloor(n_w-k_w+p_w+s_w)/s_w\rfloor.
如果我们设置了p_h=k_h-1
和p_w=k_w-1
,则输出形状将简化为\lfloor(n_h+s_h-1)/s_h\rfloor \times \lfloor(n_w+s_w-1)/s_w\rfloor
更进一步,如果输入的高度和宽度可以被垂直和水平步幅整除,则输出形状将为(n_h/s_h) \times (n_w/s_w)
LeNet
本文的最后,我们来介绍早期的卷积神经网络LeNet,最早用于识别支票上的手写数字
LeNet的结构比较简单,总体上来看由两部分构成
- 卷积编码器
- 全连接稠密层
每个卷积块的的基本单元是: 一个卷积层、一个sigmoid函数、一个平均池化层(当时还没有ReLU和最大池化层)
第一个卷积层有6个输出通道,第二个卷积层有16个输出通道
每个2x2池化层(stride=2)将维数减少四倍。
从卷积层传到全连接层时,我们需要展平样本。