machine-learning
  • Welcome
  • 动手学深度学习
    • 1. 前言
    • 2. 预备知识
    • 3. 线性神经网络
    • 4. 多层感知机
    • 5. 深度学习计算
    • 6. 卷积神经网络
    • 7. 现代卷积神经网络
    • 8. 循环神经网络
    • 9. 现代循环神经网络
    • 10. 注意力机制
    • 11. 优化算法
    • 12. 计算性能
    • 13. 计算机视觉
    • 14. 自然语言处理:预训练
    • 15. 自然语言处理:应用
    • 16. 附录:深度学习工具
  • 百面机器学习
    • 1. 特征工程
    • 2. 模型评估
    • 3. 经典算法
    • 4. 降维
    • 5. 非监督学习
    • 6. 概率图模型
    • 7. 优化算法
    • 8. 采样
    • 9. 前向神经网络
    • 10. 循环神经网络
    • 11. 强化学习
    • 12. 集成学习
    • 13. 生成式对抗网络
    • 14. 人工智能的热门应用
  • 百面深度学习
    • 1. 卷积神经网络 CNN
    • 2. 循环神经网络 RNN
    • 3. 图神经网络 GNN
    • 4. 生成模型
    • 5. 生成式对抗网络 GAN
    • 6. 强化学习 RL
    • 7. 元学习
    • 8. 自动化机器学习 AutoML
    • 9. 计算机视觉 CV
    • 10. 自然语言处理 NLP
    • 11. 推荐系统
    • 12. 计算广告
    • 13. 视频处理
    • 14. 计算机听觉
    • 15. 自动驾驶
  • 统计学习方法
  • 推荐系统实践
    • 1. 推荐系统
    • 2. 特征工程
    • 3. Embedding
    • 4. 精排
    • 5. 召回
    • 6. 粗排/重排
    • 7. 多任务/多场景
    • 8. 冷启动
    • 9. 评估调试
    • 10. 自我修养
  • 深度学习推荐系统
    • 1. 推荐系统
    • 2. 进化之路
    • 3. 深度学习的应用
    • 4. Embedding
    • 5. 多角度审视
    • 6. 工程实现
    • 7. 评估方法
    • 8. 前沿实践
    • 9. 知识框架
  • 强化学习的数学原理
    • 1. 基础概念
    • 2. 贝尔曼公式
    • 3. 贝尔曼最优公式
    • 4. 值迭代与策略迭代
    • 5. 蒙特卡洛方法
    • 6. 随机近似与随机梯度下降
    • 7. 时序差分方法
    • 8. 值函数近似
    • 9. 策略梯度方法
    • 10. Actor-Critic方法
Powered by GitBook
On this page
  • 4.1 推荐算法的五个维度
  • 4.2 交叉结构
  • FTRL:传统时代的记忆大师
  • FM:半脚迈入 DNN 的门槛
  • Wide & Deep:兼顾记忆与扩展
  • DeepFM:融合二阶交叉
  • DCN:不再迷信 DNN
  • AutoInt:借用 Transformer 特征交叉
  • 4.3 用户行为序列建模
  • DIN:千物千面
  • 建模序列内的依赖关系
  • 建模长序列
  1. 推荐系统实践

4. 精排

Previous3. EmbeddingNext5. 召回

Last updated 1 year ago

4.1 推荐算法的五个维度

  • 记忆与扩展

  • Embedding

  • 高维稀疏的类别特征

  • 交叉结构

  • 用户行为序列建模

4.2 交叉结构

