FTRL演算法在使用中需不需要通過Batch Model初始化?
德川在《關於點擊率模型,你知道這三點就夠了》提到:
第
三,應用Online的更新方式去更新模型,還是batch的方式。Online的方式對應的最優化演算法主要是minibatch
sgd,Offline的方式可以應用計算廣告書里說的LBFGS,Trust region這些。按我個人經驗,minibatch
sgd的更新方式對頭部的數據學習的會更快更充分,因此更善於fine tuning the head
part。而Offline的方式全局優化歷史數據,對於長尾稀疏特徵,就比sgd的方式要精細些了。如果業務場景時效性較強,更關注頭部,用一個
Online keep更新的模型就足夠了,比如新聞推薦的場景。但是如果業務場景有很多長尾流量,需要精細的預估,一個batch的Offline
model是必要的,為了業務的時效性考慮,可以用batch的模型結果去初始化Online的模型更新,定期的batch結合Online的delta
更新,比如搜索廣告的場景。我現在是只用FTRL進行訓練,訓練上十天左右的數據之後在線上提供服務,我發現模型的效果在開始幾天都是不錯的,過一段時間後效果就下降了。想問下大家在用FTRL的時候有沒有用Batch Model初始化。如果初始化,怎麼初始化的,因為FTRL不只有weight還有z, n這些值。
事先聲明:離題而答。
Online其實有兩種,一種廣義,也就是題目中說的「Online的方式更新」,意思就是新的數據來一次更新一次,用過的數據不再去用。從這個意義上講,所有的stochastic optimization演算法都可以直接遷移過來用。
狹義得說,Online其實是指一類能夠保證小的演算法,演算法包括RDA、AOGD、FOBOS,以及FTRL,簡要說明了一下,optimization演算法是為了保證步迭代後儘可能小,而Online演算法是為了保證儘可能小。也就是說,optimization是為了在最後的解上損失上儘可能小,但是不在乎中間迭代過程中的解是否產生損失,而online則認為每一步的解都會產生損失,希望這個整體的損失小,online演算法為了小這個目的,往往設計成每次的更新與前幾步相似,而且步長還遞減(這在新樣本無窮無盡的情況下不是什麼好性質)。
個人愚見,我認為FTRL的理論意義(從同一個觀點理解了幾種不同的Online演算法,包括RDA、AOGD、FOBOS)是比較大的,理論上很有意思,實際中也已經有很多大廠在用,實際效果非常值得肯定。面對具體業務問題的時候,沒必要非得執著於只用時髦的演算法,「第三」 中所說online結合batch是比較符合業務實際的思路。
回到點擊率預估的問題上來,「Batch Model」初始化 或 用其他offline的優化演算法初始化,我認為是必須的,否則一開始的解會很爛。以及,無論你用batch還是online演算法,如果你發現「模型的效果在開始幾天都是不錯的,過一段時間後效果就下降了」,那你就應該調整參數了,而且不能指望演算法上線之後,可以永久運行下去,還是需要每隔一段時間就用重新訓練。德川是我。。很少上知乎。我文章里提到的用batch model去warm up是一個常見的做法,但是也不是說一定就需要,比如今日頭條據我了解就是一個一直online更新的模型:)。
batch+online 是比較好的選擇。一直online的話要小心learning rate過度衰減的問題,畢竟業務數據的分布不是一成不變的,learning rate要有個保底的值。還有某些特徵的出現是不連續的,一直online會帶來歷史知識過時失效的問題。比如新聞建模中,關鍵詞「本拉登」作為一個特徵,某一段時間很熱,做了大量的update;最近這兩天又火起來了,但是作為另一個話題出現,歷史上學習的權重就可能對預測結果造成很大的偏差。
Eta的解釋比較在理,FTRL確實是朝著 "regret optimization"這個方向的,包括原始的FOBOS演算法,裡面的lazy update性質的理論解釋,也是基於online 模式而不是batch 模式。
個人做過一些廣告數據的對比,用vw來對比bfgs、sgd、ftrl-proximal。其中1 pass ftrl得到的avg training loss 低於 10 pass sgd的avg traning loss。在ftrl上增加pass所得到的提升很有限,基本上1-2輪的訓練就能達到不錯的效果了。推薦閱讀:
※關於L2範數如何避免過擬合?
※中國基層編作曲從業人員是否可能被人工智慧取代?
※棋盤大小以及所用時長,對 AlphaGo 的獲勝概率有影響嗎?
※對數據挖掘,機器學習感興趣。沒有演算法基礎影響大不大?