搬来这个 给自己学学啊,残差网络解决了什么,为什么有效
从深度神经网络的两大难题入手,说说残差网络的形式化定义与实现,并深入探讨其作用的机制,并结合文献对残差网络有效性进行了一些可能的解释。
残差网络是深度学习中的一个重要概念。这篇文章将简单介绍残差网络的思想,并结合文献讨论残差网络有效性的一些可能解释。
以下是本文的概览:
-
动机: 深度神经网络的“两朵乌云”
-
残差网络的形式化定义与实现
-
残差网络解决了什么,为什么有效?
-
自然语言处理中的残差结构
-
总结与扩展
1. 动机: 深度神经网络的“两朵乌云”
神经网络具有非常强的表达能力,并且免去了繁重的特征工程,在BP算法提出以及算力逐渐提升的背景下,逐渐受到了研究人员和开发者的青睐。
一般认为,经过训练的深度神经网络能够将数据特征逐层抽象,最终提取出完成任务所需要的特征/表示,最终使用一个简单的分类器(或其他学习器),就可以完成最终任务——因此深度学习也被叫做表示/特征学习。
在“层层抽象”的直觉下,很自然的想法就是,训练一个很深的前馈神经网路,来完成任务。直观上看,更深的神经网络,在非线性激活函数的加持下,拥有更大的假设空间,因此当然“更有可能”包含了一个最优解。但是在实际使用时,训练又成了一个难题。除了过拟合问题以外,更深的神经网络会遇到如下两个难题,我姑且按照物理史的比喻将其称为深度神经网络的“两朵乌云”:
1.1 梯度弥散/爆炸
1.2 网络退化问题
在前面的讨论中,梯度弥散/爆炸问题导致模型训练难以收敛,但是这个问题很大程度上已经被标准初始化和中间层正规化方法有效控制了,这些方法使得深度神经网络可以收敛。深度神经网络面临的另一朵乌云是网络退化问题:
在神经网络可以收敛的前提下,随着网络深度增加,网络的表现先是逐渐增加至饱和,然后迅速下降[1]。
需要注意,网络退化问题不是过拟合导致的,即便在模型训练过程中,同样的训练轮次下,退化的网络也比稍浅层的网络的训练错误更高,如下图[1]所示。
模型退化:深层模型反而取得更高的训练和测试误差
也许我们可以对网络单元进行一定的改造,来改善退化问题?这也就引出了残差网络的基本思路...
2. 残差网络的形式化定义与实现
残差单元:以跳层连接的形式实现。
实验表明,残差网络很好地解决了深度神经网络的退化问题,并在ImageNet和CIFAR-10等图像任务上取得了非常好的结果,同等层数的前提下残差网络也收敛得更快。这使得前馈神经网络可以采用更深的设计。除此之外,去除个别神经网络层,残差网络的表现不会受到显著影响,这与传统的前馈神经网络大相径庭。
3. 残差网络解决了什么,为什么有效?
残差网络在图像领域已然成为了一种主流模型,虽然这种网络范式的提出是为了解决网络退化问题,但是关于其作用的机制,还是多有争议。目前存在几种可能的解释,下面分别列举2016年的两篇文献和2018年的一篇文献中的内容。
3.1 从前后向信息传播的角度来看
何恺明等人从前后向信息传播的角度给出了残差网路的一种解释。
* 加入了激活函数的情况的讨论(实验论证)。
3.2 集成学习的角度
Andreas Veit等人提出了一种不同的视角。他们将残差网络展开,以一个三层的ResNet为例,将得到下面的树形结构:
残差网络的展开形式
这样,残差网络就可以被看作是一系列路径集合组装而成的一个集成模型,其中不同的路径包含了不同的网络层子集。Andreas Veit等人展开了几组实验(Lesion study),在测试时,删去残差网络的部分网络层(即丢弃一部分路径)、或交换某些网络模块的顺序(改变网络的结构,丢弃一部分路径的同时引入新路径)。实验结果表明,网络的表现与正确网络路径数平滑相关(在路径变化时,网络表现没有剧烈变化),这表明残差网络展开后的路径具有一定的独立性和冗余性,使得残差网络表现得像一个集成模型(ensemble)。
作者还通过实验表明,残差网络中主要在训练中贡献了梯度的是那些相对较短的路径,从这个意味上来说,残差网络并不是通过保留整个网络深度上的梯度流动来抑制梯度弥散问题,一定程度上反驳了何恺明等[3]中的观点。但是,我觉得这个实验结果与何凯明等的结论并不矛盾,因为这些较短的梯度路径正是由残差结构引入的。
* 可以类比集成学习的网络架构方法不仅有残差网络,Dropout机制也可以被认为是隐式地训练了一个组合的模型。
3.3 梯度破碎问题
2018年的一篇论文,The Shattered Gradients Problem: If resnets are the answer, then what is the question?[4],指出了一个新的观点,尽管残差网络提出是为了解决梯度弥散和网络退化的问题,它解决的实际上是梯度破碎问题(the shattering gradient problem):
在标准前馈神经网络中,随着深度增加,梯度逐渐呈现为白噪声(white noise)。
神经网络梯度及其协方差矩阵的可视化,可以看到标准的前馈网络的梯度在较深时(b)与白噪声(e)类似。
梯度破碎为什么是一个问题呢?这是因为许多优化方法假设梯度在相邻点上是相似的,破碎的梯度会大大减小这类优化方法的有效性。另外,如果梯度表现得像白噪声,那么某个神经元对网络输出的影响将会很不稳定。
* 更细致的实验与讨论请参见。
4. 自然语言处理中的残差结构
与图像领域不同的是,自然语言处理中的网络往往“宽而浅”,在这些网络中残差结构很难有用武之地。但是在谷歌提出了基于自注意力的Transformer架构[5],特别是BERT[6]出现以后,自然语言处理也拥有了“窄而深”的网络结构,因此当然也可以充分利用残差连接,来达到优化网络的目的。事实上,Transformer本身就包含了残差连接,其中编码器和解码器中的每一个子模块都包含了残差连接,并使用了Layer Normalization。
Transformer架构
可以预见的是,基于深度学习的自然语言处理的网络结构很可能朝着更“深”的方向发展,那么残差结构就是一个几乎不可缺少的选项了。
残差网络真可谓是深度学习的一把利器,它的出现使得更深的网络训练成为可能。类似残差网络的结构还有Highway Network[7],与残差网络的差别在于加入了门控机制(注意它和ResNet是同时期的工作),文献[4]中也对Highway Network进行了讨论,值得一读;现在广泛使用的门控RNN,我认为与Highway Network有异曲同工之妙,可以认为是在时间维上引入了门控的残差连接;在残差网络中使用的跳层连接,在自然语言处理中也有相当多的应用,比如Bengio的神经语言模型[8]、文本匹配模型ESIM[9]等,区别在于这些工作中跳层连接仅仅将不同层次的特征拼接在一起(而不是相加),达到增加特征多样性、加快训练的目的。
whaosoft aiot http://143ai.com