写在前言: pyotrch优化器从源码的角度带你理解优化器的由来,实现,作用。
pytorch的优化器:管理并更新模型中可学习参数的值,使得模型输出更接近真是标签。
导数:函数在指定坐标轴上的变化率
方向导数:指定方向上的变化率
梯度:一个向量,方向为方向导数取得最大的方向
梯度下降法(Gradient Descent)
其中模型参数为θ,损失函数为J(θ),损失函数J(θ)关于参数θ的偏导数,学习率为α。
梯度下降法目前主要是三种方法:区别在于每次参数更新时计算的样本数量不同,批量梯度下降法(BGD,Batch Gradient Descent),随机梯度下降法(SGD, Stochastic Gradient Descent)及小批量梯度下降法(Mini-batch Gradient Descent)
批量梯度下降法BGD
假设训练样本总数为n,样本为,模型参数为θ,损失函数为J(θ),在第i对样本上损失函数关于参数的梯度,学习率为α,则使用BGD更新参数为:
由上式可以看出,每进行一次参数更新,需要计算整个数据样本集,因此导致批量梯度下降法的速度比较慢,尤其是数据集非常大的情况下,收敛速度会非常的慢,但是每次的下降方向为总体平均梯度,他得到的会是一个全局最优解。
随机梯度下降