一、白话解释
梯度其实就是导数,除了用符号求导也可以用近似求导:
然后更新w=w-学习率*导数
反向传播就是链式求导
向前计算:对每个节点求偏导
在前向传播的时候,进行一次前向计算的时候就可以把每一条线的偏导数都知道
前向传播和反向传播是交替进行的
二、反向传播
反向传播全称误差反向传播算法,其核心思想是通过链式法则(Chain Rule)将预测误差从输出层逐层反向传递至输入层,从而计算损失函数对每个参数的梯度。这些梯度随后被用于参数更新(如梯度下降法),以最小化模型预测误差。
步骤
1.前向传播
某层神经元加权输入再激活输出
2.计算损失
比较预测输出与真实标签,计算损失值(均方误差、交叉熵)
3.反向传播
从输出层开始,计算损失对输出的梯度也就是损失对激活输出求导,然后逐层反向传播,利用链式求导法则计算各层参数的梯度(导数)。
4.参数更新
用梯度下降法进行更新参数
示例:
比如计算某神经元的误差:
然后修改权重:
PyTorch主要使用符号微分,因为有计算简化,这样计算量会小很多。