1. 程式人生 > >機器學習(五)--- FTRL一路走來,從LR -> SGD -> TG -> FOBOS -> RDA -> FTRL

機器學習(五)--- FTRL一路走來,從LR -> SGD -> TG -> FOBOS -> RDA -> FTRL

        本文會嘗試總結FTRL的發展由來,總結從LR -> SGD -> TG -> FOBOS ->  RDA -> FTRL 的發展歷程。本文的主要目錄如下:

        一、  反思魏則西事件。

二、  LR模型

三、  SGD演算法

四、  TG演算法

五、  FOBOS演算法

六、  RDA演算法

七、  FTRL演算法

        注:本文中間大部分引用了@fengyoung的博文。為了加深自己的理解,也把知識稍微整理了一下。

一、 反思魏則西事件

        在文章剛開始,先談到最近很火熱的魏則西事件。魏則西是我的校友,我也比他大不了幾歲,他因為患滑膜肉瘤在百度上搜索廣告誤導,在武警二院接受了未經驗證允許臨床使用的生物醫療療法耗費了幾乎所有的家產和延誤了最佳治療時機,最終去世人財兩空。首先滑膜肉瘤目前醫療條件幾乎是絕症,魏則西也已經是病程四期,而對待絕症時國內很多醫生或者醫院都會有兩種選擇: 1.  守著職業道德,直接說明結果建議不要繼續嘗試,以免人財兩空;  2.  昧著良心,推薦很多賺錢的藥物和治療方案,掙大量的黑心錢。患者因為求生的意志和家人的愛,會抓住一點點的希望並且放大,而且會因為病程的發展留下的治療急迫性,判斷力會下降很多很多的。

這件事情是很殘酷的,醫生掙了黑心錢,廣告主掙了錢,患者卻沒有得到最佳的治療方案。但其實仔細分析,整件事情的責任方醫院和國家監管機構應該承擔主要責任,違規臨床使用生物療法的公司也應當承擔主要責任,然後百度也應當承擔次要責任。魏則西和家人面對一點點的希望也選擇搏一把,雖然失敗了,但是很悲壯和值得尊敬。面對社會和現實,人總是那麼渺小。也許我將來有一天也會得病,也許也是絕症,也許這對我和我家人很殘酷,雖然很難但我希望我是理性的,可以默唸生亦何歡,死亦何苦。但就現在來說,我希望我要珍惜生活、珍惜生命、珍惜身邊的人。我也希望我要多多鍛鍊身體,保持健康的作息,多多開心珍惜每一天,多多愛我愛的人和愛我的人。

        在廣告這個問題上,其實廣告的目的是連線廣告主和消費者,最大化廣告服務商的利潤的時最大化廣告主的投資會報比。其實這就有一個隱藏的問題,廣告服務商其實並未太多考慮消費者的利益和廣告後面服務和商品的滿意度,所以很多做廣告的就會調侃,希望有一天在馬路上,大家知道他是做廣告的不會扔雞蛋和鞋子。也許以後廣告會有了更多的准入限制和廣告後服務效果的追蹤後,會好點。。。

二、 邏輯迴歸

       言歸正傳,因為廣告大部分是按照CPC計費的,而我們手裡的流量是固定的,因此對每條廣告請求我們就需要保證這條廣告的展示收益更大。而廣告收益是可以根據點選率、廣告計費價格、廣告質量度均衡決定的,所以我們就需要評估廣告的質量度和點選率,本文就主要研究廣告點選率預估中廣泛使用的邏輯迴歸模型。在實際廣告點選率預估的應用中,樣本數目和特徵(邏輯迴歸粗暴離散化後)的數目均可以達到上億緯度,而LR因為其簡單和易並行,並且基於複雜的特徵工程後也能得到非常好的效果,所以在工業界獲得了廣泛的應用。

      邏輯迴歸,相對於線性迴歸是用來處理目標函式是離散數值的情況。它的對映函式和損失函式分別為:

                                                                  (1)                                                                                                (2)

      使用梯度下降法進行求解,得到迭代公式:

           

1.  邏輯迴歸的優缺點:

      優點:  

          a. 簡單

          b. 易於並行、速度快

      缺點:

          a. 需要複雜的特徵工程

      注意事項:

          a. 輸入特徵需要離散化。

