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

3.2.1 少量数学知识

这里使用数学方法表示梯度下降法。首先,我们使用良好定义的老式数学符号重写均方误差损失函数。

如果你不熟悉这个符号,那么只需要知道符号Σ表示“求和”的含义即可。同样,公式里的m代表“样本的数量”。如果使用自然语言表示,则可以将这个公式读作:m个样本的误差平方和除以样本数的平均值。

别忘了这里的x和y值都是常数——它们分别表示输入样本变量和标签的取值。由于样本的数量不会改变,m也是一个常数。由于我们暂时把b固定为0,所以b也是常数。虽然我们会在不久之后重新引入变量b,但是目前上述公式中唯一能够发生变化的值就是w。

现在计算权重w关于损失函数L的梯度,也称为“函数L关于变量w的导数”。如果你还记得在学校学过的微积分,那就能够自己计算出这个导数值。如果不记得也没有关系,已经有人算出来了:

损失函数的导函数与损失函数自身有点类似,只不过导函数没有二次幂,而且求和式的每个加项都乘上了x,然后再对求和结果乘以2。我们可以把w的任意值代入上述公式,然后得到这一点的梯度值。

下面是转换成代码后的计算公式,这里按照约定将b设置为0。

既然已经有了一个计算梯度的函数,那就让我们通过重写train()函数的方式来实现梯度下降法。