目录
物体识别的一个原则——不变性(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 20∗20,需要得到一个 15 ∗ 15 15*15 15∗15的输出
那么这个 [ W ] 15 , 15 , 20 , 20 [W]_{15,15,20,20} [W]15,15,20,20就是一个 15 ∗ 15 15*15 15∗15的大矩阵,而这个大矩阵的每个元素都是 20 ∗ 20 20*20 20∗20的小矩阵
若要计算输出 ( 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+k∑l∑[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+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.
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+a∑b∑[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 Δ×Δ