2.3 添加偏置
看看我们刚才画的图。我们的直线不是最好的拟合函数,对吧?完美拟合直线的斜率会更小,而且不会经过原点。它在“比萨”轴上的数值10左右与“比萨”轴相交。
到目前为止,我们一直强迫这条直线通过原点以保证数学模型尽可能简单。现在我们该取消这个限制了。为了绘制一条不受经过原点约束的直线,我们需要在模型中添加一个参数:
你可能会有种似曾相识的感觉。上面的方程就是经典的线性函数,你们可能在八年级学过。大多数人都记得y=m*x+b,其中m是斜率,b是y轴的截距。我们在这里使用机器学习术语,称w为权重,称b为偏置。
直观地说,偏置度量了图表中直线沿垂直方向的“移动量”。如果偏置是0,那么我们就回到了之前的情况,一条经过原点的直线。如果不是,那么该直线与y轴相交的值就为b。
下面是整个线性回归的程序代码,更新后使用带有两个参数的新模型。最左边的小箭头表示该行代码发生了更改:
大多数的代码行都发生了更改,但是所有这些更改都是由于引入b而发生的。最显著的更改就是使用新模型的predict()和train()函数,它们调整b的方式与调整w的方式相同,即增加或减少它并关注损失由此发生的变化。我不知道怎样同时调整w和b,所以采用了大家都喜欢的临时暴力法:我只是对if添加了几个新分支。让我们尝试一下这个程序。此时train()函数需要更长的时间来收敛,但最终它会获得成功:
如果把数据和直线画出来,那么可以得到如下结果:
现在我们真的做到了!这条线更接近于样本数据,它在y轴上的值等于b。更好的是,现在的最终损失比以前更低,这就意味着能够比以前更加准确地预测比萨销量了。Roberto会很高兴的!
对于这个程序的第一个版本来说,我们做了很多工作。现在让我们喘口气,退一步,看看更大的图景吧。
“超参数”?
在监督学习中,训练阶段返回一组我们可以在模型中使用的值——在我们的应用实例中,这些值是可以在直线方程中使用的权重和偏置。这些值称为“参数”。但这种称谓对我们程序员来说十分不便,因为我们已经使用“参数”这个名称来表示一些不同的对象。我们会很容易混淆参数(如w和b)和函数(如train())中的参数。
为了避免混淆,机器学习实践者使用另一种名称来表示train()函数中的参数,称之为超参数,意思是“更高水平上的参数”。回顾一下,我们可以设置诸如迭代次数和学习率等超参数,因此,train()函数可以找到如w和b这样的参数。