本文档旨在为大语言模型(LLM)、视觉语言模型(VLM)、智能体(Agent)、RAG及相关领域的面试提供一个全面的复习指南。仅提供1-6部分参考答案,7、8章节为半开放题目,可以自行借助AI或结合自身经历回答。
---
* <strong>参考答案:</strong>
自注意力(Self-Attention)机制是Transformer模型的核心,它使得模型能够动态地衡量输入序列中不同单词之间的重要性,并据此生成每个单词的上下文感知表示。
<strong>工作原理如下:</strong>
1. <strong>生成Q, K, V向量:</strong> 对于输入序列中的每一个词元(token)的嵌入向量,我们通过乘以三个可学习的权重矩阵 $W^Q, W^K, W^V$ ,分别生成三个向量:查询向量(Query, Q)、键向量(Key, K)和值向量(Value, V)。
* <strong>Query (Q):</strong> 代表当前词元为了更好地理解自己,需要去“查询”序列中其他词元的信息。
* <strong>Key (K):</strong> 代表序列中每个词元所“携带”的,可以被查询的信息标签。
* <strong>Value (V):</strong> 代表序列中每个词元实际包含的深层含义。
2. <strong>计算注意力分数:</strong> 为了确定当前词元(由Q代表)应该对其他所有词元(由K代表)投入多少关注,我们计算当前词元的Q与其他所有词元的K的点积。这个分数衡量了两者之间的相关性。
<div align="center">
$$\text{Score}(Q_i, K_j) = Q_i \cdot K_j$$ </div>
3. <strong>缩放(Scaling):</strong> 将计算出的分数除以一个缩放因子 $\sqrt{d_k}$( $d_k$ 是K向量的维度)。这一步是为了在反向传播时获得更稳定的梯度,防止点积结果过大导致Softmax函数进入饱和区。 <div align="center">
$$\frac{Q \cdot K^T}{\sqrt{d_k}}$$ </div>
4. <strong>Softmax归一化:</strong> 将缩放后的分数通过一个Softmax函数,使其转换为一组总和为1的概率分布。这些概率就是“注意力权重”,表示在当前位置,每个输入词元所占的重要性。
<div align="center">
$$\text{AttentionWeights} = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)$$ </div>
5. <strong>加权求和:</strong> 最后,将得到的注意力权重与每个词元对应的V向量相乘并求和,得到最终的自注意力层输出。这个输出向量融合了整个序列的上下文信息,且权重由模型动态学习得到。
<div align="center">
$$\text{Output} = \text{AttentionWeights} \cdot V$$ </div>
<strong>为什么比RNN更适合处理长序列?</strong>
1. <strong>并行计算能力:</strong> 自注意力机制在计算时,可以一次性处理整个序列,计算所有位置之间的关联,是高度并行的。而RNN(包括LSTM、GRU)必须按照时间顺序依次处理每个词元,无法并行化,导致处理长序列时速度非常慢。
2. <strong>解决长距离依赖问题:</strong> 在自注意力中,任意两个位置之间的交互路径长度都是O(1),因为可以直接计算它们的注意力分数。而在RNN中,序列首尾两个词元的信息传递需要经过整个序列的长度,路径为O(N),这极易导致梯度消失或梯度爆炸,使得模型难以捕捉长距离的依赖关系。