搜广推校招面经十九

快手推荐算法

一、1*1的cnn有什么作用?

1.1. 降维与通道数调整(Channel Reduction)

在 CNN 中,特征图(Feature Map)通常有多个通道(channels)。

  • 1×1 卷积可以用于减少通道数,从而降低计算量,提高模型效率。
  • 1×1 卷积可以增加通道数,以增强特征表达能力。
  • 示例代码(PyTorch):
import torch
import torch.nn as nn
conv1x1 = nn.Conv2d(in_channels=64, out_channels=32, kernel_size=1, stride=1, padding=0)
x = torch.randn(1, 64, 32, 32)  # (batch, channels, height, width)
output = conv1x1(x)  # 输出 shape: (1, 32, 32, 32)
print(output.shape)

1.2. 增强非线性表达能力

1×1 卷积不会改变空间尺寸,但可以引入非线性变换(通常配合 ReLU),增强网络的特征提取能力。在 Inception 结构中,使用 1×1 卷积后再使用 3×3 或 5×5 卷积,相当于增加了一层非线性变换,有助于学习更复杂的特征。

1.3. 替代全连接层(FC Layer)

在 CNN 结构中,1×1 卷积可以替代全连接层(Fully Connected, FC),减少参数量,提高泛化能力。

  • 传统 FC 层:1024×1000 维参数
  • 使用 1×1 卷积:1×1×1024 的卷积核可以实现类似的映射,但参数更少
  • 示例代码(PyTorch 替代 FC 层):
# 使用 1x1 卷积替代全连接层
fc_layer = nn.Linear(1024, 1000)  # 传统全连接层
conv1x1_fc = nn.Conv2d(1024, 1000, kernel_size=1)  # 1×1 卷积实现
# 假设输入为 1×1024×1×1
x = torch.randn(1, 1024, 1, 1)  
output = conv1x1_fc(x)  # 仍然输出 1×1000×1×1,相当于 FC 层
print(output.shape)

二、粗排(Coarse Ranking) vs. 精排(Fine Ranking)

在推荐系统、搜索引擎、广告排序等场景中,排序通常分为 粗排(Coarse Ranking)精排(Fine Ranking) 两个阶段。它们的主要区别如下:

2.1. 定义

粗排(Coarse Ranking)

  • 目标:从 海量候选集合快速筛选出一个较小的候选集合,供精排进一步优化。
  • 主要关注 召回效率,使用较简单的模型进行排序。
  • 典型方法:
    • 线性模型(如 Logistic Regression)
    • 基于 Embedding 的相似度计算
    • 轻量级的神经网络(如 MLP)
    • 经典机器学习模型(如 GBDT)

精排(Fine Ranking)

  • 目标:对 粗排筛选出的候选集合 进行 更精细的排序,优化最终推荐效果。
  • 主要关注 排序质量,使用更复杂的模型进行精细打分。
  • 典型方法:
    • 深度学习模型(如 DNN、Transformer)
    • 序列模型(如 RNN/LSTM)
    • 复杂的 GBDT 结合深度学习(如 Wide & Deep、DeepFM)

2.2. 对比分析

对比项 粗排(Coarse Ranking) 精排(Fine Ranking)
目标 高效筛选,减少计算量 细粒度优化排序
输入规模 百万 / 千万级 候选集合 百 / 千级 预选候选
计算复杂度 低(O(n) 级别) 高(复杂模型计算)
计算资源 轻量级,适用于大规模数据 资源消耗大,适用于少量数据
常用模型 线性模型、GBDT、Embedding 相似度 DNN、Transformer、深度排序模型
关注点 召回率、效率、覆盖率 排序精度、用户满意度

2.3. 典型应用场景

  • 推荐系统

    • 粗排:基于用户行为 Embedding 计算相似度,筛选前 1% 的候选项。
    • 精排:使用 DNN 计算用户-物品匹配得分,优化点击率(CTR)。
  • 搜索排序

    • 粗排:基于 BM25、TF-IDF 计算相关性,筛选 top-K 结果。
    • 精排:使用神经网络进行文本匹配、意图理解,提高相关性。
  • 广告点击率预估(CTR 预估)

    • 粗排:GBDT 快速筛选潜在点击广告。
    • 精排:DeepFM / Transformer 计算点击率,优化用户体验。

