RNN

RNN(循环神经网络)和Transformer是两种在序列数据处理中非常重要的深度学习模型,广泛应用于自然语言处理、时间序列预测等领域,但两者的结构和工作原理有显著差异。

一、RNN(Recurrent Neural Network,循环神经网络)

核心特点:处理序列数据的“记忆性”

RNN专为序列数据(如文本、时间序列、语音等)设计,其核心是通过“循环连接”让网络拥有“记忆”——即当前输出不仅依赖于当前输入,还依赖于之前的输入(历史信息)。

结构原理:
  • 基础单元(如RNN Cell)有一个“循环边”,会将上一时刻的输出(或隐藏状态)反馈到当前时刻的计算中:
    ht=σ(Wxxt+Whht−1+b)h_t = \sigma(W_x x_t + W_h h_{t-1} + b)ht=σ(Wxxt+Whht1+b)
    其中,xtx_txt 是当前时刻输入,ht−1h_{t-1}ht1 是上一时刻的隐藏状态(“记忆”),hth_tht 是当前时刻的隐藏状态。
  • 整个网络像一条“链”,每个时刻共享同一组参数(参数共享),适合处理变长序列。
典型应用:
  • 文本生成(如写诗、对话)、机器翻译(早期)、时间序列预测(如股价、销量)。
局限性:
  • 长程依赖问题:当序列过长时,早期信息在传递过程中会逐渐“遗忘”(梯度消失或爆炸),难以捕捉远距离的关联(如一篇文章中开头和结尾的呼应)。
  • 并行计算困难:由于每个时刻的计算依赖上一时刻的结果,无法像CNN那样并行处理所有输入,训练速度较慢。

二、Transformer(Transformer模型)

核心特点:基于“自注意力机制”的并行化模型

Transformer是2017年提出的模型,彻底抛弃了RNN的循环结构,完全基于自注意力机制(Self-Attention) 处理序列数据,能并行计算且擅长捕捉长程依赖。

结构原理:
  • 核心是“自注意力机制”:允许序列中每个位置的元素“关注”其他位置的元素,直接计算它们之间的关联权重(如一句话中“他”与前文提到的“小明”的关联)。
  • 由“编码器(Encoder)”和“解码器(Decoder)”组成,每层包含多头注意力(Multi-Head Attention)和前馈神经网络,所有位置的计算可并行进行(无需等待上一时刻结果)。
典型应用:
  • 自然语言处理的主流模型(如BERT、GPT、T5等均基于Transformer),在机器翻译、文本分类、问答系统等任务中表现远超RNN。
  • 也扩展到计算机视觉(如ViT)、语音处理等领域。
优势:
  • 长程依赖能力强:通过注意力权重直接建模任意两个位置的关联,无论距离远近。
  • 并行计算效率高:摆脱循环依赖,训练速度远快于RNN。
  • 可扩展性好:通过增加注意力头数、网络深度等,能持续提升性能(前提是有足够数据)。
局限性:
  • 计算复杂度高(与序列长度的平方成正比),对长序列(如超长文本)的处理成本较高。
  • 对数据量要求高,小数据集上可能不如RNN稳定。

三、核心区别对比

维度 RNN Transformer
核心机制 循环连接(依赖历史状态) 自注意力机制(直接建模关联)
长程依赖 弱(易遗忘早期信息) 强(直接计算任意位置关联)
并行计算 差(按时间步串行) 好(所有位置可并行)
适用场景 短序列、实时处理(如语音) 长文本、高精度需求(如翻译)
代表模型 LSTM、GRU(改进版RNN) BERT、GPT、T5

总结

  • RNN是早期处理序列数据的经典模型,通过循环结构实现“记忆”,但受限于长程依赖和并行效率。
  • Transformer是革命性的模型,基于自注意力机制解决了RNN的核心痛点,成为当前NLP等领域的主流,但计算成本更高。

简单说:RNN像“逐字阅读并记忆”,Transformer像“一眼扫完并重点关注关联内容”。

Transformer

Transformer 模型是 2017 年在论文《Attention Is All You Need》中提出的革命性架构,彻底摆脱了 RNN 的循环依赖,完全基于自注意力机制(Self-Attention) 实现序列建模,目前已成为 NLP、CV 等领域的基础架构(如 BERT、GPT 均基于此)。

其基本结构分为编码器(Encoder)解码器(Decoder) 两大部分,整体架构如下:

