机器学习编程:从编码到深度学习
上QQ阅读APP看书,第一时间看更新

3.2.5 测试梯度下降法

这是双变量版本的梯度下降法代码,左边的小箭头标出了发生变化的内容:

gradient()函数现在会返回损失函数关于w和b的偏导数,这些梯度可以被train()用来同时更新w和b。我还增加了迭代次数,这是因为程序现在有两个变量需要调整,需要更长的时间来接近损失函数的最小值。

让我们比较一下这个新版本的程序与前一章程序之间的差别。首先运行较早版本的程序,这里使用了大量的迭代和相当低的lr(0.000 1),以获得精确的4位小数:

然后,运行新的基于梯度下降法的代码。经过20 000次迭代,我们得到:

在十分位的迭代值中具有更高的准确率。真不错!使用这个更快、更精确的学习器来预测比萨销量可能会暴殄天物。毕竟,没有人会买百分之一块的比萨。然而,这种额外的速度对于解决更高级的问题而言是至关重要的。

最后,我编写了一个快速可视化程序来绘制梯度下降法中旅行者的移动路径,也就是说从任意起点到达损失函数最小点的具体路径。现在你应该对梯度下降法有了一个直观的理解,但是没有什么更好的方式能够比得上可以观察它的动态变化,如下图所示:

徒步旅行者并没有选择去营地的最佳路线,这是因为她无法提前知道最佳路线。相反,她让损失函数的斜率指导她行走每一步。在两个方向上的突然改变之后,她终于到达了山谷的底部,沿着一条平缓的斜坡向下走到了营地。