“梯度下降”,刚接触这个词时,我总是往“降低难度”或“降低维度”方面去理解,因为有个“下降”的动词在里面。而实际上,“下降”在这里面的含义是“与导数相反的方向”的意思。
我们假设上面这个图形的函数是\(y = (x-1)^2+0.001\),则\(y’_x = 2(x-1)\)。
在点B上,这个函数的切线(绿色)是指向下方的(Y轴方向),所以是个负数:假设\(X_B\) = 0.1, 则\(y’ = 2*(0.1-1) = -1.8\)。
在F点上,切线(绿色)向上:假设\(X_F\) = 1.5, 则\(y’ = 2*(1.5-1) = 1\),是个正数。
而在标准的权重更新公式里:
\[w = w – η*\Delta{w}\]
\[b = b – η*\Delta{b}\]
可以看到无论是w还是b,都是用上一次的权重值减去步长\(\times\)梯度。
当梯度(y')是正数时,即点F的位置,\(x = x - η*1\),切线向上,x值会变小,权重值会从右侧向x=1靠近;
当梯度(y')是负数时,亦即点B的位置,切线向下,x值会变大:\(x = x - η*(-1.8) = x + η*1.8\),最终运算结果变成了加法,与切线方向相反,权重值会从左侧向x=1靠近。
所以总体上看,无论x在极值的左侧还是右侧,都会向中间(坡底)靠拢,确实是“下降”了。
不知不觉中,我们已经接触到了第一个神经网络中的超参η,即步长值,这个值对于神经网络训练非常重要,决定了训练时间的长短。
曲线和弦线的关系?我们先知道了A点的切线的方向,亦即黄色的线,但是不知道长度
我们有步长值η,以及梯度下降公式\(X_1 = X_0 – η * dx\)
因为\(y'_x的导数dx = 2(X-1), η = 0.1, X_0 = 0.2, 于是有X_1 = X_0–0.1*2(X_0-1) = 0.36\),这就等同于我们知道了切线的长度,亦即绿色的线的长度和方向都确定了
然后我们可以画出红色的线(亦即弦线)
所以,弦线在这里面没啥用途,只是表示一个迭代跳跃的动作而已。实际的变化值已经由绿色的线定义好了。