构建实时机器学习系统

概述

  本书主要介绍了在构建实时机器学习中需要考虑的事项、使用的工具(包括消息队列工具RabbitMQ、存储工具mysql和nosql、日志收集套件ELK、集群部署工具Docker)、以及通用的一些设计模式,并在讲解这些设计模式的同时介绍了其适用的场景。
  个人认为最具特点的一章是第十章总结了机器学习系统的设计模式,包括读、更新、处理多个方面。

内容

章节递进关系

实时机器学习方法

1 实时机器学习综述

  从机器学习的基本概念入手,首先介绍了什么是机器学习:

1
吴恩达定义:继续学习是一门学科,它旨在让计算机自主工作,而不需要刻意编程。
1
SAS定义:机器学习是一种方法,它旨在用数据分析分析自动化模型的建立。

作者对商用机器学习应该包括的内容:

  • 用数据说话
  • 高度自动化
  • 鲁棒性

  然后在此基础上介绍了机器学习的发展历史、领域分类,并总结了实时机器学习系统的基本要求:

  • 模型的可扩展性
  • 模型运用的低延迟性
  • 训练数据的私密性

  最后以Netflix的机器学习竞赛为例介绍了用户被逆向工程以及较难在生产环境中使用的问题。

2 实时监督是机器学习

  监督式学习旨在利用利用训练集,建立因变量和自变量自建的函数映射关系:

$${y = f(x;b;e)}$$

  实时机器学习实战思路:

  • 不要重复造轮子
  • 没有模型是完美的
  • 重视上下游生态

  衡量回归预测统计量的基本指标:

  • 均方误差
1
MSE = \frac{1}{n}\sum\limits_{i=1}^n(\hat{Y_i} - Y_i)^2
  • 绝对误差中位数
1
MAE = Median(|\hat{Y_i} - Y_i|)

  衡量分类的统计量:

  • 准确率
1
\text{准确率} = \frac{\text{真阳性}}{\text{真阳性} + \text{假阳性}}
  • 召回率
1
\text{召回率} = \frac{\text{真阳性}}{\text{真阳性} + \text{假阴性}}

3 数据分析工具Pandas

  以苹果公司股价数据为例介绍了使用pandas导入数据、探索数据以及展示数据,包括:read_csv、head、tail、map、drop、mean、min、max、describe等方法的使用。

4 机器学习工具Scikit-learn

  scikit-learn是一款通用的机器学习库,以流水线pipeline的方式将机器学习中数据预处理、模型建立、训练、验证、可视化进行封装,便于高效使用。

机器学习模块包括:

  • sklearn.cluster 聚类分析
  • sklearn.manifold_learning 流行分析
  • sklearn.decomposition 矩阵分解
  • sklearn.emsemble 集成算法
  • sklearn.gaussian_process 高斯过程
  • sklearn.linear_model 线性模型
  • sklearn.mixture 高斯混合模型
  • sklearn.native_bayes 朴素贝叶斯
  • sklearn.neighors 邻近估计
  • sklearn.neural_network 神经网络
  • sklearn.tree 决策树

实时机器学习架构

5 实时机器学习架构设计

  设计实时机器学习系统需要考虑的几个方面:

  • 数据通量和存量估计
  • 响应时间
  • 和已有系统之间的关系
  • 系统带来的意义

  lambda架构的分层设计:

  • 实时响应层
  • 快速响应层
  • 批处理层

  常用的实时机器学习架构:

  • 瀑布流架构:比较通用的架构,不仅仅是实时机器学习中采用,在很多业务系统也会采用该架构,主要思想是以MQ为媒介,将整个业务流程拆分成像瀑布一样从上游到下游的形式执行。
  • 并行响应架构:主要思想是将机器学习任务通过负载均衡的方式在机器学习集群中并行执行,并将处理结果一MQ的机制通知后端业务系统进行处理。
  • 混合架构:结合上述两种架构

6 集群部署工具Docker

  通过Docker相关工具快速集群化部署模型。

7 实时消息队列和RabbitMQ

  RabbitMQ的主要构成部分:

  • 消息:信息传递的基本单元,主要包括具体的消息payload、路由名(routing key)、投递保证相关控制信息。
  • 消息队列:是进行消息存储、读取的基本组件,用于控制消息的持久化。
  • 网络连接:包括connection、channel,用于控制消息的网络传输以及在网络传输中的复用机制。
  • 消息交换中心:路由组件,控制消息如何到达具体的队列。

  常用交换中心模式:

  • 直连结构
  • 扇形结构
  • 话题结构
  • 报头结构

8 实战数据库综述

  介绍传统关系型数据库与NOSQL数据库的特点,以及在不同业务场景中的选型参考。

9 实时数据监控ELK集群

  介绍ELK套件工具进行日志的采集,查询以及展示,在介绍了elasticsearch的基本文档查询功能的基础上,着重对es的对偶搜索(percolate)进行了说明。
对偶搜索是与普通文档搜索相反的一种搜索方式,传统搜索是将文档存入es,以查询条件进行搜索,而对偶搜索是将查询或者规则存入es,将文档传入进行搜索或者匹配。

10 机器学习系统设计模式

  从具体使用的几个点对系统的设计模式进行了总结,个人认为这些系统的设计模式并不仅仅适用于机器学习系统,也适用于业务系统或者中台系统。

  • 高速键值模式,适用于实时层现预处理结果、对网页访问等进行技术、关键词扩展、机器学习模型参数存储等场景
  • 缓存高速查询模式,适用于机器学习模型因变量存储、机器学习模型结果存储等场景。
更新
  • 异步数据库更新模式,适用于推荐系统内容更新、机器学习参数更新等场景。
  • 请求从定向模式,适用于广告后端系统更新、同城物流公司后端更新等场景。
处理
  • 硬实时并行模式,适用于在线广告实时点击预估、智能语音服务器端等场景。
  • 分布式任务队列模式,类似于流式计算,将数据的流动抽象成有向无环图,图中节点划分为数据发出节点(Spout)和数据处理节点(Bolt),采用调度框架进行统一的任务调度,适用于在线票务系统等场景。
  • 批实时处理模式,类似于离线计算,适用于社交舆情分析、金融数据分析等场景。

未来展望

11 Serverless架构

  介绍Serverless架构的发展历史,并将Serverless平台架构划分为函数存储层、函数管理层以及函数运行层三层。

12 深度学习的风口

  归纳总结了机器学习的难点包括解释性工具缺失、应用场景限制和模型成本限制,并比较了目前各机器学习平台。
  深度学习平台功能模块

  • CPU+GPU控制、通信层
  • 内存、变量管理层
  • 基本运算层,比如矩阵操作
  • 基本简单函数层,比如激活函数
  • 求导模块
  • 神经网络基本模块,比如卷积层、池化层等
  • 整合以及优化求解。

知识点框架图