一、整体框架

[输入序列] → 编码器(Encoder) → [编码特征]  
                                          → 解码器(Decoder) → [输出序列]
[目标序列] → ──────────────────────────→
  • 编码器:将输入序列(如“我爱机器学习”)编码为包含上下文信息的特征向量。
  • 解码器:根据编码器的输出和目标序列的前缀(如翻译任务中的“我正在翻译”),生成完整的目标序列(如“I love machine learning”)。

二、核心组件详解

1. 输入处理:嵌入层(Embedding)+ 位置编码(Positional Encoding)
  • 嵌入层:将离散的符号(如单词、字符)转换为连续的向量(如“猫”→ [0.2, 0.5, ..., 0.1]),捕捉语义信息。
  • 位置编码:由于 Transformer 没有循环结构,需手动加入位置信息,让模型知道序列中元素的顺序(如通过正弦余弦函数生成位置向量,与嵌入向量相加)。
2. 编码器(Encoder):多层相同结构堆叠

每个编码器层包含两大模块(从下到上):

  • 多头自注意力(Multi-Head Self-Attention)

    • 让序列中每个元素“关注”自身和其他元素,计算它们的关联权重(如“机器学习”中“机器”与“学习”的关联)。
    • “多头”指将注意力机制拆分为多个并行的子空间,捕捉不同维度的关联(如语义关联、语法关联)。
  • 前馈神经网络(Feed-Forward Network, FFN)

    • 对每个位置的特征独立进行非线性变换(两层线性层+ReLU激活),增强模型的拟合能力。
  • 附加操作

    • 每个模块后都有 Layer Normalization(归一化层,稳定训练)和 残差连接输出 = 输入 + 模块输出,缓解梯度消失)。
3. 解码器(Decoder):多层相同结构堆叠

解码器层在编码器的基础上多了一个编码器-解码器注意力模块,共三个模块(从下到上):

  • 掩码多头自注意力(Masked Multi-Head Self-Attention)

    • 功能类似编码器的自注意力,但加入“掩码”(Mask),确保生成第 ttt 个元素时,只能看到前 t−1t-1t1 个元素(避免“偷看”未来信息,如翻译时不能提前看后面的单词)。
  • 编码器-解码器注意力(Encoder-Decoder Attention)

    • 让解码器关注编码器的输出(如翻译时,目标语言的单词关注源语言的对应单词)。
  • 前馈神经网络(FFN)

    • 与编码器的 FFN 结构相同,对每个位置的特征独立处理。
  • 附加操作:同样包含 Layer Normalization 和残差连接。

4. 输出层:线性变换 + Softmax

解码器的最终输出经过线性变换(映射到词汇表大小)和 Softmax 函数,得到每个位置的预测概率分布(如预测下一个单词是“学习”的概率为 0.8)。

三、核心创新:自注意力机制

自注意力是 Transformer 的“灵魂”,其作用是计算序列中任意两个元素的关联强度,公式简化如下:
Attention(Q,K,V)=Softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=Softmax(dk QKT)V

  • QQQ(Query,查询):当前元素的特征向量;
  • KKK(Key,键):其他元素的特征向量;
  • VVV(Value,值):其他元素的内容向量;
  • 最终结果是当前元素与所有元素的加权求和(权重由 QQQKKK 的相似度决定)。

例如,处理句子“猫追狗,它跑得很快”时,自注意力会让“它”更关注“猫”或“狗”(根据上下文),解决指代问题。

四、总结

Transformer 的核心结构可概括为:
“嵌入+位置编码 → 编码器(多头自注意力+FFN)×N → 解码器(掩码自注意力+编解码注意力+FFN)×N → 输出层”

其革命性在于:

  1. 用自注意力替代循环结构,解决了 RNN 的长程依赖和并行效率问题;
  2. 通过多头注意力和残差连接,能高效捕捉序列中的复杂关联,成为现代深度学习的基础架构。

自注意力机制

自注意力机制(Self-Attention Mechanism)是 Transformer 模型的“核心引擎”,其核心思想是:让序列中的每个元素都能“关注”到序列中其他元素的信息,并根据关联强度动态调整自身的特征表示。简单来说,就是让模型在处理某个位置的元素时,知道该“重点看”序列中的哪些部分,从而更高效地捕捉序列内的依赖关系(如语言中的上下文关联、图像中的像素关联等)。

一、自注意力的直观理解

