搜广推校招面经七十一

滴滴算法工程师面经

一、矩阵分解的原理与优化意义

矩阵分解在推荐系统中是一个非常核心的方法,尤其是在 协同过滤(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−PiQjT)2+λ(∣∣P∣∣F2+∣∣Q∣∣F2)

其中:

  • Ω \Omega Ω:表示有评分的索引集合
  • λ \lambda λ:正则项系数,防止过拟合
  • ∣ ∣ ⋅ ∣ ∣ F ||\cdot||_F ∣∣⋅∣∣F:Frobenius 范数

1.4. 训练算法

常用优化方法:

  • 随机梯度下降法(SGD)
  • 交替最小二乘法(ALS):先固定 ( P ) 求 ( Q ),再固定 ( Q ) 求 ( P ),反复迭代
  • SVD 分解(用于没有缺失值的场景)

1.5. 实际推荐步骤

  1. 构造用户-物品评分矩阵 R R R
  2. 矩阵分解 得到 P , Q P, Q P,Q
  3. 评分预测 R ^ i j = P i Q j T \hat{R}_{ij} = P_i Q_j^T R^ij=PiQjT
  4. 按预测评分排序 为用户推荐他们没有评分过、预测评分最高的物品

二、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)=∑jezjezi

它的输入是一组实数 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"(柔化)了这个选择过程,保留了其他选项的可能性。

4.2. Soft 的好处

  • 可微分性:相比 hard max,softmax 是光滑且可导的,有利于梯度下降优化。
  • 表达不确定性:当模型不确定时,softmax 可以输出类似 [0.4, 0.3, 0.3] 的概率分布,而 hard max 无法做到。
  • 避免信息丢失:hard max 直接抹掉非最大值的信息,softmax 则保留了不同选项之间的差异。

Softmax 之所以叫 "soft",是因为它是一种 "平滑的最大化",在输出概率的同时,保留了对非最大值的"温柔态度"。

相关推荐
Faylynn1 小时前
AI入门:Prompt提示词写法
人工智能·ai·prompt
___Dream1 小时前
【TF-BERT】基于张量的融合BERT多模态情感分析
人工智能·深度学习·bert
Jamence1 小时前
多模态大语言模型arxiv论文略读(六十三)
人工智能·语言模型·自然语言处理
hkNaruto3 小时前
【AI】Ubuntu 22.04 evalscope 模型评测 Qwen3-4B-FP8
人工智能·ubuntu·qwen3
(・Д・)ノ3 小时前
python打卡day18
人工智能·机器学习
生信碱移4 小时前
TCGA数据库临床亚型可用!贝叶斯聚类+特征网络分析,这篇 NC 提供的方法可以快速用起来了!
人工智能·python·算法·数据挖掘·数据分析
奔驰的小野码4 小时前
SpringAI实现AI应用-内置顾问
java·人工智能·后端·spring
CHNMSCS4 小时前
PyTorch_创建01张量
人工智能·pytorch·python
新加坡内哥谈技术5 小时前
微软与Meta大幅增加人工智能基础设施投入
人工智能
说私域5 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的爆品力构建研究
人工智能·小程序·开源·零售