太深的神经网络训练起来很难,因为有梯度消失和爆炸这类问题。
跳跃连接(skip connection) 让你从一层中得到激活并突然把它传递给下一层,甚至更深的神经网络层。利用它,可以训练网络层很深很深的残差网络
无需遵行主路径,al将通过快捷路径进入到更深层的神经网络中
有时这个术语不叫快捷路径(shortcut),有时叫跳跃连接,指al跳过一层或跳过几乎两层把信息传递到更深的神经网络中去。
建立一个ResNet的方法,就是通过大量的这些残差块把它们堆叠起来形成一个深度网络
一、残差块(Residual block)
如图,绿色划线部分为普通网络(plain network)的路径。此处为残差网络这组层的主路径。
紫色部分为残差块的快捷路径(shortcut)。有时这个术语不叫快捷路径(shortcut),有时叫跳跃连接(skip connection),指a[l]跳过一层或跳过几乎两层把信息传递到更深的神经网络中去。
通过快捷路径,我们得到
无需遵行主路径,a[l]将通过快捷路径进入到更深层的神经网络中。
跳跃连接让你从一层中得到激活并突然把它传递给下一层,甚至更深的神经网络层。利用它,可以训练网络层很深很深的残差网络。
建立一个ResNet的方法,就是通过大量的这些残差块把它们堆叠起来形成一个深度网络。
二、残差网络(Residual Network)
把普通网络(plain network)变成残差网络,就是添加所有这些跳跃连接。
这张图片显示5个残差块堆积在一起,这就是一个残差网络。
普通网络事实上如果你选的网络太深,则训练误差会更大。如下图所示。
在训练集上的出色表现通常是你出色地控制你在训练集上的深度的前提条件。所以训练ResNet使其能对付训练集是第一步。如果w[l+2]用远离k的L2正则化这将会减小w[l+2]的值
如果应用正则化于b的话也会导致b值减小,尽管我觉得在现实中有时候并不总是需要应用于b。在这里w才是最需要关注的项。
如果w[l+2]=0 b[l+2]=0,那么g(a[l])=a[l] 。因为我们假设我们使用激活函数的值所有激活都不是负数(ReLu激活输出的数只会是0或正数),那么g(a[l])会是对于非负数,所以你就重新得到了a[l](重新得到a[l]这里我没太理解),这意味着残差块比较容易学习恒等函数。
同时可得这个跳跃连接很容易得到a[l+2]=a[l]。意味着加入这两层不会非常影响神经网络的能力。因为对于它来说学习恒等函数非常容易,这就是加残差块到大型神经网络中间或尾部并不会影响神经网络的表现。残差有效的原因因为这些额外层学习起恒等函数非常简单。你几乎总能保证它不会影响总体的表现,甚至许多时候幸运的话可以提升网络的表现,至少有个合理的底线不会影响其表现,然后梯度下降从这里开始可以改善最终结果。而普通网络随着层数加深很难选择参数学习。即使是恒等函数也很难,所有有很多层反而会更糟糕。
三、ResNet
残差网络另一个值得讨论的细节是在同一维度,所以你将会看到在ResNet中许多相同卷积的应用。相同的卷积会保留维度,也使你运算这个快捷路径变得更方便。
ResNet有许多3×3卷积,其中大部分都是相同的3×3卷积。这也是你为什么需要做相同维度矢量的相加。所以与其说是相互充分连接的层,还不如说这些是卷积层,但由于它们是相同的卷积层,这里的维度相同,因此z[l+2]+a[l]相加的算数得以成立。
和你之前见过的许多ResNet相同的是,你有一堆卷积层,然后偶尔有池化层或类似池化的层,每当这些事情发生时你可以用我们之前提到的方法调整维度,可以用矩阵Ws(此处也没听懂)。
在这些网络中常见的是,你有未知个池,然后在最后你会有一个充分连接的层来最终用softmax来做出预测。