残差层

作者: LuDon | 来源:发表于2019-07-04 17:38 被阅读0次

    引言

    在VGG中,随着网络层数的增多,往往伴随着以下几个问题:

    • 计算资源的消耗(通过增加GPU来解决)
    • 模型容易过拟合(采集海量数据,使用dropout正则化)
    • 产生梯度消失和梯度爆炸(使用batch norm)
      但是这些方法并不一定总是能解决问题。

    从信息论的角度来看,由于DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,特征图包含的图像信息会越来越少,而resnet的直接映射的加入,保证了l+1层的网络包含的信息一定比第l层的多。

    残差网络

    残差块

    残差块的结构如下图所示。


    一个残差块可以表示为:

    由两个部分组成:直接映射和残差部分。
    对于残差块更一般的表示:

    • 假设1:h(.)是直接映射
    • 假设2:f(.)是直接映射
      则残差块可以表示为
      x_{L} = x_l + \sum^{L-1}_{i=1}F(x_l, W_l)
    • L层可以表示为任意一个比它浅的层和他们之间残差部分的和;
    • x_{L} = x_0 + \sum^{L-1}_{i=1}F(x_l, W_l)
      损失函数loss关于x_l的梯度为
      \frac{dloss}{dx_l} = \frac{dloss}{dx_ L} \frac{dx_L}{dx_l} = \frac{dloss}{dx_ L} (1 + \frac{d}{dx_l} \sum ^{L-1}_{i=1}F(x_i, W_i))
    • 在整个训练过程中,\frac{d}{dx_l} \sum ^{L-1}_{i=1}F(x_i, W_i)不可能一直为-1,所以残差网络中一般不会出现梯度消失的问题
    • \frac{dloss}{dx_ L}表示L层的梯度可以直接传递到任何一个比它浅的层。
      因此,在假设1和假设2满足的情况下,信息可以很通畅的在高层和底层之间相互传导。

    对于假设1,假设h(x_l) = \lambda_{l} x_l,则残差块可以表示为:
    x_{l+1}= \lambda_{l} x_l + F(x_l, W_l)
    对于更深的层
    x_L = (\prod_{i=l}^{L-1} \lambda_l)x_l + \sum_{i=l}^{L-1}(\prod_{i=l}^{L-1} \lambda_l)F(x_l, W_l)
    现只考虑公式的左半部分:
    \frac{dloss}{dx_l} = \frac{dloss}{dx_L} (\prod_{i=l}^{L-1} \lambda_i)

    • \lambda > 1时,很可能发生梯度爆炸
    • \lambda < 1时,梯度变成0, 会阻碍残差网络信息的方向传递。
      \lambda必须等于1。

    相关文章

      网友评论

        本文标题:残差层

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