type
Post
status
Published
date
Jun 25, 2025
slug
transformer
summary
解读一下目前大模型最火的Transformer架构
tags
推荐
技术
科研
category
技术分享
icon
password
comment
Show

引言

加州长滩——2017年,一篇名为《Attention Is All You Need》的论文在神经信息处理系统大会(NIPS,现称为NeurIPS)上发表,首次提出了Transformer模型,为人工智能领域,特别是自然语言处理(NLP)带来了革命性的变革。
这篇具有里程碑意义的论文由谷歌公司的研究人员Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan N. Gomez、Łukasz Kaiser和Illia Polosukhin共同撰写。他们提出了一种全新的架构,完全摒弃了以往在序列到序列(sequence-to-sequence)模型中占主导地位的循环神经网络(RNN)和卷积神经网络(CNN)结构。
Transformer模型的核心创新在于其“自注意力机制”(self-attention mechanism)。该机制允许模型在处理输入序列时,能够同时权衡序列中所有单词的重要性,从而更有效地捕捉长距离依赖关系。与RNN一次处理一个单词的顺序方式不同,Transformer的并行处理能力极大地提高了训练效率,并使其能够处理更长的文本序列。
论文的摘要精辟地指出了其贡献:“我们提出了一种新的简单网络架构——Transformer,它完全基于注意力机制,完全摒弃了循环和卷积。” 实验结果表明,该模型在机器翻译任务上不仅取得了更优的翻译质量,而且训练时间显著缩短,并行化程度更高。
自提出以来,Transformer架构已成为现代NLP领域几乎所有顶尖模型的基础,包括著名的GPT(Generative Pre-trained Transformer)系列、BERT(Bidirectional Encoder Representations from Transformers)以及当今众多大型语言模型(LLM)。其影响力已远远超出了最初的机器翻译领域,广泛应用于文本摘要、问答系统、代码生成等多种任务,深刻地塑造了人工智能技术的发展轨迹。本文主要目的就是介绍Transformer架构
 

概述Transformer架构

  1. Transformer到底在做一件什么事情?
    1. notion image
      从一个输入我爱你,经过transformer这样一个黑盒,翻译成输出I LOVE YOU
  1. 打开黑盒
    1. 第一步:
      1. notion image
        transformer拆成编码-解码结构,结构类似于seq2seq结构
    2. 第二步:
      1. notion image
        Encoders和Decoders中包含多个Encoder和Decoder。每个Encoder架构相同,但参数不同,训练时候都在训练;每个Decoder架构相同,但参数不同,训练时候都在训练
  1. Transformer原始架构
    1. notion image
      • 注意Encoder和Decoder都是的,说明有个Encoder和Decoder
      • Encode和Decoder架构是不同的
      • Decoder比Encoder多了一个掩盖的多头注意力机制
 

位置编码解读

Encoder架构

notion image

输入部分

  1. Embedding
    1. notion image
      • 输入句子为我爱你……(12个字),按照字切分,每个字对应一个512维字向量,可以用word2vec/随机初始化
  1. 位置嵌入
    1. 为什么需要位置编码?
      • 这里引入RNN:
        • notion image
          RNN结构图中左侧U、V、W是一套参数,右图予以展示,这些U、V、W共享一套参数。处理是有先后顺序的,而transformer可以并行处理,但是缺少了前后关系
      • 引入位置编码
        • notion image
        • 偶数位置使用sin,奇数位置使用cos得到位置编码
      • 位置编码与Embedding相加得到最终编码作为transformer的输入
      为什么位置嵌入会有用?
      notion image
问题:RNN梯度消失有什么不同?
  1. 不同点
  • 普通神经网络(如MLP):梯度消失意味着在深层网络中,靠近输入层的网络层的梯度会变得非常小,几乎为零。这导致这些层的参数无法得到有效的更新,整个网络的训练都会非常困难。可以说,整个梯度都消失了。
  • 循环神经网络(RNN):RNN的梯度消失具有其特殊性,它指的是远距离的梯度消失,而近距离的梯度并不会消失。RNN的梯度是由每个时间步的梯度累加而成的。在反向传播过程中,梯度会随着时间步的推移而连乘。对于距离当前时间步较远的过去状态,梯度会因为连乘效应而变得非常小,几乎消失。但是,对于距离当前时间步较近的过去状态,其梯度是存在的,并且会主导总的梯度。
    • 关键点:RNN的总梯度并不会完全消失,而是被“近距离梯度”所主导,导致模型难以学习到“远距离依赖”关系。模型只能“记住”最近发生的事情,而忘记了很久以前的信息。
  1. 原因
  • 普通神经网络:梯度消失通常是由于网络深度过深以及激活函数(如Sigmoid)的导数小于1所导致的。在反向传播过程中,梯度会经过多个小于1的数连乘,导致梯度呈指数级衰减。
  • 循环神经网络:RNN梯度消失的根本原因在于其参数共享的特性和时间序列上的连乘效应。RNN在所有时间步都使用同一套权重矩阵。在反向传播计算梯度时,涉及到对这个共享权重矩阵的多次连乘。如果这个权重矩阵的范数小于1,那么随着时间步的增加,梯度就会迅速衰减。
  1. 影响的差异
  • 普通神经网络:梯度消失会导致整个网络训练停滞,模型无法收敛。
  • 循环神经网络:梯度消失主要影响模型捕捉长期依赖的能力。模型可以很好地处理短序列任务,但在需要理解和记忆长序列中早期信息的任务上表现不佳。例如,在处理一篇长文章时,模型可能无法将文章开头的信息与结尾的内容联系起来。
