重读经典卷积神经网络-ResNet

1.目的

为了解决随着网络层次加深带来的训练困难问题而提出了一个新的残差神经网络。
随着网络层次的加深,训练的时候出现梯度消失/爆炸,这导致了网络难以收敛。通过标准化后的初始化和中间初始化层(normalized initialization and intermediate normalization layers)可以使网路开始收敛,但是网络开始收敛之后,又出现其他问题:
“with the network depth increasing, accuracy gets saturated and then degrades rapidly.”
如下图所示:1
实际上要解决的问题是为什么随着网络的加深,精度却下降。

2.deep residual learning framework

2
将目标的映射表示为 H ( x ) \mathcal{H}(\mathrm{x}) H(x), 实际的堆叠层映射为 F ( x ) \mathcal{F}(\mathrm{x}) F(x), 令
F ( x ) : = H ( x ) − x \mathcal{F}(\mathrm{x}):=\mathcal{H}(\mathrm{x})-\mathrm{x} F(x):=H(x)x
那么目标映射就能表示为: F ( x ) + x \mathcal{F}(\mathbf{x})+\mathbf{x} F(x)+x
另外他们做的假设是:优化残差映射比优化原始未引用映射更容易。
残差网络实现的方式如上如,等价于使用前馈神经网络加上适当的“shortcut connections”。这里的“shortcut connections”不做任何的操作,直接复制原来的值,然后通过相加的方式与堆叠网络的输出合并。直接使用原来的值做跨层连接的好处是不增加额外的参数和计算复杂度,只需要在原来的网络基础上少量修改即可直接训练。

残差结构为什么有效?
如果添加的层可以被构造为identity mappings,即 F ( x )   x \mathcal{F}(\mathrm{x})~x F(x) x,那么一个更深层次的模型的训练误差应该不大于它的浅层模型。退化问题表明,模型在用多个非线性层逼近同一映射时可能存在困难。在残差学习重构中,如果identity mappings是最优的,则模型可以简单地将多个非线性层的权值趋近于零来逼近identity mappings 。

keras实现

使用Keras实现时主要是Merging layers的使用。
merge的方式有8种:

  • 按照某个维度拼接
  • 求均值
  • 求每个输入list的最大值
  • 求每个输入list的最小值
  • 相和
  • 相减
  • 相乘,对应位置的值相乘
  • 点乘,矩阵的相乘

其他关于ResNet详细的分析和代码实现的博客

(1)ResNet 论文
(2)Understand and Implement ResNet-50 with TensorFlow 2.0
(3)ResNet论文笔记及代码剖析
(4)TensorFlow2.0实现ResNet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值