本篇文章6198字,读完约15分钟

雷锋。这篇文章的作者,何教授,最初发表在他在智湖和雷锋的主页上。(公开号码:雷锋。被他授权出版。

传统的“提拉米苏”卷积神经网络模型通过叠加卷积层来提高网络深度,从而提高识别精度。然而,当堆叠太多的卷积层时,即梯度扩散,存在问题。backprop不能有效地更新前一网络层的梯度,这导致更新前一层参数的失败。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

为了解决这一问题,设计了一种新的网络技术,即网络技术(bn)和resnet的跳连接技术。bn通过标准化输入数据来改变数据分布,并消除转发过程中的梯度分散。而跳跃连接可以在以后的传输过程中更好地将梯度转移到较浅的水平。然后问题就来了,

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

为什么梯度可以通过增加一个捷径传播到浅层网络?

这应该从神经网络的梯度更新过程开始。如果读者熟悉神经网络的梯度更新,他们可以快进这一部分,但梯度更新的原理是整个问题的关键。

这里对神经网络梯度更新过程的简要回顾主要参考cs231n的讲义。就我个人而言,我认为这是理解神经网络梯度更新的最好课程。建议直接观看cs231n 2016的视频。andrej karpathy在视频中说得非常清楚,用他的ppt很容易理解。这里是地址:CS231N冬季2016:讲座4:反向传播,神经网络1。这是youtube视频链接。国内朋友请登陆百度:cs231n 2016视频。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

由于篇幅的原因,它没有安德烈在视频中的例子详细。这里,我们只讨论中间层梯度传播的计算过程。如果我们不完全理解神经网络的梯度更新原理,建议先看完视频。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/230ed1d709e677d100de28c1c9a60c67.jpg amp;quot; data-rawwidth= amp;quot;938 amp;quot; data-rawheight= amp;quot;527 amp;quot; >

图1 来自斯坦福cs231n课程slidesamp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/230 ed 1d 709 e 677d 100 de 28 C1 c 9 a 60 c 67 . jpg amp;quot。数据-rawwidth= amp。quot。938安培。quot。数据-rawheight= amp。quot。527安培。quot。>图1来自斯坦福大学cs231n课程的幻灯片

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

当梯度传播到中间层的神经元f时,如图1所示,来自上层的梯度dldz从右侧z进入并传播到中间层的神经元。神经元在左侧有两个输入,即X和Y。为了计算X和Y的L的梯度dldx和dldy,必须首先计算dzdx和dzdy。根据复合函数的导数公式,dldx = dldz * dzdx,dldy = dldz * dzdy,从而可以计算传播到X和Y的梯度。也就是说,通过这种方法,从更深层的梯度可以传播到x和y。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/7a0b23498e96e000c51b78b978a76511.jpg amp;quot; data-rawwidth= amp;quot;1243 amp;quot; data-rawheight= amp;quot;552 amp;quot; >

图2amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/7a 0 b 23498 e 96 e 000 c 51 b 78 b 978 a 76511 . jpg amp。quot。数据-rawwidth= amp。quot。1243安培。quot。数据-rawheight= amp。quot。552安培。quot。>图2

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

让我们考虑一个新情况。图2中的虚线框是神经元块,假设输入x是10,权重w1=0.1,w2=0.1,w3=0.1,w4=0.1,并且每个神经元通过乘法对输入进行操作。我们在传输前后计算它,看看梯度的变化:

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

正向传播:

首先,x乘以w1得到1;将1乘以w2,得到0.1,依此类推,如下图绿色gif所示

图3正向传播

反向传播:

假设从下一层网络返回的梯度是1(最右边的数字),在下面的gif图中,反向传播的梯度值由红色数字表示:

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/f337b6e08b76d733fd28994bd8e8a85a.gif amp;quot; data-rawwidth= amp;quot;1243 amp;quot; data-rawheight= amp;quot;552 amp;quot; data-thumbnail= amp;quot;static.leiphone/uploads/new/article/pic/201708/1771784a5cffe07a088ce43efe38fafd.jpg amp;quot; >

图4 后向传播amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/f 337 b 6 e 08 b 76d 733 FD 28994 bd8 E8 a 85 a . gif amp;quot。数据-rawwidth= amp。quot。1243安培。quot。数据-rawheight= amp。quot。552安培。quot。数据-缩略图= amp。quot。static . leiphone/uploads/new/article/pic/201708/1771784 a5 cffe 07 a 088 ce 43 EFE 38 fafd . jpg amp;quot。>图4反向传播

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

这里可以看到,从上一层传输的梯度是1,经过这个块后,得到的梯度变成了0.0001和0.01,也就是说,经过blcok后,梯度下降了几个数量级,传输到上一层的梯度会变得非常小!

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

这是梯度扩散。如果模型层数越深,梯度离散越严重,导致浅层网络权值参数训练不良,这就是为什么在resnet出现之前cnn网络没有超过20层。

防止梯度分散的措施由于梯度在通过卷积层后会逐渐衰减,让我们考虑一种新的结构,如图5所示:

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/3980a2005c3c5bfa5ab70cff186e3644.jpg amp;quot; data-rawwidth= amp;quot;1242 amp;quot; data-rawheight= amp;quot;666 amp;quot; >

图5amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/3980 a 2005 C3 C5 BFA 5a b 70 CFF 186 e 3644 . jpg amp;quot。数据-rawwidth= amp。quot。1242安培。quot。数据-rawheight= amp。quot。666安培。quot。>图5

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

假设我们在这个块旁边添加了一个“快捷方式”(如图5中的橙色箭头所示),这通常被称为“跳过连接”。假设左边上层的输入为X,虚线框的输出为f(x),上下路由的激活值相加为h(x),即h(x) = f(x)+x,得到的h(x)被输入到下一层。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/b300841426a04e238e066d5d038d08b3.jpg amp;quot; data-rawwidth= amp;quot;548 amp;quot; data-rawheight= amp;quot;261 amp;quot; >

图6amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/b 300841426 a 04 e 238 e 066 D5 d 038d 08 b 3 . jpg amp;quot。数据-rawwidth= amp。quot。548安培。quot。数据-rawheight= amp。quot。261安培。quot。>图6

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

进行反向传播时,右侧深层网络的梯度为1。在加法之后,橙色方向的梯度是dh(x)/df(x)=1,蓝色方向的梯度也是1。这样,在梯度传播之后,现在传输到前一层的梯度变成[1,0.0001,0.01],这又是一个“1”!正是因为这条捷径,从深层的梯度可以直接畅通无阻地传递到上层,使得浅层的网络层参数等待有效的训练!

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

这个想法是多么简单和伟大,我不得不佩服作者强大的思维能力!

直观理解 amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/99904b0ed69cd6760f847f5ac78323f3.jpg amp;quot; data-rawwidth= amp;quot;1144 amp;quot; data-rawheight= amp;quot;586 amp;quot; >

图7对放大器的直观理解。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/99904 b 0 ed 69 CD 6760 f 847 F5 AC 78323 f 3 . jpg amp;quot。数据-rawwidth= amp。quot。1144安培。quot。数据-rawheight= amp。quot。586安培。quot。>图7

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

如图7所示,左边是一辆装满“梯度”货物的卡车。来取货的客人通常要排队一个接一个地去取货。如果排队的人太多,后面就没有人了。因此,在这个时候,一个人被派去采取“快速通道”,并且一部分“梯度”在到达卡车上被接收,其被直接发送到后面的人,以便在后面队列中的客人可以得到更多的“梯度”。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

Resnet和densenet

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/65639ab85e44a1808461d01d7891e8da.jpg amp;quot; data-rawwidth= amp;quot;801 amp;quot; data-rawheight= amp;quot;391 amp;quot; >

图8amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/65639 ab 85 e 44 a 1808461d 01d 7891 E8 da . jpg amp;quot。数据-rawwidth= amp。quot。801安培。quot。数据-rawheight= amp。quot。391安培。quot。>图8

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

通过这种跳过连接,resnet可以不受阻碍地通过所有res块。作者何凯明说,唯一影响深度的是记忆的缺乏,所以只要记忆足够,剩余的几千层网络就可以实现。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

Densenet更极端,它的跳跃连接不仅连接上下层,而且直接实现跨层连接,每一层得到的梯度是前一层的梯度叠加。

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/51b6f24718669d520becaefa3100a25f.jpg amp;quot; data-rawwidth= amp;quot;1044 amp;quot; data-rawheight= amp;quot;699 amp;quot; >

图9 densenet结构amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/51 b 6 f 24718669d 520 becaefa 3100 a 25 f . jpg amp;quot。数据-rawwidth= amp。quot。1044安培。quot。数据-rawheight= amp。quot。699安培。quot。>图9 densenet结构

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

Densenet不仅增加了深度,还扩大了每个denseblock的网络宽度,从而提高了网络识别要素的能力。此外,因为denseblock的水平结构类似于初始块的水平结构,所以要计算的参数数量大大减少。因此,这篇论文获得了cvpr2017最佳论文奖!

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201708/06021891f67733c443f25746f2568d2f.jpg amp;quot; data-rawwidth= amp;quot;1386 amp;quot; data-rawheight= amp;quot;634 amp;quot; >

图10 densenet详细结构 来自原论文amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201708/06021891 f 67733 c 443 f 25746 f 2568 d2f . jpg amp;quot。数据-rawwidth= amp。quot。1386安培。quot。数据-rawheight= amp。quot。634安培。quot。>图10 densenet的详细结构来自原始文件

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

综上所述,resblock和bn的结合可以很好地解决梯度分散的问题,使得更深层次的网络成为可能。卷积神经网络不仅在深度上发展,而且在宽度上扩展。将两者结合起来可以创建一个更强大的有线电视新闻网模型。期待更出色的工作!

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

由于作者水平尚浅,对上述概念的理解可能会有偏差。欢迎你纠正我,并感谢它。如果你认为这篇文章对你有帮助,请和你的朋友分享,这样更多的人可以一起学习。

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。

标题:为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

地址:http://www.hcsbodzyz.com/hcxw/6387.html