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

搜广推校招面经七

抖音推荐算法

  • 一、广告系统中的数据流处理方法,怎么避免延迟回流问题
    延迟回流问题是指,实时系统(如广告点击预估)中,历史数据未及时更新或发生延迟,导致系统的实时预测偏离实际情况。避免延迟回流的方法有
    • 使用高效的流处理框架
      Kafka、Flink等流处理工具,确保实时性; 使用滑动窗口处理实时数据,允许系统适应一定的延迟
    • 特征工程优化
      • 消除数据泄漏
        严格限制特征只使用过去和当前的可用数据,防止数据泄露。
      • 实时与离线特征分层
        将特征分为离线特征(如用户画像、历史行为)和实时特征(如当前广告上下文、实时点击行为),根据实时性不同分阶段更新。
    • 模型训练优化
      • 使用增量学习(在线学习)
        持续训练模型,吸收最新的数据流输入;在模型训练中,为最新数据分配更高的权重,减小延迟数据对模型影响
  • 二、介绍DeepFM模型
    DeepFM 是一种结合了因子分解机(FM)和深度神经网络(DNN)的模型,旨在同时捕捉特征的低阶交互和高阶非线性交互。其结构可以分为两个部分:FM 部分和 DNN 部分,最终两者的输出会结合起来进行预测。
import torch
import torch.nn as nn
import torch.optim as optimclass DeepFM(nn.Module):def __init__(self, n_features, embedding_dim, hidden_units, dropout_rate=0.5):super(DeepFM, self).__init__()self.embedding = nn.Embedding(n_features, embedding_dim)self.dnn = nn.Sequential(nn.Linear(n_features * embedding_dim, hidden_units[0]),nn.ReLU(),nn.Dropout(dropout_rate),nn.Linear(hidden_units[0], hidden_units[1]),nn.ReLU(),nn.Dropout(dropout_rate),nn.Linear(hidden_units[1], 1))# 输出层:FM 和 DNN 部分的输出拼接self.output_layer = nn.Linear(1 + 1, 1)  # FM 输出与 DNN 输出拼接def forward(self, x):# FM 部分:计算特征的二阶交互embedding_x = self.embedding(x)fm_output = torch.sum(torch.pow(torch.sum(embedding_x, dim=1), 2) - torch.sum(torch.pow(embedding_x, 2), dim=1), dim=1, keepdim=True)# DNN 部分:通过嵌入层和神经网络计算高阶特征交互x_dnn = embedding_x.view(embedding_x.size(0), -1)dnn_output = self.dnn(x_dnn)# 输出层:将 FM 和 DNN 的输出拼接起来output = self.output_layer(torch.cat([fm_output, dnn_output], dim=1))return output
# 示例
n_features = 10  # 假设有 10 个特征
embedding_dim = 5  # 每个特征的嵌入维度
hidden_units = [64, 32]  # DNN 的隐藏层大小
model = DeepFM(n_features, embedding_dim, hidden_units)
# 假设有 4 个样本,每个样本有 10 个特征
x = torch.randint(0, n_features, (4, n_features))
output = model(x)
print("DeepFM 输出:", output)

