✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

《大模型入门精华》


1 前言
    1.1  大模型的发展历史

    1.2  Hugging Face简介

    1.3  大模型技术总览

    1.4  GPT模型的发展历程

    1.5  BERT和GPT之战

2 Transformer技术
    2.1  词嵌入技术简介

    2.3  Transformer简介

3 预训练与监督微调
    3.1  预训练技术简介

    3.2  监督微调技术简介

4 大模型核心技术
    4.3  大模型的重复问题

    4.4  LoRA的诞生背景

    4.5  LoRA的数学原理

    4.6  LoRA的核心考点

    4.8  知识蒸馏常见考题

    4.9  模型量化常见考题

    4.10  大模型的剪枝问题

    4.12  RAG原理介绍

5 大模型压缩技术
    5.2  压缩技术全景图

    5.3  知识蒸馏入门介绍

    5.4  温度参数入门介绍

    5.5  落地选型的考量

    5.6  智能客服案例分析

    5.7  大模型量化

    5.8  模型剪枝入门介绍

    5.9  大模型压缩实战

6 大模型与强化学习
    6.1  大模型与强化学习

    6.2  强化学习面试要点

    6.3  RLHF核心考题

    6.4  RLHF的挑战

    6.5  GRPO入门介绍

    6.6  人类反馈强化学习

    6.8  PPO算法代码复现

    6.9  大模型与强化学习

    6.10  强化学习核心概念

    6.11  RLHF入门介绍

    6.12  PPO入门介绍

    6.13  RLAIF与自动化对齐

    6.16  规模定律详细介绍

    6.17  强化学习的未来

7 扩散模型与文生图
    7.1  文生图原理介绍

    7.2  扩散模型原理介绍

    7.3  扩散模型与文生图

8 手搓大模型

Seq2Seq与Attention简介

创建时间:2026-05-04 更新时间:2026-05-04 阅读次数:1107 次

Seq2Seq与Attention是深度学习序列建模的两大里程碑。下面这篇文章将带你从“编码器-解码器”的基本框架出发,逐步深入Attention的数学原理与计算流程,最后展现它们在Transformer及多模态时代的延续与进化。

1、序列生成的困境与Seq2Seq的诞生

在传统的自然语言处理任务中,如文本分类或序列标注,模型更像是在做“选择题”或“填空题”——输入与输出的长度往往是固定的,或者存在严格的一一对应关系。然而,当任务转变为机器翻译、文本摘要或对话生成时,我们面临的是一个“即兴创作”的挑战:输入一句中文,可能需要输出一句长度截然不同的英文;阅读一篇长文,只需输出寥寥数句的摘要。这种从“可变长度序列”到“可变长度序列”的映射需求,催生了序列到序列(Sequence-to-Sequence,简称Seq2Seq)模型。它的核心设计思想极其优雅:既然输入输出的长度没有固定比例,那就干脆将模型拆分为两个协作的组件——编码器(Encoder)扮演“理解者”,解码器(Decoder)扮演“创作者”。

为了理解Seq2Seq的革命性,我们需要回顾它出现之前的主流方案。基于循环神经网络(RNN)及其变体LSTM的模型,虽然理论上能处理序列,但通常是每个输入时间步对应一个输出时间步。这在机器翻译中会立刻失效:比如“我爱你”三个字翻译成“I love you”三个词是巧合,但更多时候是“你好”翻译成“Hello”,或者“你吃了吗”翻译成一长串英文问候语。Seq2Seq通过“编码-解码”这种不对称设计,彻底解耦了输入输出长度。编码器将整个输入序列压缩成一个固定维度的上下文向量(Context Vector),解码器再从这个向量中“解压”出目标序列。这就像两个人协作:一个人读完一篇文章后写出梗概,另一人根据梗概用另一种语言重写。

