TensorFlow机器学习(原书第2版)
上QQ阅读APP看书,第一时间看更新

4.6 正则化和训练测试集拆分

图4.7或许最好地描述了正则化的概念。在训练过程中,一个机器学习模型(M),对代价函数给定一些输入数据(X),训练过程探索参数空间(W),目标是最小化模型响应(预测)和实际训练输入值(X)之间的误差。代价被定义到函数MXW)。挑战在于,在训练和参数探索过程中,算法可能选择局部表现最优而全局表现较差的参数W。正则化可以通过惩罚较大的W权重值来影响这种选择,并将权重搜索范围保持在图4.7所示的最优区域(白色圆形区域)。

图4.7 回顾正则化的概念。训练过程中提供的输入数据(X)通过学习参数(W)与测量代价函数M(X,W)来学习参数(W),从而拟合为模型(M)。在训练过程中,你希望参数空间W(左上角)的探索集中在白色区域,远离灰色区域。正则化使这个结果成为可能

当模型在输入数据上欠拟合或者过拟合时,或者在训练期间权重搜索过程中需要一些辅助以惩罚参数空间中较大或者灰色的参数空间W时,你应该考虑使用正则化。你的高斯钟形曲线模型显示出较高的准确率,尽管它在呼叫量分布的头尾位置有误差。正则化有助于消除这些误差吗?

这可能与直觉不符,但是答案是否定的,基于四个概念:我们训练时的超参数、学习率、训练的迭代次数(epoch),以及清单4.4中musig的初始值。为了方便,我把它们拷贝到这里:

这是模型的超参数以及学得的参数。初始值非常重要,并不是凭空选择的。了解musig的最优值(分别是~27和~4.9)是很有帮助的,但是你并不知道。相反,你将它们设置为默认值(都是1)并通过1.5的学习率控制搜索步长。如果将学习率设置得过低(比如0.10.001),算法可能需要成千上万epoch的训练但仍然无法得到参数的最优值。将学习率设置为超过1.5(比如3.5),算法又将在某个特定的训练步骤中跳过最优值。

提示 尽管不能事先知道mu(均值)和sig(标准差)的值,但是可以通过肉眼观察并部分推导它们。在第27周附近是分布的峰值或均值。至于标准差,肉眼观察出大约为5很难,但并非不可能。标准差是每个单元与均值距离的测量。低的标准差意味着分布的头尾与均值更靠近。能够通过肉眼观察输入和期望值,并调整模型的初始参数,将大大节省你的时间和训练次数。

这种特殊情况下不需要正则化,因为你直观地观察了训练数据,可视化并归一化呼叫量为0到1之间的值,以便于学习。而且由于选择的模型适合数据,没有发生过拟合或欠拟合。在这种情况下,惩罚参数探索步骤将产生负面影响,可能会阻碍你更精确地拟合模型。

此外,考虑到数据的稀疏性,有些信息你只能通过可视化和执行探索性数据分析过程才能发现,将数据分割为训练/测试是不合理的,因为你的模型将丢失很多信息。假设你的70/30分割中去除了分布的尾部之外的部分,缺失信息会使你的模型看上去不是钟形曲线,而是直线或小型多项式曲线,从而学习了错误的模型,或者更糟,在错误的数据上学习了正确的模型,例如图4.2。训练/测试分割在这里没有意义。

值得欣慰!你已经训练了一个现实世界的回归模型,并且它在可用数据上有99%的准确率以及合理的误差。你帮助311开发了准确的季节性呼叫量预测器,帮助其预估需要多少座席来接听电话,并通过每周接听的呼叫量证明了它对社会的价值。你觉得机器学习和TensorFlow可以帮助完成这些任务吗?是的,它们做到了。

在第5章,我们将使用TensorFlow构建分类器,开发针对离散输出的强大预测能力。继续前进!