
1. Transformer 是什么?它与传统监督学习中的 X/Y 有何不同?Transformer 是一种基于自注意力机制(Self‑Attention)的序列建模架构,由 Vaswani 等人在 2017 年提出。它抛弃了传统的循环(RNN)或卷积(CNN)结构,完全依靠注意力机制捕捉全局依赖关系,在自然语言处理(NLP)、计算机视觉、语音识别等领域取得了革命性成果。要理解 Transformer,可以先对比我们熟悉的监督学习范式:时序预测(如股票价格预测)输入 X:过去 30 天的气温、开盘价等特征向量序列;标签 Y:第 31 天的气温。X 和 Y 具有明确的因果关系,且 Y 是数值,模型需要学习从历史序列到未来值的映射。图片分类输入 X:一张像素矩阵;标签 Y:人工标注的类别(如“猫”)。Y 是离散类别,且与 X 完全解耦——标注需要人工给出,模型并不知道图片本身的内容标签。大语言模型(LLM)输入 X:一段文本(如 “今天天气真”);标签 Y:就是 X 本身,但整体向右平移一位(即 “天天气真好”)。模型的任务是预测序列中的下一个 token。标签就是输入自己的后一个 token,这就是自监督学习(Self‑Supervised Learning),也是 GPT 等模型的核心思想:用海量无标注文本,将 X 中的每个 token 作为标签,训练生成式模型。Transformer 之所以能统合不同领域,正是因为它的自注意力机制能对序列中任意位置的关系直接建模,而不需要人工设计输入输出范式。2. 什么是 Q、K、V?举例说明Q、K、V 是注意力机制的核心概念,它们都来源于信息检索的类比:Q(Query,查询):我想查什么。K(Key,键):每个东西的标签。V(Value,值):实际的内容。当我们在搜索引擎输入“Transformer 注意力”时:Q 就是我们输入的查询;K 是每篇文档的关键词标题;V 是文档的正文。这个过程通过计算Q 与 K 的相似度来决定应该从 V 中提取多少信息。在自注意力中,Q、K、V 都来自同一个输入序列 X,通过线性变换得到:Q = X · W_Q K = X · W_K V = X · W_V举个具体例子(句子翻译)输入句子:“The cat sat on the mat”。当我们计算“cat”这个词的注意力时:Q 由“cat”的 embedding 生成,表示“我在查哪里需要关注”;K 由每个词的 embedding 生成,表示“我是哪个词的信息标签”;V 也是每个词本身的含义表示。计算过程:Q 与每个 K 做点积,得到相似度分数(“cat”与“The”、“cat”与“cat”、“cat”与“sat”……);用 softmax 归一化得到注意力权重;将权重与 V 加权求和,得到“cat”在全局语境中的增强表示。这样,“cat”最终的表示就包含了它与其他所有词的关系,比如它和“mat”紧密相关,和“The”关系弱。下面是一个使用 NumPy 实现单头缩放点积注意力的简化代码示例,包含 Q、K、V 的生成以及完整计算步骤:importnumpyasnpdefscaled_dot_product_attention(Q,K,V):""" 单头缩放点积注意力(Scaled Dot-Product Attention)的简化 NumPy 实现。 参数: Q: 查询矩阵,形状 (seq_len, d_k) K: 键矩阵,形状 (seq_len, d_k) V: 值矩阵,形状 (seq_len, d_v) 返回: output: 注意力加权后的输出,形状 (seq_len, d_v) attn_weights: 注意力权重矩阵,形状 (seq_len, seq_len) """d_k=Q.shape[-1]# 获取缩放因子# 1. 计算 Q 与 K 的点积相似度,并缩放scores=np.dot(Q,K.T)/np.sqrt(d_k)# 2. 通过 softmax 归一化得到注意力权重(数值稳定版)scores_max=np.max(scores,axis=-1,keepdims=True)exp_scores=np.exp(scores-scores_max)attn_weights=exp_scores/np.sum(exp_scores,axis=-1,keepdims=True)# 3. 用注意力权重加权求和 Voutput=np.dot(attn_weights,V)returnoutput,attn_weights# 示例:模拟 4 个词,嵌入维度 d_model=8,d_k=d_v=8(简化)seq_len,d_model=4,8X=np.random.randn(seq_len,d_model)# 输入序列# 随机初始化权重矩阵np.random.seed(42)# 固定种子以便复现W_Q=np.random.randn(d_model,d_model)W_K=np.random.randn(d_model,d_model)W_V=np.random.randn(d_model,d_model)# 生成 Q, K, VQ=X @ W_Q# 等价于 np.dot(X, W_Q)K=X @ W_K V=X @ W_V# 计算自注意力output,attn_weights=scaled_dot_product_attention(Q,K,V)print("注意力权重矩阵:\n",attn_weights)print("输出形状:",output.shape)3. Transformer 的整体结构Transformer 由**编码器(Encoder)和解码器(Decoder)**两大部分堆叠而成,每个部分可以重复 N 次。以原始论文的 N=6 为例:编码器(N 层堆叠)每层包含两个子层:多头自注意力(Multi‑Head Self‑Attention)使输入的每个位置都能看到序列中的其他位置(双向信息)。前馈神经网络(FFN)两个线性变换 + ReLU 激活,对每个位置独立做非线性变换。每个子层都使用残差连接(Add)和层归一化(LayerNorm),即LayerNorm(x + Sublayer(x))。解码器(N 层堆叠)每层包含三个子层:掩码多头自注意力(Masked Multi‑Head Self‑Attention)保证生成当前 token 时只能看到之前的位置(因果注意力),不能看到未来词。交叉注意力(Cross‑Attention)其 Q 来自解码器的上一步输出,K、V 来自编码器的最终输出。负责将源语言信息融合到目标语言生成中。前馈神经网络(FFN)同编码器。最后经过一个线性层 + Softmax,将解码器输出映射到词汇表大小,预测下一个词。Decoder(×N)