普遍规律:
与LeNet-5的区别
特点:
a [ l ] a^{[l]} a[l]是 l l l层的输出, a [ l ] a^{[l]} a[l]除了正常输入 l + 1 l+1 l+1层以外,还输入 l + 2 l+2 l+2层,输入的位置是线性操作之后激活函数之前,即 a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) a^{[l+2]}=g(z^{[l+2]}+a^{[l]}) a[l+2]=g(z[l+2]+a[l]),其中 z [ l + 2 ] z^{[l+2]} z[l+2]是第 l + 2 l+2 l+2层中线性操作的结果, a [ l + 2 ] a^{[l+2]} a[l+2]是 l + 2 l+2 l+2层的输出。这个特殊的 l + 1 l+1 l+1层和 l + 2 l+2 l+2层的两层的block叫做Residual Block。
将网络中相邻的两层变为Residual Block,则该网络就是ResNet
理论上网络越深效果会越好,train error会随着训练的迭代越来越小,
但是事实上不使用Residual Block的深层网络(plain network)时,train error会随着训练的进行先下降再上升
而ResNet会让train error随着训练的迭代持续变小,这允许使用更深的网络,也有助于解决梯度的消失和爆炸问题,有助于解决train error陷入平台期优化慢的问题
当在一个plain network中加入一个Residual Block,假设block输入是
a
[
l
]
a^{[l]}
a[l],block输出是
a
[
l
+
2
]
=
g
(
z
[
l
+
2
]
+
a
[
l
]
)
a^{[l+2]}=g(z^{[l+2]}+a^{[l]})
a[l+2]=g(z[l+2]+a[l]),
z
[
l
+
2
]
=
w
[
l
+
2
]
a
[
l
+
1
]
+
b
[
l
+
2
]
z^{[l+2]}=w^{[l+2]}a^{[l+1]} + b^{[l+2]}
z[l+2]=w[l+2]a[l+1]+b[l+2];
在加了L2正则后,
w
[
l
+
2
]
w^{[l+2]}
w[l+2]和
b
[
l
+
2
]
b^{[l+2]}
b[l+2]都会减小,极端情况下会等于0,若
w
[
l
+
2
]
=
0
w^{[l+2]}=0
w[l+2]=0且
b
[
l
+
2
]
=
0
b^{[l+2]}=0
b[l+2]=0,则
a
[
l
+
2
]
=
g
(
0
+
a
[
l
]
)
=
g
(
a
[
l
]
)
a^{[l+2]}=g(0+a^{[l]})=g(a^{[l]})
a[l+2]=g(0+a[l])=g(a[l]);
再假设网络里的激活函数都是ReLU(大于0时取原值,小于0则为0),则
a
[
l
]
≥
0
a^{[l]}\geq 0
a[l]≥0,
a
[
l
+
2
]
=
g
(
a
[
l
]
)
=
a
[
l
]
a^{[l+2]}=g(a^{[l]})=a^{[l]}
a[l+2]=g(a[l])=a[l];
也就是说极端情况下,加了Residual Block相当于没有加任何内容。
所以在使用Residual Block的情况下,网络层数变深并不会带来plain network中深度网络存在的问题,而且如果幸运的话Residual Block还可能带来深层网络的好处。
矩阵加法要求两个矩阵shape相同,所以
当filter的channel=1时,1×1 convolution只是把全部输入乘以特定的数字然后经过了激活函数,没有起到提取特征的作用
当filter的channel>1时,1×1 convolution相当于在同一个点的所有channel上提取了特征
当filter有多个时,相当于对某一个点的所有channel的提取了多个特征
假设输入的shape是 ( n h , n w , n c ) (n_h, n_w, n_c) (nh,nw,nc),filter的shape是 ( 1 , 1 , n c ) (1, 1, n_c) (1,1,nc),filter数量为f,那么 1×1 convolution可以看做是对输入 ( n h , n w ) (n_h, n_w) (nh,nw)中的每个点,其所有channel分别和数量为f,shape为 ( n c , ) (n_c,) (nc,)的向量做点乘,最终输出的shape为 ( n h , n w , f ) (n_h, n_w, f) (nh,nw,f)。这样的计算类似全连接层的计算。
shrink the number of channels
理念:
其中不同的conv得到的结果height和width相同,channel不同,在channel的维度stack在一起
很多inception module在一起就是inception network