残差层

引言

在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。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容