跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

深入理解 Transformer 架构:从注意力机制到位置编码

综述由AI生成Transformer 架构由谷歌于 2017 年提出,核心在于自注意力机制,解决了长距离依赖和并行计算问题。文章详细解析了注意力机制原理(Query、Key、Value)、缩放点积注意力、多头注意力机制、编码器结构(残差连接、归一化、前馈网络)以及位置编码的重要性。这些组件共同构成了现代大语言模型的基础。

活在当下发布于 2025/2/7更新于 2026/6/127 浏览
深入理解 Transformer 架构:从注意力机制到位置编码

要想系统而又透彻地理解 Transformer,至少要遵循下面这样一个思路(步骤):

首先,了解一些 NLP 领域的基本知识,比如文本是如何被表征的,序列文本信息的处理,基于深度神经网络的语言模型是如何处理自然语言的;

Transformer 主要解决了什么问题。重点关注的方面有自注意力机制,多头注意力,Transformer 的内部结构;

动手实现一个 Transformer 应用。

第一点属于要求掌握一些背景知识,而第三点是有意向深入学习,甚至想在实践中用 Transformer 做点什么的人去关注。

什么是 Transformer?

一切源于 2017 年谷歌 Brain 团队那篇鼎鼎大名的文章'Attention Is All You Need'(注意力就是你所需要的一切),就是这篇文章提出了 Transformer 网络结构。

Transformer 基本结构图

Transformer 的意义体现在它的长距离依赖关系处理和并行计算,而这两点都离不开其提出的自注意力机制。

首先,Transformer 引入的自注意力机制能够有效捕捉序列信息中长距离依赖关系,相比于以往的 RNNs,它在处理长序列时的表现更好。

而自注意力机制的另一个特点允许模型并行计算,无需 RNN 一样 t 步骤的计算必须依赖 t-1 步骤的结果,因此 Transformer 结构让模型的计算效率更高,加速训练和推理速度。

Transformer 最开始应用于 NLP 领域的机器翻译任务,但是它的通用性很好,除了 NLP 领域的其他任务,经过变体,还可以用于视觉领域,如 ViT(Vision Transformer)。

这些特点让 Transformer 自 2017 年发布以来,持续受到关注,基于 Transformer 的工作和应用层出不穷。包括当下最热门的 AI 大语言模型/聊天机器人,比如 ChatGPT、文心一言、Bard 等等。

这些 AI 大模型能生成'真假难辨'的新闻、专业论文等等,跟人类进行对话,生成代码等一系列复杂的任务。

既然提到 ChatGPT,就多说几句。大家要学会利用好 ChatGPT 这个'老师'。对于很多领域,ChatGPT 所掌握的知识深度都超过了一个本科生(甚至更高)的水平。

说回到问题,上面提到,Transformer 中最重要的一个方面是自注意力机制,那么到底应该如何理解这个概念呢。

什么是注意力机制?

首先来看注意力机制(Attention)用来干嘛?

我们人类在感知环境的时候(比如看一张图像或者一个句子),大脑能够让我们分清那部分是重要的,哪部分是次要的,从而聚焦更重要的方面以获得对应的信息。

而我们在设计神经网络模型的时候,希望模型也能具有这样的能力。例如,预测一个句子中的单词时,使用一个注意力向量来估计它在多大程度上与其他元素相关。

简单的说,注意力机制描述了(序列)元素的加权平均值,其权重是根据输入的 query 和元素的键值进行动态计算的。具体地,在注意力机制中,有 4 个概念需要明确。

Query:Query(查询)是一个特征向量,描述我们在序列中寻找什么,即我们可能想要注意什么。

Keys:每个输入元素有一个键,它也是一个特征向量。该特征向量粗略地描述了该元素'提供'什么,或者它何时可能很重要。键的设计应该使得我们可以根据 Query 来识别我们想要关注的元素。

Values:每个输入元素,我们还有一个值向量。这个向量就是我们想要平均的向量。

Score function:评分函数,为了对想要关注的元素进行评分,我们需要指定一个评分函数 f 该函数将查询和键作为输入,并输出查询 - 键对的得分/注意力权重。它通常通过简单的相似性度量来实现,例如点积或 MLP。

由此,权重通过 softmax 函数计算得出:

注意力权重计算

下图直观描述注意力如何作用在一系列单词上。对于每个单词,都有一个键和一个值向量。使用评分函数(在本例中为点积)将 query 与所有键进行比较以确定权重。最后,使用注意力权重对所有单词的值向量进行平均。(为了简单起见,softmax 没有可视化。)

注意力机制示意图

大多数注意力机制在使用哪些 query、如何定义键、值向量,以及使用什么评分函数方面有所不同。

Transformer 架构内部应用的注意力称为自注意力(self-attention)。在自注意力中,每个序列元素提供一个键、值和 query。对于每个元素,根据其 query 作用一个注意力神经层,检查所有序列元素键的相似性,并为每个元素返回一个不同的平均值向量。

自注意力机制

自注意力背后的核心概念是缩放点积注意力(Scaled Dot Product Attention)。目标是建立一种注意力机制,序列中的任何元素都可以关注任何其他元素,同时仍能高效计算。

点积注意力将一组查询 Q,键 K 和值 V(三者矩阵尺寸为 T*d,T 为序列长度,d 为查询、键或值的维度)。点积注意力的计算方法如下:

缩放点积注意力公式

缩放点积注意力流程

多头注意力

