【AI不惑境】残差网络的前世此生与原理

你们好,这是专栏《AI不惑境》的第五篇文章,讲述残差网络的前因后果和背后的原理。python

进入到不惑境界,就是向高手迈进的开始了,在这个境界须要本身独立思考。若是说学习是一个从模仿,到追随,到创造的过程,那么到这个阶段,应该跃过了模仿和追随的阶段,进入了创造的阶段。从这个境界开始,讲述的问题可能再也不有答案,更多的是激发你们一块儿来思考。git

做者&编辑 | 言有三算法

在深度学习模型发展史中,残差网络因其简单而有效的结构与异常有效的结果而占据了很是重要的位置,今天就来仔细说说它的前因后果。shell

 

1 残差网络以前的历史vim

残差链接的思想起源于中心化,在神经网络系统中,对输入数据等进行中心化转换,即将数据减去均值,被普遍验证有利于加快系统的学习速度。windows

Schraudolph[1]将这样的思想拓展到了梯度的反向传播中,不只是输入和隐藏层单元的激活值要中心化,梯度偏差以及权重的更新也能够中心化,这即是经过将输入输出进行链接的shortcut connection,也称为跳层链接技术。网络

在1998年的时候,它们提出了将网络分解为biased和centered两个子网络的思想,经过并行训练两个子网络,分别学习线性和非线性变换部分,不只下降了各个网络的学习难度,也大大提高了梯度降低算法的训练速度。函数

Raiko等人则在论文[2]中更加细致地研究了shortcut connections对模型能力的影响,在网络包含2到5个隐藏层,使用与不使用正则化等各类环境配置下,MNIST和CIFAR图像分类任务和MNIST图像重构任务的结果都代表,这样的技术提升了随机梯度降低算法的学习能力,而且提升了模型的泛化能力。性能

Srivastava等人在2015年的文章[3]中提出了highway network,对深层神经网络使用了跳层链接,明确提出了残差结构,借鉴了来自于LSTM的控制门的思想。学习

当T(x,Wt)=0时,y=x,T(x,Wt)=1时,y=H(x,Wh)T(x,Wt)。在该文章中,研究者没有使用特殊的初始化方法等技巧,也可以训练上千层的网络。

从以上的发展能够看出来,跳层链接由来已久。

 

2 残差网络

何凯明等人在2015年的论文[4]中正式提出了ResNet,简化了highway network中的形式,表达式以下:

相比于以前的卷积和池化相互堆叠的网络,其基本的结构单元以下:

当咱们直接将一个输入添加到输出的时候,输出y能够明确的拆分为H(x,Wh)和x的线性叠加,从而让梯度多了一条恒等映射通道,这被认为对于深层网络的训练是很是重要的,一个典型的resnet网络结构以下:

resnet在当年的ImageNet的多项竞赛中取得冠军,风头一时无两,随后被普遍深扒。关于ResNet的详细解读,你们能够关注咱们的往期文章。

【模型解读】resnet中的残差链接,你肯定真的看懂了?

 

3 残差网络结构的发展

对于残差网络的研究,大部分集中在两个方向,第一个是结构方面的研究,另外一个是残差网络原理的研究,首先说几个具备表明性的结构,不会将全部结构都包含进来,若是感兴趣你们能够关注知识星球有三AI。

3.一、更密集的跳层链接DenseNet

若是将ResNet的跳层结构发挥到极致,即每两层都相互链接,那么就成为了DenseNet,关于DenseNet的详细解读,能够查看咱们的往期文章。

【模型解读】“全链接”的卷积网络,有什么好?

DenseNet是一个很是高效率的网络结构,以更少的通道数更低的计算代价,得到比ResNet更强大的性能。

3.二、更多并行的跳层链接

若是将ResNet和DenseNet分为做为两个通道并行处理,以后再将信息融合,就能够获得Dual Path Network,网络结构以下:

其背后的思想是resnet对于重用信息更有效,而densenet对于学习新的信息更有效,这个结构在最后一届ImageNet竞赛中也取得了很好的成绩,分类比赛的亚军,定位比赛的冠军。相似的结构变种还有以下的结构,再也不一一赘述。

固然,还有比上面的Dual Path Network更加简单的并行结构,即直接使用多个彻底独立且相同的分支并行处理,而后合并。

也有更加复杂的变种,即所谓的resnet in resnet结构,以下图。

篇幅缘由本文不对全部残差网络的结构设计思想和发展作更多解读,感兴趣请移步知识星球《有三AI》。

 

4 残差网络结构为何这么好用?

关于残差网络为何有效,研究众多,这里咱们就集中讲述几个主流的思路。

4.一、简化了学习过程,加强了梯度传播

相比于学习原始的信号,残差网络学习的是信号的差值,这在许多的研究中被验证是更加有效的,它简化了学习的过程。

根据咱们前面的内容可知,在必定程度上,网络越深表达能力越强,性能越好。

然而随着网络深度的增长,带来了许多优化相关的问题,好比梯度消散,梯度爆炸。

在残差结构被普遍使用以前,研究人员经过研究更好的优化方法,更好的初始化策略,添加Batch Normalization,提出Relu等激活函数的方法来对深层网络梯度传播面临的问题进行缓解,可是仍然不能解决根本问题。

假如咱们有这样一个网络:

其中f为卷积操做,g为非线性变换函数,k为分类器,依靠偏差的链式反向传播法则,损失loss对f的导数为:

若是其中某一个导数很小,屡次连乘后梯度可能愈来愈小,这就是常说的梯度消散,对于深层网络,从靠近输出的深层传到靠近输入的浅层时梯度值很是小,使得浅层没法有效地更新。

