Skip block:将输出表述为输入X和输入的一个非线性变换F(X)的线性叠加。解决了深层网络的训练问题。
1. 来源
1.LSTM的控制门
2.ResNet进一步简化和实验验证
公式:y=H(x,WH)+X
2.解决:梯度消失
2.1.梯度消失
解决办法:优化方法、初始化策略、BatchNorm层、ReLU等激活函数。
上述办法改善问题的能力有限,直到残差连接被广泛使用。
- 假设,前向传播:
f′=f(x,wf),f为卷积
g′=g(f′),g为激活函数
y′=k(g′),k为分类器
loss=criterion(y,y′)
- 则,误差的链式反向传播:
∂wf∂loss=∂y′∂loss∂g′∂y′∂f′∂g′∂wf∂f′
一旦其中某一个导数很小,多次连乘后梯度可能越来越小。对于深层网络,梯度传到浅层几乎就没了。
2.2.使用残差连接
∂x∂h=∂x∂f+x=∂x∂f+1
相当于每一个导数加上了一个恒等项1。此时,就算原来的导数∂x∂f很小,误差仍然能够有效的反向传播。
例:网络输入x=1,非残差网络为G,残差网络为H,其中H=F(x)+x
t时刻:
G(1)=1.1
H(1)=1.1,H(1)=F(1)+1,F(1)=0.1
t+1时刻:
G′(1)=1.2
H′(1)=1.2,H′(1)=F′(1)+1,F′(1)=0.2
这时候我们看看:
G的梯度=1.11.2−1.1=111
F的梯度=0.10.2−0.1=11
因为两者各自是对G的参数和F的参数进行更新,可以看出这一点变化对F的影响远远大于G,说明引入残差后的映射对输出的变化更敏感。
3.解决:网络权重矩阵的退化
3.1.网络退化
一般认为: 网络越深,表达能力越强,性能越好。
现象: 在神经网络可以收敛的前提下,随着网络深度增加,网络的表现先是逐渐增加至饱和,然后迅速下降。
需要注意,网络退化问题不是过拟合导致的,即便在模型训练过程中,同样的训练轮次下,退化的网络也比稍浅层的网络的训练错误更高。
本质1: 即使梯度范数大,但是如果网络的可用自由度对这些范数的贡献非常不均衡,也就是每个层中只有少量的隐藏单元对不同的输入改变它们的激活值,而大部分隐藏单元对不同的输入都是相同的反应,此时整个权重矩阵的秩不高。并且,随着网络层数的增加,连乘后,秩可能变的更低。
高维、低秩矩阵:大部分维度没有信息,表达能力没有看起来那么强大。
本质2: 对神经网络来说,恒等映射并不容易拟合。
按理讲:
假设存在某个K层的网络f是当前最优的网络,那么可以构造一个更深的网络,其最后几层仅是该网络f第K层输出的恒等映射(Identity Mapping),就可以取得与f一致的结果。
也许K还不是“最佳层数”,那么更深的网络就可以取得更好的结果。
总而言之,与浅层网络相比,更深的网络的表现不应该更差。
然而,事实并非如此!
因此,一个合理的猜测就是:对神经网络来说,恒等映射并不容易拟合。
3.2.使用残差连接
针对本质1: 强制打破了网络的对称性,提升了网络的表征能力。
针对本质2: 构造天然的恒等映射。
假设神经网络非线性单元的输入和输出维度一致,可以将神经网络单元内要拟合的函数H(⋅)拆分成两个部分:
H(al−1)=al−1+F(al−1)
其中,F(⋅)是残差函数,al−1是输入,H(al−1)是输出。
在网络高层,学习一个恒等映射H(al−1)→al−1,等价于令残差部分趋近于0,即F(al−1)→0。
对应下图就是:x=F(x)+x,学习F(x)→0
跳层连接的残差单元: 将单元的输入直接与单元输出加在一起,然后再激活。
4.残差连接的有效性
残差网络可以轻松地用主流的自动微分深度学习框架实现,直接使用BP算法更新参数。
实验表明,残差网络很好地解决了深度神经网络的退化问题,并在ImageNet和CIFAR-10等图像任务上取得了非常好的结果,同等层数的前提下残差网络也收敛得更快,这使得前馈神经网络可以采用更深的设计。此外,去除个别神经网络层,残差网络的表现不会受到显著影响,这与传统的前馈神经网络大相径庭。
5.解释角度
5.1.使得信息前后向传播更加顺畅
假设:前馈神经网络的残差块为zl=H(al−1)=al−1+F(al−1),且残差块不使用任何激活函数al=zl。
层数l2>l1,对上式递归展开为
al2=al2−1+F(al2−1)=(al2−2+F(al2−2))+F(al2−1)=...=al1+i=l1∑l2−1F(ai)
由上式可知,在前向传播时,输入信号可以从任意低层直接传播到高层。由于包含了一个天然的恒等映射,一定程度上可以解决网络退化问题。
最终的损失对某低层输出的梯度可以展开为
∂al1∂loss=∂al2∂loss∂al1∂al2=∂al2∂loss∂al1∂(al1+i=l1∑l2−1F(ai))=∂al2∂loss(1+∂al1∂(i=l1∑l2−1F(ai)))=∂al2∂loss+∂al2∂loss∂al1∂(i=l1∑l2−1F(ai)))
根据上式,Loss对某低层输出的梯度,被分解为了两项。前一项∂al2∂loss表明,反向传播时,错误信号可以不经过任何中间权重矩阵变换直接传播到低层,一定程度上可以缓解梯度弥散问题(即便中间层矩阵权重很小,梯度也基本不会消失)。
5.2.集成学习
残差网络可以被看作是一系列路径集合组装而成的一个集成模型。
Andreas Veit等人展开了几组实验(Lesion study):
- 删去残差网络的部分网络层(即丢弃一部分路径)
- 交换某些网络模块的顺序(改变网络的结构,丢弃一部分路径的同时引入新路径)
实验结果表明,网络的表现与正确网络路径数平滑相关(在路径变化时,网络表现没有剧烈变化),这表明残差网络展开后的路径具有一定的独立性和冗余性。
作者还通过实验表明,残差网络中主要在训练中贡献了梯度的是那些相对较短的路径,这些较短的梯度路径正是由残差结构引入的。
可以类比集成学习的网络架构方法不仅有残差网络,Dropout机制也可以被认为是隐式地训练了一个组合的模型。
5.3.解决梯度破碎问题
在标准前馈神经网络中,随着深度增加,梯度逐渐呈现为白噪声(white noise)。
梯度破碎现象:
- 神经元梯度的相关性按指数级2L1减少
- 梯度的空间结构也随着深度增加被逐渐消除
梯度破碎的后果:
- 许多优化方法假设梯度在相邻点上是相似的,破碎的梯度会大大减小这类优化方法的有效性。
- 如果梯度表现得像白噪声,那么某个神经元对网络输出的影响将会很不稳定。
相较标准前馈网络,残差网络中残差结构缓解了梯度破碎问题:
- 梯度相关性减少的速度从指数级下降到亚线性级L1
- 神经元梯度介于棕色噪声与白噪声之间
- 极大地保留梯度的空间结构
参考
有三AI
ML4NLP