赞
踩
残差网络指将网络中的某些激励 a [ l ] a^{[l]} a[l]复制并通过一个快捷路径与若干层后进入激励之前的数值 z [ l + 2 ] z^{[l+2]} z[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])。像下图上方这样的结构,就被称为残差块。
注意
a
[
l
]
a^{[l]}
a[l]与
z
[
l
]
z^{[l]}
z[l]相加要求矩阵维度一致,所以残差网络中会大量使用等大卷积,否则还需要在相加之前对
a
[
l
]
a^{[l]}
a[l]做额外运算使其维度满足要求。
在实践中,我们可以多次构建残差块,来训练那些深度非常大的网络。理论上,网络深度越大,对训练集的拟合程度越高(即误差越小),但在实际训练中,太深的网络难以训练,往往会导致更大的误差。而加上残差以后,就可以帮助解决梯度消失和爆炸,神经网络的性能就能在更深的情况下保持提升。
过深网络的性能退化的原因可能是在代价函数中添加正则项以后,由于参数太多,算法为了降低代价函数,将参数的值都调整的非常接近0,这样在传播过程中待激活值 z [ l ] z^{[l]} z[l]也始终处于接近0的状态,使得整个网络的性能降低。
以ReLU函数作为激活函数举例,若添加了残差网络,将 a [ l ] a^{[l]} a[l]与 z [ l + 2 ] z^{[l+2]} z[l+2]相加,即使 z [ l + 2 ] z^{[l+2]} z[l+2]趋近于0,至少激活值 a [ l + 2 ] = ReLU ( a [ l ] + z [ l + 2 ] ) ≈ a [ l ] a^{[l+2]}=\text{ReLU}(a^{[l]}+z^{[l+2]})\approx a^{[l]} a[l+2]=ReLU(a[l]+z[l+2])≈a[l],使得性能不会倒退。在保证了下限的基础之上,若深层网络捕捉到了一些有用的特征,就可以改善网络的性能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。