从0开始深度学习(22)——从全连接层到卷积
多层感知机在处理图像这种高维数据时,因为模型需要大量的数据来训练这么多参数,会导致巨大的计算成本,还会增加过拟合的风险,所以人们选择使用卷积神经网络
1 不变性
在计算机视觉和深度学习领域,特指模型对输入数据中的某些变换具有鲁棒性的能力。具体来说,如果一个模型在处理图像时,能够不受图像中对象的位置、大小、旋转等因素的影响,依然准确地识别出对象,那么这个模型就具有空间不变性,包括平移不变性、缩放不变性、旋转不变性、放射不变性。
假设我们要在一张图中寻找我们指定的角色:
但是在眼花缭乱的场景中找到他如通大海捞针,因此我们可以使用一个“检测器”扫描图像。 该检测器将图像分割成多个区域,并为每个区域包含沃尔多的可能性打分。
现在,我们将上述想法总结一下,从而帮助我们设计适合于计算机视觉的神经网络架构。
- 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
- 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测
2 多层感知机的限制
在多层感知机中,输入是二维图像 X X X,其隐藏表示 H H H在数学上是一个矩阵,在代码上表示一个二维张量,我们使用 [ X ] i , j [\mathbf{X}]_{i, j} [X]i,j和 [ H ] i , j [\mathbf{H}]_{i, j} [H]i,j分别表示输入图像和隐藏表示中位置为 ( i , j ) (i,j) (i,j)处的像素。
在多层感知机中,每个神经元与上一层的所有神经元相连,即全连接方式。对于图像输入来说,这种方式并不适合,因为图像中的局部特征通常是局部区域的组合,所以我们希望隐藏表示是一个区域一个区域
(
k
,
l
)
(k,l)
(k,l)的进行计算,将参数从权重矩阵替换为四阶权重张量
W
W
W,即:
[
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.
其中 W W W到 V V V只是形式上的变换,索引 a a a 和 b b b 通过在正偏移和负偏移之间移动覆盖了整个图像。
对于隐藏表示中任意给定位置 ( i , j ) (i,j) (i,j)处的隐藏表示 H H H可以通过 x x x以 ( i , j ) (i,j) (i,j)为中心对像素进行加权求和得到,加权使用的权重便是 [ V ] i , j , a , b [\mathsf{V}]_{i, j, a, b} [V]i,j,a,b,这种操作便是卷积操作
2.1 平移不变性
由于平移不变性,即卷积核应该能够在输入图像的不同位置检测到相同的特征,而不依赖于具体的位置
(
i
,
j
)
(i,j)
(i,j)(即图像的坐标位置),所以
[
V
]
i
,
j
,
a
,
b
=
[
V
]
a
,
b
[\mathsf{V}]_{i, j, a, b} = [\mathbf{V}]_{a, b}
[V]i,j,a,b=[V]a,b,并且
U
U
U是一个常数,我们假设为
u
u
u,所以可以简化表达为:
[
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.
这就是卷积(convolution)操作,使用系数
[
V
]
a
,
b
[\mathbf{V}]_{a, b}
[V]a,b对
(
i
,
j
)
(i,j)
(i,j)附件的像素
(
i
+
a
,
j
+
b
)
(i+a, j+b)
(i+a,j+b)进行加权求和得到
[
H
]
i
,
j
[\mathbf{H}]_{i, j}
[H]i,j
2.2 局部性
由于局部性,我们不应偏离到距
(
i
,
j
)
(i,j)
(i,j)很远的地方,即在
∣
a
∣
>
Δ
或
∣
b
∣
>
Δ
|a|> \Delta或|b| > \Delta
∣a∣>Δ或∣b∣>Δ的范围之外,可以设置
[
V
]
a
,
b
=
0
[\mathbf{V}]_{a, b} = 0
[V]a,b=0,所以我们又可以把
[
H
]
i
,
j
[\mathbf{H}]_{i, j}
[H]i,j重写为:
[
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.
此时,上式就是一个卷积层,卷积神经网络就是包含有卷积层的神经网络,其中
V
\mathbf{V}
V被称作卷积核或者滤波器,亦或简单地称之为该卷积层的权重,通常该权重是可学习的参数
3 回顾游戏
目标是学习一个模型,以便探测出在指定角色最可能出现的地方。
然而这种方法有一个问题:我们忽略了图像一般包含三个通道/三种原色(红色、绿色和蓝色)。 实际上,图像不是二维张量,而是一个由高度、宽度和颜色组成的三维张量。因此索引应该改写为
[
X
]
i
,
j
,
k
[\mathsf{X}]_{i, j, k}
[X]i,j,k,对应的,卷积应该调整为
[
V
]
a
,
b
,
c
[\mathsf{V}]_{a,b,c}
[V]a,b,c
此外,由于输入图像是三维的,我们的隐藏表示也最好采用三维张量。还为了支持输入
X
X
X和隐藏表示
H
H
H中的多个通道,于是添加第四个索引,最后卷积层表示如下:
[
H
]
i
,
j
,
d
=
∑
a
=
−
Δ
Δ
∑
b
=
−
Δ
Δ
∑
c
[
V
]
a
,
b
,
c
,
d
[
X
]
i
+
a
,
j
+
b
,
c
,
[\mathsf{H}]_{i,j,d} = \sum_{a = -\Delta}^{\Delta} \sum_{b = -\Delta}^{\Delta} \sum_c [\mathsf{V}]_{a, b, c, d} [\mathsf{X}]_{i+a, j+b, c},
[H]i,j,d=a=−Δ∑Δb=−Δ∑Δc∑[V]a,b,c,d[X]i+a,j+b,c,
其中隐藏表示 H H H中的索引 d d d表示输出通道,而随后的输出将继续以三维张量 H H H作为输入进入下一个卷积层