ransformer进阶之路:#2 工作原理详解
架构概述Transformer 架构的主要组成部分有编码器和解码器的数据输入包括嵌入层位置编码层编码器堆栈包含多个编码器。每个编码器包含多头注意力层前馈层解码器栈包含多个解码器。每个解码器包含两个多头注意力层前馈层输出右上角——生成最终输出包含线性层Softmax层。为了理解每个组件的作用我们以训练一个翻译任务为例一步步走过 Transformer 的工作流程。我们只用一个训练样本输入序列是英文 You are welcome目标序列是西班牙语 De nada。嵌入和位置编码和任何自然语言处理模型一样Transformer 需要知道每个单词的两件事词义及其在序列里的位置。嵌入层 负责编码单词的含义。位置编码层 负责表示单词的位置。Transformer 把这两部分编码直接相加合二为一。嵌入EmbeddingTransformer 有两个嵌入层。输入序列被喂给第一个嵌入层叫做 「输入嵌入」。目标序列则被喂给第二个嵌入层不过在喂之前需要先把目标序列向右移动一个位置并在第一个位置插入一个「起始」标记。注意在推理阶段我们没有目标序列只能像第一篇 transformer进阶之路#1 整体概述 讲的那样通过循环把输出序列喂给这第二个嵌入层。所以它也被称为「输出嵌入」。文本序列通过我们的词汇表映射到数字词ID。然后嵌入层将每个输入词映射到一个嵌入向量该向量更丰富地表示了该词的含义。位置编码Position EncodingRNN 本质上是一个循环一个词接一个词地输入。因此它天然知道每个单词的位置。但 Transformer 不用 RNN序列里的所有单词是并行输入的。这虽然是它相比 RNN 的一大优势但也意味着位置信息会丢失必须单独把它加回来。和两个嵌入层对应Transformer 也有两个位置编码层。位置编码是独立于输入序列计算出来的。它们是一些固定的值只取决于序列的最大长度。举个例子第一个位置的编码是一个常数表示这是第一个位置第二个位置的编码是另一个常数表示这是第二个位置以此类推。这些常数是用下面这个公式算出来的。其中pos是单词在序列中的位置dmodeldmodel​ 是编码向量的长度和嵌入向量的长度一样i是这个向量里的索引值。换句话说它把正弦曲线和余弦曲线交错在一起所有偶数索引用正弦值奇数索引用余弦值。举个例子假如我们编码一个长度为 40 个词的序列下图展示了其中几个单词位置编码索引组合对应的编码值。蓝色曲线展示了第 0 个索引对于全部 40 个单词位置的编码值橙色曲线是第 1 个索引的。剩下的索引值也会有类似的曲线。矩阵维度我们知道深度学习模型一次处理一批训练样本。嵌入层和位置编码层操作的对象是代表一批序列样本的矩阵。嵌入层接收一个形状为 (样本数, 序列长度) 的矩阵里面是单词 ID。它把每个单词 ID 编码成一个词向量词向量的长度就是嵌入尺寸embedding size。输出的矩阵形状就变成了(样本数, 序列长度, 嵌入尺寸)。位置编码使用的编码尺寸等于嵌入尺寸。所以它能生成一个形状完全一样的矩阵直接加到嵌入矩阵上。这个由嵌入层和位置编码层生成的 (样本数, 序列长度, 嵌入尺寸) 形状会贯穿整个 Transformer数据流过编码器堆栈和解码器堆栈时都保持不变直到最后的输出层才会改变形状。这里对 Transformer 里的 3D 矩阵维度有了个概念。为了让图示更简单接下来我们会丢掉「样本数」这个维度只针对单个样本使用 2D 表示。输入嵌入把输出送给编码器。同样输出嵌入把输出送给解码器。编码器编码器堆栈和解码器堆栈分别由若干个通常是 6 个编码器和解码器依次串联而成。堆栈里的第一个编码器接收来自嵌入层和位置编码层的输入。堆栈里的其他编码器则接收上一个编码器的输出。编码器把它的输入传给一个多头自注意力层。自注意力的输出再传给一个前馈层然后前馈层把输出向上送给下一个编码器。自注意力和前馈这两个子层周围都有一圈残差连接紧接着是一个层归一化。最后一个编码器的输出会按下面要讲的方式被喂给解码器堆栈里的每一个解码器。解码器解码器的结构和编码器非常相似但有两处不同。和编码器一样堆栈里的第一个解码器接收来自输出嵌入和位置编码的输入。堆栈里的其他解码器则接收上一个解码器的输出。解码器把它的输入传给一个多头自注意力层。但与编码器中的自注意力稍有不同它只允许关注到序列中当前位置之前的位置。这是通过掩码masking未来位置实现的我们稍后会详细讨论。与编码器不同的是解码器还有第二个多头注意力层叫做「编码器-解码器注意力层」。这个层的工作方式类似自注意力但它会结合两个来源的输入一个是它下面的自注意力层的输出另一个是编码器堆栈的输出。自注意力的输出会传给前馈层然后前馈层把输出向上送给下一个解码器。这些子层自注意力、编码器-解码器注意力和前馈层周围都有一个残差连接紧接着是一个层归一化。注意力机制在上一篇中我们聊了为什么注意力在处理序列时如此重要。在 Transformer 里注意力出现在三个地方编码器中的自注意力输入序列关注自己解码器中的自注意力目标序列关注自己解码器中的编码器-解码器注意力目标序列关注输入序列注意力层接收三个参数形式的输入分别叫做 Query查询、Key键和Value值。在编码器的自注意力中编码器的输入同时传给 Query、Key 和 Value 这三个参数。在解码器的自注意力中解码器的输入同时传给 Query、Key 和 Value 这三个参数。在解码器的编码器-解码器注意力中编码器堆栈最后一个编码器的输出被传给 Value 和 Key 参数而它下面那个自注意力和层归一化模块的输出被传给 Query 参数。多头注意力Transformer 把每一个注意力处理器称为一个注意力头然后并行地把这个过程重复多次。这就是多头注意力名字的由来。通过组合几个并行的、计算方式相似的注意力它给了自己的注意力更强的辨别能力。Query、Key 和 Value 会分别各自通过一个独立的线性层每个层有自己的权重产生三个结果Q、K 和 V。然后如下图所示它们会通过注意力公式组合在一起生成注意力分数。