以自然语言处理为例,假设我们要处理句子:“猫追狗,它跑得很快”。

  • 当模型处理“它”这个词时,需要知道“它”指代的是“猫”还是“狗”——这就需要“关注”前文的“猫”和“狗”。
  • 自注意力机制的作用就是:计算“它”与“猫”“狗”的关联强度(权重),然后用“猫”“狗”的信息加权更新“它”的特征(比如“它”的特征更偏向“狗”,因为“追”的动作可能让“狗”成为“跑”的主体)。

对于任意序列(如文本、时间序列、图像像素序列),自注意力都会让每个元素与序列中所有元素(包括自身)计算“关联度”,再通过加权求和更新特征,本质是动态聚合上下文信息的过程。

二、自注意力的数学原理(核心公式)

自注意力的计算过程可总结为“三步生成 Q/K/V → 计算注意力权重 → 加权求和得结果”,核心公式如下:

Attention(Q,K,V)=Softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=Softmax(dk QKT)V

其中,QQQ(Query,查询)、KKK(Key,键)、VVV(Value,值)是自注意力的三个核心矩阵,我们通过对输入序列的特征矩阵进行线性变换得到;dkd_kdkKKK 的维度(用于缩放,避免权重过大)。

下面分步拆解:

1. 生成 Q、K、V 矩阵

假设输入序列的特征矩阵为 XXX(形状:[seq_len,dmodel][seq\_len, d_{model}][seq_len,dmodel]seq_lenseq\_lenseq_len 是序列长度,dmodeld_{model}dmodel 是每个元素的特征维度)。

