Transformer的低层实现机制

news/2025/3/26 18:12:46/文章来源:https://www.cnblogs.com/yubo-guan/p/18790317

目录
  • 1. 整体结构回顾
  • 2. 输入处理:词嵌入(Embedding)
    • ① 单词 → 数字向量
    • ② 位置编码(Positional Encoding)
  • 3. 自注意力机制(Self-Attention)
    • ① 计算 Query, Key, Value
    • ② 计算注意力分数
    • ③ 加权求和 Value
    • ④ 多头注意力(Multi-Head Attention)
  • 4. 前馈神经网络(Feed Forward Network)
  • 5. 残差连接 & 层归一化
    • ① 残差连接(Residual Connection)
    • ② 层归一化(Layer Normalization)
  • 6. 多层堆叠(Encoder Layers)
  • 7. 最终输出
  • 总结:Transformer 的低层流水线
    • 关键点


1. 整体结构回顾

Transformer 的核心是一个 编码器-解码器(Encoder-Decoder) 结构,但今天我们主要关注最关键的 编码器部分(解码器类似)。它的工作流程可以简化成以下几步:

  1. 输入处理(把单词变成数字)
  2. 自注意力计算(找出词与词之间的关系)
  3. 前馈神经网络(进一步加工信息)
  4. 重复多层(像流水线一样层层提炼)

下面我们拆解每个步骤的底层实现。


2. 输入处理:词嵌入(Embedding)

① 单词 → 数字向量

计算机不懂文字,所以需要把每个单词转换成一组数字(向量),例如:

  • “猫” → [0.2, -0.5, 0.7, ...](假设是 512 维)
  • “鱼” → [0.8, 0.1, -0.3, ...]

这个过程叫 词嵌入(Word Embedding),可以通过训练学习到(比如“猫”和“狗”的向量会比“猫”和“汽车”更接近)。

② 位置编码(Positional Encoding)

Transformer 没有 RNN 那样的顺序处理能力,所以需要额外告诉它单词的位置。比如:

  • “猫 吃 鱼” → 给“猫”加 [位置1],“吃”加 [位置2],“鱼”加 [位置3]

实现方式是用一组固定或可学习的正弦/余弦函数生成位置信号,然后和词向量相加。

💡 类比:就像给每个快递包裹贴上编号,让分拣员知道顺序。


3. 自注意力机制(Self-Attention)

这是 Transformer 最核心的部分!它的作用是让每个单词去“关注”其他相关的单词。

① 计算 Query, Key, Value

每个单词会生成三个向量:

  • Query(Q):“我要找什么?”
  • Key(K):“我能提供什么?”
  • Value(V):“我的实际信息是什么?”

它们是通过对输入向量做线性变换得到的(即乘上一个可训练的权重矩阵)。

② 计算注意力分数

  • Q 和所有单词的 K 做点积(衡量相关性),得到分数。
    比如“猫”的 Q 和“鱼”的 K 算出一个高分,说明它们关系密切。
  • 然后用 softmax 归一化,得到权重(0~1 之间的概率)。

③ 加权求和 Value

用上一步的权重对 V 加权求和,得到最终的注意力输出。
比如“猫”会重点关注“鱼”的 V,而忽略“汽车”的 V。

💡 代码伪代码(帮助理解):

# 输入: X (句子矩阵)
Q = X @ W_Q  # 计算 Query
K = X @ W_K  # 计算 Key
V = X @ W_V  # 计算 Valuescores = Q @ K.T / sqrt(dim)  # 点积缩放
weights = softmax(scores)     # 归一化
output = weights @ V          # 加权求和

④ 多头注意力(Multi-Head Attention)

  • 实际应用中,Transformer 会并行做多组自注意力(比如 8 组),每组关注不同的“关系模式”。
  • 最后把多组结果拼接起来,再通过一个线性层融合。

💡 类比:就像一群人同时读一篇文章,有人关注“谁做了什么”,有人关注“时间地点”,最后汇总大家的笔记。


4. 前馈神经网络(Feed Forward Network)

自注意力层的输出会经过一个简单的全连接网络(通常是两层 MLP),作用是对信息进一步非线性变换。

  • 输入:自注意力的输出(比如 512 维向量)
  • 操作:先扩大维度(如 2048 维),再缩小回原尺寸。
  • 激活函数:ReLU 或 GELU。

💡 为什么需要这个?
自注意力擅长捕捉关系,但前馈网络能更好地加工特征。


5. 残差连接 & 层归一化

为了防止深层网络训练困难,Transformer 用了两个技巧:

① 残差连接(Residual Connection)

  • 每个子层(自注意力、前馈网络)的输入和输出会相加。
    公式:输出 = 子层(输入) + 输入
  • 作用是防止梯度消失(让信息更容易反向传播)。

② 层归一化(Layer Normalization)

  • 对每一层的输出做归一化(均值为 0,方差为 1),加速训练。

💡 类比:就像写作业时先保留初稿(残差),再润色修改,最后统一格式(归一化)。


6. 多层堆叠(Encoder Layers)