其中 fm_output = torch.sum(torch.pow(torch.sum(embedding_x, dim=1), 2) - torch.sum(torch.pow(embedding_x, 2), dim=1), dim=1, keepdim=True)这行代码计算了FM的二阶交互
在这里插入图片描述

  • 三、多任务学习中ESSM有什么特点
    • 1.ESSM是一个典型的硬共享早期阶段共享的多任务学习模型,通过共享嵌入层和中间层来学习两个任务的共性特征
    • 2.loss函数通过加权平均等计算
      L = α ⋅ L 1 + β ⋅ L 2 L = \alpha \cdot L_{1} + \beta \cdot L_{2} L=αL1+βL2
  • 四、多任务学习中MMoE(Multi-gate Mixture-of-Experts)有什么特点,如何解决不同任务的梯度冲突
    利用 专家网络(Experts) 和 任务门控(Task-specific Gates) 来共享底层特征,同时允许每个任务独立选择适合自己的特征组合,通过门控网络提供动态特征共享机制,有效缓解任务冲突
    • DWA(Dynamic Weight Average)
      DWA 动态调整每个任务的损失权重,目的是平衡任务之间的训练进度。DWA 根据任务的损失下降速率动态调整权重,鼓励更慢收敛的任务获得更多关注。
      在这里插入图片描述
    • PCGrad(Project Conflicting Gradient)
      PCGrad 当两个任务的梯度方向冲突时,PCGrad 会将一个梯度在另一个梯度的正交方向上进行投影
      在这里插入图片描述
    • 3.Uncertainty Weighting
      基于任务输出的不确定性调整权重,不确定性大的任务权重降低。
      在这里插入图片描述
  • 五、激活函数sigmoid、tanh出现梯度消失可以怎么处理
    • 1.原因分析
      在这里插入图片描述
    • 2.替换其他更加稳定的激活函数
      在这里插入图片描述
  • 3.批归一化 (Batch Normalization)
  • 4.正则化
  • 5.调整学习率
  • 6.残差连接
  • 7.梯度裁剪 (Gradient Clipping)
    在反向传播过程中,对梯度进行裁剪,防止梯度过小或过大
    在这里插入图片描述
torch.nn.utils.clip_grad_norm_ # torch中有自带的梯度剪裁方法
  • 六、介绍AUC,手撕AUC
    AUC有一个常用的定义:随机从正样本和负样本中各选一个,分类器对于该正样本打分大于该负样本打分的概率。基于计算AUC的代码可以写为
def cal_auc_1(label, pred):numerator = 0    # 分子denominator = 0  # 分母for i in range(len(label) - 1):for j in range(i, len(label)):if label[i] != label[j]:denominator += 1# 统计所有正负样本对中,模型把相对位置排序正确的数量r = (label[i] - label[j]) * (pred[i] - pred[j])if r > 0:numerator += 1elif r == 0:numerator += 0.5return numerator / denominator
  • 七、手撕:最大上升子序列(LIS)
    给定一个无序的整数数组,找到其中的最长严格递增子序列,并返回该子序列的长度,子序列可以不连续。这是一个经典的动态规划问题
def LIS(nums):if not nums:return 0 dp = [1] * len(nums) # dp[i] 表示以 nums[i] 为结尾的最长递增子序列长度# 遍历所有元素,计算以每个元素为结尾的最长递增子序列for i in range(1, len(nums)):for j in range(i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j] + 1)return max(dp)      # 返回 dp 中的最大值,即最长递增子序列的长度
http://www.lryc.cn/news/521006.html

相关文章:

  • Leetcode 518. 零钱兑换 II 动态规划
  • 【EI 会议征稿】第四届材料工程与应用力学国际学术会议(ICMEAAE 2025)
  • 集合的线程安全
  • 《深入理解Mybatis原理》Mybatis中的缓存实现原理
  • C# 数据拟合教程:使用 Math.NET Numerics 的简单实现
  • C# 中对 Task 中的异常进行捕获
  • Android车机DIY开发之软件篇(九)默认应用和服务修改
  • SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码
  • web.xml常用配置
  • 代码随想录刷题day07|(数组篇)58.区间和
  • 【Linux】进程结束和进程等待
  • 可编辑精品PPT | 城投集团(行业)数字化解决方案
  • 统计学习算法——决策树
  • 基于网络爬虫技术的网络新闻分析
  • 51_Lua面向对象编程
  • 关于在 Kotlin DSL 中,ndk 的配置方式
  • 【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
  • Spring Boot 应用开发入门
  • 【C语言】字符串函数详解
  • 【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)
  • 非PHP开源内容管理系统(CMS)一览
  • WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
  • SQLAlchemy -批量插入时忽略重复
  • 1月13日学习
  • Steam个人开发者注册备记
  • django在线考试系统
  • Laravel 中 Cache::remember 的基本用途
  • 前端进程和线程及介绍
  • OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
  • Vue Router