2.4. 总结

  • 粗排(Coarse Ranking) 主要用于 快速筛选候选,减少计算成本,适用于大规模数据。
  • 精排(Fine Ranking) 主要用于 精细优化排序,提高最终推荐效果,适用于较小的候选集合。
  • 现代推荐系统和搜索引擎通常采用 “粗排 + 精排” 的多阶段排序框架,以 兼顾效率和效果

三、精排(Fine Ranking)主流模型

在推荐系统、搜索引擎、广告排序等场景中,精排(Fine Ranking) 主要负责对粗排筛选出的候选集合进行 细粒度打分和排序
以下是 精排阶段的主流模型,按 传统机器学习深度学习 分类介绍。

3.1. 传统机器学习模型

早期的精排主要基于传统机器学习方法,常见模型包括:

3.1.1 GBDT(梯度提升决策树)

  • 代表算法:XGBoost、LightGBM、CatBoost
  • 特点
    • 处理非线性特征,支持类别型数据
    • 计算效率高,容易调参
    • 但模型表达能力有限,对序列关系建模能力较弱
  • 应用
    • 早期推荐系统、广告点击率(CTR)预估
    • 结合深度学习(如 Wide & Deep)

3.2. 深度学习模型

随着计算能力和数据规模的增长,精排阶段逐步采用更复杂的深度学习模型。

3.2.1 DNN(Deep Neural Network)

  • 典型结构:全连接神经网络(MLP)
  • 作用:
    • 提取非线性特征
    • 结合 Embedding 进行特征交互

3.2.2. Wide & Deep -> DeepFM -> DIN(Deep Interest Network)->DIEN -> SIM

3.3. Transformer 相关模型

随着 Transformer 发展,序列建模 在精排中表现优异:

3.3.1 BERT4Rec

  • 基于 Transformer 的序列推荐
  • 特点
    • 适用于用户行为序列建模
    • 采用 Masked Language Model(MLM) 进行训练
  • 应用
    • 电影推荐(Netflix)
    • 书籍推荐(豆瓣)

3.3.2 SASRec

  • Self-Attention Sequence Recommender
  • 使用 自注意力(Self-Attention) 进行序列推荐
  • 比 RNN 更高效,捕捉长距离依赖

3.4 MMoE(Multi-gate Mixture-of-Experts)

  • 适用于多任务学习(Multi-Task Learning)
  • 采用多个专家网络(Experts) 共享底层信息
  • 应用
    • 抖音 / 今日头条 多目标推荐(CTR、点赞、转发等)
    • 广告排序(CVR 预估)

3.5. 总结

模型 特点 应用场景
GBDT / LambdaMART 计算高效、可解释性强 传统搜索排序、广告点击率预估
DNN 适用于非线性特征 早期深度推荐模型
Wide & Deep 结合记忆能力与泛化能力 Google Ads 推荐系统
DeepFM 自动学习特征交互 电商推荐、广告
DIN 注意力机制提取用户兴趣 淘宝推荐、个性化广告
BERT4Rec / SASRec 基于 Transformer 进行序列建模 电影 / 购物推荐
MMoE 多任务学习,适应不同优化目标 抖音、今日头条广告排序

在实际应用中,推荐系统往往结合多种模型(如 GBDT + DNN、Wide & Deep + Transformer)进行排序,以 兼顾效率和精度

四、102. 二叉树的层序遍历(hot100_中等)

class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root: return []
        res, queue = [], collections.deque()
        queue.append(root)
        while queue:
            tmp = []
            for _ in range(len(queue)):
                node = queue.popleft()
                tmp.append(node.val)
                if node.left: queue.append(node.left)
                if node.right: queue.append(node.right)
            res.append(tmp)
        return res

你可能感兴趣的:(搜广推面经,搜索引擎,推荐算法,python,求职招聘)