上文讲到,毛虫与瓢虫的分类器,如果每次按照输入的新样本与原分类直线的误差进行斜率调整,都会导致一个严重的问题:似乎之前训练的样本带来的效果消失了,仅仅留下了最新样本带来的收益。这样的话,那么多样本还有什么意义呢?
所以,要找一个办法来规避这个问题。
其实方法非常简单,就是你别因为一个新样本变化那么大,只用以一个小比例来挪动一下斜率,向着好的方向走一点,那么每次一小步,成功一大步(好像是励志鸡汤文……),最终的结果会让你惊喜的。
所以,上文的例子中,斜率需要变化0.1167,实际你可以乘以一个比如0.1的学习率,仅仅变化0.01167,然后直接转向下一个训练样本。
这个用来调整步伐的小比例数值,就叫做学习率。学习率也算是个超参数,所谓超参数,就是你可以自己进行调整的参数,它既跟结果相关,又不是跟其它参数那样直接跟样本等数据相关。它类似于一个配置参数。
学习率的加入,好处就是单个样本(有的样本是具备破坏性的,比如说噪声样本,完全偏离正常数据,比如说一只长得像毛虫一样的瓢虫……也不排除是记录的时候搞错了)不会大幅影响结果数据,每一个样本仅仅是“推了一把”,让结果向着成功的方向挪了一步。这一步就算挪错了,只要总体方向没问题,那样本数OK的情况下,结果就是不错的。
机器学习就是这样,它需要大量的样本来训练你的模型,无论是一个线性模型,还是一个神经网络,然后通过这样的小步快跑训练方法,去训练出OK的权重参数。
概念很简单,我就不把书上的计算例子再照搬一遍了。不过思想很精巧。这门科学就是这样,有很多取巧的点,也有很多奇奇怪怪、但又精巧绝伦的算法。虽然每个算法目前为止都还没接触到智能的真相,更像是多项式拟合的变种,或者某些自然现象的参考模拟,但是人类在发展,每次迈开一小步,就离真相进了一步。探索的过程,是很美的。