本文介紹了DeepFM演算法相關內容。
簡介
DeepFM將深度學習模型(DNN)和因子分解機(FM)模型結合,同時支援學習低階顯式特徵組合和高階隱式特徵組合,不需要人工做特徵工程,常用於推薦系統或廣告系統。
輸入通常有以下兩類特徵:
類別特徵(Categorical Feature):字串類型。如性別(男/女)或物品類型(服飾、玩具、電子等)。
數值特徵(Numrical Feature):整型或浮點型。如使用者活躍度或商品價格等。
輸出通常是0~1之間的浮點數,表示取值為1的機率。可以用於排序,也可以用於二分類。
使用情境
DeepFM通常用於分類或排序情境。在人工構建的特徵但不能直接反映結果的情境上效果更好。在各種各樣的推薦情境中,低階特徵組合或者高階的特徵組合都會對使用者最終的行為產生影響。但人為可能無法明確特徵組合,DeepFM可以自動學習這些組合。
例如:在個人化商品推薦情境中,通常需要做點擊預估模型。使用使用者過往的行為(點擊、曝光未點擊、購買等)作為建立模型資料,來預測使用者點擊或購買的機率。如果使用者過往行為較多,且不能直接反映出在未來某時刻的點擊或購買情況。DeepFM會對使用者行為進行組合,同時將一些稀疏特徵轉化為高維的稠密特徵。
參數說明
下表中的參數為建立模型CREATE MODEL文法中model_parameter參數的取值,您可以根據當前需求選擇對應的參數。
參數 | 說明 |
| 評估模型的指標參數。取值如下:
|
| 學習任務及對應的學習目標。取值如下:
|
| 最佳化器。取值如下:
|
| 交叉驗證資料比例。預設值為0.2。 |
| 迭代次數。預設6次。 |
| 每批訓練樣本數。預設值為64。batch 越短越容易過擬合,但過大的 |
| 學習率,控制模型參數每次更新的幅度。該參數需與 |
| DNN 隱藏層的網路結構。取值樣本: |
| 任務類型。取值如下:
|
參數配置最佳實務:
建議顯式指定
loss、metrics、batch_size等關鍵參數,避免因依賴預設值導致訓練行為不符合預期。batch_size與epochs需配合調整:增大 batch_size 時可適當減少 epochs,減小 batch_size 時需增加 epochs 以保證充分訓練。learning_rate與epochs需配合調整:epochs 增加時應適當減小 learning_rate 防止發散。dnn_hidden_units應根據特徵數量設定,特徵較少時避免使用過深的網路結構。
樣本
建立模型與離線模型學習
/*polar4ai*/CREATE MODEL airline_deepfm WITH
(model_class = 'deepfm',
x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',
y_cols='Delay',model_parameter=(epochs=6))
AS (SELECT * FROM db4ai.airlines);模型評估
/*polar4ai*/SELECT Airline FROM EVALUATE(MODEL airline_deepfm,
SELECT * FROM db4ai.airlines LIMIT 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',y_cols='Delay',metrics='acc');模型預測
/*polar4ai*/SELECT Airline FROM PREDICT(MODEL airline_deepfm,
SELECT * FROM db4ai.airlines limit 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length');常見問題
Q:DeepFM 模型訓練耗時過長或最終失敗如何排查?
A:DeepFM 模型訓練耗時數天仍未完成或最終失敗屬於異常現象,請從以下方向排查:
可能原因 | 排查與解決方案 |
| 增大 |
| 調整 |
| 簡化網路結構,如將 |
關鍵參數未顯式指定:依賴預設值可能導致訓練行為不符合預期。 | 顯式配置 |
資料品質問題:訓練資料中存在大量缺失值、異常值或特徵分布不均勻。 | 檢查訓練資料品質,對缺失值進行填充或剔除異常樣本後再重新訓練。 |