FTRL:传统时代的记忆大师

  • 技术要求:online learning、特征稀疏

  • FTRL:为了减少单个样本的随机扰动,最优参数,是让之前所有步骤的损失之和最小

    • 引入代理损失函数:wt+1=argmin⁡w[g1:t⋅w+12(∑s=1tσs∥w−ws∥22)+λ1∥w∥1+12λ2∥w∥22]\mathbf{w}_{t+1}=\operatorname{argmin}_{\mathbf{w}}\left[\mathbf{g}_{1: t} \cdot \mathbf{w}+\frac{1}{2}\left(\sum_{s=1}^t \sigma_s\left\|\mathbf{w}-\mathbf{w}_s\right\|_2^2\right)+\lambda_1\|\mathbf{w}\|_1+\frac{1}{2} \lambda_2\|\mathbf{w}\|_2^2\right]wt+1​=argminw​[g1:t​⋅w+21​(∑s=1t​σs​∥w−ws​∥22​)+λ1​∥w∥1​+21​λ2​∥w∥22​]

    • 每个特征独立设置步长:ηt,i=αβ+∑s=1tgs,i2\eta_{t, i}=\frac{\alpha}{\beta+\sqrt{\sum_{s=1}^t \mathbf{g}_{s, i}^2}}ηt,i​=β+∑s=1t​gs,i2​​α​

FM:半脚迈入 DNN 的门槛

  • Embedding + 自动二阶交叉:logitFM=b+∑i=1nwixi+∑i=1n∑j=i+1n(vi⋅vj)xixjlogit_{FM}=b+\sum_{i=1}^n w_i x_i+\sum_{i=1}^n \sum_{j=i+1}^n\left(v_i \cdot v_j\right) x_i x_jlogitFM​=b+∑i=1n​wi​xi​+∑i=1n​∑j=i+1n​(vi​⋅vj​)xi​xj​

    • 参数 n2n^2n2 → nknknk,数据利用率高、训练充分

    • 提升了模型的扩展性

Wide & Deep:兼顾记忆与扩展

  • Deep(DNN):Embedding + MLP,高阶隐式交叉(扩展性、多样性)

  • Wide(LR):强于记忆,防止 Deep 过分扩展影响精度,类似正则(查缺补漏)

    • Wide - FTRL,Deep - Adagrad / Adam / ...

DeepFM:融合二阶交叉

  • 自动特征交叉,Wide 侧增加 FM

DCN:不再迷信 DNN

  • DCN (Deep & Cross Network) :隐式交叉结构

    • DCN V2:原始输入长度大,只做信息交叉(而不是压缩和提炼)

  • DCN 与 DNN 融合

    • 串联:DCN → DNN

    • 并联:DCN + DNN

AutoInt:借用 Transformer 特征交叉

    • 将一系列 Value 压缩成一个 Embedding,压缩方式根据 Query

    • 对 Value 序列加权求和,权重就是 Query 和 Key 的相关程度

  • AutoInt

    • 步骤

      • 准备各 field 的 embedding

      • 组成 [B,M,d] 的矩阵 X,套用 transformer

      • 多层 transformer 的结果仍然是 [B,M,d] 矩阵,拼接喂给浅层 DNN

    • 缺点

      • 为了使用 self-attention,要求 field embedding 长度相等

      • 对信息只交叉不压缩,每层输出都是 [B,M,d],时间开销不小

    • 实践:不独立预测,而只是作为一个模块,嵌入更大的模型(只选择部分重要特征)

4.3 用户行为序列建模

  • 行为序列信息的构成

    • 每个视频 id 的 embedding

    • 时间差信息:距离现在时间差,分桶为整数,方便模型刻画时间衰减

    • 视频元信息(作者、来源、分类、标签等),动作程度(观看时长、观看完成度)

  • 简单 pooling:sum / average / weighted-sum

DIN:千物千面

    • 候选物料 t 作为 query,对用户历史序列做 attention(相似度权重)

    • 召回、粗排场景,user / item 解耦,可以用行为序列最后的 item 作为 query

建模序列内的依赖关系

  • 双层 attention

    • self-attention:与前后历史行为交叉、关联

    • target-attention:套用 DIN,建模相关性,得到用户兴趣向量

