做个简单假设,Loss函数的某一个参数的函数曲线是二次方程,其导数函数为 r = 2 ∗ w r = 2*w r=2∗w
按照斜率意义来看,要减去斜率倒数
降低LOSS需要将w1更新为w2,所以更新公式为 w = w − Δ L Δ w w = w - \frac{\Delta L}{\Delta w} w=w−ΔwΔL, Δ L \Delta L ΔL可以看成学习率。比如取0.01,斜率为 2 ∗ w 2* w 2∗w模拟如下
结果:
可以看到在第三次下降的时候,损失函数反而增大,并且w越过本该取的使LOSS最小的0值,沦为负值。
引起如此原因就是随着LOSS接近最小值,其对应的斜率变小,其倒数就变得越大,也就是说,越靠近最小值,调整幅度越大,关键时刻变得冒进起来。
替换成减去斜率
当我们将更新公式替换成 w = w − Δ L ∗ ( 2 ∗ w ) w = w - \Delta L * (2 * w) w=w−ΔL∗(2∗w)
def w_refesh_1(w):return w - (0.1 * (2 * w)) #唯一区别
结果:
可以看到损失函数越来越小,w也未过界。
也就是说,斜率越大,就越远离最小值,此时就可以稍微大胆点进行调整,越靠近最小值,斜率越小,调整幅度随之变小,关键时刻变得谨慎起来。