流式机器学习算法的入门和认知
一.流式計算背景
1.概述
其實技術總在更新,做這個行業也是一直要走在學習并適應的路上,這也是人工智能領域最吸引我的地方,其實基礎的理論是不變的,但是隨著業務的發展,計算能力的發展,上層的實現總是在迭代,今天講下我對于流計算的一些認知。
先聊下計算引擎的進化,隨手畫了上面的圖。其實第一代分布式計算引擎是Hadoop,這是一個跨時代的創造,人們使用Hadoop的MapReduce框架實現了許多的算法,這些算法也發揮了很大的作用。Hadoop最大的特點是,數據計算依賴于硬盤存儲,也就是說很多的計算過程中的結果都需要存在硬盤中,然后再從硬盤拉起,造成性能較低的問題。
Spark好在一點,把數據全部放到內存中進行計算,大大提高效率。但是無論是Spark或是Hadoop解決的都是批計算的問題,也稱batch計算。離線計算需要把數據收集起來統一的去算,對于算法來講,可能收斂會更快,因為參與計算的數據比較多。但是也有暴露一個問題,實時性很差。這個問題就引出了下一代計算引擎-流計算這樣一個話題。
2. 流計算
弄明白流計算,首先要搞清楚概念。先來看下流計算(stream compute)以及批計算(batch compute)的計算模型:
-
流計算:當一條數據被處理完成后,序列化到緩存中,然后立刻通過網絡傳輸到下一個節點,由下一個節點繼續處理。
-
批處理系統:當一條數據被處理完成后,序列化到緩存中,并不會立刻通過網絡傳輸到下一個節點,當緩存寫滿,就持久化到本地硬盤上,當所有數據都被處理完成后,才開始將處理后的數據通過網絡傳輸到下一個節點。
對于流計算,是不是有一點感覺了。相較于batch compute,stream compute對于業務上一定是更靈活,因為可以跟數據更實時性的相關聯(數據的時間周期其實很重要,有機會我也會給大家分享我的看法)。
stream對于業務的優勢我舉一個例子,比如一個電商平臺,有一個推薦系統,推薦模型都是每周根據離線數據做批訓練生成的。但是突然有一天,這個電商搞了一個針對特殊人群的定向營銷活動,有大量的特殊用戶涌入,那針對這部分人群以前的老模型可能就不會起作用,這時候如果有一個實時訓練模型的能力就會對這種場景有更快速地響應,這個就有是online learning的概念,那底層依賴的是流計算引擎。
3. 真正的下一代流計算引擎
流計算引擎會是下一代的計算引擎,這里指的不是流計算替代批計算,而是下一代流計算引擎會兼容batch compute和stream compute,做到流批一體,Flink或許是一個答案。
當然流計算的挑戰會比做批計算大很多,比如failover機制,批計算所有計算結果都是有存儲的,可以回溯,流計算怎么解決宕機問題。比如exactly once機制,如何保證分布式流計算中的數據只被處理一次,而不是被多臺機器多次處理。
不過還是相信這些問題會被完美解決,未來的算法也一定是會向流式方向遷移。
二.淺談FTRL算法(流式邏輯回歸算法)
1.流失算法概覽
先聊下對于流式算法的一些看法,流式算法就是要實時的去更新模型,所以從易實現的角度分析,不是所有的批計算算法都適合做流式算法,只有那些損失函數易于計算的算法才比較適合做成流式。
常見的兩種損失函數的計算方法如下:
(注:這里每個變量的具體含義我就不解釋了,如果看不懂的同學,真應該買本書好好補補基礎知識了)
流式算法跟批算法最大的不同就在于數據的計算量,批算法和流算法的計算模型如下:
-
批算法:每次使用全量數據計算損失函數和梯度,然后更新模型
-
流算法:每次使用1條數據計算損失函數和梯度,然后更新模型
從這個角度來看,因為每次參與訓練的數據量變小了,所以對于算法從訓練數據稀疏度和數據維度這兩給角度來看,有更多的約束和挑戰。FTRL算法是由Google提出,目前在online learning這個層面有非常好表現的算法,可以理解為是流計算中的邏輯回歸算法,目前FTRL在廣告投放、商品推薦等實時計算場景被廣泛應用。下面就介紹下FTRL的具體計算流程。
2.FTRL具體推導
首先看下FTRL的迭代公式(可能需要有一些算法背景,大家可以先了解下邏輯回歸的迭代方法),邏輯回歸的推導在我的書里講過了,這里就不多說:
針對這個公式做一個具體的解釋,
-
首先w表示的是模型的權重,t表示迭代輪次
-
arg min(f(x))這個函數表示的是使得f(x)取得最小值的,x的集合。在這個公式中表示的是使得每一輪迭代的損失函數最小的w組合,也就是等到收斂,w參數會是一個恒值
-
表示的是第t輪的原始模型參數
-
表示的是損失函數
-
是正則項,防止過擬合
總結一下,FTRL從算法邏輯上來講跟批算法沒有太大改變,只不過經過大量的測試表名FTRL算法在流式的模型訓練過程中對于稀疏數據以及大維度模型訓練方面有比較好的效果。
有幾篇不錯的文章介紹FTRL,也推薦給大家。
參考文獻:
【1】https://zhuanlan.zhihu.com/p/32903540
【2】http://vividfree.github.io/機器學習/2015/12/05/understanding-FTRL-algorithm
總結
以上是生活随笔為你收集整理的流式机器学习算法的入门和认知的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贝叶斯超参优化方法
- 下一篇: 白话异常检测算法Isolation Fo