在实际操作中,编码器通常由RNN或LSTM构成,它逐词处理输入,每一步更新隐藏状态,处理结束时产生的最终隐藏状态就被视为整句话的“语义精华”。解码器同样是一个RNN,但它的工作方式很特别——训练时,我们采用“教师强制”(Teacher Forcing)策略,即每一步的输入不是上一步的预测结果,而是真实目标序列的前一个词,以此加速收敛;推理时,则切换为自回归生成(Autoregressive Generation),以上一步的输出作为下一步的输入,直到生成终止符。然而,这个精巧的设计却隐藏着一个致命缺陷:所有输入信息都被强行塞进一个固定长度的向量中,当输入句子变长时,这个“信息瓶颈”会导致早期输入的信息被严重稀释。

2、深入编码器-解码器:架构之美与信息瓶颈

Seq2Seq的编码器-解码器架构,其数学本质是在建模条件概率 $P(Y|X)$,其中 $X$ 是源序列,$Y$ 是目标序列。编码器将变长的 $X$ 映射为固定维度的向量 $c$,解码器则在每一步根据 $c$ 和已生成的部分序列 $y_{<t}$ 来预测下一个词 $y_t$,即 $P(y_t | y_{<t}, c)$。这个框架的巧妙之处在于,它将序列生成问题转化为一系列分类问题的叠加:解码器的每一步,本质上是在整个目标词汇表上做一个概率分布预测,选择最可能的那两个词作为输出。

让我们借助一个具体的机器翻译例子来透视这个过程:假设要把英语“Go away”翻译成德语“Geh weg”。首先,我们需要对英语和德语分别建立词表,德语词表里还要额外加入起始符 <sos> 和终止符 <eos>。编码器读取“Go”和“away”,将最终的隐藏状态 $h_{enc}$ 作为上下文向量。解码器拿到 $h_{enc}$ 作为初始状态,第一步输入 <sos>,输出概率最高的词应该是“Geh”;然后将“Geh”作为第二步的输入,连同上一刻的状态,预测出“weg”;最后输入“weg”,预测出 <eos> 便宣告生成结束。

这个流程虽然直观,但“单向量瓶颈”的问题随着序列增长会迅速恶化。RNN本身就有长距离依赖的固有问题——在反向传播时,梯度需要穿越极长的时间步,导致指数级衰减或爆炸。即便引入了LSTM的门控机制,当句子长度超过几十个词时,编码器最后一个隐藏状态也很难完整保留开头的细节。我们可以想象一个极端场景:翻译一篇500词的文章,编码器必须把标题、开头段落、中间论证和结尾结论全部压缩到一个几百维的向量里。信息密度如此之高,解码器在生成第一个词时,根本“记不清”原文开头到底说了什么。这就是注意力机制(Attention)登场的一幕——它说,为什么非要让编码器把全部信息打包成一个向量?为什么不让解码器在每一步都直接“回看”编码器的所有中间状态,自行决定该关注哪儿?

3、注意力机制的核心思想:让模型学会“对齐”

注意力机制(Attention Mechanism)的核心思想,源于对人类认知过程的朴素模仿:当我们翻译一个长句时,每写出一个目标词,眼睛都会不自觉地回到源句中寻找最相关的部分。这种“动态对齐”的能力,在 Bahdanau等人2015年的开创性工作中被首次形式化,并应用于Seq2Seq机器翻译 \(^1\)。Attention并非替换Seq2Seq,而是对它的一次关键增强——编码器不再只输出最后一个隐藏状态,而是保留所有时间步的隐藏状态,让解码器在每一步都能根据当前需求,动态地“取出”最相关的信息 \(^2\)。

如果用数据库查询来类比,Attention机制的工作原理会变得异常清晰。解码器当前的隐藏状态扮演“查询”(Query, $Q$)角色,它在问:“我现在要生成下一个词,输入序列中哪些位置对我最有帮助?”;编码器所有时间步的隐藏状态则充当“键”(Key, $K$)和“值”(Value, $V$)的集合,它们回答:“我这里保存了这些信息,你看有没有用?” \(^3\)。具体来说,Attention的计算分为三步:第一步,计算Query与每个Key之间的“相似度”,得到一个能量分数 $e_{ij}$,这个分数衡量了输出位置 $i$ 与输入位置 $j$ 的相关程度;第二步,用Softmax将所有分数归一化为一组总和为1的注意力权重 $\alpha_{ij}$;第三步,用这些权重对Value进行加权求和,得到一个上下文向量 $c_i$,它就是从输入序列中“提取”出来的,对当前输出位置最有用的信息 \(^4\)。

