
1. 核心概念解释
首先,我们来理解几个关键概念:
- 流式训练 (Streaming Training): 工业级推荐系统的数据是源源不断产生的。流式训练指的是模型在一个数据流上持续不断地进行训练,而不是像传统方法那样在固定的数据集上进行多轮(epochs)训练。每次训练可能只使用一小批新产生的数据(比如过去一小时的用户行为)。
- 曝光粒度的训练 (Impression-level Training): 这是传统排序模型(如深度学习时代的DIN, DIEN等)的常见做法。每一次“曝光”(即系统向用户展示一个或多个物品)都会产生一个训练样本。如果一个用户在一次会话中看了100个视频,这就可能产生100个独立的训练样本。每个样本都包含完整的用户历史序列和当前的“目标物品”。
- 序列转导框架 (Sequence Transduction Framework): 指的是像Transformer这样,将一个输入序列映射到一个输出序列的模型。
- 生成式训练 (Generative Training): 这是HSTU采用的方法。它不像曝光粒度那样为每个行为都创建一个独立的样本,而是将一个用户的整个行为序列看作一个训练样本。模型的目标是自回归地预测这个序列中的下一个(正向)行为。
: 用户
u的历史行为序列长度(token数量)。- D: Embedding的维度。
2. 传统曝光粒度训练的计算复杂度分析
我们来推导为什么曝光粒度训练,每个用户的复杂度是 ,其中
是MLP的隐藏维度。
假设一个用户有 个历史行为。在曝光粒度的训练模式下,这
个行为会产生
个训练样本。
- 样本1: 历史
[, 目标]
- 样本2: 历史
[, 目标,
]
- ...
- 样本N_u-1: 历史
[, 目标, ...,
]
现在我们分析处理这一个用户所有样本的总计算量:
a) Self-Attention部分的开销: 
让我们看第 k 个训练样本,其历史序列长度为 k。 Transformer中Self-Attention的核心计算是三个矩阵乘法:
X是输入矩阵,维度[k, D]。是权重矩阵,维度
[D, D]。- 计算复杂度为
Q维度[k, D],维度
[D, k]。- 计算复杂度为
。这是最昂贵的一步。
AttentionScores维度[k, k],V维度[k, D]。- 计算复杂度为
。
所以,处理一个长度为 k 的序列,Self-Attention的开销主要是。
现在,我们要处理从 k=1 到 k=的所有样本。总计算量是把所有样本的开销加起来:
根据平方和公式 ,我们知道
的复杂度是
。 所以,Self-Attention部分的总开销是
。
b) Pointwise MLP层的开销: 
Pointwise MLP层(也叫Feed-Forward Network)通常是两个全连接层。
- 第一个FC层:
Input维度[k, D],W_1维度[D, 4D](通常中间层会扩大4倍)。- 计算复杂度为
。
- 第二个FC层:
Input维度[k, 4D],W_2维度[4D, D]。- 计算复杂度为
。
所以,处理一个长度为 k 的序列,MLP层的开销是 。
同样,我们要处理从 k=1 到 k= 的所有样本。总计算量是:
根据等差数列求和公式 ,我们知道
的复杂度是
。 所以,Pointwise MLP部分的总开销是
。
c) 总复杂度
总计算量 = Attention开销 + MLP开销 = 。
3. 生成式训练如何降低计算复杂度
现在,我们来看HSTU的生成式训练如何解决这个问题。
在生成式训练中,一个用户的整个序列 [ 只作为一个训练样本被输入到模型中。]
模型只需要做一次前向传播。在这次前向传播中,通过使用因果掩码(Causal Mask),Transformer可以并行地计算出所有时间步的预测结果。
- 在位置1,模型预测
v_2。 - 在位置2,模型预测
v_3。 - ...
- 在位置
,模型预测
。
所有这些预测的损失可以一次性计算并相加(当然,会使用损失掩码忽略掉负反馈等)。
现在我们来分析这次单次前向传播的计算量:
- Self-Attention开销: 输入序列长度为
,根据前面的分析,开销是
。
- Pointwise MLP开销: 输入序列长度为
,开销是
。
总计算量 = 。

被折叠的 条评论
为什么被折叠?