相关新闻

第1篇:Agent开发全景图 —— 从零构建完整的技术认知框架

第1篇:Agent开发全景图 —— 从零构建完整的技术认知框架

第1篇:Agent开发全景图 —— 从零构建完整的技术认知框架当前大语言模型(LLM)的能力边界正在被“智能体(Agent)”重新定义。如果说2024年是“LLM元年”,那么2026年无疑是“Agent爆发年”。本篇作为系列开篇…

2026/6/26 8:43:06阅读更多 →
链表算法题常见解题方法总结(面试高频模板)

链表算法题常见解题方法总结(面试高频模板)

链表算法题常见解题方法总结(面试高频模板) 前言 数组题考察的是下标操作,而链表题考察的核心永远是指针操作。 很多同学刷链表的时候会发现: 题目千变万化;解法却总是在重复。 因为链表题真正高频的方法只有几个&…

2026/6/26 8:43:06阅读更多 →
3分钟学会:用Marketch插件让Sketch设计稿秒变可测量网页

3分钟学会:用Marketch插件让Sketch设计稿秒变可测量网页

3分钟学会:用Marketch插件让Sketch设计稿秒变可测量网页 【免费下载链接】marketch Marketch is a Sketch 3 plug-in for automatically generating html page that can measure and get CSS styles on it. 项目地址: https://gitcode.com/gh_mirrors/ma/marketch…

2026/6/26 8:43:06阅读更多 →
风管的防腐涂层施工:材料选择与施工流程

风管的防腐涂层施工:材料选择与施工流程

引言风管在通风与空调系统中扮演着至关重要的角色,它负责输送空气,保障室内空气的流通和质量。而防腐涂层对于风管来说,就如同给其穿上一层保护衣,能有效防止风管被腐蚀,延长其使用寿命,确保系统的稳定运行…

