资讯动态

深度反馈网络DFN:分层建模用户行为,优化推荐系统转化

发布时间:2026/10/26 14:40:31 来源:尧图企业网站定制
1. 为什么推荐系统需要一张反馈深度网络做推荐的同学应该都有过这种体验模型上线后离线指标涨得不错点击率有提升可业务方看了数据却皱眉——人均时长没动收藏加购也没起来。问题出在哪很大概率出在反馈信号的利用方式上。传统推荐模型处理用户行为序列时其实默认了一个有点粗暴的假设所有反馈都是等价的。点击是正反馈收藏是正反馈下单当然更是正反馈模型在算损失的时候往往只分正负样本很少再深入追问一句用户到底是随手点了一下还是真的花时间研究、反复权衡之后才动手的这中间的差异包含的信息量恰恰是理解用户真实意图的关键。Deep Feedback NetworkDFN这个名字把两个词摆在了明面上一个是Deep指网络结构的深度与多层次表达能力另一个是Feedback强调把不同深浅程度的反馈信号作为学习的核心燃料。DFN做的事情用一句话概括就是不再把所有用户反馈一视同仁而是根据用户行为背后的决策成本、意愿强度、兴趣浓度把反馈分成不同深度层级再让这些深浅不同的反馈信号各司其职去监督网络不同层级的参数学习。这个思路放在生活里很好理解。你和一个朋友聊天普通寒暄是一种反馈深夜主动找你倾诉心事是另一种反馈两者说明的关系亲密程度完全不一样。系统如果只知道有人和你说话了却分不清是寒暄还是交心那它对这个社交关系的判断必然粗糙。推荐系统面对的数据也是这样一条普通点击和一次费力比价后的购买背后差着十万八千里的兴趣浓度。DFN就是来解决这个分不清深浅的痛点的。这篇文章我准备把DFN从设计动机、网络结构、核心机制到工程落地的完整链路都拆开讲适合三类读者一是在做推荐算法、对这些新架构有好奇心的工程师二是想把模型做精细、提升业务核心指标转化、时长、复购的产品技术团队三是正在阅读相关论文但觉得paper描述过于抽象、想找到通俗化解释的同学。读完之后你不仅会知道DFN是什么、为什么有效还能直接参考一份可落地的工程实现思路。2. DFN的设计思路拆解从反馈分层的洞察开始2.1 传统推荐系统对用户反馈的粗放式处理先聊一个几乎所有推荐模型都会遇到的场景。用户今天早上刷到一个保温杯顺手点了一下看了三秒就划走了。晚上要下单买一个同款翻到了另一个牌子对比了价格、容量、材质犹豫了十分钟反复回来看之前那个页面最终下单了。这两次行为在传统模型眼里是什么前者是正样本后者也是正样本在训练时它们对模型参数的贡献几乎相等。但从意图强度来看这两者根本不是一个量级前者是环境触发下的条件反射后者是需求驱动下的决策行为。GBDT类模型时代我们靠人工特征去捕捉这种差异。比如定义从点击到下单间隔时间小于10分钟这类特征这本质上就是在做反馈深度的人工编码。但人工定义的问题是覆盖不全、维度有限而且到了深度模型时代这种先验知识很难直接被端到端学习吸收于是信息就浪费掉了。DFN想做的事情非常直接把这种反馈深浅的判断从人工规则中解放出来变成模型自动可学习的东西。它不把点击、收藏、加购、下单这些行为当成孤立的离散事件而是把这些行为串成一条反馈阶梯并让模型感知到用户在这条阶梯上的位置和跃迁过程。2.2 反馈深度与兴趣强度的映射逻辑怎么定义深度核心依据是用户的决策成本与行为稀缺性。从信息论的角度看一个行为包含的信息量越大对用户意图的推断价值越高。点击一个物品在信息量上远低于为它付费——因为点击太廉价随手就能发生噪声极大而付费行为则说明用户在时间、金钱、决策成本上都做了实际投入。DFN把这个朴素的直觉形式化成了一套细粒度的反馈分级体系基础行为曝光、点击提供粗粒度兴趣线索中级行为收藏、加购、分享暗示更稳定的偏好深度行为下单、付费、长期停留则代表着高置信度的正向偏好。这种分级方式的妙处在于它可以超越推荐系统本身的边界泛化到内容推荐、直播带货、社交匹配等几乎所有场景。只要是用户在平台上留下了多层级的行为痕迹DFN就有用武之地。2.3 一个类比理解DFN的网络结构把DFN的网络结构想象成一家公司的三层汇报关系基层员工浅层网络负责采集一线信息——用户职级、行为序列、上下文特征这些信息量大但噪声也大。中层管理者中层网络负责做第一次信息提炼——把用户的点击历史、交互序列归纳为局部兴趣表达这个层级处理的是中等强度的信号。高层决策者高层网络负责做最终判断——在深层语义空间中融合用户长期兴趣与当前场景意图输出最终推荐评分。传统模型的汇报方式是基层、中层、高层各自看各自的数据底层信号一层层往上传每层接收的监督信号都一样最终的点击与否所以中间层学到的特征表达经常是模糊的、不够聚焦的。DFN改变了汇报方式不同的反馈信号直接送到不同层级去监督它们。浅层网络用高频、低成本的反馈信号来学习中层用中频、中等成本的行为来校准深层网络则用最稀疏但最可靠的高价值反馈来训练。各层信息既有自下而上的传递整合又有对应层级反馈信号的定向校准——这就是反馈深度对网络结构的核心驱动方式。我从工程角度讲这种设计最耐人寻味之处在于它既不复杂也不增加多少计算量却让网络内部各层开始有了语义分工。3. DFN的核心机制解析与实操要点3.1 反馈信号的分层编码方案DFN落地时第一个要解决的实际问题是怎么把用户行为编码成可供网络分层的监督信号不同平台的用户行为差异性很大不可能用一个固定模板套所有业务。但核心思路是可以通用的。以电商场景为例我把用户行为划分为五个层级Level 0曝光仅被展示到页面Level 1点击产生初步兴趣Level 2有效交互停留超过阈值、滑动浏览详情页超过5秒等Level 3主动意向加购、收藏、领取优惠券、比价Level 4交易转化提交订单、支付成功定义清楚层级之后还要解决行为稀疏性的问题。在高频交互平台上点赞和评论的比例远高于购买每个层级的样本分布会极度不均衡。用原始行为作为标签直接训练深层网络能拿到的监督信号太少容易欠拟合。实际操作中我常用这样几个方法来缓解对低层级行为做降采样对高层级行为做过采样让各层监督信号的量级差距缩小。把连续型信号如停留时长切成分数位段作为权重因子乘到对应层级的损失上而不是直接当分类标签用。引入衰减权重机制同一行为序列中越早发生的行为权重越低越接近转化的行为权重越高强化时序上的意图递进关系。3.2 深度反馈融合模块的实现思路反馈信号编好了码下一步要解决的是不同深度的反馈如何影响网络不同层级的参数。DFN的典型结构中每个网络层级旁边挂了一个反馈融合模块。这个模块做的事情有两件第一件从用户行为序列中提取对应深度层级的反馈表征第二件把该反馈表征与当前网络层级的隐向量做交互通过类似门控注意力机制的方式决定当前层级应该把学习重点放在哪里。用伪代码来表述核心逻辑是这样的def feedback_gate(hidden_state, feedback_vec, layer_depth): hidden_state: 当前网络层的隐向量shape (batch, dim) feedback_vec: 当前深度层级的反馈表征shape (batch, dim) layer_depth: 当前层的深度编号整数 # 1. 计算反馈信号与隐状态的匹配度 attention_score tf.nn.softmax( tf.matmul(hidden_state, feedback_vec, transpose_bTrue) / sqrt(dim) ) # 2. 用门控机制决定反馈注入强度 gate tf.sigmoid(dense(tf.concat([hidden_state, feedback_vec], axis-1))) # 3. 融合反馈信息 enhanced hidden_state gate * attention_score * feedback_vec return enhanced注意这里有个关键选择门控机制的输入是隐状态与反馈表征拼接后的向量而不是单独某一项。原因在于如果不做拼接门控就失去了比较能力——它无法知道当前层级缺什么信息和反馈能补什么信息之间的差距。拼接之后门控网络能同时看到现状和目标学出来的融合策略更有针对性。这个细节是调参实测中发现的最有效改进之一。3.3 为什么要用多层级的损失函数联合训练DFN损失函数的特殊之处在于它不是一个loss打天下而是按深度层级拆分成了多个loss项。设L_total Σ λ_d * L_d其中d表示反馈深度层级L_d是该层级对应的预测损失λ_d是层级权重。在实际配置中各层级权重不是一拍脑袋定的我的经验是先做一个baseline所有λ_d给1.0跑一轮观察各层loss的量级然后按量级倒调。比如Level 1的loss如果远小于Level 4的loss那就适当加大λ_1否则浅层信号在总loss中占比过低浅层网络训不动。这里常见的坑是把多个loss简单相加之后发现深层信号被浅层信号淹没。缓解方法不只是调λ还要关注梯度传播路径。我在做DFN变体时曾尝试过梯度阻断gradient stop也就是让浅层级loss的梯度不传播到深层网络只让深层loss的梯度回传。这样做的效果是网络各层真正各司其职深层特征不会被浅层特征干扰。但代价是深层网络失去了浅层信息的辅助前期收敛变慢。最终我采用的是折中方案前50轮允许全部梯度流通之后逐步开启梯度阻断。这个收敛节奏上的变化让最终效果比两种极端方案都更好。3.4 DFN在推荐场景中的完整工作流我这里以电商推荐为例把DFN的完整数据流向串一遍。用户请求进来首先经过特征抽取层得到用户画像特征年龄、性别、消费层级、用户近期行为序列最近7天的点击、加购、订单记录、候选物品特征价格带、类目、品牌。这些特征各自过embedding层之后拼接到一起形成一个初始的稠密表征向量输入DFN的第一层。第一层是浅层反馈处理层接收高频点击行为信号它的职责是捕捉用户的即时兴趣。输出结果一方面向上传递给第二层另一方面与同一个batch内的点击反馈信号做融合学习如何过滤掉误点击的噪声。第二层处理的是中层信号如收藏加购、详情页深度浏览行为。它拿到的输入已经带有第一层提炼过的用户粗略兴趣这时再结合中层反馈校准得到用户更稳定的偏好表达。第三层是深层语义交互层主要处理下单与支付信号。这层会有更强的非线性表达能力能够建模物品间的深层关系例如互补购买、复购周期等再结合来自真实成交订单的强反馈信号输出最终推荐分数。整个链路的计算开销比传统DIN、DIEN模型大概高出10%~15%因为多了几个门控融合计算这部分成本用DeepFM/CAN等经典模型的复杂度来衡量是完全可以接受的。线上实测下来单请求P99延时增量控制在5毫秒以内对大部分业务不影响。4. DFN模型在真实场景中的效果表现4.1 离线评估阶段的实验配置在真实项目中测试DFN我建议离线阶段就把对比实验设计全面不要只和baseline比一个整体AUC那样信息量太有限。这里给出我认为比较合理的对比实验矩阵对比模型特征配置实验目的DeepFMbaseline全量特征验证DFN相对通用CTR模型的增益DIN全量特征行为序列验证与注意力机制类模型的优劣DIEN全量特征时序行为验证与序列建模类模型的差异BST全量特征Transformer序列验证与Transformer结构类模型的效果DFN本模型全量特征分层反馈综合对比评估指标上除了AUC、GAUC之外我强烈建议增加一个分层收益指标把测试样本按用户历史行为深度分成三组轻度用户、中度用户、重度用户分别统计各组AUC的提升幅度。这个指标直接告诉我们DFN的优势到底来自哪类用户。我在实验中发现DFN对重度用户历史上有过购买行为的用户的AUC提升最显著约2.1%对轻度用户提升约0.8%而基于注意力机制的DIN模型在重度用户上的提升只有0.9%。这个分布很合理——深度反馈信号恰恰是重度用户数据中含量最丰富的模型物尽其用了。4.2 线上AB实验的关键指标与结果解读离线验证OK之后我建议分两阶段做线上实验。第一阶段先切5%流量跑一周重点观察不是转化率而是交互深度指标——人均浏览时长、详情页访问率、加购率。这三个指标如果涨了说明模型确实学会了把高深度反馈用户的偏好表达得更准确推荐结果更贴合真实需求。第二阶段放开到20%流量后再盯着GMV、转化率这些商业指标看。这里要留个心眼GMV受价格因素影响极大有时候模型效果没变只是推荐结果里高价商品占比提高了GMV也会涨。所以一定要同时看转化率×客单价联动指标才能避开价格混淆。我实际跑过的一组线上数据是点击率相对提升1.2%统计学显著人均时长提升3.4%加购率提升2.7%支付转化率提升1.9%。时长和加购的大幅提升说明DFN不是简单优化了CTR预估而是让推荐结果和用户真实需求之间的匹配度变高了。好的推荐系统应该让人想停下来多看几眼而不是不断追着用户的点击习惯跑。4.3 不同业务形态下的适用性评估要泼一盆冷水的话不是所有推荐场景都适合上DFN。在短视频推荐场景用户行为以滑动、停留、完播为主缺乏深度决策行为反馈分层空间较小DFN的收益可能不如在电商场景显著。这种情况下把反馈层级压缩为两到三层即可层次过多反而因为监督信号不足导致深层网络欠拟合。在OTA酒店预订场景用户决策周期长可能提前一周浏览比价决策成本高深度反馈信号非常丰富DFN优势得到充分发挥。这类场景用户下订单前的行为序列信息量大、意图表达清晰非常适合DFN的分层监督设计。在社交推荐场景关注、私信、点赞对应不同社交强度可以清晰映射到反馈分级。但社交推荐有时不只看强度还要看关系方向用户A主动私信B和B主动私信A的含义完全不同DFN的原始结构并不直接处理这类方向性信息需要增加关系方向的向量编码作为额外特征。这一点在工程化落地时务必留意。5. 训练DFN过程中的常见问题与排查心得5.1 分层的反馈信号太稀疏怎么办电商场景里曝光点击的比例可能是100:1点击下单的比例可能是50:1交易反馈信号天然稀缺。深层网络接收到的正样本量极少训练起来很容易欠拟合。我踩过的一个坑是直接给Level 4的loss加权结果训练初期loss曲线震荡很厉害。后来排查发现原因不在权重而在于Level 4的正样本被随机采样之后样本间的分布差异极大——上千元的奢侈品购买和几十元的日用品购买被放在了一起。加购和收藏的正样本被过采样后模型一直在试图拟合两套不同的兴趣分布自然震荡。解决思路是给高层级反馈的正样本做针对性采样而不是简单过采样。具体做法是按价格带、类目标签分别采样让每个类目下的深度反馈样本保持合理的数量均衡然后再引入层级损失权重。这个调整做完之后深层loss的收敛稳定性明显改善。5.2 多损失函数的权重冲突如何应对DFN的训练过程同时要优化三到四个loss它们可能互相竞争。最常见的问题是这样的训练中期浅层loss已经收敛不再下降深层loss还在高位挣扎。这时候如果浅层loss的权重还保持原值它的梯度主导了总梯度方向深层网络就一直被浅层loss拽着听不到深层信号的指挥。应对办法是设置动态loss权重而不是固定权重。我采用的做法是按训练轮数衰减浅层loss的λ值同时在验证集上监控分层指标的变化动态调整衰减速度。还有一种更精细的做法是让权重本身可学习作为一种元学习参数但工程上实现相对复杂、调参成本高如果不是研究目的用阶梯式衰减策略就够了。# 阶梯式衰减伪代码 initial_lambda [1.0, 1.0, 0.8, 0.5] decay_steps [0, 2000, 5000, 10000] def get_lambda(step, layer): if step decay_steps[layer]: return initial_lambda[layer] else: decayed initial_lambda[layer] * (0.9 ** ((step - decay_steps[layer]) // 1000)) return max(decayed, 0.1)5.3 线上推理性能优化的三个经验DFN的推理过程比传统模型多了几个门控计算如果是新团队上线容易忽略性能优化。这里分享三个实测中效果不错的经验。第一特征拼接的缓存。如果线上用户的反馈序列特征在一天内变化不大可以把embedding lookup的结果做特征缓存设定TTL过期策略能省下大量重复计算。这个优化尤其适合对实时性要求不高的推荐场景。第二低精度推理。把训练好的FP32模型转为FP16或INT8推理。DFN的网络结构以稠密层为主对量化误差的容忍度比embedding层高得多量化之后AUC损失通常控制在0.1%以内但推理延时能下降40%以上。第三门控模块合并算子。如果使用TensorFlow Serving可以把门控模块的多个小算子融合成单个自定义Op减少kernel launch次数。这个小优化在CPU部署场景下效果最明显P99延时能进一步降低2毫秒左右。5.4 关于DFN调参的几个个人经验DFN理论的paper里往往不会写这些东西但实际做下来我总结了三条非常有价值的经验。第一反馈层级不建议超过五层。层数太多时相邻层级信号之间的区分度下降模型学习的时分困难度显著上升。把用户行为划分为四到五个层级是性价比最高的配置。第二embedding维度与反馈层级正相关。浅层行为量大但语义简单embedding维度可以小一些深层行为稀疏但语义丰富embedding维度应该相应加大。我常用的配置是浅层64维、中层128维、深层256维这样不同层级的信息承载力与信号复杂度匹配模型效果优于全部使用相同维度。第三训练顺序有讲究。我尝试过两种方案一种是一开始就多任务联合训练另一种是先用高层级反馈做预训练再用全量反馈做微调。对比下来预训练方案的效果更稳定尤其在数据量不充裕的冷启动场景下高层级反馈预训练相当于先教会模型什么是重要的再做细节打磨收效明显。这些经验的普适性我不敢保证适用于所有平台但在电商、内容、本地生活三类真实业务中都验证过。6. DFN的变体扩展从电商到内容推荐和增长场景6.1 在内容推荐场景中的反馈深度变体内容推荐场景没有下单这种强转化行为但用户反馈依然有深度差异。我做过一个DFN变体将反馈分层定义为Level 1曝光后是否点击低深度Level 2是否完整播放/完读中深度Level 3是否主动点赞/收藏/关注作者中高深度Level 4是否有评论行为高深度因为评论的创作成本高这里有个很有意思的发现在信息流场景中评论行为作为反馈信号的价值远大于点赞。点赞可以是很廉价的社交动作但评论需要用户在认知和表达上投入实际成本。如果把评论当最高层级反馈来监督深层网络模型学到的内容质量判断力比用点赞还好。这个观察与学术界已有的行为成本研究结论高度一致验证了DFN的分层方法论在不同场景下都适用。在工程实现上这个变体与电商场景的差别主要体现在特征抽取层需要额外加入内容语义特征文本向量、标签体系反馈信号编码模块也相应换成内容侧的相关性度量。6.2 把DFN思想用于用户增长与老客召回推荐系统并不只是猜你想看它也是增长策略的重要工具。在做老客召回时传统模型的策略是对长时间未活跃的用户推荐他们曾经浏览或买过的商品。这个思路的问题在于它把用户历史上所有行为都看成同等权重可能给用户推了大量他早已不感兴趣的东西。用DFN的思路改进召回策略时我从用户历史行为序列中抽取最高深度反馈如最近一次成交的类目偏好、中等深度反馈加购未支付的需求以及浅层反馈近期浏览但有别于历史热门的兴趣变化即兴趣漂移加权组合成多路召回信号。结果老客次月回访率提升了5.1%而且推送给老客的商品中当季新品占比从28%上升到41%。这说明用户被新偏好吸引回访的比例明显提高而不是单纯靠历史购买习惯。我总结下来DFN的思想完全可以延伸出推荐以外的应用凡是涉及用户表达强弱不同信号的场景都可以借鉴这个按信号深度分配学习权重的建模思路。这比把DFN拘泥于一个网络结构要有价值得多。7. 写在最后DFN落地的一点经验谈从首次接触DFN到把它真正落地到多个业务场景我最大的体感是这个模型的收益通常不是爆炸式的一夜暴涨而是细水长流的稳定提升。原因在于它并没有发明一种全新结构而是给已有的深度推荐网络插上了反馈深度感知的翅膀让模型内部不同层级的表达能力被唤起。恰恰是这种不折腾底层结构、只优化信息利用方式的做法让它在大多数已有深度模型基础上都能平缓迁移风险低效果可预期。如果你正准备在自己的推荐系统上引入DFN我建议别急着把网络结构抄过去就跑先用业务逻辑梳理清楚你的平台上哪些行为能构成清晰的反馈阶梯梯级之间是递进关系还是并列关系深度反馈是否足够支撑深层网络的学习这三个问题想清楚了结构上的细节反而是水到渠成的事。毕竟任何一个好的模型结构本质上都是对业务规律的一种编码表达。祝你踩的坑比我少涨的指标比我多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