通过三个可学习的线性变换矩阵 WQW_QWQWKW_KWKWVW_VWV(形状均为 [dmodel,dk][d_{model}, d_k][dmodel,dk]),将 XXX 分别转换为 QQQKKKVVV

  • Q=X⋅WQQ = X \cdot W_QQ=XWQ(形状:[seq_len,dk][seq\_len, d_k][seq_len,dk]
  • K=X⋅WKK = X \cdot W_KK=XWK(形状:[seq_len,dk][seq\_len, d_k][seq_len,dk]
  • V=X⋅WVV = X \cdot W_VV=XWV(形状:[seq_len,dk][seq\_len, d_k][seq_len,dk]

直观理解

  • QQQ:可理解为“当前元素的需求”(比如“它”需要知道“指代对象”的信息,QQQ 就是“指代需求”的特征);
  • KKK:可理解为“其他元素的标签”(比如“猫”“狗”的特征标签,用于和 QQQ 匹配);
  • VVV:可理解为“其他元素的实际内容”(比如“猫”“狗”的具体特征,用于加权更新)。
2. 计算注意力权重(关联强度)

通过 QQQKKK 的“相似度”计算每个元素对其他元素的关注权重:

  1. 先计算 QQQKTK^TKT 的矩阵乘法(KTK^TKTKKK 的转置):QKTQK^TQKT(形状:[seq_len,seq_len][seq\_len, seq\_len][seq_len,seq_len])。

    • 结果中第 (i,j)(i,j)(i,j) 个元素表示“第 iii 个元素的 QQQ”与“第 jjj 个元素的 KKK”的相似度(值越大,关联越强)。
  2. 除以 dk\sqrt{d_k}dk 进行“缩放”:QKTdk\frac{QK^T}{\sqrt{d_k}}dk QKT

    • 原因:若 dkd_kdk 较大,QKTQK^TQKT 的值会很大,导致 Softmax 函数梯度消失(输出趋近于 0 或 1),缩放后可让数值更稳定。
  3. 通过 Softmax 函数归一化:Softmax(QKTdk)\text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)Softmax(dk QKT)(形状:[seq_len,seq_len][seq\_len, seq\_len][seq_len,seq_len])。

    • 归一化后,每行的权重之和为 1,第 (i,j)(i,j)(i,j) 个元素表示“第 iii 个元素对第 jjj 个元素的关注权重”。
3. 加权求和得到自注意力结果

用计算出的注意力权重对 VVV 进行加权求和:
Attention(Q,K,V)=Softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=Softmax(dk QKT)V

最终结果的形状为 [seq_len,dk][seq\_len, d_k][seq_len,dk],其中第 iii 个元素是“序列中所有元素的 VVV 按第 iii 行的权重加权求和的结果”——即第 iii 个元素融合了序列中所有相关元素的信息。

三、“多头自注意力”:捕捉多维度关联

实际应用中,Transformer 用的是“多头自注意力(Multi-Head Attention)”,这是对基础自注意力的扩展:

  1. QQQKKKVVV 拆分为 hhh 个“头”(并行子空间):通过 hhh 组独立的 WQi,WKi,WViW_Q^i, W_K^i, W_V^iWQi,WKi,WVii=1..hi=1..hi=1..h),将 QQQKKKVVV 各自分成 hhh 个低维子矩阵(每个子矩阵维度为 [seq_len,dk/h][seq\_len, d_k/h][seq_len,dk/h])。

  2. 每个头独立计算自注意力:对每个子矩阵分别执行上述注意力计算,得到 hhh 个注意力结果(每个形状:[seq_len,dk/h][seq\_len, d_k/h][seq_len,dk/h])。

  3. 拼接所有头的结果:将 hhh 个结果拼接为一个矩阵(形状:[seq_len,dk][seq\_len, d_k][seq_len,dk]),再通过一个线性变换矩阵 WOW_OWO 映射回原维度 dmodeld_{model}dmodel

作用:不同头可以捕捉不同维度的关联(比如一个头关注语法关联,一个头关注语义关联),让模型更全面地理解序列信息。

四、自注意力的优势

相比 RNN、CNN 等传统序列建模方法,自注意力的核心优势在于:

  1. 并行性:无需像 RNN 那样按顺序处理序列(无循环依赖),可一次性计算所有元素的注意力,训练效率更高;
  2. 长程依赖捕捉:直接计算任意两个元素的关联(无论距离远近),避免 RNN 对长序列“遗忘”的问题;
  3. 动态关联:注意力权重是动态计算的(随输入变化),能根据上下文灵活调整关注对象(比如“它”在不同句子中可指代不同事物)。

总结

自注意力机制的本质是“通过 Q/K/V 计算元素间的关联权重,再加权聚合上下文信息”,核心公式用“相似度计算-归一化-加权求和”三步实现动态特征更新。而多头自注意力进一步扩展了模型捕捉多维度关联的能力,这也是 Transformer 能在 NLP、CV 等领域广泛应用的核心原因。

Transformer模型的工作原理

Transformer 模型是一种基于自注意力机制的序列建模架构,彻底摆脱了 RNN 的循环依赖,通过并行计算高效捕捉序列中的长距离关联,已成为自然语言处理(NLP)、计算机视觉(CV)等领域的基础模型(如 BERT、GPT 均基于此)。其工作原理可概括为:“输入编码→上下文特征提取→序列生成” 三个核心步骤,具体流程如下:

一、整体工作流程(以机器翻译为例)

假设任务是将中文“我爱机器学习”翻译成英文“I love machine learning”,Transformer 的工作流程如下:

  1. 输入处理:将中文和英文序列转换为模型可理解的向量(嵌入+位置编码);
  2. 编码器编码:将中文序列编码为包含上下文信息的特征向量(如“学习”与“机器”的关联);
  3. 解码器生成:根据编码器的输出和英文前缀(如“I”“I love”),逐步生成完整的英文序列。

二、核心步骤详解

1. 输入处理:嵌入(Embedding)+ 位置编码(Positional Encoding)

Transformer 无法直接处理文字等离散符号,需先将输入转换为连续向量,并注入位置信息(因模型无循环结构,需手动标记顺序)。

  • 嵌入层(Embedding)
    将每个符号(如单词、字符)映射为固定维度的向量(例如“我”→ [0.2, 0.5, ..., 0.1],“爱”→ [0.3, 0.1, ..., 0.4])。这些向量通过训练学习,能捕捉符号的语义(如“猫”和“狗”的向量更相似)。

  • 位置编码(Positional Encoding)
    为了让模型知道序列中元素的顺序(如“我爱你”≠“你爱我”),需给每个位置添加独特的“位置向量”,与嵌入向量相加。
    位置向量通常用正弦余弦函数生成(公式:PEpos,2i=sin⁡(pos/100002i/dmodel)PE_{pos,2i} = \sin(pos/10000^{2i/d_{model}})PEpos,2i=sin(pos/100002i/dmodel)PEpos,2i+1=cos⁡(pos/100002i/dmodel)PE_{pos,2i+1} = \cos(pos/10000^{2i/d_{model}})PEpos,2i+1=cos(pos/100002i/dmodel)),确保不同位置的编码唯一,且能体现相对位置关系。

2. 编码器(Encoder):提取输入序列的上下文特征

编码器由 N 个相同的编码器层 堆叠而成(论文中 N=6),每个层负责进一步提炼序列的上下文信息,最终输出一个“编码特征矩阵”(包含输入序列中每个元素的上下文表示)。

每个编码器层包含两个核心模块:

  • 多头自注意力(Multi-Head Self-Attention)
    让序列中每个元素“关注”自身和其他元素,动态聚合上下文信息。例如处理“我爱机器学习”时:

    • “学习”会关注“机器”(两者组成固定搭配);
    • “我”会关注“爱”(主语与谓语的关联)。
      具体计算通过 Q(查询)、K(键)、V(值)矩阵实现(详见“自注意力机制”),“多头”则将注意力拆分为多个子空间,捕捉不同维度的关联(如语义、语法)。
  • 前馈神经网络(Feed-Forward Network, FFN)
    对多头自注意力的输出进行独立的非线性变换(两层线性层+ReLU激活),增强模型对特征的加工能力。例如将“机器”和“学习”的关联特征进一步提炼为“机器学习”的整体概念。

  • 附加操作
    每个模块后均有 残差连接输出 = 输入 + 模块输出)和 层归一化(Layer Norm,稳定训练时的梯度)。

