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

2.4 小结

在前两章中,我们讨论了很多知识,我还介绍了很多新术语。让我们来回顾一下吧。

在这一章中,我们编写了第一个监督学习程序。监督学习系统从样本数据中学习,每个样本由一个输入变量和一个标签组成。在我们的应用实例中,输入变量是座位预订的数量,标签是比萨的销量。

监督学习通过使用一个数学函数(通常称为数学模型)来拟合样本数据。在我们的第一个程序中,模型是由两个参数,即权重和偏置,确定的一条直线。用直线拟合样本数据的方法称为线性回归。

监督学习的第一个阶段是训练阶段,系统通过调整模型的参数来拟合样本数据。在这个搜索过程中,系统由损失函数来指导。该函数度量了当前的估计值与实际值之间的误差:损失越低,那么近似的准确率就越高。通常使用一个叫作均方误差的公式来计算这种损失。训练的结果是最优直线的权重和偏置,即系统能够找到的使得损失达到最小的参数。

在随后的监督学习的第二阶段,即预测阶段,我们使用在训练阶段获得的参数进行预测。预测阶段在参数化模型中输入未带标签的样本数据,然后输出关于该样本数据的标签值。例如,“今晚,你有望卖出42个比萨。”

对于在监督学习的训练和预测阶段,你可以将它们与编程的编译和运行阶段进行对比,从中找到它们之间的相似之处。训练阶段通常需要大量的样本数据和大量的计算,而预测阶段则十分便捷。即使在我们这样的小型程序中,train()函数也需要花费相当长的时间才能找到适合的参数,而predict()函数则是非常快速的乘法。

对于大型系统而言,训练和预测之间的差异会变得更加明显:训练一个语音识别系统可能需要数周时间,需要在多个GPU上处理数百万个音频文件。然后你就可以把这个系统部署到智能手机上,用它来预测单个样本的含义。

这一章有很多的知识。我保证不会再有哪一章会同时介绍这么多的新术语了。

从好的方面来说,在这一章中,我们从头开始编写了一个监督学习程序,这是一个相当大的成就。如今大多数机器学习软件,包括那些令人惊叹的深度学习系统,使用的都是监督学习。当然,这些系统比我们的比萨销量预测器要复杂得多。它们的学习样本可能是高分辨率的图片,而非一份座位预订清单;它们的模型可能不是只有两个参数的简单模型,而是包含成千上万个参数的复杂模型。尽管如此,它们仍然与我们的小型Python程序一样,具有相同的基本前提。

在下一章,我们将在这些前提的基础上介绍机器学习的一个最重要的算法。