2026/6/26 10:13:41阅读更多 →
2026 东莞磁吸支架转轴开模厂家盘点:5 家自有模具车间源头厂推荐

2026 东莞磁吸支架转轴开模厂家盘点:5 家自有模具车间源头厂推荐

3C 结构工程师 / 采购选型必备:附核验标准 避坑指南做磁吸支架定制开发,开模是最容易踩坑的环节:模具外包导致交期失控、转轴与磁吸结构装配干涉、改模拖沓拖慢新品节奏、定制方案外泄引发同质化竞争…… 这些问题直接影响项目落地效率与产品…

2026/6/26 10:13:41阅读更多 →
3步解锁Godot游戏源码:GDScript反编译与项目恢复实战指南

3步解锁Godot游戏源码:GDScript反编译与项目恢复实战指南

3步解锁Godot游戏源码:GDScript反编译与项目恢复实战指南 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp 当你的Godot游戏项目文件意外丢失,或者你需要分析一个已发布…

2026/6/26 10:13:41阅读更多 →
数据库存储过程与事务实战:从ACID原理到银行转账案例精解

数据库存储过程与事务实战:从ACID原理到银行转账案例精解

1. 项目概述:从“头歌”平台到数据库核心技能的精通之路最近在“头歌”这类实践平台上,看到很多朋友在啃“存储过程和事务”这块硬骨头。这确实是数据库学习中一个承上启下的关键门槛。表面上看,它可能只是平台上的一个实验任务,要…

2026/6/26 10:13:41阅读更多 →
【限时公开】VMware官方未文档化的启动失败兜底方案:强制重建vmx+寄存器状态回滚+vmmemctl内存映射修复(仅剩最后23份实操Checklist)

【限时公开】VMware官方未文档化的启动失败兜底方案:强制重建vmx+寄存器状态回滚+vmmemctl内存映射修复(仅剩最后23份实操Checklist)

更多请点击: https://kaifayun.com 第一章:VMware虚拟机无法启动的典型现象与诊断边界界定 当VMware虚拟机无法启动时,用户常遭遇多种表层现象,如虚拟机卡在“正在启动”状态、控制台黑屏无响应、报错弹窗(例如“Fail…

2026/6/26 10:13:40阅读更多 →
Loguru 结构化日志配置详解:从 trace_id 到日志轮转

Loguru 结构化日志配置详解:从 trace_id 到日志轮转

1. 引言 在实际项目开发中,日志不仅是排查问题的依据,更是系统可观测性的基础。loguru 作为 Python 生态中轻量又强大的日志库,通过简洁的 API 就能实现传统 logging 模块难以做到的结构化输出、动态上下文注入、自动轮转等能力。 本文将通过…

2026/6/26 10:08:39阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/25 9:39:54阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

一、前言:企业运维痛点与资源价值自博通收购 VMware 之后,原 VMware 公开免费下载渠道全面关闭,企业运维人员想要获取适配 HPE 慧与服务器的 ESXi 9 原厂镜像,必须注册博通账号、绑定有效授权才能下载,无授权账号无法获…

2026/6/26 0:02:15阅读更多 →
Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin作为一门现代编程语言,与Java的互操作性一直是其核心优势之一。为了让Kotlin代码能够无缝对接Java,Kotlin提供了多种注解来优化互操作体验,其中JvmStatic和JvmField是两个关键注解。它们分别用于解决静态成员和字段在Java中的访问问题&…

2026/6/26 0:02:15阅读更多 →
深入解析musl libc中的mmap实现源码

深入解析musl libc中的mmap实现源码

最近在阅读musl libc源码时,发现其mmap的实现非常精妙,特分享给大家。 一、代码整体结构 这段代码实现了__mmap函数,并通过weak_alias导出为mmap。这是典型的musl libc风格——提供弱符号以便用户可以重写。 weak_alias(__mmap, mmap); 二…

2026/6/26 0:02:15阅读更多 →