UCB Machine Learning Systems (Fall 2019) Machine Learning Lifecycle Note 3

1 minute read

Published:

因为前两门课更多的是做introduction, 所以这门课的第三节课才是第一节真正意义上的课程. 这门课的主要是目的是介绍Machine learning的生命周期(包括不限于模型开发, 模型训练以及推理). 并希望了解 1. 整个ML生命周期中的机遇与挑战. 2. 如果区分ML中的研究与工程.

Model Development

  • Data Collection & Cleaning & Visualization (Data Engineering)
    1. 判断数据源的潜力 Identify potential data sources
    2. 联合来自不同数据源的数据 Join data from different sources
    3. 处理缺省或者离群值 Handle missing or outlier values
    4. 绘制趋势以识别异常 Plot trends to identify anomalies

这里有一个小插曲, 之前lifeifei的弟子Andrej Karpathy在做演讲时提到: PhD阶段(学术界)下他会花费大多数睡眠时间在模型和算法的开发上, 但是在Tesle(工业界), 他会花费大多数时间在数据的清洗和处理上. 这也是为什么很多人会说: 数据科学家的80%时间都花在了数据的清洗上.

  • Feature Eng & Model Design & Training & Validation (Data Science)
    1. 建立信息丰富的特征方程 Building informative features functions
    2. 设计新的模型架构 Designing new model architectures
    3. 调整超参数 Tuning hyperparameters
    4. 评估预测准确性 Validate prediction accuracy

Training

模型训练的需求:

  1. 根据实时数据大规模训练模型
  2. 基于新的数据来retratin模型
  3. 自动的验证模型的准确性
  4. 管理模型的版本
  5. 需要最少的专业知识 针对这些需求,应运产生了一系列的新的工具和框架, 例如: Tensorflow, Pytorch, MXNet, Caffe, Caffe2等

模型热训练, 比如Stochastic Gradient Descent(SGD), 也就是随机梯度下降法 .

  1. 新的数据会使得模型的参数发生变化
  2. 基于已有的权重来更新模型参数而非随机生成. 这是迁移学习的一种形式,并且非常适用于新数据产生缓慢的场景. 但同时也会带来一些问题:

  3. 需要一种自适应更新学习率的方法. 2. 对于非凸优化问题, 会有局部最优解的问题. 3. 灾难性遗忘 (Catastrophic forgetting), 如果只训练新数据可能会降低旧数据的模型性能

模型微调(Fine Tuning)

使用较小的学习率来训练预训练或部分训练, 用于新数据集或预测任务的预训练模型。这个词在最近很火的预训练大语言模型中很常见,是指根据使用场景来调整模型的参数. 例如在电商场景下,将预训练好的GPT使用大量已有且准确的商品描述文本在进行微调后, 可以用来生成较为专业和准确的商品描述.

Inference

在突发负载(bursty load)下约 10 毫秒内做出预测, 这件事会随着神经网络的规模而更加复杂.因此需要新的机器学习算法和系统来解决.

一些工程上的启发和反馈

对于模型更新可以从两个角度出发实现:

  • 周期性(Periodically), 可以借助批处理来实现和验证 要注意的是, 周期性更新的缺点是会有一定的延迟, 但是优点是可以减少计算资源的使用.

  • 持续性(Periodically), 也就是当新数据到来时就进行更新 这样可以减少模型更新的延迟, 但是会增加计算资源的使用. 而且需要调节更新的频率, 以及更新的数据量.

特征更新 新的数据可能会产生新的feature, 比如新的数据包括额用户对每个类型网站的点击次数, 那么就需要将这些数据作为新的feature来更新模型, 帮助预测用户的行为.

此外, 模型本身也会对未来收集到的数据产生影响, 也就是说模型的更新也会影响到数据的收集. 这就是所谓的数据采集的反馈循环.这类问题可以归类为此Exploration – Exploitation Trade-off. 探索(Exploration)是指收集新的数据, 以便于更新模型. 开发(Exploitation)是指使用已有的模型来进行预测. 有一些已有算法缓解这个类问题, 例如: Thompson Sampling, Upper Confidence Bound(UCB), Epsilon Greedy等. 对于熟悉强化学习的同学来说, 这些词应该非常耳熟, 因为

推荐阅读

  1. (NIPS 15) Hidden Technical Debt in Machine Learning Systems
  2. (KDD 17) TFX: A TensorFlow-Based Production-Scale Machine Learning Platform
  3. (ICDE 17) Towards Unified Data and Lifecycle Management for Deep Learning