全部產品
Search
文件中心

PolarDB:DeepFM演算法

更新時間:Aug 06, 2026

本文介紹了DeepFM演算法相關內容。

簡介

DeepFM將深度學習模型(DNN)和因子分解機(FM)模型結合,同時支援學習低階顯式特徵組合和高階隱式特徵組合,不需要人工做特徵工程,常用於推薦系統或廣告系統。

  • 輸入通常有以下兩類特徵:

    • 類別特徵(Categorical Feature):字串類型。如性別(男/女)或物品類型(服飾、玩具、電子等)。

    • 數值特徵(Numrical Feature):整型或浮點型。如使用者活躍度或商品價格等。

  • 輸出通常是0~1之間的浮點數,表示取值為1的機率。可以用於排序,也可以用於二分類。

使用情境

DeepFM通常用於分類或排序情境。在人工構建的特徵但不能直接反映結果的情境上效果更好。在各種各樣的推薦情境中,低階特徵組合或者高階的特徵組合都會對使用者最終的行為產生影響。但人為可能無法明確特徵組合,DeepFM可以自動學習這些組合。

例如:在個人化商品推薦情境中,通常需要做點擊預估模型。使用使用者過往的行為(點擊、曝光未點擊、購買等)作為建立模型資料,來預測使用者點擊或購買的機率。如果使用者過往行為較多,且不能直接反映出在未來某時刻的點擊或購買情況。DeepFM會對使用者行為進行組合,同時將一些稀疏特徵轉化為高維的稠密特徵。

參數說明

下表中的參數為建立模型CREATE MODEL文法中model_parameter參數的取值,您可以根據當前需求選擇對應的參數。

參數

說明

metrics

評估模型的指標參數。取值如下:

  • accuracy(預設):精確度,用於評估分類模型。

  • binary_crossentropy:交叉熵,用於評估二分類問題。

  • mse:均方誤差,用於評估迴歸模型。

loss

學習任務及對應的學習目標。取值如下:

  • binary_crossentropy(預設):交叉熵,用於二分類問題。

  • mean_squared_error:均方誤差,用於迴歸模型。

optimizer

最佳化器。取值如下:

  • adam(預設):吸收了AdaGrad(適應性學習率的梯度下降演算法)和動量梯度下降演算法的優點,既能適應稀疏梯度(即自然語言和電腦視覺問題),又能緩解梯度震蕩的問題。

  • sgd:隨機梯度下降。

  • rmsprop:對AdaGrad演算法進行改進,引入了權重參數,其對應的步長分量累計修改為加權和。

validation_split

交叉驗證資料比例。預設值為0.2。

epochs

迭代次數。預設6次。

batch_size

每批訓練樣本數。預設值為64。batch 越短越容易過擬合,但過大的 batch_size 會增加單次迭代的記憶體開銷。巨量資料量情境建議增大該值(如 128、256)以提升訓練效率;小資料集或記憶體受限時可適當減小。

learning_rate

學習率,控制模型參數每次更新的幅度。該參數需與 epochs 配合調整:當增加 epochs 時通常需要減小 learning_rate 以防止模型發散或無法收斂;反之減少 epochs 時可適當增大學習率。

dnn_hidden_units

DNN 隱藏層的網路結構。取值樣本:[64,32] 表示兩層隱藏層,節點數分別為 64 和 32。若預設網路結構過於複雜而資料集不足以支撐,會導致訓練緩慢且易失敗。建議根據輸入特徵的數量和資料集規模簡化網路結構,特徵較少時使用較小的隱藏層。

task

任務類型。取值如下:

  • binary(預設):分類模型。

  • regression:迴歸模型。

說明

參數配置最佳實務:

  • 建議顯式指定 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 模型訓練耗時數天仍未完成或最終失敗屬於異常現象,請從以下方向排查:

可能原因

排查與解決方案

batch_size 預設值較小:預設值為 64,巨量資料量情境下處理較慢。

增大batch_size 至 128 或 256,提升單批次處理效率。

learning_rate 與 epochs 不匹配:學習率過大導致模型發散,或過小導致無法收斂。

調整 learning_rate:增加 epochs 時適當減小學習率,減少 epochs 時適當增大學習率。

dnn_hidden_units 定義的模型結構過複雜:資料集不足以支撐複雜網路時訓練緩慢且易失敗。

簡化網路結構,如將 [128,64,32] 改為 [64,32],並根據輸入特徵數量調整隱藏層大小。

關鍵參數未顯式指定:依賴預設值可能導致訓練行為不符合預期。

顯式配置 batch_size、loss、metrics 等關鍵參數,確保訓練配置符合預期。

資料品質問題:訓練資料中存在大量缺失值、異常值或特徵分布不均勻。

檢查訓練資料品質,對缺失值進行填充或剔除異常樣本後再重新訓練。