SparseNN中的優化

做者|The AI LAB
編譯|VK
來源|Medium

網絡

對SparseNN模型的過擬合進行研究,並探索了多種正則化方法,如嵌入向量的max-norm/constant-norm、稀疏特徵id的dropout、參數的freezing、嵌入收縮等。然而,據咱們所知,在單次訓練中,沒有顯著的減小過擬合的效果。框架

正則化全鏈接層和稀疏參數

隨機梯度降低優化器使用小批量樣原本更新全鏈接層和稀疏參數。給定一個小批量的例子,一般全部的全鏈接層參數都會被更新(假設沒有gate或dropout),而只有一小部分稀疏參數會在正向傳播中被激活,從而在反向傳播中被更新。例如,假設一個稀疏特徵對用戶在過去一週內單擊的廣告id進行編碼,雖然咱們可能有數百萬個唯一的廣告id,可是在一個小型批處理中(一般是100個樣本)出現的廣告id的數量與基數相比很是有限。機器學習

正則化稀疏參數與全鏈接層參數的不一樣之處在於,咱們須要在運行時識別小型批處理中已激活的稀疏參數,而後僅對這些參數進行正則化。函數

在正則化全鏈接層參數時須要注意的一點是,全鏈接層中的誤差一般不須要正則化。所以,須要識別這些誤差,並將它們自動排除在正則化以外。性能

L2正則化

J(W)是經驗損失,||W_dense||²是全鏈接層稀疏參數(也稱爲L2正則化器)的L2範數的平方;||W_sparse||²也是如此。學習

參數W_i的損失L的梯度被分解爲經驗損失J和所謂的「權重衰減」項λ*W_i的梯度。測試

爲了實現L2正則器,可經過添加lambda*W_i來更新L關於W_i的梯度。lambda在實現中稱爲權重衰減。優化

L2正則化 vs max-norm正則化編碼

  • L2正則化可同時應用於全鏈接層和稀疏參數,這兩個參數均可能會過擬合。而max-norm僅適用於稀疏參數,由於在全鏈接層中,權值矩陣的向量範數沒有很好的定義。spa

  • 損失函數中的L2正則化項是可微的,等效於添加一個衰減項以懲罰梯度降低中的大權重;而max-norm打破了前向-後向傳播框架,由於若是更新後的嵌入向量的範數大於1,它將嵌入向量進行歸一化。

這裏有幾個實驗是由觀察到的sparseNN在屢次傳遞訓練數據時過擬合引發的。訓練設置很是簡單,咱們只考慮一個用戶特徵和一個廣告特徵,而不考慮全鏈接層特徵。

實驗概述分爲兩部分:

(a)描述實驗

(b)進一步的假設和檢驗它們的方法。

讓咱們以如下設置爲例。

設置

  • 用戶端特徵(SPARSE_USER_CLK_AD_IDS)和廣告端特徵(SPARSE_AD_OBJ_ID)。

  • n_train = 1表明訓練的天數,n_test = 1天表明測試的天數進行測試;在一次比較中,訓練的天數和測試的天數是固定的。

  • 次日繪製測試(平均)標準化熵曲線以模擬生產條件。

Shuffling:將得到相同的結果。

對across_ts_shuffle, shuffle_all, shuffle_within_partition 進行Shuffling

下降學習速率是邏輯迴歸的一種正則化方法。但這對sparseNN沒用。

學習率下降,num_passes = 2

經過限制嵌入範數進行正則化(此處說明const_norm; max_norm結果類似)。這裏,成本函數與所應用的正則化無關。

const範數

以最小的容量下降學習率:

當你嘗試將尺寸減少爲2且num_replicas = 1以最小化模型容量時,你會看到

num_passes=1/sparse_alpha=0.002 時爲0.8711

num_passes = 2時爲0.8703。

最後,在num_passes> 1的狀況下,咱們取得了成功!

可是,num_passes = 3破壞了咱們短暫的快樂;咱們一直試圖超過0.8488,也就是當前的sparseNN參數可以生成的值(dimensionality=~32, learning rate=0.04 和 num_replicas=2).

最小容量的學習率num_passes = 1

最小容量的學習率,num_passes = 2

最小容量的學習率,num_passes = 3

SGD優化器

若是學習率被重置,該怎麼辦?對於這個實驗,能夠複製連續分區中一天的數據。圖(a)表示num passes=1的數據,圖(b)表示訓練數據的多遍訓練,其中num_passes=1表示連續分區上相同的數據;num_passes=2表示同一分區上的多遍訓練。結果是同樣的。

就dropout而言,sparseNN提供dropout_ration和sparse_dropout_ratio。稀疏的dropout將從嵌入層到全鏈接層的鏈接去掉;而全鏈接層的dropout會在網絡中丟失鏈接。


Dropout num_passes = 1


Dropout num_passes = 2

最大熵正則化器?

你能夠嘗試對嵌入的熵進行正則化,這樣嵌入的維數能夠保留,而不是記住用戶-廣告對。例如,在用戶-電影推薦問題中,若是電影是用(動做、戲劇、情感、喜劇)來表示,它能夠很好地歸納,可是若是用戶-電影對被記住,它在測試數據中會失敗。

經過這些實驗:

  • 嵌入將用戶與廣告聯繫起來。當維數增長時,關於用戶對廣告的嵌入網絡會更好(而且性能會提升,對於測試的維數沒有限制)。相反,當維數較低時,廣告就會與更多用戶相關(而且性能較低)。

  • 當哈希值較小時,即將多個廣告解析爲一個嵌入。他們這樣作沒有任何語義哈希,即徹底不相關的廣告被解析爲相同的嵌入,所以,性能降低。也許增長維度會恢復性能。也許語義哈希將使咱們解決這一難題。

  • 訓練數據按照每一個廣告看到的印象進行分層:頻繁的廣告、中等規模的廣告、小批量的廣告。。

  • 頻繁的廣告被完美地記住,即每一個用戶的平均點擊率由廣告和用戶維度來編碼。對他們來講,再訓練沒有壞處,由於他們已經記住了。

  • 中等規模的廣告引發較大的方差,但它是由大數定律平均出來的。在持續的訓練中,中等規模的廣告能夠得到更多的訓練數據並獲得改進。在單遍訓練中,廣告以初始隨機性(因爲初始化)記憶少許用戶;在多遍訓練中,廣告只記住少數用戶,不能推廣到其餘用戶。

經過開始嘗試使用這些ML參數進行正則化和存儲,你能夠成爲ML的高級工程師。誰說ML很難學習?

原文連接:https://medium.com/swlh/the-science-of-optimization-in-ml-26b0b2bb3d62

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/

相關文章
相關標籤/搜索