6 ChatGPT原理:转化器(Transformer)架构
系列进度
ChatGPT 原理入门 · 第 6 / 18 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
我理解 Transformer 的入口不是公式,而是“每个词该看谁”。Q、K、V 的名字很抽象,但它们合起来解决的是同一个问题:当前这个位置生成或理解时,应该把注意力放到哪些上下文上。
这里不用急着背公式。先拿一句话做实验:比如“苹果发布了新手机,它的价格上涨了”,问自己“它”应该关注前面的哪个词。把这种关系画出来,再看多头注意力,就会自然很多。
在上一篇文章中,我们讨论了自然语言处理的基础知识,这为我们理解转化器架构奠定了基础。现在,我们将深入探索转化器(Transformer)模型,这是现代自然语言处理技术的核心。
什么是转化器(Transformer)?
转化器架构由谷歌在2017年提出的,主要用于处理序列数据,尤其是自然语言。这种架构的提出标志着序列到序列学习(S2S)的一个新纪元。相较于传统的循环神经网络(RNN)和长短时记忆网络(LSTM),转化器具有更强的并行处理能力和更好的长距离依赖建模能力。
理解 Transformer 时,先看 token 如何互相参考,再看多头注意力、前馈层和位置编码如何共同形成上下文表示。
转化器架构主要由两个部分组成:编码器和解码器。在许多应用中,特别是机器翻译中,编码器处理输入序列,解码器生成输出序列。
编码器和解码器
转化器的编码器由多个相同的层叠加而成。每个编码器层包括两个子层:
- 多头自注意力机制 (Multi-head Self-Attention)
- 前馈神经网络 (Feed-Forward Neural Network)
解码器的结构与编码器相似,但有一个额外的子层,其作用是利用编码器的输出生成目标序列。解码器层的结构如下:
- Masked Multi-head Self-Attention:通过掩蔽机制防止模型查看未来标记。
- 多头自注意力机制:使用编码器的输出。
- 前馈神经网络。
自注意力机制
自注意力机制是转化器中的核心概念。它允许模型在处理输入的某一个部分时,考虑输入的所有其他部分。
设定一个输入序列 ,在自注意力机制中,每个输入 的表示可以通过以下步骤计算:
-
计算查询(Q)、键(K) 和 值(V):
计算注意力权重:
其中, 是键向量的维度,用于缩放,以防止在计算 softmax 时数值过大。
合并多头注意力: 为了让模型学习到不同的关注点,使用多个注意力头,公式为:
编码器结构
编码器由多个相同的层叠加而成,每層包含上述提到的自注意力和前馈神经网络。每个子层后连接一个残差连接和层归一化(Layer Normalization):
在这里,Sublayer表示自注意力或前馈神经网络。
解码器结构
与编码器相似,解码器也是由多个层组成。每个解码器层包含三个子层,并在最后连接了残差连接和层归一化。解码器通过使用编码器的输出及其自身的输入生成下一个字词。
使用案例
让我们分析一个简单的例子——机器翻译。
《ChatGPT原理:转化器(Transformer)架构》可以按“场景、概念、动作、结果”来读。先把这四件事对齐,再回到正文里的参数、代码或流程。
假设我们希望将一句英语翻译成法语。我们会将英语句子输入模型,在编码器中处理后,生成一个上下文表示。然后,解码器通过生成法语单词一步步构建翻译。这个过程会持续进行,直到遇到特殊的“结束”标记。
Python 示例代码
下面是一个简化的示例,展示如何使用TensorFlow构建一个简单的转化器模型。
import tensorflow as tf
from tensorflow.keras import layers
# 定义编码器
def create_encoder(input_shape, num_heads, ff_dim):
inputs = tf.keras.Input(shape=input_shape)
# 自注意力层
attention = layers.MultiHeadAttention(num_heads=num_heads, key_dim=ff_dim)(inputs, inputs)
attention = layers.LayerNormalization(epsilon=1e-6)(attention + inputs)
# 前馈网络
ff = layers.Dense(ff_dim, activation='relu')(attention)
outputs = layers.Dense(input_shape[-1])(ff)
return tf.keras.Model(inputs, outputs)
# 定义解码器
def create_decoder(input_shape, num_heads, ff_dim):
inputs = tf.keras.Input(shape=input_shape)
# 自注意力层
attention1 = layers.MultiHeadAttention(num_heads=num_heads, key_dim=ff_dim)(inputs, inputs)
attention1 = layers.LayerNormalization(epsilon=1e-6)(attention1 + inputs)
# 与编码器输出的注意力层
attention2 = layers.MultiHeadAttention(num_heads=num_heads, key_dim=ff_dim)(attention1, encoded_output)
attention2 = layers.LayerNormalization(epsilon=1e-6)(attention2 + attention1)
# 前馈网络
ff = layers.Dense(ff_dim, activation='relu')(attention2)
outputs = layers.Dense(input_shape[-1])(ff)
return tf.keras.Model(inputs, outputs)
# 实例化模型
encoder = create_encoder((None, 256), 8, 512)
decoder = create_decoder((None, 256), 8, 512)
学完《ChatGPT原理:转化器(Transformer)架构》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。
如果想把《ChatGPT原理:转化器(Transformer)架构》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。
总结
转化器架构的引入极大地推动了自然语言处理的进步。通过使用自注意力机制以及编码器-解码器的结构,模型能够更好地理解和生成语言。在下一篇文章中,我们将深入探讨如何获取训练数据,为模型训练做好准备。
通过本篇教程,相信您对转化器(Transformer)架构有了一个清晰的认识,并且了解了其在自然语言处理中的重要性。接下来,我们将继续探索模型训练的数据获取策略,帮助您全方位掌握这项技术。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
ChatGPT原理:转化器(Transformer)架构适合谁读?
这是 ChatGPT 原理入门 系列第 6 / 18 篇,适合正在学习ChatGPT 原理入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇ChatGPT 原理入门教程要多久?
按中文技术文章阅读速度估算,通读大约 5 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读