误差的计算
![](https://file.jishuzhan.net/article/1740310064851324929/c69f790a747ac13fcc0a7af046822055.webp)
![](https://file.jishuzhan.net/article/1740310064851324929/93cb6a6671ab55554b6429f875b18f58.webp)
softmax
![](https://file.jishuzhan.net/article/1740310064851324929/810d931a8184e9c54a4cca93ea58b3a4.webp)
经过softmax处理后所有输出节点概率和为1
损失(激活函数)
![](https://file.jishuzhan.net/article/1740310064851324929/51d944bca01addd733acf25be5395768.webp)
多分类问题:输出只可能归于某一个类别,不可能同时归于多个类别。
误差的反向传播
![](https://file.jishuzhan.net/article/1740310064851324929/9c5b02094de05d938b46ee9dc24cf95d.webp)
求w的误差梯度
权值的更新
首先是更新 输出层和隐藏层之间的权重 。更新权重,我们首先需要知道损失梯度 ,损失梯度实际上是损失根据所需要的更新的权重求偏导 ,而要求解这个偏导,我们要通过链式法则来求解。成功求解损失梯度后,要通过梯度下降 的方法来更新我们的权重。这里的损失梯度前面的系数,我们称之为学习率 ,直观意义去理解实际上就是步长。
![](https://file.jishuzhan.net/article/1740310064851324929/5ea14593046b766f0fbeea145a6fc4da.webp)
这个参数是我们人为调整的,但是学习率不宜过大,也不易过小。过大可能会导致损失无法收敛,过小可能会导致损失收敛的速度过慢,或者会陷入局部最优解的问题中。因此学习率我们不能随意取值,需要通过后续不断地迭代,来获取最优学习率。
接着我们需要进一步更新我们的隐藏层和输入层之间的权重,对于这里的损失梯度,我们同样是通过链式法则得到损失梯度的表达式,过程基本与前面保持一致。但是这里有两个注意点,第一,这里通过链式法则最后得到的损失梯度的结果会用到我们前面更新过的权重,所以说反向传播的顺序是不可逆的。第二,对与隐藏层和输入层之间权重的更新是多个损失项更新的叠加。通过上述的推到过程,我们可以求得我们所需的损失梯度,得到损失梯度后,通过梯度下降,我们可以得到隐藏层和输入层之间更新后的权重。
至此,我们已经完成了通过误差的反向传播实现了一次完整的权重的更新。后面的过程就是在正向传播更新输出,然后再反向更新权重,循环迭代,直到损失收敛或者是达到设定的迭代次数,一次神经网络的训练完成。
![](https://file.jishuzhan.net/article/1740310064851324929/194086645fd04a2fd658d1322e1b63e1.webp)
优化器
使网络更快地得到收敛
![](https://file.jishuzhan.net/article/1740310064851324929/fdf04fa41231385dc85d36a79a91ae7d.webp)
![](https://file.jishuzhan.net/article/1740310064851324929/c3bb1560460e5edacbf7257d4c82a49d.webp)