推荐系统模型更新方式 一、全量训练Full Retraining最基础的方式定期用全量历史数据从头训练一个新模型训练完成后替换线上模型。更新周期通常是天级别比如每天凌晨用过去 N 天的数据训练早上上线新模型。优点是模型质量稳定每次都是在完整数据上训练不存在增量更新的累积误差。缺点是训练成本高无法捕获实时的用户行为变化模型对当天新出现的热点、节假日等时效性事件响应慢。二、增量训练Incremental Training不从头训练而是在上一个版本的模型参数基础上用新增的数据继续训练几个 step 或几个 epoch然后更新线上模型。更新周期可以做到小时级别比如每小时用过去一小时的新样本做增量更新。优点是训练成本低时效性比全量训练好。缺点是存在**灾难性遗忘Catastrophic Forgetting**的风险模型在新数据上过拟合遗忘了历史数据的知识。解决方案是混入一部分历史样本Experience Replay或者用较小的学习率做增量更新。三、流式训练Streaming / Online Training这是时效性最高的方式。样本实时生成实时输入模型做梯度更新模型参数持续更新没有明显的批次概念。技术上通常基于消息队列Kafka实现用户行为实时写入 Kafka → 实时特征拼接 → 实时计算梯度 → 更新参数服务器PS上的模型参数。流式训练的核心挑战延迟反馈问题用户点击是实时的但转化下单可能几小时后才发生。流式训练时点击样本立刻进入训练但标签是否转化还不知道需要设计延迟标签机制比如先以点击为正样本训练 CTR等转化信号到来后再补充训练 CVR或者用之前讲的 DFM 方案处理延迟反馈。样本乱序问题实时流中样本到达顺序不保证可能出现转化信号比点击信号先到的情况需要做样本对齐和缓冲。训练稳定性流式训练的 batch size 很小甚至是 1梯度噪声大容易不稳定。通常用 mini-batch 缓冲积累一定量的样本再做更新。特征穿越风险实时特征拼接时如果不小心用了未来信息比如用了当天的统计特征会导致线上线下不一致。四、Embedding 单独流式更新 上层网络定期更新这是工业界最常见的折中方案把模型分成两部分分别更新Embedding 层参数量大对时效性敏感新 item、新用户需要快速学到表示做流式更新实时响应新 ID 的出现。上层网络MLP、Attention 等参数量相对小对时效性不那么敏感做增量或全量更新周期是小时或天级别。这样设计的原因是Embedding 层的更新是稀疏的每次只更新出现过的 ID 对应的向量流式更新成本低上层网络是稠密更新流式训练稳定性差更适合批量更新。五、双塔模型的特殊更新策略召回阶段的双塔模型有自己的更新逻辑User 塔实时更新用户行为实时变化user embedding 需要高频更新通常做流式或小时级增量更新。Item 塔离线更新item 的属性相对稳定item embedding 可以天级别更新更新后重新建索引ANN 索引。这样避免了每次 item 更新都要重建全量索引的高成本。六、模型热更新 vs 冷更新从上线方式来看还有两种冷更新训练完新模型后直接替换线上模型有一个明显的切换时刻。切换瞬间可能出现效果抖动因为新旧模型的输出分布不同需要做流量灰度。热更新不替换整个模型而是直接更新参数服务器上的参数值模型结构不变参数持续更新。流式训练通常是热更新没有明显的切换时刻线上效果更平滑。