# #Transformer架构我对transformer认知是**生成式**序列官方的解释是他是Transformer通过自回归的方式逐个生成token本质上是一种序列化的生成过程——模型需要按照固定的顺序依次预测下一个token每个token的生成都依赖于之前已生成的所有token。生成内容那么就要借助之前上下文内容根据过往内容而生成那么借助过往内容去生成总不能所有内容都是一视同仁吧往细一点说总不能每句话每个单词每个token对于当前的query(用户问题)都是同等重要性吧。举个例子我询问那个女孩有没有男朋友模型根据之前的对话内容输出大厂程序员睡得挺晚的这明显就是答非所问正常回答应是如下通常是给了上次下文语境比如描述一下行为习惯和照片这个女孩看起来很漂亮啊不过看着他总是一个人在这里与你一同自习她应该是没有对象的。很明显 大厂程序员和女朋友 这这个示例中是完全不搭边的那么正常情况下的输出 为什么可以这么有关联性。原因就是自注意机制他会评估每个词的重要性从而输出与该词相关性大的的内容## 注意力机制[iPhone 14手机壳] → [AirPods耳机] → [iPad保护套] → [MacBook充电器] → [?]直观理解根据之前的物品预测下个商品应该是什么那么很可能是苹果的生态产品**官方解释**注意力机制的核心思想就是让模型自动学习“在预测下一个物品时应该关注哪些历史行为”。不同于**RNN**那种固定的顺序处理方式**注意力机制允许模型动态地、选择性地聚焦于序列中的任意位置根据当前的预测需求灵活分配注意力权重。**更具体地说注意力机制回答的是这样一个问题给定当前的查询Query序列中的哪些部分Key最相关它们的内容Value应该以多大的权重被聚合起来 这种“查询-匹配-聚合”的模式使得模型能够根据上下文灵活调整信息提取策略而不是死板地按照固定模式处理序列。还是太抽象了**举个列子**你可以把注意力想象成读句子时的 “重点关注”比如句子 “**我** 今天去 **公园** 玩**它** 很热闹”模型要知道 “它” 指的是 “公园”就需要给 “公园” 这个词更高的注意力权重。简单说注意力 **给不同单词分配不同的 “关注度”**让模型知道谁和谁更相关。具体他是怎么给每个单词规划不同的权重的呢这个三个向量的计算如下**1.线性变换 QK,V**为什么需要三个独立的变换因为“查询的需求”、“匹配的标准”和“实际的内容”在语义上是不同的。通过学习三组独立的权重矩阵模型可以灵活地在这三个空间中进行投影和匹配。**2.计算注意力权重****3.加权聚合Value**让我们用一个具体的例子来理解整个过程。假设用户的历史行为序列是 [item1, item2, item3]当模型预测 item4 时- Query预测item4的需求会与 item1, item2, item3 的Key进行匹配- 假设计算出的注意力权重是 [0.1, 0.3, 0.6]说明 item3 最相关- 最终的输出就是 0.1 * V_item1 0.3 * V_item2 0.6 * V_item3这种机制使得模型能够自适应地从历史行为中提取信息而不是简单地对所有历史物品一视同仁。**多头注意力**这个例子很好理解因为要预测的物品可以归属多个属性比如 预测同类别的物品预测品牌的物品或者是最近购买的物品可以看出transformer在生成式内容中的强大优势但他也有个缺点就是他的**编码没有时序性**也就是说我爱你和你爱我的权重是一样的为此引出位置编码## 位置编码和序列建模位置编码的的两种方式一是绝对位置编码 二是相对位置编码绝对位置编码也可可分为两种一是余弦编码 二是可学习的编码**余弦编码**✅ 不同位置的编码是唯一的不会混淆✅ 不同频率的正弦 / 余弦函数让模型能学到 “位置间的相对关系”比如 t 和 tk 的编码有固定数学关系✅ 不需要训练是确定性的可以外推到比训练时更长的序列比如训练时最长 100 词测试时 200 词也能用**可学习的绝对位置编码**思路不再用固定公式而是直接让模型学每个位置的嵌入向量就像学词向量一样代表模型BERT、GPT 早期版本优点更灵活模型可以根据任务学到更合适的位置表示缺点无法外推训练时最长是多少位置测试时就不能超过这个长度**相对位置编码**核心思路不再给每个位置单独编码而是在注意力计算里直接引入 “位置差” 的信息让模型关注 “两个位置之间的距离 / 方向”。A ij第 i 个位置对第 j 个位置的注意力分数b i−j一个可学习的偏置项只和位置差 i−j有关含义在计算注意力时额外加上 “i 和 j 之间隔了多远、方向如何” 的偏置优势✅ 模型学习的是相对关系比如 “前一个词”“后两个词”泛化能力更强✅ 更自然处理变长序列不管序列多长“位置差” 的逻辑不变✅ 代表模型T5、DeBERTa、RoPE Rotary Position Embedding等## 时间序列在推荐系统中位置编码的设计需要特别考虑时间信息的特殊性。与自然语言不同用户行为序列不仅有顺序关系还有真实的时间间隔信息。例如用户A: [item1 (1月1日)] → [item2 (1月2日)] → [item3 (1月3日)]用户B: [item1 (1月1日)] → [item2 (3月1日)] → [item3 (6月1日)]虽然两个序列的顺序相同但用户A的行为是密集的短期兴趣而用户B的行为跨越了更长的时间周期。标准的位置编码无法区分这种时间尺度的差异。## 两种架构范式### Decoder-Encoder这是transformer原始的架构 他的架构中有几个重要的注意力机制如下**Decoder部分**输入用户行为序列嵌入比如点击、加购、收藏的商品 / 内容转成向量**双向自注意力**让模型看到整个行为序列捕捉 “用户过去所有行为之间的关联”比如先看了手机→再看手机壳→再看钢化膜模型能学到这是一套关联需求- [ ] 以用户历史行为【a1,a2,a3...】为例Encoder中的每个位置可以关注序列中的所有其他位置包括前面和后面从而获得对输入的全局理解。这种双向建模能力使得Encoder能够充分捕捉用户行为的整体模式和长期偏好。残差连接 Layer Norm防止训练时梯度消失 / 爆炸让深层网络更容易训练前馈网络FFN对每个位置的特征做非线性变换提取更复杂的模式输出上下文表示把用户所有历史行为压缩成一个全局向量代表 “这个用户的偏好”**Encoder部分**输入目标序列 起始符比如 “START 待推荐的候选序列”**因果自注意力**带掩码的自注意力只能看到当前及之前的位置保证生成时不会 “偷看未来数据”符合推荐 “基于历史预测下一个” 的逻辑确保生成过程的自回归性即预测第t 个token时只能依赖前 t-1个已生成的token**交叉注意力**把编码器输出的「用户上下文」K/V和解码器当前状态Q做注意力计算让模型 “结合用户历史去匹配候选内容”残差连接 Layer Norm FFN和编码器一样稳定训练、增强表达输出预测下一个 token对应下一个要推荐的商品 / 内容这种设计的典型代表包括原始Transformer、T5、BART等模型。在推荐领域TIGER (Rajput et al., 2023) 最早将T5架构引入生成式推荐OneRec等后续工作则进一步针对推荐场景优化了Encoder-Decoder的具体设计。### Decoder-only1.输入格式[用户行为 | 推荐目标]本质把「推荐任务」变成了文本生成任务—— 就像 GPT 写文章一样这里是「写推荐列表」。2.因果注意力机制- 因果掩码Causal Mask Matrix- [ ] 图里那个下三角矩阵就是掩码它会挡住未来的位置让模型在预测第 t 个商品时只能看到 1~t 的历史信息不能偷看后面的答案。- [ ] 比如生成第 3 个推荐商品时模型只能看到「用户行为 已生成的前 2 个商品」完全符合「基于历史预测未来」的推荐逻辑。- 注意力流向- [ ] 蓝色箭头用户行为之间的注意力模型学习「用户过去行为的关联」比如先看手机→再看手机壳- [ ] 橙色箭头用户行为和待生成商品的注意力模型学习「用户历史偏好 → 推荐商品」的映射decoder解码做的事情是【学习用户行为之间的关联】和【行为和推荐的映射】 图中的左下三角就是学习了**蓝色** 用户行为和**黄色** 行为带来的推荐映射## 因果掩码机制他起到的作用是 保证推理一致性 和 训练效率的提升这个掩码机制可以理解成老师给全班同学每个位置 一个同学发同一张试卷但给每个同学的答题范围不一样因果掩码所有人同时做题而不是一个接一个做。因果掩码会给模型的注意力分数矩阵加一个下三角掩码让每个位置只能看到「自己及之前的位置」| 预测位置 | 能看到的输入 | 预测目标 || - | - | - || 1 | [PAD/START] | A || 2 | [A] | B || 3 | [A,B] | C |- 关键这 3 个预测任务在一次前向传播里「并行完成」- 模型把整个序列 [A,B,C] 一次性输入- 因果掩码自动给每个位置 “划范围”- [ ] 位置 2 只能用位置 1 的信息A- [ ] 位置 3 只能用位置 12 的信息AB- [ ] 模型在同一时间算出位置 2 的预测值B、位置 3 的预测值C- 然后用 B 和真实 B 算损失C 和真实 C 算损失一次反向传播更新所有参数**对比 RNN串行**RNN 必须- [ ] 先输入 A算出 B → 算损失- [ ] 再输入 B结合第一步的结果算出 C → 算损失- 相当于 “一个同学做完题下一个才能做”速度慢。- 而 Transformer 因果掩码所有同学同时做题只是每个人的 “参考资料范围” 被掩码限定好了做完一起交卷算分。
生成式架构(1)
# #Transformer架构我对transformer认知是**生成式**序列官方的解释是他是Transformer通过自回归的方式逐个生成token本质上是一种序列化的生成过程——模型需要按照固定的顺序依次预测下一个token每个token的生成都依赖于之前已生成的所有token。生成内容那么就要借助之前上下文内容根据过往内容而生成那么借助过往内容去生成总不能所有内容都是一视同仁吧往细一点说总不能每句话每个单词每个token对于当前的query(用户问题)都是同等重要性吧。举个例子我询问那个女孩有没有男朋友模型根据之前的对话内容输出大厂程序员睡得挺晚的这明显就是答非所问正常回答应是如下通常是给了上次下文语境比如描述一下行为习惯和照片这个女孩看起来很漂亮啊不过看着他总是一个人在这里与你一同自习她应该是没有对象的。很明显 大厂程序员和女朋友 这这个示例中是完全不搭边的那么正常情况下的输出 为什么可以这么有关联性。原因就是自注意机制他会评估每个词的重要性从而输出与该词相关性大的的内容## 注意力机制[iPhone 14手机壳] → [AirPods耳机] → [iPad保护套] → [MacBook充电器] → [?]直观理解根据之前的物品预测下个商品应该是什么那么很可能是苹果的生态产品**官方解释**注意力机制的核心思想就是让模型自动学习“在预测下一个物品时应该关注哪些历史行为”。不同于**RNN**那种固定的顺序处理方式**注意力机制允许模型动态地、选择性地聚焦于序列中的任意位置根据当前的预测需求灵活分配注意力权重。**更具体地说注意力机制回答的是这样一个问题给定当前的查询Query序列中的哪些部分Key最相关它们的内容Value应该以多大的权重被聚合起来 这种“查询-匹配-聚合”的模式使得模型能够根据上下文灵活调整信息提取策略而不是死板地按照固定模式处理序列。还是太抽象了**举个列子**你可以把注意力想象成读句子时的 “重点关注”比如句子 “**我** 今天去 **公园** 玩**它** 很热闹”模型要知道 “它” 指的是 “公园”就需要给 “公园” 这个词更高的注意力权重。简单说注意力 **给不同单词分配不同的 “关注度”**让模型知道谁和谁更相关。具体他是怎么给每个单词规划不同的权重的呢这个三个向量的计算如下**1.线性变换 QK,V**为什么需要三个独立的变换因为“查询的需求”、“匹配的标准”和“实际的内容”在语义上是不同的。通过学习三组独立的权重矩阵模型可以灵活地在这三个空间中进行投影和匹配。**2.计算注意力权重****3.加权聚合Value**让我们用一个具体的例子来理解整个过程。假设用户的历史行为序列是 [item1, item2, item3]当模型预测 item4 时- Query预测item4的需求会与 item1, item2, item3 的Key进行匹配- 假设计算出的注意力权重是 [0.1, 0.3, 0.6]说明 item3 最相关- 最终的输出就是 0.1 * V_item1 0.3 * V_item2 0.6 * V_item3这种机制使得模型能够自适应地从历史行为中提取信息而不是简单地对所有历史物品一视同仁。**多头注意力**这个例子很好理解因为要预测的物品可以归属多个属性比如 预测同类别的物品预测品牌的物品或者是最近购买的物品可以看出transformer在生成式内容中的强大优势但他也有个缺点就是他的**编码没有时序性**也就是说我爱你和你爱我的权重是一样的为此引出位置编码## 位置编码和序列建模位置编码的的两种方式一是绝对位置编码 二是相对位置编码绝对位置编码也可可分为两种一是余弦编码 二是可学习的编码**余弦编码**✅ 不同位置的编码是唯一的不会混淆✅ 不同频率的正弦 / 余弦函数让模型能学到 “位置间的相对关系”比如 t 和 tk 的编码有固定数学关系✅ 不需要训练是确定性的可以外推到比训练时更长的序列比如训练时最长 100 词测试时 200 词也能用**可学习的绝对位置编码**思路不再用固定公式而是直接让模型学每个位置的嵌入向量就像学词向量一样代表模型BERT、GPT 早期版本优点更灵活模型可以根据任务学到更合适的位置表示缺点无法外推训练时最长是多少位置测试时就不能超过这个长度**相对位置编码**核心思路不再给每个位置单独编码而是在注意力计算里直接引入 “位置差” 的信息让模型关注 “两个位置之间的距离 / 方向”。A ij第 i 个位置对第 j 个位置的注意力分数b i−j一个可学习的偏置项只和位置差 i−j有关含义在计算注意力时额外加上 “i 和 j 之间隔了多远、方向如何” 的偏置优势✅ 模型学习的是相对关系比如 “前一个词”“后两个词”泛化能力更强✅ 更自然处理变长序列不管序列多长“位置差” 的逻辑不变✅ 代表模型T5、DeBERTa、RoPE Rotary Position Embedding等## 时间序列在推荐系统中位置编码的设计需要特别考虑时间信息的特殊性。与自然语言不同用户行为序列不仅有顺序关系还有真实的时间间隔信息。例如用户A: [item1 (1月1日)] → [item2 (1月2日)] → [item3 (1月3日)]用户B: [item1 (1月1日)] → [item2 (3月1日)] → [item3 (6月1日)]虽然两个序列的顺序相同但用户A的行为是密集的短期兴趣而用户B的行为跨越了更长的时间周期。标准的位置编码无法区分这种时间尺度的差异。## 两种架构范式### Decoder-Encoder这是transformer原始的架构 他的架构中有几个重要的注意力机制如下**Decoder部分**输入用户行为序列嵌入比如点击、加购、收藏的商品 / 内容转成向量**双向自注意力**让模型看到整个行为序列捕捉 “用户过去所有行为之间的关联”比如先看了手机→再看手机壳→再看钢化膜模型能学到这是一套关联需求- [ ] 以用户历史行为【a1,a2,a3...】为例Encoder中的每个位置可以关注序列中的所有其他位置包括前面和后面从而获得对输入的全局理解。这种双向建模能力使得Encoder能够充分捕捉用户行为的整体模式和长期偏好。残差连接 Layer Norm防止训练时梯度消失 / 爆炸让深层网络更容易训练前馈网络FFN对每个位置的特征做非线性变换提取更复杂的模式输出上下文表示把用户所有历史行为压缩成一个全局向量代表 “这个用户的偏好”**Encoder部分**输入目标序列 起始符比如 “START 待推荐的候选序列”**因果自注意力**带掩码的自注意力只能看到当前及之前的位置保证生成时不会 “偷看未来数据”符合推荐 “基于历史预测下一个” 的逻辑确保生成过程的自回归性即预测第t 个token时只能依赖前 t-1个已生成的token**交叉注意力**把编码器输出的「用户上下文」K/V和解码器当前状态Q做注意力计算让模型 “结合用户历史去匹配候选内容”残差连接 Layer Norm FFN和编码器一样稳定训练、增强表达输出预测下一个 token对应下一个要推荐的商品 / 内容这种设计的典型代表包括原始Transformer、T5、BART等模型。在推荐领域TIGER (Rajput et al., 2023) 最早将T5架构引入生成式推荐OneRec等后续工作则进一步针对推荐场景优化了Encoder-Decoder的具体设计。### Decoder-only1.输入格式[用户行为 | 推荐目标]本质把「推荐任务」变成了文本生成任务—— 就像 GPT 写文章一样这里是「写推荐列表」。2.因果注意力机制- 因果掩码Causal Mask Matrix- [ ] 图里那个下三角矩阵就是掩码它会挡住未来的位置让模型在预测第 t 个商品时只能看到 1~t 的历史信息不能偷看后面的答案。- [ ] 比如生成第 3 个推荐商品时模型只能看到「用户行为 已生成的前 2 个商品」完全符合「基于历史预测未来」的推荐逻辑。- 注意力流向- [ ] 蓝色箭头用户行为之间的注意力模型学习「用户过去行为的关联」比如先看手机→再看手机壳- [ ] 橙色箭头用户行为和待生成商品的注意力模型学习「用户历史偏好 → 推荐商品」的映射decoder解码做的事情是【学习用户行为之间的关联】和【行为和推荐的映射】 图中的左下三角就是学习了**蓝色** 用户行为和**黄色** 行为带来的推荐映射## 因果掩码机制他起到的作用是 保证推理一致性 和 训练效率的提升这个掩码机制可以理解成老师给全班同学每个位置 一个同学发同一张试卷但给每个同学的答题范围不一样因果掩码所有人同时做题而不是一个接一个做。因果掩码会给模型的注意力分数矩阵加一个下三角掩码让每个位置只能看到「自己及之前的位置」| 预测位置 | 能看到的输入 | 预测目标 || - | - | - || 1 | [PAD/START] | A || 2 | [A] | B || 3 | [A,B] | C |- 关键这 3 个预测任务在一次前向传播里「并行完成」- 模型把整个序列 [A,B,C] 一次性输入- 因果掩码自动给每个位置 “划范围”- [ ] 位置 2 只能用位置 1 的信息A- [ ] 位置 3 只能用位置 12 的信息AB- [ ] 模型在同一时间算出位置 2 的预测值B、位置 3 的预测值C- 然后用 B 和真实 B 算损失C 和真实 C 算损失一次反向传播更新所有参数**对比 RNN串行**RNN 必须- [ ] 先输入 A算出 B → 算损失- [ ] 再输入 B结合第一步的结果算出 C → 算损失- 相当于 “一个同学做完题下一个才能做”速度慢。- 而 Transformer 因果掩码所有同学同时做题只是每个人的 “参考资料范围” 被掩码限定好了做完一起交卷算分。