为什么要提出残差网络?
- 深度网络不是越深越好。会出现梯度消失或者梯度爆炸,网络训练难度加大。
- 何凯明做了实验,浅层网络比深层网络的训练误差和测试误差都要小。
- 梯度消失:反向传播的时候,越到前面(浅层网络),梯度越小。原因之一是sigmoid函数两边很平缓,即两边梯度衰减是很快的。
- shotcut使得反向传播的时候梯度可以快速回传,从而减小网络训练的困难
残差干了啥?
- shortcut: 不经过权重和激活函数
- 解释: x是前面模块的输出,F(x)是后面模块的输出。则下面一个模块的输入即是x+F(x),即模块输入之差是F(x)(即残差)
真实的网络?
- 即每两层之间加一个shortcut
- 如果两个block的维数不一样,则做线性变换将两个变成一样的就好
类似的网络DenseNet:
- ResNet中网络是很深,但是可能没有贡献。
- (想法都很简单,主要是你能够做得出来并且证明人家有效)