残差网络 Resnet

  • 产生背景

    • 在深度神经网络建模的时候,我们经常会发现50层深度的网络训练效果不如20层的效果,这可能是因为过拟合,也有可能是反向传播中的梯度逐渐变小或变大导致的梯度爆炸问题
    • 由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出
    • 我们至少要保证,随着层数的叠加,我们的训练效果至少不能下降
  • 模型 Model

    • 为了让训练效果不下降,我们需要将未来的内容加上当前的内容即 x+F(x)x + F(x)

    • 向前传播 forward

      • 首先我们要确定当前的效果只能作用于下一个层,不多不少

        • 这样可以类似于马尔科夫链的效果逐层递推
      • 递推尝试:

        • F(xl+1)=F(xl)+xlF(x_{l+1}) = F(x_l)+x_l
        • F(xl+2)=F(xl+1)+xl+1=F(xl+1)+F(xl)+xlF(x_{l+2}) = F(x_{l+1}) + x_{l+1} = F(x_{l+1})+F(x_l)+x_l
        • 总递推公式 xL=xl+Σi=lL1F(xi)x_L = x_l + \Sigma_{i=l}^{L-1} F(x_i)
    • 反向传播 backward

      • 实质上是对 xlx_l 的求导
      • $\frac{\partial \varepsilon}{\partial x_l} = \frac{\partial \epsilon}{\partial x_L}\frac{\partial x_L}{\partial x_l}\ =\frac{\partial \epsilon}{\partial x_L}(1 + \frac{\partial }{\partial x_l} \Sigma_{i=l}^{L-1}F(x_i)) $ 其中 ϵ\epsilon 表示损失函数,我们求导目的就是最小化梯度下降
      • 同时我们会发现求导导出公式为 ϵxL+xlΣi=lL1F(xi)\frac{\partial \epsilon}{\partial x_L} + \frac{\partial}{\partial x_l}\Sigma_{i=l}^{L-1}F(x_i) , 存在一个余项 ϵxL\frac {\partial\epsilon}{\partial x_L} , 所以其不容易梯度消失,长程传播效果会比较好
    • 残差块

      • 一般是两个 3×33\times 3 的卷积块,这样输入和输出的尺寸就一致了