三、 SGD演算法

         對於如上LR的迭代公式來說,我們可以得到GD(Gradient Descent)的求解演算法。(W為求解的引數,l(w, z)為損失函式)。

      

      可是如果我們對引數做一輪迭代求解,都需要遍歷所有的樣本,這在實際應用中未免迭代速度太慢,模型更新速度也太慢。而且做機器學習的時候往往更多的資料意味著更好的效果,我們能把線上實時的資料和樣本標註也利用進來麼?答案是 Yes。仔細研究引數的迭代我們可以發現,都是給定一個初始的引數W,通過迭代逐步求解出當前W下降的方向並更新W直到損失函式穩定在最小點。那麼我們是不是可以取部分訓練集作為原訓練集的子集,使用這些子集做迭代,並逐步求解W的下降方向,逐步對W進行更新(理論證明未知)。特別的,如果我們每次取原訓練樣本的一個訓練樣本,對W的值逐步進行更新,那麼我們就得到了SGD演算法。

             

            與SGD比較,GD需要每次掃描所有的樣本以計算一個全域性梯度,SGD則每次只針對一個觀測到的樣本進行更新。通常情況下SGD可以更快的逼近最優值,而且SGD每次更新只需要一個樣本,使得它很適合進行增量或者線上計算(也就是所謂的Online learning)。

         特別的,迭代和選取模型的時候我們經常希望得到更加稀疏的模型,這不僅僅起到了特徵選擇的作用,也降低了預測計算的複雜度。在實際使用LR的時候我們會使用L1或者L2正則,避免模型過擬合和增加模型的魯棒性。在GD演算法下,L1正則化通常能得到更加稀疏的解;可是在SGD演算法下模型迭代並不是沿著全域性梯度下降,而是沿著某個樣本的梯度進行下降,這樣即使是L1正則也不一定能得到稀疏解。在後面的優化演算法中,稀疏性是一個主要追求的目標。

四、 TG演算法

1.  L1 正則化法

        由於L1正則項在0處不可導,往往會造成平滑的凸優化問題變成非平滑的凸優化問題,因此可以採用次梯度(Subgradient)來計算L1正則項的梯度。權重更新方式為:

         

       其中是一個標量,為L1正則化的引數;v是一個向量,sgn(v)為符號函式;稱為學習率,通常將其設定為的函式;代表第t次迭代中損失函式的梯度。

2.  簡單截斷法

         既然L1正則化在Online模式下也不能產生更好的稀疏性,而稀疏性對於高維特徵向量以及大資料集又特別的重要,我們應該如何處理的呢?

         簡單粗暴的方法是設定一個閥值,當W的某緯度的係數小於這個閥值的時候,將其直接設定為0。這樣我們就得到了簡單截斷法。簡單截斷法以k為視窗,當t/k不為整數時採用標準的SGD進行迭代,當t/k為整數時,權重更新方式如下:

           

           

         這裡是一個正數;V是一個向量。

3.  梯度截斷法

         簡單截斷法法簡單且易於理解,但是在實際訓練過程中的某一步,W的某個特徵係數可能因為該特徵訓練不足引起的,簡單的截斷過於簡單粗暴(too aggresive),會造成該特徵的缺失。那麼我們有沒有其他的方法,使得權重的歸零和截斷處理稍微溫柔一些呢?對,這就是梯度截斷法,簡單截斷法和梯度截斷法對特徵權重的處理對映圖對比如下:

            

           梯度截斷法的迭代公式如下:

           

                                       (3)

           同樣的梯度截斷法也是以k為視窗,每k步進行一次截斷。當t/k不為整數時,當t/k為整數時。從公式(3)可以看出決定了截斷的區域,也決定了W的稀疏程度。這兩個數值越大,截斷區域越大,稀疏性也越強。尤其這兩個值相等的時候,只需要調節一個引數就能控制稀疏性。根據公式(3),得到TG的演算法邏輯如下:

         

         特別的對(3)進行改寫,得到描述特徵權重的更新方式為:

                

                

         如果令,截斷公式變成:

                

         此時TG退化成簡單截斷法。同樣如果令,我們就可以得到L1正則化方法。

四、 FOBOS演算法

          FOBOS(Forward-Backward Splitting)是由John Duchi和Yoram Singer提出的。FOBOS演算法把正則化的梯度下降問題分成一個經驗損失梯度下降迭代和一個最優化問題。其中第二個最優化問題有兩項:第一項2範數那項表示不能離loss損失迭代結果太遠,第二項是正則化項,用來限定模型複雜度、抑制過擬合和做稀疏化等。

         

          由於求和公式中的每一項都是大於等於0的,所以公式(2)可以拆解成對特徵權重每一緯度單獨求解:

                      (2)

           首先假設w是(2)的最優解,則有。反正時代入,可以得到w=0是(2)的最優解。。。

           對v和w的取值分別進行求解可以得到:

           

           

           其中g_i^(t)為梯度G^(t)在緯度i上的取值。然後我們可以得到L1-FOBOS的演算法邏輯:

           

1.  L1-FOBOS與TG的關係  

           從公式3)可以看出,L1-FOBOS 在每次更新W的時,對W的每個緯度都會加以判定,當滿足時對該緯度的特徵進行截斷,這個判定的含義是當一條樣本的梯度不足以令對應緯度上的權重值發生足夠大的變化時,認為在本次更新中該緯度不夠重要,應當令其權重為0。

           對於L1-FOBOS特徵權重的各個緯度更新公式(3),也可以寫為如下形式:

             

            如果令,L1-FOBOS與TG完全一致,L1-FOBOS是TG在特定條件下的特殊形式。

五、 RDA演算法

           之前的演算法都是在SGD的基礎上,屬於梯度下降型別的方法,這型別的方法的優點是精度比較高,並且TG、FOBOS也能在稀疏性上得到提升。但是RDA卻從另一個方面進行線上求解,並且有效提升了特徵權重的稀疏性。RDA是Simple Dual Averaging Scheme的一個擴充套件,由Lin Xiao發表與2010年。

          在RDA中,特徵權重的更新策略包含一個梯度對W的積分平均值,正則項和一個輔助的嚴格凸函式。具體為:

。其中<G(t),W>表示梯度G對W的積分平均值,包含了之前所有梯度的平均值;為正則化項,表示一個非負且非自減序列,是一個嚴格的凸函式。

1.  演算法原理

之前的演算法都是在SGD的基礎上,屬於梯度下降型別的方法,這型別的方法的優點是精度比較高,並且TG、FOBOS也能在稀疏性上得到提升。但是RDA卻從另一個方面進行線上求解,並且有效提升了特徵權重的稀疏性。RDA是Simple Dual Averaging Scheme的一個擴充套件,由Lin Xiao發表於2010年。

          L1-RDA特徵權重各個緯度更新方式為:

                

          這裡當某個緯度上累積梯度平均值小於閥值的時候,該緯度權重將被設定為0,特徵稀疏性由此產生。

          對比L1-FOBOS我們可以發現,L1-FOBOS是TG的一種特殊形式,在L1-FOBOS中,進行截斷的判定條件是

,通常會定義為正相關函式。因此L1-FOBOS的截斷閥值為,隨著t增加,這個閥值會逐漸降低。而相比較而言L1-RDA的截斷閥值為,是一個固定的常數,因此可以認定L1-RDA比L1-FOBOS更加aggressive。此外L1-FOBOS判定是針對單次梯度計算進行判定,避免由於訓練不足導致的截斷問題。並且通過調節一個引數,很容易在精度和稀疏性上進行權衡。

六、FTRL演算法

   有實驗證明,L1-FOBOS這一類基於梯度下降的方法有較高的精度,但是L1-RDA卻能在損失一定精度的情況下產生更好的稀疏性。如何能把這兩者的優點同時體現出來的呢?這就是

1.  L1-FOBOS與L1-RDA在形式上的統一:

L1-FOBOS在形式上,每次迭代都可以表示為(這裡我們令)

FTRL綜合考慮了FOBOS和RDA對於正則項和W的限制,其特徵權重為:


注意,公式(3)中出現了L2正則項,而論文[2]的公式中並沒有這一項,但是在2013年發表的FTRL工程化實現的論文中卻使用了L2正則化項。事實上該項的引入並不影響FTRL的稀疏性,僅僅相當於對最優化過程多了一個約束,使得結果求解更加平滑。

公司(3)看上去很複雜,更新特徵權重貌似非常困難。不妨將其改寫。將其最後一項展開等價於求解下面的這樣一個最優化問題:

,於是針對特徵權重的各個緯度將其拆解成N個獨立的標量最小化問題。上式最後一項相對於W說是一個常數項,並且令,上式等價於:

到這裡,我們遇到了與RDA求解類似的最優化問題。用相同的分析方法可以得到:


上式可以看出,引入L2正則化對於FTRL結果的稀疏性產生任何影響。

在一個標準OGD中使用的是一個全域性學習策略,這個策略保證了學習率是一個正的非增長序列,對於每個特徵的緯度都是一樣的。

考慮特徵緯度的變化率:如果特徵1比特徵2的變化更快,那麼緯度1上學習率應該下降的比較快。我們就很容易可以用某個緯度上梯度分量來反映這種變化率。在FTRL中緯度i上的學習率是這樣計算的:

。由於,所以公式(4)中有,這裡的是需要輸入的引數,公式(4)中學習率寫成累加的形式,是為了方便理解後面FTRL的迭代計算邏輯。

偽碼採用的事L1和L2混合正則,即實際的迭代是如下形式:


總結:

從型別上來看,簡單截斷法、TG、FOBOS屬於同一類,都是梯度下降類的演算法,並且TG在特定條件可以轉換成簡單截斷法和FOBOS;RDA屬於簡單對偶平均的擴充套件應用;FTRL可以視作RDA和FOBOS的結合,同時具備二者的優點。目前來看,RDA和FTRL是最好的稀疏模型Online Training的演算法。FTRL並行化處理,一方面可以參考ParallelSGD,另一方面可以使用高維向量點乘,及梯度分量平行計算的思路。

參考文獻:

1.  http://www.wbrecom.com/?p=342   本文顯然大量參考了該文章。 作者寫的確實好,我再寫一遍以便加深自己的理解。

相關推薦

機器學習--- FTRL一路LR -> SGD -> TG -> FOBOS -> RDA -> FTRL

        本文會嘗試總結FTRL的發展由來,總結從LR -> SGD -> TG -> FOBOS ->  RDA -> FTRL 的發展歷程。本文的主要目錄如下:         一、  反思魏則西事件。 二、  LR模型 三、  SG

機器學習 Logistic Regression 分類器

前言        上一篇文章我們談了談基於概率論的分類,這篇我們繼續談論分類問題,這篇講述的是一種最優化問題,即通過簡單計算並不能得出來最終結果,需要一步步來優化求最優值,這種分類方法應用廣泛,也是我們必須要熟練掌握的分類

Python教程:進擊機器學習--Scipy

Python教程:進擊機器學習(五)--Scipy 2017年08月05日 21:22:32 Whytin-Vicky 閱讀數:39876   Scipy簡介 檔案輸入和輸出scipyio 線性代數操作scipylinalg 快速傅立

演算法工程師修仙之路:吳恩達機器學習

吳恩達機器學習筆記及作業程式碼實現中文版 第四章 Logistic迴歸 簡化代價函式與梯度下降 邏輯迴歸的代價函式: C

機器學習與深度學習系列連載: 第一部分 機器學習 生成概率模型Generative Model

生成概率模型(Generative Model) 1.概率分佈 我們還是從分類問題說起: 當我們把問題問題看做是一個迴歸問題, 分類是class 1 的時候結果是1 分類為class 2的時候結果是-1; 測試的時候,結果接近1的是class1

吳恩達機器學習正則化解決過擬合問題

目錄 0. 前言 學習完吳恩達老師機器學習課程的正則化,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 0. 前言 在分類或者回歸時,通常存在兩個問題,“過擬合”(overfitting)和“欠擬合”(underfitting). 過擬

機器學習降維技術---主成分分析、因子分析

機器學習(五)降維技術---主成分分析、因子分析   降維(處理線性問題為主) 一提到降維這個詞,大家可能就會覺得非常高大上,到底是什麼東西呢?降維通俗來講就是把原先多個指標的計算降維為少量幾個經過優化指標的計算,可能大家還是不理解,舉個例子就是本來拿來參加建模的特徵有100個

機器學習——GBDT演算法