缩放点积注意力让模型对一个序列进行'关注'。然而,序列元素通常需要关注多个不同方面,并且单个加权平均值并不是最佳选择。这就是提出多头注意力机制(Multi-Head Attention)的根源,即相同特征上的多个不同的(查询,键,值)三元组。

多头注意力结构

具体来说,给定一个查询、键和值矩阵,我们将它们转换为 h 个子查询、子键和子值,然后分别输入给点击注意力模型,最后连接头部并将它们与最终的权重矩阵组合起来。

多头注意力组合

多头注意力的一个关键特征是它相对于输入具有置换同变性(permutation-equivariant)。因此,多头注意力实际上不是将输入视为序列,而是视为一组元素。这一特性使得多头注意力模块和 Transformer 架构适用广泛。

然而,可能很多人也想到了,如果输入的顺序对于解决任务(例如语言建模)实际上很重要怎么办?答案是对输入特征中的位置进行编码。

Transformer 编码器

Transformer 编码器结构

最初,Transformer 模型是为机器翻译而设计的。它是一个编码器 - 解码器结构,其中编码器将原始语言的句子作为输入并生成基于注意力的表征。而解码器关注编码信息并以自回归方式生成翻译的句子,就像 RNN 一样。

编码器由 N 个相同的模块组成,输入 x 首先通过上面提到的多头注意力块。使用残差连接将输出添加到原始输入,每一次都有归一化操作。

残差连接与归一化

残差连接在 Transformer 架构中至关重要

1、首先,与 ResNet 类似,Transformers 层级很深。某些模型的编码器中包含超过 24 个 blocks。因此,残差连接对于模型梯度的平滑流动至关重要。

2、如果没有残余连接,原始序列的信息就会丢失。多头注意力层忽略序列中元素的位置,并且只能根据输入特征来学习它。删除残余连接意味着该信息在第一个注意层之后(初始化之后)丢失,并且使用随机初始化的查询和键向量,位置 i 的输出向量与其原始输入无关。注意力的所有输出都可能表示相似/相同的信息,并且模型没有机会区分哪些信息来自哪个输入元素。

归一化层在 Transformer 架构中也发挥着重要作用,它可以实现更快的训练速度。

除了多头注意力之外,模型中还包括一个小型全连接前馈网络,应用于每一个 block。它增加了模型的复杂度,并允许单独对每个序列元素进行转换。

前馈神经网络

位置编码

上面已经提到过,多头注意力模块是置换同变性的,并且无法区分一个输入是否出现在序列中的另一个输入之前。然而,在语言理解等任务中,位置对于解释输入单词非常重要。因此可以通过输入特征添加位置信息。Transformer 通过向输入的每个嵌入(embedding)中添加一个向量完成位置编码(position encoding)。

位置编码示意图

学习资源

最后,介绍几个比较优秀的 Transformer 的论文解读和教程,供大家参考。

1、Transformer: A Novel Neural Network Architecture for Language Understanding

谷歌官方团队在 Transformer 刚出来时的一篇博客,重点关注 Transformer 在机器翻译领域的应用。

下面的动画展示了如何将 Transformer 应用到机器翻译中。用于机器翻译的神经网络通常包含一个编码器,读取输入句子并生成它的表示。然后,解码器逐字生成输出句子,同时参考编码器生成的表示。Transformer 首先为每个单词生成初始表示或嵌入。这些由未填充的圆圈表示。然后,使用自注意力机制,它聚合来自所有其他单词的信息,根据整个上下文生成每个单词的新表征,由实心球表示。然后对所有单词并行重复此步骤多次,连续生成新的表征。

Transformer 机器翻译动画

理解上述组件构成了现代 Transformer 架构的基础,也是进一步探索大语言模型和 AI 应用的关键起点。

目录

  1. 什么是 Transformer?
  2. 什么是注意力机制?
  3. 多头注意力
  4. 位置编码
  5. 学习资源
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Flutter 组件 tavily_dart 在 OpenHarmony 上的进阶适配与聚合搜索方案
  • 全国计算机等级考试二级 Python 真题解析与代码实现(简单应用题)
  • 当 AI 写作遇上“学术贫富差距”,我们是桥梁还是高墙?
  • Spring AI MCP Server 集成与源码解析
  • 基于 SpringBoot 和 Vue 的来访管理系统设计与数据库实现
  • 滑动窗口算法实战:从最大连续 1 到最小覆盖子串
  • C++ 运算符重载实战:让自定义类型像内置类型一样运算
  • 本地搭建简易 AI 问答系统:Java 核心与 Python 辅助
  • 按下 F5 后,浏览器前端究竟发生了什么?
  • 海尔智家设备接入 HomeAssistant 配置指南
  • C++ 在线判题系统(OJ)设计与实现
  • WordPress 基础配置与 Spring Boot + MyBatis-Plus 实战
  • FPGA RGB 转 HDMI 显示系统原理与实现
  • OpenClaw 基于 Rust+Tauri 构建带安全沙箱的跨平台清理 Skill
  • OpenClaw TTS 语音合成技术详解与实战配置
  • 2020 年信奥赛 C++ 提高组 CSP-S 初赛真题解析(选择题 6-10)
  • Git Commit Message 提交信息规范指南
  • 前缀和技巧详解:和为 K、被 K 整除、连续数组及矩阵区域和
  • QGroundControl 跨平台安装与配置指南
  • Ubuntu 20.04 安装 Ollama 及 Open WebUI 部署大型语言模型

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online