微信扫码
添加专属顾问
我要投稿
揭开AI魔法背后的数学艺术,从注意力机制开始,带你亲手拆解Transformer的奥秘。 核心内容: 1. 注意力机制的生活化解释与核心原理 2. Transformer架构中查询-键-值三要素的运作逻辑 3. 通过"我爱吃苹果"实例演示权重分配过程
本章我们正式进入Transformer架构的学习。
从 ChatGPT 到文生图,从语音助手到AI绘本的自动生成,背后几乎都躲着一个强大的架构,它像一台“魔法机器”,能读懂语言、生成内容、甚至推理判断。但这一切魔法的根基,其实都是数学和工程的艺术结晶。
这一章,我们不再浮于表面,不再喊口号,不再说“Transformer很强”,“注意力是核心”这种说了等于没说的废话,而是撸起袖子,从最基本的构件开始,一点点拼出这个神奇架构的模样,带你看懂它、拆解它、理解它的工作逻辑。
什么是注意力机制
要想搞懂 Transformer,我们得从一个听起来就很学术、但其实非常接地气的概念说起--注意力机制(Attention Mechanism)。
什么是注意力机制呢?我们先看下生活中的例子:
当你你在咖啡馆里一边听朋友聊天,一边偷瞄手机上的消息,还要留意服务员端来的咖啡。这时候,你的大脑会自动分配注意力:朋友讲到关键剧情时,你耳朵竖起来;手机弹出老板的消息,你眼睛赶紧扫一眼。这就是“注意力”的本质——在信息爆炸的场景里,挑出最重要的部分优先处理。Transformer的注意力机制,干的就是这个活儿!
注意力机制:我为什么只看你?
# ONE
好了,进入正题。注意力机制的核心思想是:不是所有信息都同样重要。在处理一段话或者一堆数据时,模型得学会“挑重点”。比如,你读“今天天气很好,我想去爬山”这句话,注意力机制会帮模型搞清楚“很好”和“爬山”之间的关系,而不是傻乎乎地把“今天”看得跟“爬山”一样重要。
那它怎么挑重点呢?我来给你拆解一下这个机制的三个步骤,用我的“第一人称视角”带你体验一下:
1. 我先给每个词打个分!
假设我是一个Transformer模型,正在处理“我爱吃苹果”这句话。每个词(“我”“爱”“吃”“苹果”)都会被转成一个数字向量(就像给每个词发一个“身份证”)。然后,我会用一种叫:查询(Query)、键(Key)、值(Value)的机制来算每个词的重要性。
查询(Query):我问自己,“现在我在看哪个词?它想跟谁搭上关系?”
键(Key):每个词都举手说,“嘿,我在这儿!看看我有多重要!”
值(Value):如果某个词被我选中,它会把自己的“信息”贡献出来。
比如,我在看“吃”这个词时,会问:“‘吃’跟哪个词最相关?”然后我会算一下“吃”跟“我”“爱”“苹果”的匹配度(通过向量点积)。结果发现,“吃”跟“苹果”的关系最紧密(毕竟吃的是苹果,不是“我”),于是我给“苹果”打个高分!
2. 我把分数变成权重!
得分算出来后,我会把这些分数变成注意力权重。
这就像我在咖啡馆里决定:朋友的八卦占我注意力的70%,手机消息占20%,服务员的咖啡占10%。在Transformer里,我用一个叫Softmax的函数,把分数变成0到1之间的比例,确保总和是100%。这样,在“我爱吃苹果”这句话中,“苹果”可能得到0.6的权重,“我”和“爱”各分到0.2和0.1。
3. 我根据权重提取信息!
有了权重,我就知道该多关注谁了。我会把每个词的“值”(Value)按权重加起来,生成一个新的向量。
这个向量就像是“吃”这个词的“注意力总结”,里面融合了“苹果”的信息最多,还有一点“我”和“爱”的影子。这样,我就能更好地理解“吃苹果”这件事,而不是被无关的信息干扰。
Transformer的基本结构
我们知道在论文《Attention is All You Need》中首次提出了Transformer,主要有两个部分组成了Transformer架构:
编码器(Encoder):把输入句子“压缩”成一坨高维向量;
解码器(Decoder):根据这些向量,“翻译”成输出。
在GPT这种大模型中,其实只用了Decoder部分;而在机器翻译里,比如英语转中文的模型,会把两个都用上。
在这里我不做太多解释,本次文章有浅到深会做详细说明。
实现一个简单的自注意力机制
前面文章我们已经讲过把词元变为随机的向量值,本次我们就实现计算一个词元的上下文向量。
我们使用四维嵌入向量,并随机初始化它们的值,我们用"年"词元进行求上下文向量。
import numpy as np
# 固定随机种子,确保结果一致
np.random.seed(42)
# 句子和每个字
tokens = list("写代码的中年人")
n = len(tokens)
d = 4 # 每个字的向量维度
# 生成词向量:shape (n, d)
embeddings = np.random.randn(n, d)
# 打印初始化向量
print("=== 每个字的初始向量 ===")
for i in range(n):
print(f"{tokens[i]}: {embeddings[i]}")
# 以“年”作为 Query
query_index = tokens.index("年")
query_vector = embeddings[query_index] # shape: (d,)
# 点积计算注意力分数(query_vector 与每个词做点积)
scores = embeddings @ query_vector # shape: (n,)
# Softmax 归一
def softmax(x):
e_x = np.exp(x - np.max(x)) # 减去最大值防止数值爆炸
return e_x / e_x.sum()
attention_weights = softmax(scores) # shape: (n,)
# 计算上下文向量(加权求和)
context_vector = attention_weights @ embeddings # shape: (d,)
# 输出注意力分数
print("\n=== 注意力分数(点积) ===")
for i, s in enumerate(scores):
print(f"‘{tokens[i]}’ 的分数: {s:.4f}")
# 输出注意力权重
print("\n=== 注意力权重(softmax归一) ===")
for i, w in enumerate(attention_weights):
print(f"‘{tokens[i]}’ 的权重: {w:.4f}")
# 输出上下文向量
print(f"\n=== 上下文向量 for ‘年’ ===\n{context_vector}")
# 输出
=== 每个字的初始向量 ===
写: [ 0.49671415 -0.1382643 0.64768854 1.52302986]
代: [-0.23415337 -0.23413696 1.57921282 0.76743473]
码: [-0.46947439 0.54256004 -0.46341769 -0.46572975]
的: [ 0.24196227 -1.91328024 -1.72491783 -0.56228753]
中: [-1.01283112 0.31424733 -0.90802408 -1.4123037 ]
年: [ 1.46564877 -0.2257763 0.0675282 -1.42474819]
人: [-0.54438272 0.11092259 -1.15099358 0.37569802]
=== 注意力分数(点积) ===
‘写’ 的分数: -1.3670
‘代’ 的分数: -1.2771
‘码’ 的分数: -0.1783
‘的’ 的分数: 1.4712
‘中’ 的分数: 0.3955
‘年’ 的分数: 4.2336
‘人’ 的分数: -1.4359
=== 注意力权重(softmax归一) ===
‘写’ 的权重: 0.0033
‘代’ 的权重: 0.0036
‘码’ 的权重: 0.0109
‘的’ 的权重: 0.0570
‘中’ 的权重: 0.0194
‘年’ 的权重: 0.9025
‘人’ 的权重: 0.0031
=== 上下文向量 for ‘年’ ===
[ 1.31085939 -0.30172873 -0.05573854 -1.34141581]
代码详解
整体代码回顾:我们在干什么?
我们以“写代码的中年人”这7个字为输入,给每个字随机分配一个 4 维向量(不区分 Q/K/V,仅用于演示)。
然后: 假设我们以“年”这个词为 query,计算它对其他每个词的注意力强度,并据此得到一个上下文向量。
整个过程包含以下步骤:
初始化词向量(随机)
选定 query(“年”)
计算点积注意力分数
使用 softmax 将分数归一为概率
利用注意力权重对所有词向量加权,得到最终的上下文表示
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-07-17
AI应用场景指南:航空航天和国防领域
2025-07-17
观点 | 麦肯锡:70% 的 AI 市场将来自垂直智能体
2025-07-17
趁着Claude 4免费,轻度体验Krio的Spec模式,做一个微信排版工具
2025-07-17
从聊天记录到数字资产:MIRIX 让记忆可买卖
2025-07-17
【技术】图解+详解:上下文工程
2025-07-17
Prompt:鹰、猎人、工匠,DeepSeek论文启发下的分层注意力
2025-07-17
Windows 11重磅更新!Copilot“看到”你的桌面了,AI助手变“私人导师”!
2025-07-17
Agentic Memory:解析AI智能体的多种记忆类型
2025-05-29
2025-05-23
2025-05-07
2025-05-07
2025-04-29
2025-05-07
2025-04-29
2025-06-01
2025-06-07
2025-05-07