这个机制最迷人的地方在于,注意力权重 $\alpha_{ij}$ 本身就是“对齐”的可视化呈现。在翻译任务中,如果我们画一张热力图,横轴是源语言单词,纵轴是目标语言单词,每个格子的颜色深浅代表权重高低,通常会看到一条明亮的对角线——这表示两种语言的词序大体一致。但当出现语序颠倒时,比如英语的“European Economic Area”翻译为法语的“zone économique européenne”,对角线就会被打破,出现跨位置的强关注 \(^5\)。更令人惊叹的是,这些权重并非人工规则,而是模型在训练过程中通过反向传播自行学会的。模型从大量的平行语料中,自动掌握了不同语言之间的词序对应规律,短语搭配习惯甚至语法结构差异 \(^6\)。

4、数学视角下的注意力:从加性到乘性

注意力机制的实现有多种数学形式,主要区别在于相似度评分函数的设计。最早的Bahdanau注意力使用“加性”(Additive)方式:将解码器状态 $s_t$ 和编码器状态 $h_j$ 分别通过各自的权重矩阵做线性变换后相加,再经过tanh激活,最后与一个向量 $v_a$ 做内积得到分数 $\mathbf{v}_a^T \cdot \mathbf{h}_j$。公式为:

$$ e_{tj} = v_a^T \tanh(W_a s_t + U_a h_j) $$

这种方式表达能力很强,但计算量偏大。

随后Luong等人提出了“乘性”(Multiplicative)注意力,直接将解码器状态与编码器状态做矩阵乘法:

当两个向量的维度一致时,最简单的点积注意力公式为:

$$ e_{tj} = s_t^T h_j $$

如果维度不同,则加入一个可学习的权重矩阵 $W$,即:

$$ e_{tj} = s_t^T W h_j $$

乘性注意力的计算更高效,尤其适合GPU并行加速,因此被后来的Transformer架构采纳。

然而,点积注意力在高维度下会遭遇梯度问题。设想当向量维度 $d_k$ 很大时,点积结果的绝对值也会很大,这会导致Softmax函数落入梯度极小的“饱和区”,模型几乎学不动。Transformer论文提出了一个简单的修正方案——缩放点积注意力(Scaled Dot-Product Attention):

将点积结果除以 $\sqrt{d_k}$ 后再送入Softmax。

这个看似不起眼的“除以根号维度”的操作,有效控制了方差,使梯度能顺畅流动,是Transformer训练成功的关键技术细节。完整的公式为:

$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$

理解这些公式的关键,在于认识到Q、K、V这三个矩阵的角色分工。Query代表“我想要什么”,Key代表“我能提供什么”,两者的匹配度决定权重;而Value才是最终被提取、加权、聚合的“内容本身”。

经典的Seq2Seq+Attention架构中,Query来自解码器,Key和Value都来自编码器,这被称为“交叉注意力”(Cross-Attention)。而自注意力(Self-Attention)则更进一步,让Q、K、V全部来自同一个序列,让句子中的每个词都能和句子中的所有其他词建立联系——这正是Transformer的核心创新。

5、从 Soft Attention 到自注意力:通往 Transformer 之路

注意力机制有几种常见的分类方式。按“关注范围”来分,Soft Attention(软注意力)对所有的输入位置都分配权重,整个计算过程光滑可导,是最主流的方式;Hard Attention(硬注意力)则直接做一个二选一的决定:要么关注某个位置(权重为 $1$),要么完全不关注(权重为 $0$),这虽然直观,但不可导,需要用强化学习等更复杂的技巧来训练。还有一种 Local Attention(局部注意力)是两者的折中——先用 Hard 方式定位一个窗口中心,再在窗口内部使用 Soft 方式计算权重。

