滴滴算法工程師面經
一、矩陣分解的原理與優化意義
矩陣分解在推薦系統中是一個非常核心的方法,尤其是在 協同過濾(Collaborative Filtering) 中。我們可以通過用戶對物品的評分行為來推測用戶的喜好,從而推薦他們可能喜歡的內容。
1.1. 直觀理解:補全稀疏矩陣
在推薦系統中,我們常見的用戶-物品評分矩陣 R R R 是一個非常稀疏的矩陣:
用戶\物品 | 電影A | 電影B | 電影C | 電影D |
---|---|---|---|---|
用戶1 | 5 | ? | 3 | ? |
用戶2 | ? | 4 | ? | 2 |
用戶3 | 1 | ? | ? | 5 |
目標:預測問號的位置,也就是未評分項的評分,用來推薦用戶可能喜歡的物品。
1.2. 數學建模:矩陣分解思想
我們希望將評分矩陣 R ∈ R m × n R \in \mathbb{R}^{m \times n} R∈Rm×n分解為兩個低秩矩陣:
R ≈ P Q T R \approx P Q^T R≈PQT
其中:
- P ∈ R m × k P \in \mathbb{R}^{m \times k} P∈Rm×k:用戶的潛在因子矩陣,每一行表示一個用戶在 k k k 維隱空間中的向量(偏好)
- Q ∈ R n × k Q \in \mathbb{R}^{n \times k} Q∈Rn×k:物品的潛在因子矩陣,每一行表示一個物品在 k k k 維隱空間中的向量(特性)
- k k k:潛在維度,遠小于用戶數 m m m 和物品數 n n n
最終評分預測:
R ^ i j = P i ? Q j T \hat{R}_{ij} = P_i \cdot Q_j^T R^ij?=Pi??QjT?
1.3. 優化目標函數
我們只對已有評分位置進行擬合:
min ? P , Q ∑ ( i , j ) ∈ Ω ( R i j ? P i Q j T ) 2 + λ ( ∣ ∣ P ∣ ∣ F 2 + ∣ ∣ Q ∣ ∣ F 2 ) \min_{P,Q} \sum_{(i,j)\in\Omega} (R_{ij} - P_i Q_j^T)^2 + \lambda(||P||_F^2 + ||Q||_F^2) P,Qmin?(i,j)∈Ω∑?(Rij??Pi?QjT?)2+λ(∣∣P∣∣F2?+∣∣Q∣∣F2?)
其中:
- Ω \Omega Ω:表示有評分的索引集合
- λ \lambda λ:正則項系數,防止過擬合
- ∣ ∣ ? ∣ ∣ F ||\cdot||_F ∣∣?∣∣F?:Frobenius 范數
1.4. 訓練算法
常用優化方法:
- ? 隨機梯度下降法(SGD)
- ? 交替最小二乘法(ALS):先固定 ( P ) 求 ( Q ),再固定 ( Q ) 求 ( P ),反復迭代
- ? SVD 分解(用于沒有缺失值的場景)
1.5. 實際推薦步驟
- 構造用戶-物品評分矩陣 R R R
- 矩陣分解 得到 P , Q P, Q P,Q
- 評分預測 R ^ i j = P i Q j T \hat{R}_{ij} = P_i Q_j^T R^ij?=Pi?QjT?
- 按預測評分排序 為用戶推薦他們沒有評分過、預測評分最高的物品
二、XGBoost vs LightGBM的差異?如何選擇分裂點?
見【搜廣推校招面經十、九、六十二】
三、如果數據分布偏移(如疫情前后出行規律變化),如何調整模型?
在現實場景中,如疫情前后,用戶行為可能發生顯著變化,導致訓練數據與當前預測環境存在**數據分布偏移(Data Distribution Shift)**問題。為應對這一挑戰,可以從以下幾個方面調整模型:
3.1. 數據層面的調整
增加新時期數據
- 收集疫情后(或分布變化后)的數據,擴充訓練集。
- 保證訓練數據涵蓋當前的特征分布。
數據加權或重采樣
- 對疫情前后的樣本設置不同權重,增強模型對現階段數據的適應能力。
- 使用重要性加權 (Importance Weighting),通過估計測試分布和訓練分布之間的比值進行重加權。
數據漂移檢測與特征選擇
- 使用**KS檢驗、PCA投影、最大均值差異(MMD)**等方法,檢測哪些特征發生了分布變化。
- 剔除不穩定特征,僅保留穩定有效特征進行建模。
3.2. 模型訓練策略調整
遷移學習(Transfer Learning) / 增量學習
- 在原模型基礎上,使用疫情后的少量標注數據進行微調(fine-tuning)。
- 或從零開始對新數據重新訓練(若舊數據不再具有代表性)。
聯合訓練(Joint Training)
- 將疫情前后的數據合并,同時訓練模型,但引入領域標識(Domain Indicator)或多任務學習方式,區分兩個分布的數據。
四、Softmax為什么soft?
Softmax 是一種函數,常用于多分類模型的最后一層,用于將一個向量映射為一個概率分布。公式如下:
Softmax ( z i ) = e z i ∑ j e z j \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}} Softmax(zi?)=∑j?ezj?ezi??
它的輸入是一組實數 z 1 , z 2 , . . . , z n z_1, z_2, ..., z_n z1?,z2?,...,zn?,輸出是 n n n 個值,這些值都在 0 和 1 之間,總和為 1,表示每個類的概率。
4.1. Soft 的含義
“Soft” 是相對于 “Hard” 來說的。比如:
- Hard max 是只取最大值的位置為 1,其他為 0
- 比如:[2.1, 5.6, 3.3] → [0, 1, 0]
- Softmax 則是“柔和地”表達各個值的相對大小:
- 比如:[2.1, 5.6, 3.3] → [0.02, 0.91, 0.07]
也就是說,Softmax 不是簡單地做最大化(max)操作,而是“soft”(柔化)了這個選擇過程,保留了其他選項的可能性。
- 比如:[2.1, 5.6, 3.3] → [0.02, 0.91, 0.07]
4.2. Soft 的好處
- 可微分性:相比 hard max,softmax 是光滑且可導的,有利于梯度下降優化。
- 表達不確定性:當模型不確定時,softmax 可以輸出類似 [0.4, 0.3, 0.3] 的概率分布,而 hard max 無法做到。
- 避免信息丟失:hard max 直接抹掉非最大值的信息,softmax 則保留了不同選項之間的差異。
Softmax 之所以叫 “soft”,是因為它是一種 “平滑的最大化”,在輸出概率的同時,保留了對非最大值的“溫柔態度”。