若是使用了残差结构,由于导数包含了恒等项,仍然可以有效的反向传播。

举一个很是直观的例子方便理解,假若有一个网络,输入x=1,非残差网络为G,残差网络为H,其中H(x)=F(x)+x,假若有这样的输入关系:

由于二者各自是对G的参数和F的参数进行更新,能够看出变化对F的影响远远大于G,说明引入残差后的映射对输出的变化更敏感,这样是有利于网络进行传播的。

4.二、打破了网络的不对称性[5]

虽然残差网络能够经过跳层链接,加强了梯度的流动,从而使得上千层网络的训练成为可能,不过相关的研究表面残差网络的有效性,更加体如今减轻了神经网络的退化

若是在网络中每一个层只有少许的隐藏单元对不一样的输入改变它们的激活值,而大部分隐藏单元对不一样的输入都是相同的反应,此时整个权重矩阵的秩不高。而且随着网络层数的增长,连乘后使得整个秩变的更低,这就是咱们常说的网络退化问题。

虽然权重矩阵是一个很高维的矩阵,可是大部分维度却没有信息,使得网络的表达能力没有看起来那么强大。这样的状况必定程度上来自于网络的对称性,而残差链接打破了网络的对称性。

下面展现了三种跳层链接恢复网络表达能力的案例,分别是消除输入和权重零奇点,打破对称性,线性依赖性

4.三、加强了网络的泛化能力[6]

有一些研究代表,深层的残差网络能够看作是不一样深度的浅层神经网络的ensemble,训练完一个深层网络后,在测试的时候随机去除某个网络层,并不会使得网络的性能有很大的退化,而对于VGG网络来讲,删减任何一层都会形成模型的性能奔溃,以下图。

甚至去除和打乱一些网络层,性能的降低也是一个很平滑的过程。

以上都证实了残差结构实际上是多个更浅的网络的集成,因此它的有效深度看起来表面的那么深,所以优化天然也没有那么难了。

关于残差,还有须要的研究,你们能够持续关注咱们公众号和知乎,以及星球。

参考文献

[1] Schraudolph N. Accelerated gradient descent by factor-centering decomposition[J]. Technical report/IDSIA, 1998, 98.

[2] Raiko T, Valpola H, LeCun Y. Deep learning made easier by linear transformations in perceptrons[C]//Artificial intelligence and statistics. 2012: 924-932.

[3] Srivastava R K, Greff K, Schmidhuber J. Training very deep networks[C]//Advances in neural information processing systems. 2015: 2377-2385.

[4] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.

[5] Orhan A E, Pitkow X. Skip Connections Eliminate Singularities[J]. international conference on learning representations, 2018.

[6] Veit A, Wilber M J, Belongie S. Residual networks behave like ensembles of relatively shallow networks[C]//Advances in neural information processing systems. 2016: 550-558.

 

总结

经过跳层链接而来的残差网络虽然结构很是简单,可是却异常有用,在不少的应用领域中都被普遍使用,其原理也在被进一步普遍研究中,你们能够持续关注,更多的内容咱们会在知识星球《有三AI》中展现。

下期预告:深度学习中的多尺度设计与应用。

近期直播

有三AI记念版扑克牌预售

下期预告:跳层链接对网络性能的影响。

AI白身境系列完整阅读:

第一期:【AI白身境】深度学习从弃用windows开始

第二期:【AI白身境】Linux干活三板斧,shell、vim和git

第三期:【AI白身境】学AI必备的python基础

第四期:【AI白身境】深度学习必备图像基础

第五期:【AI白身境】搞计算机视觉必备的OpenCV入门基础

第六期:【AI白身境】只会用Python?g++,CMake和Makefile了解一下

第七期:【AI白身境】学深度学习你不得不知的爬虫基础

第八期: 【AI白身境】深度学习中的数据可视化

第九期:【AI白身境】入行AI须要什么数学基础:左手矩阵论,右手微积分

第十期:【AI白身境】一文览尽计算机视觉研究方向

第十一期:【AI白身境】AI+,都加在哪些应用领域了

第十二期:【AI白身境】究竟谁是paper之王,全球前10的计算机科学家

AI初识境系列完整阅读

第一期:【AI初识境】从3次人工智能潮起潮落提及

第二期:【AI初识境】从头理解神经网络-内行与外行的分水岭

第三期:【AI初识境】近20年深度学习在图像领域的重要进展节点

第四期:【AI初识境】激活函数:从人工设计到自动搜索

第五期:【AI初识境】什么是深度学习成功的开始?参数初始化

第六期:【AI初识境】深度学习模型中的Normalization,你懂了多少?

第七期:【AI初识境】为了围剿SGD你们这些年想过的那十几招

第八期:【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,究竟是什么?

第九期:【AI初识境】如何增长深度学习模型的泛化能力

第十期:【AI初识境】深度学习模型评估,从图像分类到生成模型

第十一期:【AI初识境】深度学习中经常使用的损失函数有哪些?

第十二期:【AI初识境】给深度学习新手开始项目时的10条建议

AI不惑境系列完整阅读:

第一期:【AI不惑境】数据压榨有多狠,人工智能就有多成功

第二期:【AI不惑境】网络深度对深度学习模型性能有什么影响?

第三期:【AI不惑境】网络的宽度如何影响深度学习模型的性能?

第四期:【AI不惑境】学习率和batchsize如何影响模型的性能?

第五期:【AI不惑境】残差网络的前世此生与原理

感谢各位看官的耐心阅读,不足之处但愿多多指教。后续内容将会不按期奉上,欢迎你们关注有三公众号 有三AI