3. 解码器(Decoder):基于编码特征生成目标序列

解码器同样由 N 个相同的解码器层 堆叠而成,其核心任务是:根据编码器输出的“编码特征矩阵”和目标序列的前缀(已生成的部分),逐步生成完整的目标序列。

每个解码器层包含三个核心模块(比编码器多一个“编码器-解码器注意力”):

  • 掩码多头自注意力(Masked Multi-Head Self-Attention)
    功能类似编码器的自注意力,但加入“掩码”(Mask),确保生成第 t 个元素时,只能看到前 t-1 个元素(避免“偷看”未来信息)。例如生成英文时,输出“I”后,生成“love”只能依赖“I”,不能提前看“machine”。

  • 编码器-解码器注意力(Encoder-Decoder Attention)
    让解码器“关注”编码器的输出,实现输入序列与目标序列的对齐。例如翻译时,英文的“love”需要关注中文的“爱”,“machine learning”需要关注“机器学习”。

  • 前馈神经网络(FFN)
    与编码器的 FFN 结构相同,对解码器的中间特征进行非线性变换,为输出做准备。

4. 输出层:生成最终序列

解码器的输出经过两个步骤生成最终结果:

  • 线性变换:将解码器输出的特征向量映射到“词汇表维度”(如英文词汇表有 3 万个词,输出维度为 3 万)。
  • Softmax 函数:将线性变换的结果转换为概率分布(每个词的生成概率),取概率最高的词作为当前位置的输出。

三、训练与推理过程

训练阶段
  • 输入:源序列(如中文“我爱机器学习”)和目标序列(如英文“I love machine learning”)。
  • 目标:通过“教师强制”(Teacher Forcing)机制,用目标序列的前缀(如“I”“I love”)预测下一个词,计算预测概率与真实词的交叉熵损失,反向传播优化模型参数(Q/K/V 矩阵、线性层权重等)。
推理阶段(生成新序列)
  • 输入:仅源序列(如中文“我爱机器学习”)。
  • 过程:采用“自回归生成”——先输出第一个词(如“I”),再将“I”作为前缀输入解码器,预测第二个词(如“love”),重复此过程直到生成结束符(如“”)。

四、核心优势

  1. 并行计算:摆脱 RNN 的循环依赖,所有位置的计算可并行进行,训练速度远超 RNN;
  2. 长程依赖:通过自注意力直接建模任意两个元素的关联(无论距离远近),解决 RNN 对长序列“遗忘”的问题;
  3. 灵活扩展:通过增加层数、注意力头数等,可适应更复杂的任务(如长文本理解、多语言翻译)。

总结

Transformer 的工作原理可概括为:
“输入序列→嵌入+位置编码→编码器(多头自注意力+FFN)提取上下文特征→解码器(掩码自注意力+编解码注意力+FFN)生成目标序列→输出层预测”
其核心是通过自注意力机制动态捕捉序列关联,结合并行计算能力,成为处理序列数据的革命性架构。

Logo

惟楚有才,于斯为盛。欢迎来到长沙!!! 茶颜悦色、臭豆腐、CSDN和你一个都不能少~

更多推荐