真正改变格局的,是自注意力(Self-Attention)的提出。在自注意力中,Query、Key、Value 三者都来自同一层输入的不同线性变换。这意味着,序列中的每个词都在向整句话里的所有词“发问”:你对我的含义有什么补充?我应该分配多少注意力给你?回到那句经典的示例:“The animal didn"t cross the street because it was too tired.”,模型需要知道“it”指代的是“animal”而不是“street”。在 RNN 时代,这种远距离传播极其困难,因为“animal”和“it”之间隔着多个时间步,信息经过逐层传递已所剩无几。但自注意力直接在这两个词之间铺设了一条“高速公路”——无论它们在文本中相距多远,都能在一层之内直接计算关联权重。

自注意力还带来了并行计算的巨大优势。RNN 必须按时间步串行处理:必须先算完第 $t$ 时刻的隐藏状态,才能算 $t+1$。但自注意力中,所有位置的 $Q$、$K$、$V$ 可以同时计算,矩阵乘法一次性完成。这大大提升了训练速度,也使得处理超长序列成为可能。当然,纯自注意力也丢掉了序列的位置信息——毕竟“我爱你”和“你爱我”在自注意力眼中只是三个相同的词,失去了句法结构。解决之道是位置编码(Positional Encoding),通过正弦/余弦函数或可学习的嵌入,将位置序号的信息注入到输入向量中,让模型知道“谁在前、谁在后”。

2017 年的论文《Attention Is All You Need》将自注意力推向了巅峰。它完全摒弃了循环结构,只靠注意力就搭建出了 Transformer 架构,包含多头注意力(Multi-Head Attention)、前馈网络、残差连接和层归一化等组件。多头注意力相当于并行运行多组自注意力,每组使用不同的 $Q$、$K$、$V$ 投影矩阵,让模型能同时关注不同类型的上下文——一个头可能专注于语法依存关系,另一个头可能捕捉长距离语义关联,还有一个头可能在寻找代词指代的对象。将这些“头”的输出拼接起来,就如同让模型从多个视角审视同一句话,获得了比单头更加丰富立体的理解。

6、回顾与展望:注意力机制的长远影响

Seq2Seq和注意力机制的演进史,是深度学习从“强行压缩”走向“动态聚焦”的缩影。最初的Seq2Seq将整个输入序列压入单个固定向量,“逼”模型从噪声中提取信号;Attention的出现为解码器装上了“检索能力”,让它能按需从编码器中调取信息;自注意力的升级则将这种聚焦能力扩展到同层之内,彻底释放了并行计算的潜力,并为Transformer的诞生铺平了道路。

如今,这套思想已经远远超越了机器翻译。在图像描述生成(Image Captioning)中,编码器可以是卷积神经网络(CNN)提取的图像特征图,解码器在生成每个词时,注意力的权重会“点亮”图像中对应的区域——当模型说出“一只猫坐在沙发上”时,你会发现“猫”对应高亮的猫的区域,“沙发”对应沙发的区域。在语音识别中,音频帧的特征序列作为编码器输入,解码器用注意力找出哪些帧对应哪些音素或字符。甚至在大语言模型(如GPT系列)中,自注意力也是其最核心的组件,支撑着令人惊叹的长文本理解与生成能力。

站在当下回望,注意力机制之所以重要,不仅因为它解决了机器翻译等具体任务的性能瓶颈,更因为它提供了一种通用的“动态信息路由”范式。它告诉模型:不要试图把一切信息压缩进一个固定的向量,而是保留所有的中间表示,在需要的时候,学着去“找”最相关的部分。这种思想,既优美又强大,已经被证明是深度学习历史上少数几个真正经得起时间检验的“元算法”之一。

本教程共55节,当前为第7节!
本教程最新修订时间为:2026-07-24 19:18:38

📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:人人都需要的干眼克星上线啦>>>>>>
📌 网站公告:2026年7月招聘兼职>>>>>>