动手深度学习note-5(ResNet)
Deep Residual Learning for Image Recognition
模型原理
公式推导
从CNN
出发
假设计算过程简化为$y=f(x)={} {} {} + u $,一次权重参数更新的过程为:
\[ 求解梯度:\frac{\partial{y}}{\partial{w}} \]
\[ w=w-\alpha \frac{\partial{y}}{\partial{w}}\tag{1} \]
参数传递到下一层神经网络计算梯度时: \[ y'=g(f(x)) \]
\[ 求解梯度: \frac{\partial{y'}}{\partial{w}}=\frac{\partial{y'}}{\partial{y}}\frac{\partial{y}}{\partial{w}}\tag{2} \]
观察式子从\((1)\)到\((2)\),传统的CNN的梯度由于是相乘的关系,因而梯度会越来越小,直至梯度消失,模型无法继续执行参数更新,因而无法训练较深的神经网络
ResNet
的解决方法
同样以模型参数传递到第二层网络为例: \[ y'=g(f(x))+f(x) \]
\[ 求解梯度:\frac{\partial{y'}}{\partial{w}}=\frac{\partial{y'}}{\partial{y}}\frac{\partial{y}}{\partial{w}}+f'(x)\tag{2'} \]
观察式子\((2')\),排除从一开始梯度就不存在的极端情况,即使在训练中某一层出现了梯度消失的情况,即\(\frac{\partial{y'}}{\partial{y}}\frac{\partial{y}}{\partial{w}}=0\),梯度中也包含着上一层中的\(f'(x)\),而一层层往上溯源,\(f'(x) \not =
0\),也就是说,使用ResNet
不会出现梯度消失的情况,这样有效解决模型深度问题。
代码实现
下载本次实验的数据集,将数据集储存到Google
Drive中的/Dataset/leaves.zip
实现残差连接
1 |
|
实现残差块
1 |
|
构建ResNet50
1 |
|