当前位置: 首页 > news >正文

搜广推校招面经七十一

滴滴算法工程师面经

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

矩阵分解在推荐系统中是一个非常核心的方法,尤其是在 协同过滤(Collaborative Filtering) 中。我们可以通过用户对物品的评分行为来推测用户的喜好,从而推荐他们可能喜欢的内容。

1.1. 直观理解:补全稀疏矩阵

在推荐系统中,我们常见的用户-物品评分矩阵 R R R 是一个非常稀疏的矩阵:

用户\物品电影A电影B电影C电影D
用户15?3?
用户2?4?2
用户31??5

目标:预测问号的位置,也就是未评分项的评分,用来推荐用户可能喜欢的物品。

1.2. 数学建模:矩阵分解思想

我们希望将评分矩阵 R ∈ R m × n R \in \mathbb{R}^{m \times n} RRm×n分解为两个低秩矩阵:
R ≈ P Q T R \approx P Q^T RPQT
其中:

  • P ∈ R m × k P \in \mathbb{R}^{m \times k} PRm×k:用户的潜在因子矩阵,每一行表示一个用户在 k k k 维隐空间中的向量(偏好)
  • Q ∈ R n × k Q \in \mathbb{R}^{n \times k} QRn×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=PiQjT

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)Ω(RijPiQjT)2+λ(∣∣PF2+∣∣QF2)

其中:

  • Ω \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”,是因为它是一种 “平滑的最大化”,在输出概率的同时,保留了对非最大值的“温柔态度”。

http://www.dtcms.com/a/121703.html

相关文章:

  • 示波器直流耦合与交流耦合:何时使用哪种?
  • Spring Boot 中集成 Knife4j:解决文件上传不显示文件域的问题
  • [漏洞篇]SSRF漏洞详解
  • 华为网路设备学习-17
  • 即时通讯软件BeeWorks,企业如何实现细粒度的权限控制?
  • PostgreSQL-数据库的索引 pg_operator_oid_index 损坏
  • JAVAWeb_Servlet:前置准备与理论简易介绍
  • input_ids ,attention_mask 是什么
  • js解除禁止复制、禁止鼠标右键效果
  • 阿里发布实时数字人项目OmniTalker,实时驱动技术再突破~
  • json 转 txt 用于 yolo 训练(可适用多边形标注框_python)
  • HOW - React Developer Tools 调试器
  • SpringBoot和微服务学习记录Day1
  • 决策树+泰坦尼克号生存案例
  • 强化学习原理一
  • 本地部署 opik
  • 卡码网54.替换数字
  • 紫光展锐5G SoC T8300:影像升级,「定格」美好世界
  • 用户画像(https://github.com/memodb-io/memobase)应用
  • 神经网络 - 关于简单的激活函数的思考总结
  • Java-对比两组对象找出发生变化的字段工具-支持枚举映射-支持时间-支持显示对应字段中文描述-嵌套list等场景
  • 淘宝API接口:淘宝API接口概述以及对开发者的具体帮助
  • SSRF漏洞技术解析与实战防御指南
  • 【Git 常用操作指令指南】
  • 汽车车窗升降系统全生命周期耐久性验证方案研究
  • Git 的进阶功能和技巧
  • git强制更新本地分支
  • TryhackMe WhatsYourName:题解
  • 都江堰与郑国渠
  • TQTT_KU5P开发板教程---文件的烧写与程序固化