上述过程(自注意力 + 前馈网络)会重复多次(比如原始论文用了 6 层)。

  • 每一层都会逐渐提取更高阶的特征。
  • 浅层可能关注局部语法(主谓宾),深层可能捕捉语义逻辑(指代、因果关系)。

7. 最终输出

编码器的最后一层输出会传给解码器(如果是翻译任务),或者直接用于分类/生成等任务。


总结:Transformer 的低层流水线

  1. 输入 → 词嵌入 + 位置编码
  2. 自注意力 → 计算 Q/K/V,加权求和
  3. 前馈网络 → 非线性变换
  4. 残差 & 归一化 → 稳定训练
  5. 重复 N 层 → 逐步抽象
  6. 输出 → 任务应用

关键点

  • 自注意力:动态计算词与词的关系(权重不固定)。
  • 多头机制:并行捕捉多种关系模式。
  • 残差连接:让深层网络可训练。
  • 位置编码:弥补无顺序处理的缺陷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905016.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM大模型:post-train实战 - 使用GRPO微调LLM

deepseek带火了GRPO,更带火了reinforcement learning,让研究人员发现RL能在pre-train的基础上较大提升LLM的逻辑推理能力!当前,互联网高速发展二十多年产生的优质数据已经使用殆尽,所以更大规模的LLM一直难产(GPT-5现在都还没发布,优质token耗尽是核心原因之一)。市面上…

MQ 消息幂等性保证

MQ 消息幂等性保证 1. 什么是幂等性 在程序开发中,是指同一个业务,执行一次或多次对业务状态的影响是一致的。例如:根据 id 删除数据 查询数据在实际业务中,避免不了出现用户连续点击退款、重复点击删除等情况,这种情况下,就需要对多个消息进行处理,避免短时间内多次执行…

3.24 曲线/曲面积分

1 第一类曲线积分 (理解成求曲线的质量) 要把ds(弧微分)转化成dt(参数方程里面的自变量)(积分里面只留下的变量),也可以转化成dx什么的,注意ds转化成dx的公式 2 第一类曲面积分 还是先求投影,比如投影到xoy平面上,就求z=z(x,y) 2.1 普通对称性奇函数为0,偶函数*2 2.…

SmolVLM2: 让视频理解能力触手可及

一句话总结: SmolVLM 现已具备更强的视觉理解能力📺 SmolVLM2 标志着视频理解技术的根本性转变——从依赖海量计算资源的巨型模型,转向可在任何设备运行的轻量级模型。我们的目标很简单: 让视频理解技术从手机到服务器都能轻松部署。 我们同步发布三种规模的模型 (22 亿/5 亿…

React-Native开发鸿蒙NEXT-video

React-Native开发鸿蒙NEXT-video 前几周的开发,基本把一个”只读型“社区开发的差不多了。帖子列表,详情,搜索都迁移实现了,但还差了一点------视频类型帖子的展示。之前开发RN社区中,对于视频的处理用的是react-native-video,这个三方组件也已经实现了鸿蒙化,部分逻辑可…

React-Native开发鸿蒙NEXT-cookie设置

React-Native开发鸿蒙NEXT-cookie设置 应用有个积分商城,做一些积分兑换的业务,就一个基于react-native-webview开发的页面,在页面加载的时候通过js注入来设置cookie带入用户信息。 早先应甲方要求web网站关闭了,现在又要继续运行。于是就把web服务启动了,然后发现应用里积…

第六天

单词 以下是今天需学习的35个单词复习,同时前几天的单词阅读 理解文章大意,记录不认识的单词。今天这个阅读非常应当下的情景。 How to Teach Yourself Anything in Less than Three Months 如何在3个月内学习任何一件事(一) Self-education can be wonderful and frustrat…

React Native开发鸿蒙Next---富文本浏览

React Native开发鸿蒙Next---富文本浏览 最近在继续开发App剩余的社区功能。地铁的社区相对较为特殊,只有公告/政策规章/操作指南等资讯阅读功能,无法进行交互。对于原先的社区RN,除了移植适配鸿蒙,还需要做大量的功能屏蔽等改造。新的社区后台大量采用富文本进行内容编辑,…

17.指针

正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。 请看下面的实例,它将输出定义的变量地址:#include <stdio.h>int main(){int var_runoob = 10;int *p; //定义指针变量p = &var…

3.24 学习记录

实现了学习记录APP的登录注册功能

2025西安交大集训Day2:DFS,BFS记忆化搜索,迭代加深搜索,二分搜索

2025西安交大集训Day2:DFS,BFS记忆化搜索,迭代加深搜索,二分搜索

掌握 Postman:高级 GET 请求技术与响应分析

欢迎阅读本指南,它将详细介绍如何在 Postman 中发送 GET 请求并理解 API 响应。对于希望提升 API 测试和开发能力的开发者来说,这是不可或缺的技能。 Postman 对开发者的重要性Postman 是 API 开发和测试中不可或缺的工具。它不仅简化了发送请求和分析响应的过程,还提供了一…