本文参考一一文彻底搞懂 Transformer图解代码手撕本文参考二收藏关于Transformer的20个常见面试问题你知道多少一、在多头注意力当中每个头会接收多少向量是全部嘛每个头接收的是整个序列的全部向量而不是序列的一部分。在多头注意力机制中输入是一个序列长度为 L例如一句话有 L 个词或一张图像分成 L 个块。在多头注意力Multi-Head Attention机制中每个头接收的是全部输入向量而不是部分。具体来说输入是一个序列比如 L 个向量每个向量维度为 dmodel对应序列中的 L 个位置。每个注意力头会独立地接收整个序列的所有 L 个向量作为输入。不同头的区别在于它们使用各自独立的可学习权重矩阵将输入线性变换为各自的 Query、Key、Value然后分别计算注意力输出。最后将所有头的输出拼接起来再经过一次线性变换得到最终结果。所以每个头都会看到全部序列信息只是它们从不同特征子空间去提取关联模式。每个头处理的向量数量是 L 个序列长度而不是部分向量。二、在多头注意力机制中对每个头进行降维的主要原因是为了降低计算复杂度同时保持模型的表达能力。通过将输入特征分成多个低维子空间模型能够在每个子空间中独立学习特征从而提高学习效率。这里面的降维的意思是分成L个向量嘛具体解释输入通常是一个序列包含L 个向量每个向量的原始维度为 dmodel如 512。在多头注意力中假设有h 个头每个头会通过独立的线性变换将每个向量的维度从 dmodel 降维到 dkdmodel/h例如 512 / 8 64。这意味着每个头接收的仍然是全部 L 个向量但每个向量的特征维度变小了从 512 降到 64。计算注意力时每个头的复杂度从O(L2⋅dmodel) 降为 O(L2⋅dk)整体复杂度保持不变但通过多头并行捕捉不同子空间信息。三、降维会不会导致信息减少为什么说“信息会减少”从信息论角度看将一个dmodel 维的向量通过线性变换压缩到 dk 维dkdmodel这个过程是有损压缩。部分原始特征空间中的细微或冗余信息会被丢弃。如果只有一个头那么这种降维确实会导致不可逆的信息损失从而限制模型的表达能力。为什么“多头注意力整体上信息不减少”多头注意力正是为了解决“单头降维导致信息损失”这个问题而设计的。它的核心理念是不把鸡蛋放在一个篮子里。多视角并行每个头使用不同的、可学习的权重矩阵进行降维。这意味着每个头会关注原始输入中不同的特征子空间。例如在一个“头”中丢失的语法信息可能在另一个“头”中被完整保留并强化。信息的冗余与互补虽然每个头看到的信息是“片面”且“有损”的但多个头看到的信息是互补的。它们合在一起共同覆盖了原始高维空间中的大部分重要模式。拼接恢复最后将所有头的输出每个头输出 dk 维在特征维度上拼接起来得到 h×dkdmodel维的输出。这个拼接操作在特征层面上重新整合了来自不同子空间的信息。四、transform中什么是位置编码在 Transformer 模型中位置编码Positional Encoding是一个核心组件用来解决 “并行计算带来的序列顺序缺失” 问题。简单说Transformer 的自注意力机制Self-Attention会同时处理整个句子它本身不具备区分词语位置的能力。比如“我打你”和“你打我”在它看来是一样的因为词序信息丢失了。位置编码就是为了显式地把“位置信息”注入到模型中。RNN 有顺序循环神经网络RNN是一个词一个词地处理天然就带有位置信息。Transformer 无顺序Transformer 的核心是自注意力它会一次性看到所有词。如果不加位置信息“我爱你”和“你爱我”模型对“我”和“你”这两个词的注意力计算结果是完全一样的。五、transform中会把每个字还是词表示向量在 Transformer 模型中输入的单位既不是“每个字”也不是“每个词”而是 每个 Token词元/标记。具体用字还是用词取决于你采用的 分词方法Tokenization。你可以理解为Transformer 处理的是一个“Token 序列”每个 Token 对应一个向量。六、前面提到并行在 Transformer 的讨论中“并行计算”指的是模型可以同时计算句子中所有位置Token的输出而不需要像循环神经网络RNN那样按时间步一个一个地依次计算。Transformer并行同样处理 “我爱你”它通过 自注意力 机制模型一次性接收所有 Token“我”、“爱”、“你”的向量。计算每个 Token 与其他所有 Token 之间的注意力权重时这些计算是相互独立的可以同时算出来。最终所有位置的输出向量可以在同一批矩阵运算中并行得到不需要像 RNN 那样等待前面的结果。七、每个Encoder层的输入是前一层的输出经过多头注意力和前馈网络的处理后输出的上下文表示能够捕捉到输入序列的全局信息。每一层都是的输出都是全局信息吗结果都一样吗不并不是每一层的输出结果都一样但每一层输出的确实都是全局信息。这两点需要区分理解为什么说“每一层的输出都是全局信息”因为 自注意力机制Self-Attention 在每一层都会让每个 Token 直接“看到”整个序列的所有 Token。例如即使在第 1 层编码器计算 “爱” 这个位置的输出时它已经同时融合了 “我”、“爱”、“你” 的信息加权聚合。所以从感受野角度来看每一层编码器的输出都是基于整个输入序列的全局上下文表示不存在“低层只能看局部”的情况不同于 CNN 的逐层扩大感受野。那不同层的结果为什么不一样虽然每一层都“全局”但它们提取和编码的信息层次不同底层靠近输入的层输出更偏向局部、语法、词性、短语结构等较细粒度的特征。例如底层可能强烈关注相邻词的搭配。中层开始捕捉句法角色、基本语义比如主谓宾关系。高层靠近输出的层输出更偏向整体语义、句子级表示、复杂关系如指代、逻辑隐含等。高层会对底层信息进行非线性抽象和重组。不同 Encoder 层的权重是不一样的。每一层都拥有自己独立的一套参数八、使用不同矩阵权重的关键性原因这是一个非常经典且深刻的问题。简单直接的答案是如果Q和K来自同一个矩阵即权重共享那么注意力机制就退化成了“当前词与自己过去所有词的静态、对称的相似度”这会严重限制模型的表达能力和灵活性。kx乘以WK qx乘以Wq 得来的
对于transform架构的认识
发布时间:2026/6/26 3:16:40
本文参考一一文彻底搞懂 Transformer图解代码手撕本文参考二收藏关于Transformer的20个常见面试问题你知道多少一、在多头注意力当中每个头会接收多少向量是全部嘛每个头接收的是整个序列的全部向量而不是序列的一部分。在多头注意力机制中输入是一个序列长度为 L例如一句话有 L 个词或一张图像分成 L 个块。在多头注意力Multi-Head Attention机制中每个头接收的是全部输入向量而不是部分。具体来说输入是一个序列比如 L 个向量每个向量维度为 dmodel对应序列中的 L 个位置。每个注意力头会独立地接收整个序列的所有 L 个向量作为输入。不同头的区别在于它们使用各自独立的可学习权重矩阵将输入线性变换为各自的 Query、Key、Value然后分别计算注意力输出。最后将所有头的输出拼接起来再经过一次线性变换得到最终结果。所以每个头都会看到全部序列信息只是它们从不同特征子空间去提取关联模式。每个头处理的向量数量是 L 个序列长度而不是部分向量。二、在多头注意力机制中对每个头进行降维的主要原因是为了降低计算复杂度同时保持模型的表达能力。通过将输入特征分成多个低维子空间模型能够在每个子空间中独立学习特征从而提高学习效率。这里面的降维的意思是分成L个向量嘛具体解释输入通常是一个序列包含L 个向量每个向量的原始维度为 dmodel如 512。在多头注意力中假设有h 个头每个头会通过独立的线性变换将每个向量的维度从 dmodel 降维到 dkdmodel/h例如 512 / 8 64。这意味着每个头接收的仍然是全部 L 个向量但每个向量的特征维度变小了从 512 降到 64。计算注意力时每个头的复杂度从O(L2⋅dmodel) 降为 O(L2⋅dk)整体复杂度保持不变但通过多头并行捕捉不同子空间信息。三、降维会不会导致信息减少为什么说“信息会减少”从信息论角度看将一个dmodel 维的向量通过线性变换压缩到 dk 维dkdmodel这个过程是有损压缩。部分原始特征空间中的细微或冗余信息会被丢弃。如果只有一个头那么这种降维确实会导致不可逆的信息损失从而限制模型的表达能力。为什么“多头注意力整体上信息不减少”多头注意力正是为了解决“单头降维导致信息损失”这个问题而设计的。它的核心理念是不把鸡蛋放在一个篮子里。多视角并行每个头使用不同的、可学习的权重矩阵进行降维。这意味着每个头会关注原始输入中不同的特征子空间。例如在一个“头”中丢失的语法信息可能在另一个“头”中被完整保留并强化。信息的冗余与互补虽然每个头看到的信息是“片面”且“有损”的但多个头看到的信息是互补的。它们合在一起共同覆盖了原始高维空间中的大部分重要模式。拼接恢复最后将所有头的输出每个头输出 dk 维在特征维度上拼接起来得到 h×dkdmodel维的输出。这个拼接操作在特征层面上重新整合了来自不同子空间的信息。四、transform中什么是位置编码在 Transformer 模型中位置编码Positional Encoding是一个核心组件用来解决 “并行计算带来的序列顺序缺失” 问题。简单说Transformer 的自注意力机制Self-Attention会同时处理整个句子它本身不具备区分词语位置的能力。比如“我打你”和“你打我”在它看来是一样的因为词序信息丢失了。位置编码就是为了显式地把“位置信息”注入到模型中。RNN 有顺序循环神经网络RNN是一个词一个词地处理天然就带有位置信息。Transformer 无顺序Transformer 的核心是自注意力它会一次性看到所有词。如果不加位置信息“我爱你”和“你爱我”模型对“我”和“你”这两个词的注意力计算结果是完全一样的。五、transform中会把每个字还是词表示向量在 Transformer 模型中输入的单位既不是“每个字”也不是“每个词”而是 每个 Token词元/标记。具体用字还是用词取决于你采用的 分词方法Tokenization。你可以理解为Transformer 处理的是一个“Token 序列”每个 Token 对应一个向量。六、前面提到并行在 Transformer 的讨论中“并行计算”指的是模型可以同时计算句子中所有位置Token的输出而不需要像循环神经网络RNN那样按时间步一个一个地依次计算。Transformer并行同样处理 “我爱你”它通过 自注意力 机制模型一次性接收所有 Token“我”、“爱”、“你”的向量。计算每个 Token 与其他所有 Token 之间的注意力权重时这些计算是相互独立的可以同时算出来。最终所有位置的输出向量可以在同一批矩阵运算中并行得到不需要像 RNN 那样等待前面的结果。七、每个Encoder层的输入是前一层的输出经过多头注意力和前馈网络的处理后输出的上下文表示能够捕捉到输入序列的全局信息。每一层都是的输出都是全局信息吗结果都一样吗不并不是每一层的输出结果都一样但每一层输出的确实都是全局信息。这两点需要区分理解为什么说“每一层的输出都是全局信息”因为 自注意力机制Self-Attention 在每一层都会让每个 Token 直接“看到”整个序列的所有 Token。例如即使在第 1 层编码器计算 “爱” 这个位置的输出时它已经同时融合了 “我”、“爱”、“你” 的信息加权聚合。所以从感受野角度来看每一层编码器的输出都是基于整个输入序列的全局上下文表示不存在“低层只能看局部”的情况不同于 CNN 的逐层扩大感受野。那不同层的结果为什么不一样虽然每一层都“全局”但它们提取和编码的信息层次不同底层靠近输入的层输出更偏向局部、语法、词性、短语结构等较细粒度的特征。例如底层可能强烈关注相邻词的搭配。中层开始捕捉句法角色、基本语义比如主谓宾关系。高层靠近输出的层输出更偏向整体语义、句子级表示、复杂关系如指代、逻辑隐含等。高层会对底层信息进行非线性抽象和重组。不同 Encoder 层的权重是不一样的。每一层都拥有自己独立的一套参数八、使用不同矩阵权重的关键性原因这是一个非常经典且深刻的问题。简单直接的答案是如果Q和K来自同一个矩阵即权重共享那么注意力机制就退化成了“当前词与自己过去所有词的静态、对称的相似度”这会严重限制模型的表达能力和灵活性。kx乘以WK qx乘以Wq 得来的