特征
普通神经网络(如MLP)
循环神经网络(RNN)
梯度消失含义
整个梯度趋近于零
远距离梯度消失,近距离梯度正常,总梯度被近距离主导
根本原因
网络深度过深、激活函数导数小于1
参数共享机制下,时间序列上的连乘效应
主要影响
整个网络训练困难,无法收敛
难以学习长距离依赖,只能处理短序列
 

注意力机制

基本注意力机制

当我们用深度 CNN 模型识别图像时,一般是通过卷积核去提取图像的局部信息,然而,每个局部信息对图像能否被正确识别的影响力是不同的,如何让模型知道图像中不同局部信息的重要性呢?答案就是注意力机制。
notion image
视觉注意力机制是人类大脑的一种天生的能力。当我们看到一幅图片时,先是快速扫过图片,然后锁定需要重点关注的目标区域。比如当我们观察上述图片时,注意力很容易就集中在了人脸、文章标题和文章首句等位置。
试想,如果每个局部信息都不放过,那么必然耗费很多精力,不利于人类的生存进化。同样地,在深度学习网络中引入类似的机制,可以简化模型,加速计算
另外,利用循环神经网络去处理 NLP 任务时,长距离“记忆”能力一直是个大难题,而引入“注意力机制”也能有效缓解这一问题。

Transformer中的注意力机制

注意力机制 (Attention Mechanism)

在 Transformer 的背景下,我们通常讨论的是其内部使用的 “缩放点积注意力”(Scaled Dot-Product Attention),这是一种自注意力机制。
  1. 核心思想
  • 想象一下你在阅读一个句子:“The animal didn't cross the street because it was too tired.”为了理解代词 “it” 指的是什么,你的大脑会自然地将注意力更多地放在 “animal” 上,而不是 “street”。自注意力机制就是模仿这种行为,让模型在处理一个单词时,能够评估句子中所有其他单词对它的“重要性”或“相关性”,并根据这些重要性得分来更好地理解当前单词的含义。
  • 它通过三个关键的角色来实现这一点,这三个角色都是从每个单词的输入嵌入向量(embedding)生成的:
      1. 查询(Query, : 代表当前正在处理的单词。可以看作是这个单词发出的一个“提问”,比如:“句子里的哪些词和我最相关?”
      1. 键(Key, : 代表句子中所有可以被“查询”的单词。可以看作是每个单词的“标签”或“索引”,用来和查询进行匹配。
      1. 值(Value, : 代表每个单词本身所包含的真正信息。一旦查询()通过与键()匹配找到了相关单词,我们就从这些相关单词的值()中提取信息。
  • 公式:
  1. 计算过程
自注意力的计算过程可以分为三个步骤:
  1. 计算注意力分数(Attention Score)
    1. 为了确定每个单词对当前单词的重要性,我们将当前单词的查询向量()与句子中所有单词的键向量()进行点积运算。这个分数衡量了查询和键之间的相似度。 的维度通常是相同的,我们称之为
  1. 缩放与归一化
    1. 点积的结果可能会变得非常大,导致梯度在反向传播时过小,不利于训练。因此,论文作者提出将其除以一个缩放因子,即键向量维度 的平方根
      然后,将缩放后的分数通过一个 函数,将其转换为总和为 1 的概率分布。这些概率就是注意力权重(Attention Weights),代表了在当前查询下,应该给每个单词的值()分配多少注意力。
  1. 加权求和
    • 在只有单词向量的情况下如何获取

      多头注意力机制 (Multi-Head Attention)

      虽然单个自注意力机制很强大,但它可能只学会关注一种类型的相关性。例如,在处理 “The animal didn't cross the street because it was too tired” 时,一个注意力机制可能学会了关注指代关系("it" -> "animal"),但可能忽略了其他类型的关系。
      1. 核心思想
      • 多头注意力机制通过并行运行多个独立的注意力“头”(Head)来解决这个问题。这好比让多位专家从不同的角度独立审视同一个句子,然后综合所有专家的意见,得到一个更全面、更丰富的理解。
      • 每个“头”都学习关注输入序列的不同方面。例如:
        1. 计算过程
        多头注意力的计算过程如下:
        第一步:线性投影
        将原始的查询()、键()和值()矩阵分别通过多个独立的线性变换(即乘以不同的权重矩阵),为每一个“头”生成一套专属的、维度更小的 ''、''、''。例如,如果有 8 个头,那么原始的 会被分别投影 8 次。
        第二步:并行计算注意力
        让每一个“头”都在其专属的 '', '', '' 上独立地执行一次“缩放点积注意力”计算。由于这些计算是并行的,所以不会增加太多计算时间。每个头都会输出一个结果矩阵。
        第三步:拼接与再次投影
        将所有头的输出结果拼接(Concatenate)在一起。然后,将这个拼接后的大矩阵再通过一次线性变换(乘以一个最终的权重矩阵 ),将其投影回模型期望的原始维度。这一步融合了所有头学到的不同信息。
        其公式可以表示为:
        其中,每个头是:
        Paper Reading: 论文阅读的记录Acwing算法基础课
        Loading...
        Samuel Hu
        Samuel Hu
        沪上985软工在读 喜欢写代码 爱折腾的混子
        小红书
        统计
        文章数:
        24
        公告

        你好呀!👋

        🎓 同济大四 + 浙大研0
        🔍 我的研究聚焦在 AISE(AI for Software Engineering) 领域✨
        🤖 具体方向有两个特别让我着迷的:
        • Code Reasoning 🧠💻
        • Code Generation ✨📝
        💡 我相信AI与软件工程的结合会改变未来的开发方式,很开心能在这个交叉领域学习成长~
        👥 欢迎大家多多交流!💬