做者|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/