这是我在对比softmax回归和线性回归偏导时的一个疑问,看到知乎上有一个人同样的问题,问题链接为:https://www.zhihu.com/question/263929081。
原回答里,我非常认可的一个回答是:
我的理解是这两种看法都是正确的,分别衍生出不同的优化方法。首先是除以梯度,这是利用了泰勒展开式,从导数的数学公式中进行推导,最后得到的更新w的值的公式。由这个角度,之前是有提出相关的优化算法的,比如牛顿法,就是利用前二阶导数进行计算的。在这种方法中,就没有学习率这个概念,有的只是目标函数值与实际函数值的差这个概念(也就是loss, 在我看来)。其相应的表达式大体上可写成:
wnew=wold+Loss/∂Loss∂ww_{new} = w_{old} + Loss / \frac {\partial Loss}{\partial w}w_{new} = w_{old} + Loss / \frac {\partial Loss}{\partial w}
第二种是乘以梯度,也就是梯度下降法。在我看来,该方法更多的是一个启发式算法(也就是灵光一闪的那种,没有数学公式能证明其能到最优解(我不太清楚这个)), 是直接利用了梯度的物理意义(w按梯度变化,则loss增加)。根据该物理意义,我们能很直接地写出更新公式:
wnew=wold−lr×∂Loss∂ww_{new} = w_{old} - lr \times \frac {\partial Loss} {\partial w}w_{new} = w_{old} - lr \times \frac {\partial Loss} {\partial w}
。而在该式中,才存在学习率这个说法(相应的没有loss),其代表的是每次更新时的距离。目前,由于利用泰勒展开式的一些优化方法(即第一种方法),相比于梯度下降法(即第二种方法),计算量显得十分巨大,故而现在大家都普遍使用的是梯度下降法(在我看来)。作者:hekko hello
我对此的理解是,当我们认为应该是减去学习率与偏导数的倒数之积的时候,是代入了导数的概念(几何意义),导数就是切片的图形的斜率,也就是k = ▲y / ▲x
,因此就认为想要更新▲x,就有▲x = lr / k = lr * ▲x / ▲y
,因此就更新了。理论可行,但是在实际操作中,我们将之前3.2的代码中梯度下降的手动实现的代码,从param -= lr * param.grad /batch_size
更改为param -= lr * batch_size /param.grad
,跑出来的结果是:
epoch 1, loss 17.067520
epoch 2, loss 12.588651
epoch 3, loss 35.118847
time 0.11303 sec
可以看到结果越来越大了,因为在越趋近于极小值的地方,梯度会越来越小,同时它的倒数会越来越大,出现这种结果,我们继续训练下去也无济于事,因为我们已经错过了极小值。自此,就可以理解梯度下降法:假如我们正在向最小值迈步,如果此时梯度较大,那就提示我们可以迈的步子大一点,因为距离极值还有些距离(梯度不能骤变);如果梯度较小,那就提示我们,需要注意,极值就在附近,小心更新权重,避免错过极值。
以上,是全部内容,感谢批评指正。
标签:Loss,partial,导数,loss,梯度,之积,法中,lr From: https://www.cnblogs.com/zcry/p/18049667