美文网首页
20190317论文研讨——BN、ResNet

20190317论文研讨——BN、ResNet

作者: Williamongh | 来源:发表于2019-03-17 00:44 被阅读0次

    Batch Normalization


    \hat x^{(k)} = \frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}
    y^{(k)} = \gamma\ \hat x^{(k)} +\beta

    目的
    使每一层的输出都满足均值为0、单位方差,以在经过激活函数时,能够在更敏感的范围内激活。缓解梯度消失/爆炸。

    但饱和未必是件坏事,因此在进行归一化的操作后,加入两个可学习参数(\gamma、\beta),进行缩放和平移,用来让网络自动地控制饱和的程度。如此以来解空间也涵盖了恒等函数。

    综上,经过归一化、缩放/平移两个步骤后,网络的学习过程更加灵活,更快收敛、也更加鲁棒(网络可以在更广范围的学习率和不同初始值下工作)。

    另一个角度理解:重参数化
    这种观点认为,BN实际上是一个自适应的重参数化的方法。
    非常深的网络模型会涉及多个函数或层组合,层与层之间的参数相互依赖,若同时更新所有层,由于这种依赖关系,可能会发生意想不到的结果。这是因为改变一个函数的参数时,我们假设其他函数保持不变。
    BN剔除了均值和标准差,保证每一层的输入在训练过程中的分布不变(或者说相对稳定),削弱了层间参数的依赖关系。

    有正则化效果
    BN层的输出不仅依赖于单个输入x,还(通过均值和方差)依赖于同一batch的其他样本。它不再对给定的训练样本提供确定性的值,就像在X中加入一些扰动,从而实现正则化的效果。

    ResNet


    图片.png
    Pytorch ResNet代码
    中心思想
    • 提出残差学习框架,使网络能够更深。相比于之前直接学习函数,改为学习残差函数。
    • 使网络更容易优化、能够加深网络、精度更高(精度的提高依赖于深度的增加)。
    • 相当于引入这一先验:给较浅网络加入恒等层,使其变深,网络效果至少不会变差。
    • 只有在需要升维的shortcut处引入了额外参数,没有增加算法复杂度。

    背景问题:更深的网络是否一定提高精度?会带来哪些问题?

    1. 过深的网络引起梯度消失/爆炸,从一开始就阻碍收敛。(很大程度上,可以通过归一化预处理、BN层来解决。)
    2. 较深的网络有退化问题:网络加深,精度提高至饱和;再加深网络,则精度迅速降低。这不是由过拟合造成:因为网络越深,训练集上精度也越低。


      图片.png

    技术方案

    图片.png 图片.png
    利用右图所示结构,对channel进行控制,减少参数。

    其他

    • 数据增强的方法与AlexNet\VGG相同。
    • 在每个卷积层后(激活层前),加入BN。
    • SGD,batch_size设为256。
    • 学习率初始为0.1,误差平稳时为0.01;0.9动量。
    • 没有使用dropout

    最终结构,以ResNet-50为例

    图片.png

    ResNet V2


    图片.png

    shortcut的路径应该是clean的
    恒等映射是最优的,前向、反向传播的信号能直接从一个残差块传递到其他任意一个残差块。一切多余操作(如relu、1x1卷积)都会阻碍信息的反向传播并且阻碍训练训练过程。

    shortcut中,1x1卷积带来的问题
    当残差单元有很多时,1x1卷积并不能起到好的效果,可能阻碍信号的传播。当使用1×1 的卷积shortcut时,110 层的ResNet的结果很差(12.22%), 训练误差变得很高。
    1×1的卷积shortcut连接引入了更多的参数(且1×1的卷积涵盖了恒等捷径连接的解空间),本应该具有比恒等连接更强大的表达能力。然而,当网络变得更深时,它们的训练误差比恒等捷径连接的训练误差要高得多,这表明了这些模型退化问题的原因是优化问题,而不是表达能力的问题

    相关文章

      网友评论

          本文标题:20190317论文研讨——BN、ResNet

          本文链接:https://www.haomeiwen.com/subject/qzxymqtx.html