【动手深度学习-笔记】从全连接层到卷积

物体识别的一个原则——不变性(invariance)

平移不变性(translation invariance)

不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。

局部性(locality)

神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

先给个我的观点:
卷积就是为了满足不变性而对全连接的一种改进

全连接层的局限性

参数过多

对于高维感知数据,仅含全连接层的网络可能会变得不实用。

假设我们有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。 即使将隐藏层维度降低到1000,这个全连接层也将有 1 0 6 × 1 0 3 = 1 0 9 10^6 \times 10^3 = 10^9 106×103=109个参数。 想要训练这个模型将不可实现,因为需要有大量的GPU、分布式优化训练的经验和超乎常人的耐心。

不变性弱

我们先来看看全连接层处理二维数据是什么样的

对于一维输入,全连接层是这样工作的:
[ H ] i = [ U ] i + ∑ j [ W ] i , j [ X ] j \begin{split}\begin{aligned} \left[\mathbf{H}\right]_{i} &= [\mathbf{U}]_{i} +\sum_j[\mathsf{W}]_{i, j} [\mathbf{X}]_{j}\\ \end{aligned}\end{split} [H]i=[U]i+j[W]i,j[X]j

为了保留空间信息,我们现在直接输入一个二维数据。

那么现在输入是包含宽、高信息的二维数据,输出也是二维,相应地全连接层的权重矩阵也会增加宽、高两个维度,变成一个4维的权重矩阵

举例理解这个四维的权重矩阵结构
假设我们的输入维度是 20 ∗ 20 20*20 2020,需要得到一个 15 ∗ 15 15*15 1515的输出
那么这个 [ W ] 15 , 15 , 20 , 20 [W]_{15,15,20,20} [W]15,15,20,20就是一个 15 ∗ 15 15*15 1515的大矩阵,而这个大矩阵的每个元素都是 20 ∗ 20 20*20 2020的小矩阵
若要计算输出 ( 3 , 4 ) (3,4) (3,4)处的值,则取大矩阵 ( 3 , 4 ) (3,4) (3,4)处的小矩阵,和输入进行一个逐元素的加权求和,然后加上偏置矩阵 ( 3 , 4 ) (3,4) (3,4)出的偏置值,即可得到输出。

那么类似地,可以将处理二维输入的全连接层表示为:
[ H ] i , j = [ U ] i , j + ∑ k ∑ l [ W ] i , j , k , l [ X ] k , l \begin{split}\begin{aligned} \left[\mathbf{H}\right]_{i, j} &= [\mathbf{U}]_{i, j} + \sum_k \sum_l[\mathsf{W}]_{i, j, k, l} [\mathbf{X}]_{k, l} \end{aligned}\end{split} [H]i,j=[U]i,j+kl[W]i,j,k,l[X]k,l
[ X ] k , l [\mathbf{X}]_{k, l} [X]k,l代表输入中 ( k , l ) (k,l) (k,l)位置的像素
[ H ] i , j [\mathbf{H}]_{i, j} [H]i,j代表输出中 ( i , j ) (i,j) (i,j)位置的像素
[ U ] i , j [\mathbf{U}]_{i,j} [U]i,j是输出到 ( i , j ) (i,j) (i,j)位置时加的偏置

接下来进行一个下标变换,令 k = i + a k=i+a k=i+a l = j + b l=j+b l=j+b,那么:

[ H ] i , j = [ U ] i , j + ∑ k ∑ l [ W ] i , j , k , l [ X ] k , l = [ U ] i , j + ∑ a ∑ b [ V ] i , j , a , b [ X ] i + a , j + b . \begin{split}\begin{aligned} \left[\mathbf{H}\right]_{i, j} &= [\mathbf{U}]_{i, j} + \sum_k \sum_l[\mathsf{W}]_{i, j, k, l} [\mathbf{X}]_{k, l}\\ &= [\mathbf{U}]_{i, j} + \sum_a \sum_b [\mathsf{V}]_{i, j, a, b} [\mathbf{X}]_{i+a, j+b}.\end{aligned}\end{split} [H]i,j=[U]i,j+kl[W]i,j,k,l[X]k,l=[U]i,j+ab[V]i,j,a,b[X]i+a,j+b.
V \mathbf{V} V W \mathbf{W} W的重新索引,我们可以将 [ X ] i , j [\mathbf{X}]_{i, j} [X]i,j作为中心像素,通过改变偏移 a a a和偏移 b b b的值,访问 [ X ] [\mathbf{X}] [X]的任意位置

通过这个形式我们可以看到,如果中心像素的坐标发生了改变,那么负责计算的权重V也会发生改变,这违反了平移不变性,V不应该依赖于中心像素的坐标
同时,通过改变偏移 a a a和偏移 b b b的值,访问 [ X ] [\mathbf{X}] [X]的任意位置,这也和局部不变性相悖。

平移不变性调整

我们应该在中心像素的位置变化时,让负责计算的权重V保持不变:
[ V ] i , j , a , b = [ V ] a , b [\mathbf{V}]_{i, j, a, b} =[\mathbf{V}]_{a, b} [V]i,j,a,b=[V]a,b
然后也把偏置固定住,从而
[ H ] i , j = u + ∑ a ∑ b [ V ] a , b [ X ] i + a , j + b . [\mathbf{H}]_{i, j} = u + \sum_a\sum_b [\mathbf{V}]_{a, b} [\mathbf{X}]_{i+a, j+b}. [H]i,j=u+ab[V]a,b[X]i+a,j+b.
这样一来,每个 [ X ] i , j [\mathbf{X}]_{i, j} [X]i,j作为中心像素时,它周围的像素都会和同一个权重矩阵所计算,这就是卷积

局部不变性调整

a a a b b b的变化设置一个限制,不让其偏离到距中心像素的位置 ( i , j ) (i,j) (i,j)很远的地方,
也就是在 ∣ a ∣ > Δ |a|> \Delta a>Δ或者 ∣ b ∣ > Δ |b|> \Delta b>Δ时,令 [ V ] a , b = 0 [\mathbf{V}]_{a, b}=0 [V]a,b=0,最终,我们得到:
[ H ] i , j = u + ∑ a = − Δ Δ ∑ b = − Δ Δ [ V ] a , b [ X ] i + a , j + b . [\mathbf{H}]_{i, j} = u + \sum_{a = -\Delta}^{\Delta} \sum_{b = -\Delta}^{\Delta} [\mathbf{V}]_{a, b} [\mathbf{X}]_{i+a, j+b}. [H]i,j=u+a=ΔΔb=ΔΔ[V]a,b[X]i+a,j+b.

这就是卷积层(Convolutional Layer) V \mathbf{V} V就是传说中的卷积核(Kernel)或滤波器(Filter), V \mathbf{V} V的大小就是 Δ × Δ \Delta\times\Delta Δ×Δ

参考资料

6.1. 从全连接层到卷积 — 动手学深度学习 2.0.0-beta1 documentation

猜你喜欢

转载自blog.csdn.net/qq_41129489/article/details/126401931