学习资料来源:飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com)
ResNet的实现:
如下图在原有的两次卷积的基础上,增加了一条旁路:
为什么设计残差,有什么好处?
(资料来源:为什么resnet效果会那么好? - 知乎 (zhihu.com))
能够避免深度网络的梯度消失问题。
根据实验表明,模型的精确率和网络存在如下关系:
深度网络在反向传播时,需要经过多层的链式求导,梯度会不断变小,可能会出现梯度消失,梯度消失后权重无法更新,影响到网络的性能。
常规网络希望通过训练能拟合到目标函数;ResNet转换目标转为学习目标函数和当前拟合结果的残差,训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不下降。 使用残差网络时,根据y=F(X)+X,误差为E ,残差网络,不容易由于连乘出现梯度消失。
(计算反向传播的梯度:Back Propagation(梯度反向传播)实例讲解 - 知乎 (zhihu.com))
计算反向梯度:
损失函数:(yhat表示预测值)
更新的梯度时计算梯度:
以残差网络第l+1层为例:
损失为:
更新梯度时包括两个部分:
常见的残差单元如下:
实现结构:
ConvBNLayer:卷积,批归一化和激活组成 (以上图b为例,ConvBNLayer是图上蓝色部分)
BottleneckBlock:如上图256-d所示,卷积层部分由三个ConvBNLayer组成,如果第二层3x3卷积的输出结果和原图的尺寸不同,则使用1x1卷积调整
ResNet-50网络:50表示有50层网络
小结:
- 输入X通过跨层连接,能更好向后传播梯度,不易出现梯度消失问题。
- 残差连接有助于网络收敛,跳跃连接允许信息直接在网络层中传递。
- 残差网络选择ReLU函数作为激活函数,它在X>0区间有恒定的倒数也可以减轻梯度消失的问题。