4.1 有监督学习简介
本书主要介绍有监督学习问题。在这类问题中,我们的目标是依据某个带标注信息的输入数据集(即其中的每个样本都标注了真实的或期望的输出)去训练一个推断模型。该模型应能覆盖一个数据集,并可对不存在于初始训练集中的新样本的输出进行预测。
推断模型即运用到数据上的一系列数学运算。具体的运算步骤是通过代码设置的,并由用于求解某个给定问题的模型确定。模型确定后,构成模型的运算也就固定了。在各运算内部,有一些与其定义相关的数值,如“乘以3”、“加2”。这些值都是模型的参数,且在训练过程中需要不断更新,以使模型能够学习,并对其输出进行调整。
虽然不同的推断模型在所使用的运算的数量、运算的组合方式以及所使用的参数数量上千差万别,但对于训练,我们始终可采用相同的一般结构:
数据流图的高层、通用训练闭环
我们创建了一个训练闭环,它具有如下功能。
首先对模型参数进行初始化。通常采用对参数随机赋值的方法,但对于比较简单的模型,也可以将各参数的初值均设为0。
读取训练数据(包括每个数据样本及其期望输出)。通常人们会在这些数据送入模型之前,随机打乱样本的次序。
在训练数据上执行推断模型。这样,在当前模型参数配置下,每个训练样本都会得到一个输出值。
计算损失。损失是一个能够刻画模型在最后一步得到的输出与来自训练集的期望输出之间差距的概括性指标。损失函数有多种类型,本书会陆续进行介绍。
调整模型参数。这一步对应于实际的学习过程。给定损失函数,学习的目的在于通过大量训练步骤改善各参数的值,从而将损失最小化。最常见的策略是使用梯度下降算法(接下来的一节中将对该算法进行介绍)。
上述闭环会依据所需的学习速率、所给定的模型及其输入数据,通过大量循环不断重复上述过程。
当训练结束后,便进入评估阶段。在这一阶段中,我们需要对一个同样含有期望输出信息的不同测试集依据模型进行推断,并评估模型在该数据集上的损失。该测试集中包含了何种样本,模型是预先无法获悉的。通过评估,可以了解到所训练的模型在训练集之外的推广能力。一种常见的方法是将原始数据集一分为二,将70%的样本用于训练,其余30%的样本用于评估。
下面利用上述结构为模型训练和评估定义一个通用的代码框架:
以上便是模型训练和评估的基本代码框架。首先需要对模型参数进行初始化;然后为每个训练闭环中的运算定义一个方法:读取训练数据(inputs方法),计算推断模型(inference方法),计算相对期望输出的损失(loss方法),调整模型参数(train方法),评估训练得到的模型(evaluate方法);之后,启动一个会话对象,并运行训练闭环。在接下来的几节中,将针对不同类型的推断模型为这些模板方法填充所需的代码。
当对模型的响应满意后,便可将精力放在模型导出,以及用它对所需要使用的数据进行推断上。例如为冰激凌App用户推荐不同口味的冰激凌。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论