反向传播算法
反向传播算法是误差反向传播算法的简称,是深度学习中用于训练神经网络的基本算法,其原理是通过链式法则计算损失函数对每个权重参数或偏置项的偏导数,然后利用优化算法逐层反向更新参数,使损失函数收敛,从而构建准确的模型结构。
简单来说,反向传播算法可以按以下步骤进行:
1. 前向传播:将样本输入神经网络,逐层计算将数据传递到输出层,得到网络的实际输出结果。
2. 反向计算误差项:根据实际输出结果和期望输出结果之间的差距(损失函数),利用链式法则计算出每个神经元的误差项,表示损失函数对神经元输出值的偏导数。
3. 参数更新:根据优化算法计算每个神经元参数的梯度,通过不断调整网络中的参数,使损失函数逐渐减小,达到模型收敛的目的。
梯度下降算法
目的是求函数的极小值点,如在最小化损失函数或是线性回归学习中都要用到梯度下降算法。
梯度下降算法可以用来模拟一个人在浓雾覆盖的山上寻找下山路的过程。该算法的基本思想是根据当前位置的梯度方向(即最陡峭的方向),一步步地更新当前位置,直到到达最低点。
简单来说,梯度下降算法可以按以下步骤进行:
1. 初始化:将当前位置设置为山上的起点。
2. 计算梯度:根据当前位置计算其周围环境的梯度。梯度表示当前位置的最陡峭方向。
3. 更新位置:朝着梯度的反方向(即下降方向)走一步,更新当前位置。
4. 重复步骤2和步骤3,直到达到最低点(即“找到山谷”)或者达到了预设的停止条件。
不断计算梯度并朝着下降方向更新位置,通过不断迭代,最终可以找到山谷,达到下山的目的。
需要注意的是,梯度下降算法的效果受到起点的选择、步长的设定以及停止条件的设置等影响。在实际应用中,需要根据具体情况进行调整和优化,以获得更好的结果。
梯度下降算法是求损失函数最小值,反向传播算法是求解梯度
在pytorch训练神经网络中常见的三步骤:
self.optimizer.zero_grad() #梯度置零,即是把loss关于weight的导数变成0 loss.backward() #反向传播计算得到每个参数的梯度值 self.optimizer.step() #通过梯度下降执行一步参数更新
以深度学习中有监督学习网络为例,对于每一个训练样本都有输入值Xk(k=1,...,n---n为样本个数)和对应的理想值Yk(k=1,...,n),Yk也叫标记值(Label)。每一个输入值Xk经过前向传播得到的最终输出结果为预测值。为了评估一个模型,通常定义一个损失函数(Loss Function)(也可称为目标函数)来评估模型的损失,即预测值与理想值之间的差距,常用的损失函数有均方根误差、交叉熵等等。
均方差损失函数(用于预测)---MSE越小,表明模型更好
交叉熵损失函数(用于分类:度量两个概率分布间的差异性)
二分类情况下:
yi-----表示样本i的label,正类为 1,负类为0 pi-----表示样本i预测为正类的概率
多分类情况下:
M-----类别的数量 yic-----符号函数,样本i的真实类别等于C取1 ,否则取0
pic-----观测样本i属于类别C的预测概率
参考文章: