1. 背景介紹
2. L1正則化法
L1正則化法很簡單,在GD,SGD,OGD中都會用到,其對權重的更新方式如下:
但是,在線計算的每次迭代過程中,僅僅靠幾個float類型的數相加,是很難得到0的,所以說很難得到稀疏解。
3. 簡單截斷法
為了得到稀疏的特征權重𝑊,最簡單粗暴的方式就是設定一個閾值,當𝑊的某維度上系數小於這個閾值時將其設置為0(稱作簡單截斷)。其以𝑘為窗口,當𝑡/𝑘不為整數時采用標准的SGD進行迭代,當𝑡/𝑘為整數時,采用如下權重更新方式:
這種方法實現起來很簡單,也容易理解。但實際中(尤其在OGD里面)𝑊的某個系數比較小可能是因為該維度訓練不足引起的,簡單進行截斷會造成這部分特征的丟失。
4. 梯度截斷法(TG)
上述的簡單截斷法被TG的作者形容為too aggressive,因此TG在此基礎上進行了改進,同樣是采用截斷的方式,但是比較不那么粗暴。采用相同的方式表示為:
首先看一下梯度截斷法與簡單截斷法的關系:
從圖中可以看出,如果令α=θ的話,則TG退化成簡單截斷法。
梯度截斷法與L1正則法的關系:
令和
,則TG的特征權重更新公式變為:
此時,TG退化為L1正則法。
5. FOBOS
前向后向切分(FOBOS, Forward-Backward Splitting)是由John Duchi和Yoram Singer提出的。FOBOS的權重更新公式為:
前一個步驟是一個標准的梯度下降步驟,后一個步驟可以理解為對梯度下降的結果進行微調。
觀察第二個步驟,發現對𝑊的微調也分為兩部分:(1) 前一部分保證微調發生在梯度下降結果的附近;(2)后一部分則用於處理正則化,產生稀疏性。
通過將兩個公式相結合,我們可以得到如下的閉式解:
可以看到,特征權重不僅僅與迭代前的狀態有關,而且與迭代后的狀態有關。可能這就是FOBOS名稱的由來。
L1-FOBOS:
將FOBOS公式中的正則化項選擇為L1正則。經過一番公式推導,可以得到L1-FOBOS的權重更新公式為:
即,當一條樣本產生的梯度不足以令對應維度上的權重值發生足夠大的變化,認為在本次更新后該維度不夠重要,應當令其權重為0。
可以發現,令時,L1-FOBOS與TG完全一致,我們可以認為L1-FOBOS是TG在特定條件下的特殊形式。
6. RDA
不論怎樣,簡單截斷、TG、FOBOS都還是建立在SGD的基礎之上的,屬於梯度下降類型的方法,這類型方法的優點就是精度比較高,並且TG、FOBOS也都能在稀疏性上得到提升。但是有些其它類型的算法,例如RDA,是從另一個方面來求解Online Optimization並且更有效地提升了特征權重的稀疏性。
正則對偶平均(RDA, Regularized Dual Averaging)是微軟十年的研究成果,RDA是Simple Dual Averaging Scheme一個擴展,由Lin Xiao發表於2010年。
RDA的權重更新公式如下:
公式中包含了3個部分:(1)之前所有梯度(或次梯度)的平均值。(2)正則項。(3)額外正則項,嚴格凸函數。
L1-RDA:
將RDA公式中的正則化項選擇為L1正則。經過一番公式推導,可以得到L1-RDA的權重更新公式為:
我們發現,當某個維度上累積梯度平均值的絕對值小於一個固定的閾值的時候,該維度權重將被置0,特征權重的稀疏性由此產生。
L1-RDA與L1-FOBOS的比較:
我們看到了L1-FOBOS實際上是TG的一種特殊形式,在L1-FOBOS中,進行“截斷”的判定條件是。通常會定義𝜂為與
正相關的函數
,因此L1-FOBOS的“截斷閾值”隨着𝑡的增加,這個閾值會逐漸降低。
相比較而言,L1-RDA的“截斷閾值”為𝜆,是一個常數,並不隨着𝑡而變化,因此可以認為L1-RDA比L1-FOBOS在截斷判定上更加aggressive,這種性質使得L1-RDA更容易產生稀疏性;此外,RDA中判定對象是梯度的累加平均值,不同於TG或L1-FOBOS中針對單次梯度計算的結果進行判定,避免了由於某些維度由於訓練不足導致截斷的問題。並且通過調節𝜆一個參數,很容易在精度和稀疏性上進行權衡。
7. FTRL
我們從原理上定性比較了L1-FOBOS和L1-RDA在稀疏性上的表現。有實驗證明,L1-FOBOS這一類基於梯度下降的方法有比較高的精度,但是L1-RDA卻能在損失一定精度的情況下產生更好的稀疏性。那么這兩者的優點能不能在一個算法上體現出來?這就是FTRL要解決的問題。
FTRL(Follow the Regularized Leader)是由Google的H. Brendan McMahan在2010年提出的,后來在2011年發表了一篇關於FTRL和AOGD、FOBOS、RDA比較的論文,2013年又和Gary Holt, D. Sculley, Michael Young等人發表了一篇關於FTRL工程化實現的論文。
L1-FOBOS和L1-RDA在形式上的統一:
經過公式推導,我們可以得到在形式上統一的L1-FOBOS和L1-RDA:
可以看出L1-FOBOS和L1-RDA的區別在於:(1) 前者對計算的是單次梯度以及L1正則項只考慮當前模的貢獻,而后者采用了累加的處理方式;(2) 前者的第三項限制𝑊的變化不能離已迭代過的解太遠,而后者則限制𝑊不能離0點太遠。
FTRL算法原理:
FTRL綜合考慮了FOBOS和RDA對於正則項和𝑊限制的區別,其特征權重的更新公式為:
公式看上去很復雜,更新特征權重貌似非常困難的樣子。不妨將其進行改寫,令,可以轉化為:
最終,對每個維度,權重更新公式為:
8. FTRL工程實現中的一些技巧
8-1. Per-Coordinate Learning Rates:
在一個標准的OGD里面使用的是一個全局的學習率策略,這個策略保證了學習率是一個正的非增長序列,對於每一個特征維度都是一樣的。
考慮特征維度的變化率:如果特征1比特征2的變化更快,那么在維度1上的學習率應該下降得更快。我們很容易就可以想到可以用某個維度上梯度分量來反映這種變化率。在FTRL中,維度i上的學習率是這樣計算的:
(1)Per-Coordinate的方式就是對每個不同的特征,根據該特征在樣本中出現的次數來推算它的學習率。
(2)一個特征,如果出現的次數多,那么模型在該特征上學到的參數就已經比較可信了,所以學習率可以不用那么高。
(3)而對於出現次數少的特征,認為在這個特征上的參數還沒有學完全,所以要保持較高的學習率來使之盡快適應新的數據。
8-2. 降低訓練模型時的內存:
8-2-1. Probabilistic Feature Inclusion
1. 在廣告點擊預估場景下,是特別特別高維的數據,在這種數據中,很大一部分特征是只出現一次的,此時,如果想要降低模型的尺寸,即減少模型中特征的數目。
2. 直觀上看,我們應該先讀取一遍數據,然后把出現次數小於k次的特征刪掉,但顯然,這種方式對於online learning很有問題,而且將數據讀取兩遍也是極耗時間的,不可行。
3. 本文介紹的是概率法,使用隨機的方式將特征添加進模型,有兩種代表性的方法:
(1)Poisson Inclusion,這種方法,對每個特征,如果它沒在模型中出現過,那么以概率p將其加入到模型中。直觀上,這種方法就會將出現次數多的特征加入到模型中。
(2)Bloom Filter Inclusion, 使用counting Bloom filter來對特征進行檢測,如果一個特征出現了超過n次,那么就將該特征添加進模型。
8-2-2. Encoding Values with Fewer Bits
1. 對於OGD來說,使用32位或64位的浮點數太奢侈了,因為訓練好的模型中,絕大部分的參數的區間是在[-2,2]中的。所以,為了節省內存,使用q2.13的encode方法。
2. 在這種方法中,1bit用來表示正負, 2bit用來表示整數部分,13bit用來表示小數部分,一共16bit。
3. 實驗表明,相對於64bit浮點數來說,使用q2.13浮點編碼方法可以只使用25%的內存,而AucLoss幾乎沒有變化。
8-2-3. A Single Value Structure
1. 有些時候,需要訓練大量的模型,而這些模型的區別僅僅是添加或刪除一些特征。(前提)
2. 可以采用這樣的方法,即若干模型共享的特征維度上,只存儲1個系數權重值,而不是對每個模型都保存一個值。另外還需要對這個特征被哪些模型使用做一個標記位數組。
3. 更新參數的時候,對一個樣本,不同的模型會對不同維度的權重計算出多個更新值。然后對一個特征維度,使用共享該特征的所有模型的更新值的平均值來進行更新。
8-2-4. SubSampling Training Data
1. 在實際中,CTR遠小於50%,所以正樣本更加有價值。通過對訓練數據集進行降采樣,可以大大減小訓練數據集的大小。
2. 正樣本全部采樣(至少有一個廣告被點擊的query數據),負樣本使用一個比例r采樣(完全沒有廣告被點擊的query數據)。但是直接在這種采樣上進行訓練,會導致比較大的biased prediction。
3. 解決辦法:訓練的時候,對樣本再乘一個權重。權重直接乘到loss上面,從而梯度也會乘以這個權重。
8-3. Confidence Estimates:
在很多應用中,只預測廣告的CTR還是不夠的,還需要有一種指標去衡量這種預測的置信度。
(1)本文提出一種uncertainty score來衡量不確定性。
(2)對於每個特征,都會記錄一個counter,counter的大小決定着該特征的學習速率,學習速率越小則表示該特征越可信。
(3)uncertainty score的計算在模型預測的同時能夠給出。
實驗:
(1)使用一個ground truth模型作為基線model,稱之為m1。
(2)使用m1對數據進行預測,得到每個樣本的CTR。
(3)丟棄掉原來的類別標記,使用m1預測的結果作為真實值。
(4)在新數據上運行起FTRL,得到模型m2。
(5)m2和m1的預測值進行比較,得到錯誤et。
(6)m2運行時同時計算出u(x)。
(7)得到u(x)和et的關系,如圖所示:
8-4. 另外,還有一些沒有成功的實驗嘗試:
(1)Aggressive Feature Hashing
即允許哈希沖突,將一些不同的feature映射到同一個槽位。這樣可以降低模型尺寸,但實驗表明,一定會有效果損失。
(2)Dropout
對每一個樣本,按照一定的概率p來隨機丟掉特征,有利於泛化,增強模型的魯棒性。這種方法在視覺方面用的比較多。在實驗中,將drop rate從0.1調到0.5,發現都沒有效果。分析原因,可能是廣告數據和圖像數據的分布不同所致,圖像數據是緊密數據,各維度特征很可能是相關的;而廣告數據是稀疏且噪聲較大,這樣做直接損失了較多信息。
(3)Feature Bagging
訓練k個模型,每個模型用全部特征的一個子集,這些模型所用到的特征是overlapping的。然后用這k個模型的預測的平均值作為評測結果。發現並沒有用。
(4)Feature Vector Normalization
將樣本歸一化,盡管其他的文獻中有結果,發現在本文的實驗中也是沒有用。
9. 參考文獻
1. Ad Click Prediction: a View from the Trenches
2. 在線最優化求解(Online Optimization)
版權聲明:
本文由笨兔勿應所有,發布於http://www.cnblogs.com/bentuwuying。如果轉載,請注明出處,在未經作者同意下將本文用於商業用途,將追究其法律責任。