1.GBDT概述 GBDT也是整合學習Boosting家族的成員,GBDT也是迭代,使用了前向分佈演算法,但是弱學習器限定了只能使用CART迴歸樹模型。在GBDT的迭代中,假設我們前一輪迭代得到的強學習器是 f t-1(x),損失函式是L(y,ft-1(x)),我們本輪迭代的目標是找到一個CAR

Python與機器學習樸素貝葉斯分類

1.安裝中文分詞器 由於本文是對中文文字進行分類,故需要用到中文分詞器,而結巴分詞則是Python支援較好的一款分詞器。 使用命令安裝: pip3 install jieba3k 或者下載結巴分詞檔案【下載】 結巴分詞測試: 結巴分詞支援三種分詞模式: 精確模式,也是結巴

機器學習PCA資料降維

PCA資料降維 作者:hjimce 一、PCA相關理論 PCA演算法又稱主成分分析,是一種分析、簡化資料集的技術。主成分分析經常用於減少資料集的維數,同時保持資料集中的對方差貢獻最大的特徵。PCA的

scikit-learn機器學習--條件概率全概率和貝葉斯定理及python實現

在理解貝葉斯之前需要先了解一下條件概率和全概率,這樣才能更好地理解貝葉斯定理 一丶條件概率 條件概率定義:已知事件A發生的條件下,另一個事件B發生的概率成為條件概率,即為P(B|A) 如圖A∩B那一部分的發生的概率即為P(AB), P(AB)=發

機器學習--------正則化(Regularization)

技術分享 應用 regular 邏輯 ima 好的 parameter 大小 機器學習 過擬合(over-fitting) 欠擬合 正好 過擬合 怎麽解決 1.丟棄一些不能幫助我們正確預測的特征。可以是手工選擇保留哪些特征,或者使用一 些模型選擇的算法來幫忙(例如 PC

前置機器學習:30分鐘掌握常用Matplotlib用法

> Matplotlib 是建立在NumPy基礎之上的Python繪相簿,是在機器學習中用於資料視覺化的工具。 我們在前面的文章講過[NumPy的用法](http://blog.caiyongji.com/2020/12/06/pre-ml-numpy-3.html),這裡我們就不展開討論NumPy

Struts學習-表單標簽一個實例練習

area 輸入 pan als 視覺效果 font pack quest 文本 表單標簽將在 HTML 文檔裏被呈現為一個表單元素 使用表單標簽的優點: 表單回顯 對頁面進行布局和排版 標簽的屬性可以被賦值為一個靜態的值或一個 OGNL 表達式. 如果在賦值時使用了一個

零開始學習html與瀏覽者交互表單標簽——下

定位 開始 系統 isp ctr 程序 顯示 text 輸入 六、使用下拉列表框進行多選 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-T

JAVA學習

java學習 步驟 字符串 關系運算符 幫助 條件判斷 方式 -- lean 一、 調試 步驟1:設置斷點(不能在空白處設置斷點) 步驟2:啟動調試 步驟3:調試代碼(F6單步跳過)筆記本Fn+F6(F5) 步驟4:結束調試 掌握調試的好處? 很清晰的看到,

Wpf學習 數據綁定Binding【小達原創】

per 學習 items style lock lis sof text 繼承 程序的本質是數據+算法,咱們這一篇就看看wpf程序中的數據是怎樣展現在前臺的。 1、咱們新建一個Wpf項目。為該項目增加【data】文件夾,在該文件夾中添加【Person】類,如下圖: 2、打

java學習java類繼承

author java學習 dex int demo [] color javac print 1.制作一個工具類的文檔 javadoc -d 目錄 -author -version arrayTool.java 實例: class arrayDemo {

機器學習

無限 size mage 計算機 博客 對數 png 表示 獲得 對學習的定義 學習經驗E 完成任務T 績效指標P 對於某類任務T和性能度量P,如果一個計算機程序在完成T上以P來衡量完成的好壞,並隨著經驗E而自我完善,那麽我們稱這個計算機程序在從經驗E中學習

python學習

module pen pre strong sdfs nbsp from cnblogs bar                   第五章 條件、循環和其他語句 5.1 print和import的更多信息 5.1.1 使用逗號輸出 >>> print