文章目录
前言
我把实时机器学习理解为两种情况:
1、 实时出结果:
这时使用的依然是离线训练好的模型,静态的模型,只是该模型需要对实时流入的“测试”集做出响应,给出模型的计算结果。
机器学习本质上是参数的集合,很多时候,静态的机器学习模型无法满足我们的需求,每天海量的数据进入系统,如果能够对新的数据及时加以应用,我们的模型会更加的鲁棒,产生更多的价值。下面个是我理解的第二种情况。
2、 实时自我更新,并出结果:
- 并不是指可以对自身进行反馈的强化学习,而是希望数据能够近实时的feed到模型中,让模型自我更新,并在更新模型后对最新的数据做计算。
- feed到模型的数据也许不只是已有变量的增量,还有可能是新的变量,也就是说模型的可实时扩展性。
参考一些资料以及咨询一些前辈后,发现这种更新,往往都是以几天为一个单位,然后发布新的模型,真实时可能不太现实。
两篇相关论文:
- 除了基于时间线的实时机器学习,论文arXiv:1703.03924v2 [cs.DC] 19 May 2017 – Real-Time Machine Learning: The Missing Pieces把 蒙特卡罗树搜索 和 循环神经网络 也归入实时机器学习:
- 论文Online Machine Learning in Big Data Streams指出:
大数据流中的在线机器学习包括(1)分布式算法和(2)由过去一段时间所存储的有限的流数据驱动的算法。第一个主要涉及软件架构和高效算法。第二个对建模方法施加了重要的理论限制:在数据流模型中,随着新数据的到来,旧数据不再可用于修改早期的次优模型。
这篇长论文主要解释了些实时机器学习 面临的困难,以及目前市场上几种常见实时机器学习框架(Storm、Flink、SparkStreaming + mllib这些 )设计思路以及各自优缺点。
难点
(以下是我的片面理解,毕竟没有经历过)
- 机器学习训练模型以及模型上线使用时大都时很消耗内存迭代式计算,海量数据的场景下,要想实时,很难。数据消费的实时 + 计算的实时。[参考8详细的阐述了该看法]
- 数据毕竟还会涉及清洗问题,所以加入的数据会不会导致模型出问题?多版本模型的上线、回滚问题?
- 在有的场景下,标签数据本身就有延时,比如说欺诈标签:
如果客户报告欺诈交易,我们可以立即将交易标记为“欺诈”。但是,我们应该如何处理剩余的交易?我们可以假设未报告的交易是“非欺诈”,但是这毕竟不准确;但假如不进行认为假设,正负样本也许会失衡。那么,我们应该等多久才能确定它们不是欺诈行为?
实时机器学习的分类1
- 批实时机器学习
- 软实时机器学习
软实时的定义是:响应系统在接收到请求的时候,立即开始对响应进行处理,并且在较短时间内进行反馈。软实时机器学习只要求系统立即对请求开始进行处理,最后处理完成所消耗的时间比较少,但是要求不如硬实时严格。软实时机器学习的主要应用场景是物流运输、较为频繁的数量金融交易等领域。 - 硬实时机器学习
硬实时的定义是:响应系统在接收到请求之后,能够马上对请求进行响应反馈,做出处理。硬实时机器学习的主要应用场景是网页浏览、在线游戏、高频交易等对时效性要求非常高的领域。在这些领域中,我们往往需要将相应延迟控制在若干毫秒以下。
对应部分开源技术
( 仅实时机器学习相关,flume+kafka+redis这些辅助件暂不谈。