建模长序列

  • 在线提取用户兴趣:Search-based Intereset Model (SIM)

    • DIN 软过滤 ~O(L),SIM 改用硬过滤,得到相关短序列 SBS

      • Hard Search:搜索相同属性的序列,数据库缓存(userId - category - SBS)

      • Soft Search:根据 item embedding 查找 ANN,组成 SBS

        • Embedding:用候选 item 和长期行为序列,构建小模型预测 CTR,得到 embedding

    • 缺点:实现复杂,耗时增加,工程难度大(维护缓存)

  • 离线预训练用户兴趣

    • 人工统计长期兴趣,e.g. 某个标签过去 1 周/月的 CTR

    • 离线预训练辅助模型,提取用户长期兴趣

      • 预训练模型:输入长期行为序列,输出 embedding 代表用户长期兴趣

      • 行为序列较长的用户,都过一遍模型,将 embedding 存入 KV 数据库

      • 天级更新即可,短期兴趣留给 DIN、双层 attention 等模型学习

    • 预训练模型:双塔结构,cos(A用户长期, A用户短期) 越小越好,cos(A用户长期, B用户短期)

    • 优点:不会增加线上耗时,实现简单

    • 缺点:长期兴趣,不会随着候选无聊而变化

共同训练:CTRpredict=sigmoid(logitwide+logitdeep)CTR_{predict}=sigmoid(logit_{wide}+logit_{deep})CTRpredict​=sigmoid(logitwide​+logitdeep​)

DeepFM:CTRpredict=sigmoid(logitlr+logitfm+logitdnn)CTR_{predict}=sigmoid(logit_{lr}+logit_{fm}+logit_{dnn})CTRpredict​=sigmoid(logitlr​+logitfm​+logitdnn​)

Deep:logitdnn=DNN(Concat(Embedding(xdnn)))logit_{dnn}=DNN(Concat(Embedding(\mathbf{x}_{dnn})))logitdnn​=DNN(Concat(Embedding(xdnn​)))

FM:logitfm=FM(x,Embedding(xdnn))logit_{fm}=FM(\mathbf{x},Embedding(\mathbf{x}_{dnn}))logitfm​=FM(x,Embedding(xdnn​)),与 Deep 共享 / 独立

LR:logitlr=wlr⋅xlrlogit_{lr}=\mathbf{w}_{lr}\cdot\mathbf{x}_{lr}logitlr​=wlr​⋅xlr​,强于记忆,防止过分扩展的正则化

DCN V1:对于 L 层,相当于所有元素 ≤L+1\le L+1≤L+1 阶的交叉

每个 cross layer,xl+1=x0xlTwl+bl+xl\mathbf{x}_{l+1}=\mathbf{x}_0 \mathbf{x}_l^T \mathbf{w}_l+\mathbf{b}_l+\mathbf{x}_lxl+1​=x0​xlT​wl​+bl​+xl​

参数容量有限,wlw_lwl​ 替换为 d×dd\times dd×d 矩阵 WlW_lWl​,xl+1=x0⊙(Wlxl+bl)+xl\mathbf{x}_{l+1}=\mathbf{x}_0 \odot\left(\mathbf{W}_l \mathbf{x}_l+\mathbf{b}_l\right)+\mathbf{x}_lxl+1​=x0​⊙(Wl​xl​+bl​)+xl​

原始输入 x0x_0x0​ 长度很大,还提出将大矩阵 WlW_lWl​ 分解成两个 d×ld\times ld×l 的矩阵相乘

Transformer:Attention⁡(Q,K,V)=softmax⁡(QKTdk)V\operatorname{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V})=\operatorname{softmax}\left(\frac{\mathbf{Q K}^T}{\sqrt{d_k}}\right) \mathbf{V}Attention(Q,K,V)=softmax(dk​​QKT​)V,采用 multi-head 机制增强表达能力

Deep Interest Network (DIN):UEu,t=∑j=1Hwjhj=∑j=1HA(hj,t)hjUE_{u, t}=\sum_{j=1}^H w_j h_j=\sum_{j=1}^HA\left(h_j, t\right) h_jUEu,t​=∑j=1H​wj​hj​=∑j=1H​A(hj​,t)hj​