在经过简化的典型数据科学工作流中,数据科学家们主要负责准备机器学习所需数据、使用训练数据集进行算法训练、针对独立的验证数据集评估算法性能、完善数据准备与算法以重新训练,最后将算法打包进一套生产级部署框架当中。
AWS为机器学习场景下的服务提供多种抽象级别。在抽象级最高的层级上,AWS AI服务(例如Amazon Polly、Amazon Lex、Comprehend以及Amazon Rekognition)负责提供经过预训练的API终端节点,用于根据输入数据进行推理。而在抽象服务的中间层内,平台服务(例如Amazon Machine Learning、Amazon SageMaker、EMR with SParkML以及用于数据标记的Mechanical Turk)负责在加快算法开发的同时,帮助用户摆脱由基础资源管理带来的日常负担。最后,抽象度最低的层级涵盖各类框架与基础设施(包括TensorFlow、PyTorch与Apache MXNet等经过预配置的流行框架),结合CPU与GPU优化机制共同支撑起AWS Deep Learning AMI功能。具体选择哪一种机器学习堆栈,主要取决于您当前面对的业务问题、以及开发团队的知识与经验水平。
在本课程中,我们无法具体介绍数据科学算法的开发细节,下面仅简单解释目前机器学习领域几种常见的大数据准备、捕捉与使用方法。
在大多数业务环境中,数据被存储在集中存储库或者分布在多个存储库内。此存储库可以是Amazon S3、EMR等Hadoop框架、RDS等关系数据库、DynamoDB等NoSQL数据库数据仓库或者多种存储方案的组合(例如与Hive相兼容的元存储)。但在业务流程中直接收集到的原始数据往往太过粗糙,必须经过清洗才能供机器学习应用使用。大多数机器学习算法都会对数据素材提出相当严格的要求,例如避免null值。对数据科学家们来说,日常工作中的大部分内容正是为机器学习模型准备数据。相关最佳实践建议我们开发出健壮且自动化的数据管道,将企业收集到的原始数据聚合起来,并转换为可支持机器学习模型的数据集。数据集的不断扩展往往推动模型性能达到新的高度,具体扩展方法则包括数据列规范化或组合、建立标记化文本语料库、或者将视频预处理为单一帧以进行特征工程等等。
在AWS上,Glue作业、EMR以及Data Pipeline数据管道等托管ETL服务显著减少了数据转换负担,同时为用户直接提供多步骤业务流程编排中所必需的服务器管理方案。通过将AWS基础设施视为可直接调用的代码,同时配合AWS API终端节点进行服务交付,数据科学家们得以轻松开发出清洗管道并实现版本控制,也能在此期间总结出有助于其他数据科学家的最佳实践与心得。
通过顺序管道进行分段、清洗与特征工程,将帮助我们极大提升模型的开发速度。对于仅面向较小型数据集的特征工程任务相比,面对大规模原始数据集的特征工程往往要求我们首先对该数据集进行数据采样,进而整理出一套更加清洁的小型数据集。根据良好架构原则中提出的性能效率支柱,我们应针对管道中的不同阶段采用适当的实例类型。对于数据科学家们来说,在处理ETL清洗管道的终端一侧,最好的作法是将清洗后的数据存储在独立的数据存储当中,例如Amazon S3。这些面向机器学习模型开发场景的独立数据存储方案能够保证模型训练与模型运行之间的数据瑟,进而为评估模型改进提供稳定的底层基准。而另一项良好架构支柱——成本优化支柱——则建议我们将计算与存储资源区分开来,借此实现成本优化。
为了解决实际业务问题,我们需要部署机器学习模型,并引导其利用新数据完成推理。相关最佳实践要求在原始数据存储中添加机器学习上下文的额外标记数据,这项操作被称为“数据增强”。数据增强的具体操作,包括记录新数据、推理以及实际数据点中的“基本事实(ground truth)”。例如,我们可以借此推理某些“最佳”广告能否面向特定客户群体提高销售转换率。在通过重复训练衡量并改善模型性能方面,基本事实数据具有无可比拟的价值。但在某些情况下,我们往往无法在特定时间段内获取基本事实,因此需要采取将推理与结果相关联的跟踪方法。
