負樣本隨機採樣
1. 採樣細節和auc
在構建YouTube的負樣本的時候針對樣本數據,我們採用對所有正樣本覆蓋到的視頻隨機採樣的方式進行負樣本的選取。
一條輸入的樣本數據對應下一個點擊的視頻vid作爲正樣本,63個隨機挑選的vid作爲負樣本。
採用隨機採樣我們訓練得到的模型auc如下:
epoch 0, auc: 0.975047328233897
epoch 1, auc: 0.9787315107784329
epoch 2, auc: 0.9768194927164626
epoch 3, auc: 0.975806570236023
epoch 4, auc: 0.9728442576988845
2. 用戶向量
在訓練好的模型中,通過YouTube DNN得到用戶的實時向量。
在計算得到的用戶向量總的維度爲342
其中爲激活值爲0.0的結果爲210
個。
在以ReLu爲激活函數的神經網絡中,激活值爲0的神經元在模型訓練的過程中,無法通過反向傳播再更新參數。
這樣的神經元稱爲死亡神經元:
在這種情況下YouTube DNN最後一層的神經元的死亡率爲61.58%
曝光負樣本採樣
1. 採樣細節和auc
除了使用隨機負採樣的方式,我們還通過選取對應用戶曝光未點擊的視頻作爲負樣本,點擊的視頻作爲正樣本。
通過曝光負採樣,在模型訓練過程中測試集上得到的auc如下:
epoch :0, auc :0.8541589495078
epoch :1, auc :0.869886817686467
epoch :2, auc :0.877884247163766
epoch :3, auc:0.8823578210213583
epoch :4, auc :0.8811379979843749
對比分析線上的兩組樣本數據後,發現採用曝光負採樣的過程中採樣到的負樣本視頻大部分和對應的正樣本具有相同的特徵,不具備較大區分度。
2. 用戶向量
在訓練好的模型中,通過YouTube DNN得到用戶的實時向量。
在計算得到的實時向量中總的維度爲342
其中爲激活值爲0.0的結果爲312
個。
這個時候神經元的死亡率爲91.49%
增加負採樣的數量
1.採樣細節和auc
在這一部分的實驗中,我們將在數據集上隨機負採樣的個數從63個擴大到255個。
那麼在YouTube DNN 生成候選集階段對應的所有正樣本和負樣本label向量大小從64維調整到256維。
在訓練過程中,我們得到模型訓練在測試集上的auc如下:
epoch 1, auc :0.970688
epoch 2, auc :0.97564
epoch 3, auc :0.977798
2. 用戶向量
在上述模型的基礎上,我們進一步擴展了negative sampling中負樣本的個數之後,得到的用戶向量依舊爲342維。
這個時候,在342維的用戶向量中激活值爲0的維度爲175維,ReLU激活神經元死亡率爲:51.17%
根據上述情況的分析,在負樣本個數增加的情況下直觀上從離線數據上看,對模型效果的提升有一個正向的預期。
在真實的線上實驗中,我們確實也得到了一個正向的效果提升。
4. 相關思考
-
在YouTube DNN的原始論文中採用Importance Sampling,這種採樣方式我這裏沒有復現,說實話還是有點難度的。
-
在YouTube DNN的原始論文中排序階段構建label負樣本的時候使用的是曝光負採樣。
問題1: 我要是復現使用Importance Sampling方式的話能不能效果是否會比隨機負採樣更好? 以及Importance Sampling和隨機負採樣的區別在哪裏?
問題2: 爲什麼原始論文Ranking的負採樣使用曝光負採樣,Generate Candidate階段的負採樣使用Importance Sampling的方式?
問題3: 爲什麼我在Generate Candidate階段採用曝光數據作爲負樣本AUC有了明顯的下降?
問題4: 爲什麼最後激活值得到的用戶向量有大量的0值? 爲什麼採用曝光作爲負樣本0值會更多?
歡迎大家在評論區留言討論
也可以關注我的微信公衆號:終南樵。解鎖更多新姿勢。