据悉,大家有没有这种感觉:推荐模型看多了,脑子里全是 FM 做交叉、DIN 做兴趣、Transformer 做序列、RankMixer 做扩展——每个都懂一点,但合在一起就是一张散乱的标签清单。新论文出来就往上贴一张,越贴越碎,始终拼不出一张完整的地图。 科技新闻。
当我把常见模型放进同一张表时,模型之间的关系会清楚很多:
一个 RankMixer Block 可以概括为:
推荐背景与起因
因此,RankMixer 的选择可以归纳为:
因此,推荐模型通常在一条连续线上选择:
推荐数据同时包含用户 ID、物品 ID、类别、作者、设备、统计量和行为序列。模型不能直接理解这些业务含义,只能接收数值和向量。
推荐事件经过
推荐发生在一个具体时刻。系统面对的是处于当前状态的用户、当时可用的内容、具体的展示场景,以及用户已经产生的行为历史。
模型不再只维护一个逐步压缩的摘要,而是保留一组包含上下文的行为状态。位置编码和时候编码告诉模型这些行为发生的先后和间隔;没有这些信息时,Self-Attention 更接近处理一个内容集合。
这三张图分别对应"模型知道什么""模型怎样形成判断"和"这套能力能否被数据学到并在线上运行"。模型名称会变化,但这三个问题长期稳定。
推荐各方回应
那么一个神经元可以理解成"带方向和阈值的线性判断单元":满足条件的一侧保留响应,另一侧输出零。同一层放入更多神经元,就能并行保留更多不同方向和阈值的响应。
接下来真正需要理解的,就是第三层:模型怎样把分散的信息组织成一个可用于当前候选预测的状态。
别被公式吓到。它只是在说:
推荐影响分析
统一框架最重要的价值,是能够定位优化方向,而不是轮流尝试热门模型。
模型有了合适的信息连接方式,并不代表它一定能够训练好。网络加深后,原始信息可能被不断改写,梯度也需要穿过更长的计算路径。
点击和时长是能够被系统记录的行为信号,它们是用户体验的代理,而不是用户心理状态本身。模型首先要把这些可观测目标估计准确,系统再决定怎样将它们组合成最终价值。把"预测点击"等同于"理解用户",这中间隔着一层。
推荐数据极其稀疏。一个具体的用户—物品组合可能只出现一次,很多组合从未出现。模型要获得泛化能力,就必须让不同样本和不同组合共享一部分参数。
其中 \(x_m\) 包含用户、候选、场景和历史,\(\ell\) 衡量预测与标签的差异,\(\Omega\) 用来约束模型复杂度。LR、GBDT、FM 和深度排序模型都可以放进这个形式。它们真正不同的位置,不是"是否做监督学习",而是 \(f_\theta\) 允许怎样组织信息、怎样形成关系、怎样共享参数。
举个例子,当 \(x_1,x_2\in\{0,1\}\) 时:
DIN 使用当前候选对历史行为进行加权:
\(x_j\) 是 one-hot 向量,\(E\) 是 Embedding 表。直观上,这相当于为每个离散标识找到一组可以参与后续计算的连续坐标。
恒等项 \(I\) 为已有信息和梯度提供一条更直接的路径。残差主要改善状态保持和深层训练,并不会自动创造新的字段关系。
Attention 则进一步形成动态交互:
给定用户 \(u\)、场景 \(c\)、历史 \(H_u\) 和可用物品集合 \(\mathcal I\),推荐系统最终需要输出一个有序列表:
一种随当前输入变化的信息交互与加权汇总方式。
所以,推荐模型的发展不只是"交叉越来越多"或"参数越来越大",而是在持续调整信息单位、连接方式、状态形式、共享范围和计算结构。有了这个视角,就不会被新模型的名字牵着走,而是能快速判断它到底改了哪一段。
"参数更多"不等于"能力更强"。真正需要判断的是:哪些规律应该共享,哪些信息需要专门处理。
这里的"状态"不是对用户真实心理的完整还原,而是模型为当前任务构造的压缩表示。它只需要保留对当前预测有用的信息。模型只是在做一个高效的压缩和匹配,离"理解用户"还差得远。
为了后面讨论有个具体的锚点,用一个短视频精排请求作为贯穿全文的例子:某位用户晚上打开应用,历史里既看过篮球内容,也看过钢琴内容;当前候选里同时出现篮球教学、钢琴演奏和其他视频。
所以树模型同样在学习特征关系,只是它把关系组织成分段规则,而不是连续向量中的多层变换。
推荐系统在多重条件和约束下完成候选选择与列表决策。
Per-token FFN 则让不同 token 使用不同参数:
这张表不是模型排行榜。从中可以看到四条结构变化:
它可以被理解为特征交互,但不能直接等同于传统的显式乘积。它显式计算"谁与谁相关",输出的却是融合上下文后的新表示,而不是一个单独保存的 \(x_ix_j\)。
贯穿全文的一条主线:
所以,特征工程、Embedding 和 token 化并不是网络之前的边角料,它们在定义模型能够看到什么,以及模型把什么当成一个独立的信息单位。很多"模型不行"的问题,根源其实在 Embedding 层的切分方式上。
残差连接写成:
线性模型使用加法结构:
\(s_{ij}\) 同时依赖 \(x_i\) 和 \(x_j\),因此在数学上已经形成两者的关系;随后,模型根据当前样本计算出的权重汇总其他信息。
\(g\) 在 \([0,1]\) 上是一条有两个线性片段的三角波。再计算 \(g(g(x))\),可以形成四个片段;连续复合 \(L\) 次,可以形成 \(2^L\) 个片段。这个例子说明,深层网络能够反复使用前一层已经形成的局部变换。
\(i\) 可以是一项用户属性、一个物品字段、一条历史行为,也可以是已经形成的用户兴趣状态。
字段发生交互以后,历史行为还需要形成一个能够服务当前预测的用户状态。
Self-Attention 让每条行为直接读取其他行为:
一层推荐模型可以用三个动作概括。
\(h_t\) 汇总了到时刻 \(t\) 为止的历史。顺序天然进入模型,但较早信息需要沿着连续状态逐步传递。
有了这张地图,下面所有内容都可以沿着同一条信息链展开:先形成表示,再让信息发生关系,然后把关系汇总成用户与候选状态。
深度的作用可以通过一个简单函数观察:
同一个 Attention 公式,在推荐中的作用取决于 Q、K、V 分别代表什么:
Token Mixing 把不同 token 的信息切分后重新排列,为跨字段通信建立固定通路。它不为每个样本计算 \(T\times T\) 的动态关系矩阵。
FM 把二阶关系直接写入预测函数:
用户透露从固定走向候选相关。 Pooling 得到统一用户向量,RNN 和 Self-Attention 加入顺序与上下文,DIN 进一步让当前候选参与兴趣选择。
DCN-V2 让原始输入在每个交叉层继续参与乘法:
如果没有提前加入交叉项,一个特征的作用不会随着另一个特征改变。
一些实验现象可以形成较明确的证据:
理想目标可以写成:
参数组织从全共享走向有选择的专门化。 低秩向量、共享 FFN、任务专家、Per-token FFN 和 MoE,分别在统计共享与角色专门化之间选择不同位置。
这也说明,模型结构不只存在于"特征交互层"。标签之间的关系、任务之间的共享方式,同样可以被写进计算图。
这套方法不能保证一次找到最优模型,但它能让实验具有明确目的:每个改动都在验证某一种信息处理假设,而不是只看模型名字是否更新。
一次结构优化可以写成:
结构判断还需要受控实验支撑。几个基本原则:
在自然语言模型中,Attention 让一个词融合句子中其他词的信息;在推荐中,它可以让一条行为融合其他行为,也可以让候选读取用户历史。数学算子相同,信息单位和业务含义不同。这个区别看起来简单,但实际做模型设计时很容易混淆。
用三个递进层次总结全文:
宽度增长同一层能够并行保留的响应通道;深度增加这些中间响应被继续组合和复用的次数。
信息关系从固定走向条件化。 LR 使用加性关系,FM 和 DCN 写入乘法关系,Attention 根据当前样本动态决定交互权重。
FM 中,同一个特征向量会参与它与多个其他特征的交互;RNN 在所有时间步复用同一个状态更新函数;Transformer 的不同位置共享 QKV 投影和 FFN;多任务模型则让点击、时长和转化共享底层表示。
一个离散 ID 的 Embedding 可以写成:
先把用户字段、物品字段、上下文和历史行为统一看成"模型中的基本信息单位"。设第 \(i\) 个信息单位在第 \(l\) 层的表示为:
一个特征对结果的作用,会随着另一个特征的取值而改变。
训练时,这类模型通常具有共同的监督学习形式:
第三步是决定旧状态保留多少、新状态写入多少:
下面这张表可以用来理解不同结构:
Embedding 不只是降维。它还在决定后续怎样共享信息:
有了向量表示以后,下一步是让用户、候选和场景共同形成判断依据。
矩阵 \(W_l\) 不只是把数字放大或缩小。它的每一行都在把多个输入坐标混合成一个新的判断方向:
\(R\) 表示列表产生的综合价值,可以包含用户体验、内容消费、长期留存和业务价值。这里有一个容易忽略的点:整个推荐系统的最终对象是内容选择与列表决策,而不是单独预测一个点击标签。 精排模型的 AUC 只是中间站,不是终点。
沿着同一条信息链逐层检查:
三条横向约束分别是:哪些信息应该共享参数,这条计算链能不能稳定训练,以及它能不能在推荐系统的延迟和吞吐要求下跑起来。这三条不是某个模块的专属问题,而是同时压在表示、交互、状态和预测每一段上。
MMoE 和 PLE 则用共享专家、任务门控和专属分支组织多个任务。它们主要改变的不是字段怎样交叉,而是点击、转化等任务怎样共享底层表示,以及怎样减少相互干扰。
同一用户面对篮球鞋和钢琴课程时,可以形成不同的 \(h(u,i)\)。它改变的不是简单的"交叉数量",而是把候选条件放到历史压缩之前,让模型先判断哪些历史与当前候选相关,再形成用户状态。
后文谈到 Embedding、MLP、Attention、DIN 或 RankMixer 时,都可以放回这个请求来看:它们究竟改变了哪一段信息处理过程。
归一化则控制不同层表示的数值尺度,让连续堆叠的 Attention、FFN 和交互模块更稳定。门控结构进一步决定旧信息保留多少、新信息写入多少。
"特征交互"可以理解为:
到了这里,推荐系统、推荐模型和模型结构的边界就清楚了:
三个层次:
后面出现的 MLP、FM、DCN、RNN、Attention、残差连接和 RankMixer,都可以放回这条主线。它们不是一堆彼此独立的技巧,而是在改变这条链上某一段的信息处理方式。
到这里,推荐模型的主计算链已经形成:原始信息进入向量空间,字段和行为发生关系,历史被整理成与当前候选相关的状态。接下来需要处理的是:这些能力怎样被有限参数稳定学到,并在工业系统中高效运行。
RNN 沿时间递归更新状态:
\(Y_k\) 可以是点击、观看时长、点赞或转化,\(E=1\) 表示候选获得了曝光。对于二元行为,这个条件期望就是行为概率;对于观看时长,它可以是期望时长或某种分布预测。
这个神经元只在两个条件同时成立时激活。在推荐中,它可以对应"用户满足某个条件,并且候选属于某个品类"。
通用逼近定理告诉我们,足够宽的前馈网络可以在有限范围内逼近连续函数。但这只是"存在某组参数"的结论,并没有保证所需网络很小、有限数据能够识别它,也没有保证梯度下降一定找得到。
第一步是收集相关信息:
这也是 MLP 不能当万能答案的原因:它理论上能表示某种关系,不等于它会用有限样本和有限训练预算轻松学到这种关系。
所以,"行为预测"适合描述精排模型的一项核心任务,但不能直接概括整个推荐系统。对精排模型,用"条件响应估计"更准确:
Pooling、RNN、Self-Attention 和 DIN 并不是同一种结构的替代版本,它们分别表达:
多个响应还要进一步转换为候选价值:
推荐模型通过条件响应估计和候选价值建模,为这个决策提供依据。
反向传播不是一种特征交互。候选和历史之间如果没有前向计算路径,梯度不能凭空学出候选相关兴趣;当前向路径已经存在但难以训练时,残差、归一化和优化器配置才成为主要状况。不是所有问题都能靠"加一层"解决。
三者放在不同位置理解:
这样再看常见模块,它们就不再处于同一个混乱层级:
它让每一层学习"在当前状态上增加什么修正",而不是从头生成完整状态。其梯度中包含:
后来我发现,换个视角会清晰很多。用"三个层次、一条主线、三条横向约束"来理解,大部分模型都能放回同一个框架里。
所以 Attention 可以定义为:
宽度和深度可以这样理解:
这种表示稳定、便宜,适合描述总体偏好;代价是行为顺序消失,不同兴趣被压进同一个固定向量,所有候选都使用同一份用户表示。
第二步是根据汇总信息形成新状态:
共享参数相当于假设"这些对象可以使用一部分共同规律"。它能够减少样本需求,但共享过强也会带来干扰:
GBDT 和 XGBoost 使用树路径形成条件组合。一棵树可以写成:
乘积 \(x_ix_j\) 明确规定两个特征同时参与,向量内积 \(\langle v_i,v_j\rangle\) 则让同一个特征可以在多种组合中共享统计规律。
推荐模型经常把用户、候选、场景和历史表示拼在一起,再送入 MLP:
推荐模型往往同时预测点击、时长、互动和转化。多任务学习不仅是在输出层多放几个预测头,还要决定任务之间怎样共享信息。
它不是对 Attention 的普遍替代,也不必替代 DIN 或序列 Transformer。序列模块可以先形成用户状态,RankMixer 再负责排序阶段的异构字段交互。它展示的是另一种结构思路:模型能力不仅来自数学表达,也来自参数怎样放置、计算怎样执行。
RankMixer 面向工业排序中的大量异构字段。它保留"先交换信息、再进行非线性变换"的基本思路,但没有使用标准 Self-Attention。
更重要的是,模型怎样切分这些向量,会直接决定后续结构:
模型结构通过表示、交互、聚合、状态更新、参数共享和任务输出,实现这些估计。
模型最后再通过预测头输出点击、时长或转化等结果:
最简单的方式是求和或平均:
MLP 也可以形成非加法的联合关系,只是交互被分散在权重、激活状态和多层组合中。它没有为某一对字段预留一个可以直接命名的乘积项,所以通常被称为隐式交互。
FM 和 DCN 的共同点,是把乘法关系写进网络结构,为这类关系提供更短、更直接的计算路径。
实际阅读一篇论文或诊断一个线上模型时,通常先画三张简单的图:
结构设计从单纯追求表达走向同时考虑执行。 双塔通过分离编码支持大规模检索,RankMixer 通过规则计算和参数布局支持工业扩展。
理解一个推荐模型时,不再只问它用了 MLP、Attention 还是残差连接,而是沿着完整信息链判断:
如果激活函数使用 ReLU:
\(R_r\) 是由多次特征判断形成的区域。一条路径可以表达"年龄小于某个值、最近看过篮球、当前处于晚间"这样的联合条件。多棵树再逐轮相加:
比如,"年轻用户"本身不必然提高点击率,"篮球视频"本身也不必然提高点击率,但"年轻用户看到篮球视频"可能产生额外作用。这个额外部分就是联合关系。
ESMM 把点击—转化漏斗写成概率关系:
工业推荐把这个大问题拆成不同阶段:
推荐模型的发展不是简单地增加参数或增加特征交叉。它是在持续改变信息的表示方式、连接方式、状态形式、共享范围和执行结构,让模型能够在有限数据、训练预算和线上成本下,形成更有效的条件估计,受到社会各界瞩目。