2.4 模型训练
在建模后需要进行训练,下面介绍与模型训练紧密相关的数据收集和训练过程,并以Tensorflow框架下的实例讲解训练过程可视化、模型保存和应用。
2.4.1 模型训练常见术语
A/B测试(A/B testing)通过比较两种或多种技术的效果进行选择或验证,还可从统计的角度,确认不同差异是否显著。
基准(baseline)是模型效果比较的参考点,量化模型的最低预期指标。
批次(batch)是模型训练时一次迭代中使用的样本集合的数量。
批次数量(batch size)是一个批次中样本的数量。
周期(epoch)是指整个数据集(所有样本)的一次完整训练。
检查点(checkpoint)用于训练过程中定时保存模型信息,使训练在被中止之后,还可以从上一检查点开始重新继续训练。
收敛(convergence)是指在经过一定次数的训练迭代之后,模型损失不再发生变化或变化幅度很小时,说明用当前训练样本已经无法改进模型,此时就认为模型达到收敛状态。
凸函数(convex function)是指函数形状上类似于字母U。通常只有一个局部最低点,该点也是全局最低点。凸优化(convex optimization)是指使用数学方法(例如梯度下降法)寻找凸函数最(极)小值的过程。
决策边界(decision boundary)是指分类模型中各类别之间的分界线。
泛化(generalization)是模型对全新数据做出正确预测结果的能力。
梯度下降法(gradient descent)是一种求解最小化模型损失和模型参数的方法,以迭代的方式调整参数,逐渐找到权重参数和模型偏差的最佳组合,从而得到损失最低时的模型参数。
2.4.2 训练数据收集
在机器学习方面,用于训练的数据对于整个机器学习进程的重要性是不言而喻的,而数据问题涉及收集、存储、表示以及规模和错误率等多个方面。收集数据的途径有以下几种。
(1)从专业数据公司购买
数据公司有专门的人员对数据进行搜集、整理和维护,所以数据质量一般比较高。如果企业资金实力雄厚,可以采用此种方式。不同的数据价格不一,一般按照数据的数量和种类计费。此外,在某些领域中,数据更新可能会较慢,虽然数据质量较高,但是可用的数据集可能比较旧,如果模型训练要求一定的时效性,这些数据没有太大意义。
(2)免费的公开数据
免费且直接可用的数据要么难找,要么数据量太小。例如,目前的中文自然语言处理方面的数据大多是英文,中文方面的数据较少。现有的免费数据可能不符合需求,例如做机器翻译,需要中英文文本对照,而此类公开数据较少。
目前互联网上公开的数据非常丰富,面对如此广阔的数据海洋,可以编写爬虫从网络上爬取特定的内容用于研究(需要注意版权),目前爬虫实现基本上以Python语言为主,爬虫收集数据主要步骤分为网页采集、网页解析、数据存储等。为了提高爬虫的效率,程序的运行还可采用多进程、多线程、协程和分布式等方式。
(3)系统生成、人工标记和交换
手动生成数据主要包括人工标记、引导用户自发参与等,如果数据量较少时可以由本公司开发/测试人员进行手工标记,但大部分机器学习的项目所需要的数据量都很大,此时可以采用众包或外包的方式将标记任务交给专业从事数据采集或标记的企业或个人,例如,著名的ImageNet图片集就是以众包的方式进行人工标记的。如果采用众包的方式,就需要对标记结果或生成的数据内容进行验证和校验。
引导用户自发参与是指在产品中设计相应的日志记录或操作步骤,引导用户主动将数据结果反馈给系统,例如谷歌在搜索、翻译等过程中均有向用户征求反馈的操作。此外,某些社交网站会给用户提供好友分组或标签标记的功能,而这些标签就是用户的标记,用户通常不知道他们的行为在为这些公司提供免费的标记服务。还有一类引导用户标记的方法是采用“数据陷阱”的方式进行,例如某些信用卡套现的应用,其用户的特征正是信用卡公司所需要的。此外很多像Tesla这样的车企会采集大量汽车的行驶数据,这些数据就可以用来做自动驾驶的训练。
此外还可与大企业合作,通过技术换取数据,特别是在传统行业中,很多企业并不具备数据分析的能力,但是它们拥有大量行业相关的数据。数据分析公司可以与之合作,通过向这些企业提供技术服务来交换经过脱敏的数据。