五万字技术干货:零基础攻克 Transformer 架构,探寻“人工智障”到“人工智能”的进化之路【附所有代码】

大家好,我是大 F,深耕AI算法十余年,互联网大厂核心技术岗。
知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。
【专栏介绍】
欢迎关注《大模型理论和实战》《DeepSeek技术解析和实战》,一起探索技术的无限可能!

【大模型篇】更多阅读
【大模型篇】万字长文从OpenAI到DeepSeek:大模型发展趋势及原理解读
【大模型篇】目前主流 AI 大模型体系全解析:架构、特点与应用
【大模型篇 】 Grok-3 与 DeepSeek 的技术架构与性能分析
【大模型篇】速读版DeepSeek核心技术解密:与 GPT-4、Claude、LLaMA 技术路线差异对比分析

==========本文分上中下篇,阅读时间约半小时 =========
==所有代码均能调试通=
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

零基础通关 Transformer 架构(上篇)

引子:为什么翻译软件突然会"读上下文"了?

一、 经典方法回顾

2016年你用谷歌翻译《哈利波特》中的句子:“The wizard who lived in the cupboard under the stairs for eleven years finally received his Hogwarts letter.”(在楼梯间碗柜里住了十一年的巫师终于收到了霍格沃茨来信),可能得到"住在楼梯下碗柜里十一年的魔术师终于收到了猪头酒吧来信"这样令人捧腹的错误。但在2017年后,翻译质量突然有了质的飞跃——这背后正是Transformer架构带来的革命性突破。
图:自2006年成立以来,Google翻译模型的BLEU得分。(图片来源:Google)

(图1:图:自2006年成立以来,Google翻译模型的BLEU得分。)

1.1 传统翻译模型的"记忆困境"

要理解Transformer的突破性,我们先看早期翻译系统的两大缺陷:

缺陷一:短时记忆综合征

传统循环神经网络(RNN, Recurrent Neural Network)就像逐字抄写的文员,处理长句子时会忘记开头内容。假设要翻译:
The scientist who proposed the theory of relativity in 1905, later awarded the Nobel Prize in 1921, revolutionized modern physics.
当翻译到"revolutionized"时,传统模型可能已忘记主语是"Einstein"还是"Newton"。

缺陷二:单线程思维局限

卷积神经网络(CNN, Convolutional Neural Network)虽然能并行处理,但像戴着固定尺寸眼镜看世界。当遇到俚语"raining cats and dogs"时,可能直译为"下猫狗雨"而不知其"倾盆大雨"的比喻义。

▼ 传统模型瓶颈对比表

模型类型 处理方式 优点 缺点
RNN 顺序处理 能捕捉序列关系 计算慢、易丢失长程信息
CNN 局部窗口 并行计算 难以捕获全局依赖

1.2 破局者Transformer的三大创新

Google Brain团队在2017年论文《Attention Is All You Need》中提出全新架构,其核心创新点犹如给AI装上了"思维增强套装":

创新一:全局注意力透镜

每个单词都能与其他所有单词建立联系,如同在文字间架起高速公路。当处理"it"时,能自动关联到前文的主语。

创新二:并行计算引擎

抛弃顺序处理方式,像工厂流水线同时加工所有零件。处理100个单词的句子,速度比RNN快10倍以上。

创新三:位置感知系统

通过数学编码标记每个单词的位置,解决了并行计算带来的顺序混乱问题。即使打乱输入顺序,仍能正确理解语义。

python

import matplotlib.pyplot as plt
import numpy as np


# 定义函数来获取位置编码
def get_positional_encoding(max_len, d_model):
    # 创建表示位置的数组,形状为(max_len, 1)
    position = np.arange(max_len)[:, np.newaxis]
    # 计算用于位置编码的除数项
    div_term = np.exp(np.arange(0, d_model, 2) * -(np.log(10000.0) / d_model))
    # 创建全零的位置编码数组,形状为(max_len, d_model)
    pe = np.zeros((max_len, d_model))
    # 对于偶数位置的编码,使用正弦函数计算
    pe[:, 0::2] = np.sin(position * div_term)
    # 对于奇数位置的编码,使用余弦函数计算
    pe[:, 1::2] = np.cos(position * div_term)
    # 返回位置编码
    return pe


# 创建一个图形,设置图形大小
plt.figure(figsize=(10, 6))
# 绘制位置编码的热力图,使用'viridis'颜色映射
plt.imshow(get_positional_encoding(50, 128), cmap='viridis')
# 设置图形标题为"Positional Encoding Heatmap"
plt.title("Positional Encoding Heatmap")
# 设置x轴标签为"Embedding Dimension"
plt.xlabel("Embedding Dimension")
# 设置y轴标签为"Word Position"
plt.ylabel("Word Position")
# 添加颜色条
plt.colorbar()
# 显示图形
plt.show()

(代码生成位置编码热力图,展示不同位置的特征分布)

二、Transformer核心机制解密

2.1 自注意力机制:语言的量子纠缠

注意力公式的三重境界

基础版注意力公式:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V

拆解说明:

  • Q(Query) :当前处理的单词(如句子中的动词)
  • K(Key) :所有单词的"身份证"
  • V(Value) :单词的实际含义
  • 缩放因子 d k \sqrt{d_k} dk :防止点积过大导致梯度消失
# 自注意力机制实现
import torch
import torch.nn.functional as F


# 定义缩放点积注意力函数
def scaled_dot_product_attention(q, k, v, mask=None):
    # 计算查询(q)和键(k)的矩阵乘法,得到注意力分数矩阵
    matmul_qk = torch.matmul(q, k.transpose(-2, -1))
    # 获取键(k)的最后一个维度的大小,用于后续的缩放操作
    dk = k.size()[-1]
    # 对注意力分数进行缩放,除以键向量维度的平方根
    scaled_attention = matmul_qk / torch.sqrt(torch.tensor(dk))

    # 如果存在掩码(mask),用于在计算注意力时屏蔽某些位置
    if mask is not None:
        # 将掩码位置对应的注意力分数设置为极大负数,这样在后续的softmax操作中这些位置的概率会趋近于0
        scaled_attention += (mask * -1e9)  

    # 对缩放后的注意力分数进行softmax操作,得到注意力权重
    attention_weights = F.softmax(scaled_attention, dim=-1)
    # 根据注意力权重和值(v)向量计算输出
    output = torch.matmul(attention_weights, v)
    # 返回计算得到的输出和注意力权重
    return output, attention_weights


# 示例:3个单词,4维嵌入
# 随机生成查询向量,形状为(1, 3, 4),表示1个样本,3个单词,每个单词的嵌入维度为4
q = torch.rand(1, 3, 4)
# 随机生成键向量,形状为(1, 3, 4)
k = torch.rand(1, 3, 4)
# 随机生成值向量,形状为(1, 3, 4)
v =<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大F的智能小课

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值