,你知道自己想要预测或检测什么吗?你有足够的数据进行分析以建立预测模型吗?你有定义模型和训练模型所需的人员和工具吗?你已经有了统计或物理模型来作为一个预测基准吗?
这篇文章对你的人工智能和机器学习项目进行分解,讨论其各个部分所带来的影响,从而帮助你确定公司是否真正准备需要利用机器学习、深度学习或人工智能。
你拥有大量的数据
足够的相关数据是预测和特征识别的必要条件。有了它,你可能会成功;没有它,则注定失败。那么你需要多少数据呢?你尝试纳入模型的因素越多,所需要的数据就越多,无论你是在做普通的统计预测、机器学习还是深度学习。
以销售预测中常见的问题为例,比如,为了避免延迟交货,且不会占用太多金钱和现货货架空间,那么你下个月将在迈阿密出售多少海军蓝短袖衬衫?以及你需要在迈阿密店和亚特兰大仓库中储备多少存活?零售是强季节性行业,所以你需要从多年的历史数据中出有统计学意义的月度数据,从而修正月度销量波动,并建立一个年化趋势——这还只是一个标准的时间序列分析。机器学习比统计模型需要更多的数据,而深度学习模型是它的好几倍。
统计模型会分析你的全国连锁店在 5+ 年间的衬衫月销量,并使用这一数据来预测下个月的衬衫销量,可能有几十万(假设是 30 万)。然后你可以预测迈阿密的衬衫销量占全国销量的百分比(假设是 3%),并单独预测出蓝色短袖上衣销量所占衬衫性销量的百分比(假设是 1%)。该模型会指出,下个月蓝色短袖衬衫总销量的 90% 左右将售于迈阿密。你可以通过对比不同产品的年度同店销量来核实预测结果,分析它们之间的差异程度。
现在,假设你想要考虑一些外部因素,比如天气和流行趋势。短袖衬衫在热天或晴天时是不是比阴雨天时卖的更好?可能如此。你可以将历史气象数据纳入到你的模型中来做预测,虽然这样做有点笨拙,因为你需要做一个时间序列的统计模型,所以你可能会决定使用回归森林,顺便再试试其它 7 种回归机器学习模型,然后将每个模型测得的「cost」(一个归一化误差函数)与去年的实际结果相比较,从而找到最佳模型。
相比于去年段的海军蓝衬衫销量,下个月会更好还是更差?你可以看看海军蓝服装所有的月度销量,并预测出年度流行趋势,然后将其纳入到你的机器学习模型中。或者你可能需要来自时尚媒体方面的信息对模型进行手动校正。(「为以防万一,假设下月销量会提高 20%。」)
也许你想建立一个深度神经网络来完善这个模型。你可能会发现,每添加一个隐藏层,就可以将回归误差提高几个百分点,直到某一时刻,再添加隐藏层也无济于事,此后收益递减。这种情况可能是因为模式中没有更多的特征可供识别,或者更可能的原因是,已经没有足够多的数据来支持模型的深入改进。
你有足够的数据科学家
可能你已经注意到,单个人需要独自建立上面讨论的所有模型。其实不是这样,建模型不仅仅是把数据倒在漏斗中然后按个按钮这么简单。不管你使用哪种工具——尽管供应商可能对此会有要求,它需要经验、直觉、编程能力和良好的统计学背景,这样才能轻松驾驭机器学习,从而实现你的想法。
尤其是某些厂商往往声称,「任何人」或「任何业务角色」都可以使用商家预先训练过、可应用的机器学习模型。如果该模型正好可以解决手头的问题,这话不假,比如将正式的魁北克法语文本翻译为英语,但更常见的情况是,现有的训练过的机器学习模型并不适用于你的数据。既然你已经训练了模型,你就需要数据分析师和数据科学家来指导训练,这更像是一门艺术,而非工程或科学。
在招聘数据科学家时,最奇怪的事情之一就是对工作岗位的要求,尤其是与受聘者的实际技能相比。广告上经常说「招聘数据科学家。STEM 博士。20 年经验。」第一个怪事是,该领域的发展历程还未足 20 年。第二件怪事是,公司雇佣 26 岁的硕士毕业生——也即除学术界外没有任何工作经验,与 20 年经验的要求相去甚远——偏好那些已经有相关经验的人,因为他们担心高级人员太贵,尽管他们的要求是 20 年工作经验。是的,这很虚伪,且十之八九是非法的年龄歧视,但现实情况就是这个样子。
你跟踪或获得那些重要的因素
即使你有大量的数据和很多数据科学家,你也可能无法拥有包含所有相关变量的数据。以数据库术语的话说,你可能有大量的行,但缺少一些列。统计学上来说就是,你可能有无法解释的方差。
一些独立变量的测量(比如天气观测)很容易获得并被合并到数据集中,甚至可在事后被合并。其它一些变量的测量或获取过程可能较为困难,比如不切实际或成本高昂,即使你知道这些变量是什么。
举一个化学领域的例子。当你在铜上镀铅时,你可以测量氟硼酸镀液的温度和浓度,并记录阳极电压,但如果溶中没有适宜数量的肽链,那么你就不会得到很好的结果。如果你没有称量放入溶液中的肽链,就无法知道这种关键催化剂的剂量,那么你将无法使用其它变量来解释电镀质量的变化。
你有清理和转换数据的方法
数据几乎总是那么嘈杂。测量过程可能会丢失一个或多个值;单个值可能会超出范围,或与同一计量过程中的其它值不相称;电子测量可能由于电噪声而变得不准确;回答问题的人可能并不理解问题本身,或是编造答案;诸如此类。
在任何分析过程中,数据过滤步骤通常需要消耗最多设置时间——是根据我的经验,它占到总分析时间的 80% 到 90%。有些公司在它们的 ETL(提取、转换和加载)过程中清理数据,这样分析师应该永远都看到不良数据点了,而其它公司则将数据与 ETL(以及一步的转换步骤)过程放在数据仓库或数据湖中。这意味着,即使是最容易过滤掉的脏数据也会被保存下来,理论上,过滤器和转换步骤需要随着时间的推移而进行改进。
即使是过滤后的精确数据可能也需要在分析前做进一步的转换。与统计学方法一样,只有当每种可能的状态都有相似的行数时,机器学习模型的效果才最好,这意味着,那些最受欢迎的状态数可能会由于随机抽样而减少;同样,当所有变量的范围都被标准化后,机器学习模型才能达到最佳效果。
例如在微软的一篇博文中,微软小娜分析了特朗普和克林顿的竞选捐款,说明了准备机器学习数据集的方式创建标签、处理数据、设计附加功能以及清洗数据。这种分析用 SQL 和 R 语言做了几个转换,以确定与克林顿或特朗普相关的各种委员会和竞选资金,并基于捐赠者的姓名来确定他们的性别,以及纠正拼写错误,并修复类之间的不平衡性(数据集中有 94% 都是克林顿的捐款,且大部分是小额捐款)。
你已经对数据做了统计分析
在分析数据和解决问题时,最应该避免的就是一个劲地往前冲。在你能够弄清楚发生的事情及其原因之前,你需要退后一步,看一看所有的变量及其相互之间的关系。
探索性的数据分析可以快速显示出所有变量的范围和分布,比如变量对是趋向于彼此依赖还是各自独立、簇位于何处,或哪些地方可能会有离群值。当你的变量高度相关,往往减少分析过程中的某个变量是很有用的,或进行一些类似于逐步多元线性回归的方法来确定最佳的变量选择。并不是说最终模型是线性的,在引入困难问题之前,尝试一些简单的线性模型很有用;如果你的模型条件太多,那么你可以以一个超定组(overdetermined system)收尾。
你测试许多方法来找到最佳模型
对于一个给定的数据集,找到最佳模式的方法只有一种全部试一遍。如果你的建模对象之前已经有很多人做过,但仍具挑战性,比如摄影特征识别和语言识别,你可能不由得只想尝试大赛中的「最佳」模型,但不幸的是,那些模型往往是最为计算密集型的深度学习模型,比如图像识别需要卷积层,语音识别需要长短期记忆层(LSTM)。如果你需要训练那些深度神经网络,你可能需要比日常办公所需的更多的计算能力。
你有足够的计算能力来训练深度学习模型
你的数据集越大,你的深度学习模型就需要越多的层,训练神经网络的时间也就越多。拥有大量的数据可以帮助你训练出一个更好的模型,层数多可以帮助你识别更多特征,但它们也会由于训练时间的增加而对你产生不利的影响。你可能等不了一年的时间来训练每一个模型;一周是比较合理的,特别是因为你将很有可能需要调整几十次模型。
解决训练时间问题的一个方法是使用通用图形处理器(GPGPU),比如使用英伟达公司生产的芯片,来做有关神经网络层的向量和矩阵计算(也称为线性代数)。相比于仅仅使用一张 CPU,使用一张 GPU 和一个 CPU K80 往往可以提升 5 到 10 倍的训练速度,如果你能将整个网络的「核(kernel)」输入到 GPU 的本地存储器中的话,而如果使用一张 P100 GPU,则可以将训练速度提升 100 倍。
在一张 GPU+一张 CPU 的组合之外,你还可以建立多个 CPU 和 GPU 的协调网络,以便在更短的时间内解决更大的问题。除非你全年都在训练深度学习模型,且有一个巨大的资本预算,否则你会发现,租赁云端 GPU 的使用时间会是性价比最高的选择。一些深度学习框架,包括 CNTK,MXNet 和 TensorFlo,支持 CPU 和 GPU 的并行计算,对于有着适宜性能 GPU 的大型虚拟机(virtual machine,VM)网络来说,它们已被证明拥有合理的缩放系数(在一个测试中大约为 85%)。你可以找到这些框架,并且它们正越来越多地被安装到由主要云提供商上支持的 GPU 虚拟机中。
你的机器学习模型优于你的统计模型
简单的统计模型为你的机器学习和深度学习项目奠定了基础。如果你不能提升一个给定的模型的性能,那么你就应该对其进行调整或尝试不同方法。一旦你知道你在做什么,你就可以在一个超参数优化算法的控制下,为许多模型设置训练参数,然后用最好的结果指导你的下一步行动。
你可以部署预测模型
最终,你将希望实时应用你所训练的模型。预测模型可以运行在服务器、云端、个人计算机或电话上,这取决于应用程序的不同需要。深度学习框架提供了各种选项来将模型嵌入到网页和移动应用程序中。亚马逊、谷歌和微软都是通过生产能理解语音的消费级设备和智能手机应用程序来证明其实用性。
你能够定期更新你的模型
如果你已经利用自己的数据训练好了模型,你会发现该模型的误差率(假阳性和真阴性)会随着时间的推移而增加。基本上,这是因为数据会随着时间的推移而漂移你的销售模型、竞争对手、风格和经济都会改变。为了适应这种影响,大多数深度学习框架都有一个选项,可以在新数据上对旧模型进行再训练,并用新模型替换预测服务。如果你每月都这样做,应该能够保证你不会受到数据漂移的影响。如果你不能,那么你的旧模型最终将变得不足为靠。
回到本文开头的那些问题,你知道自己想要预测或检测什么吗?你有足够的数据进行分析以建立预测模型吗?你有定义模型和训练模型所需的人员和工具吗?你已经有统计或物理模型来作为一个预测基准吗?
如果已万事俱备,那你还在等什么?