Transformer 和 Attention机制入门

ops/2025/1/8 20:19:07/

1. 什么是 Transformer

  1. 背景:
    在自然语言处理领域,早期常使用循环神经网络(RNN)及其变体(如 LSTM、GRU)来处理序列数据,如机器翻译、文本生成等任务。然而,RNN 结构存在以下问题:

    • 随着序列长度增加,模型难以捕捉远距离词汇之间的关联,且训练会出现梯度消失或梯度爆炸等现象。
    • 训练时难以进行大规模并行计算,速度较慢。
  2. Transformer 的诞生:
    2017 年,论文《Attention is All You Need》提出了 Transformer 模型。Transformer 彻底摒弃了循环结构,转而依赖 Attention 机制 来处理序列中的依赖关系,大幅提升了训练效率,并能更好地捕捉长距离依赖。

  3. 主要结构:
    Transformer 的整体结构可以概括为编码器(Encoder)和解码器(Decoder)两大部分:

    • Encoder:由多个相同的编码器层(Encoder Layer)堆叠而成,每一层主要包含 多头自注意力(Multi-Head Self-Attention)前馈网络(Feed-Forward Network)
    • Decoder:与编码器类似,也堆叠了多层的解码器层(Decoder Layer)。解码器层包含三个主要部分:掩码多头自注意力(Masked Multi-Head Self-Attention)、**与编码器交互的多头注意力(Encoder-Decoder Attention)**以及 前馈网络
  4. 优势:

    • 能更高效地并行训练:由于不需要按时间步逐个地处理序列。
    • 能更好地捕捉句子中远距离的依赖关系。
    • 在 NLP 多个任务(翻译、问答、文本生成等)上有显著的效果提升。

2. 什么是 Attention

  1. Attention 机制的动机:
    在处理一句话时,通常并不是句子中所有词对当前输出预测都同等重要。例如,“我喜欢吃苹果”这句话中,如果要预测“吃”的后面那个词,就需要更多关注“苹果”,而不必太在意“我”。Attention 机制通过加权的方式,让模型自动学习“关注”句子中最相关的部分。

  2. 计算过程概览:
    在 Transformer 中,一个 Attention 模块通常包含以下步骤:

    1. 将输入向量分别映射为 Query (Q)Key (K)Value (V)
    2. 通过 QK 的点积(或其他度量)计算相似度,得到注意力分布(即每个单词对于当前 Query 的重要程度)。
    3. 将注意力分数与 V 相乘以加权输出,得到最终的注意力结果。
  3. Self-Attention(自注意力):
    在 Transformer 的 EncoderDecoder 内部,每个单词都将自己当作 Query,与整句话中的所有单词(包含自己)进行 Key、Value 计算,从而捕捉全局上下文信息。

    • 具体来说,句子中每个位置都会输出自己的 Q、K、V,然后进行点积计算。这样,网络能够了解一个词与其他所有词(甚至包括它自己)之间的关系。
  4. Multi-Head Attention(多头注意力):
    自注意力 只是 Attention 机制的一个核心操作。Transformer 并不只做一次自注意力计算,而是把 Q、K、V 分成多个子空间(即多个“头”,Heads),在每个子空间分别进行注意力计算,然后再将各子空间的结果拼接起来。这样做的好处是模型可以学习到不同角度的语义关系,提升表达能力。

  5. Encoder-Decoder Attention:

    • 解码器在生成输出时,除了需要关注解码器本身已有的输出序列(自注意力)外,还需要关注编码器输出的上下文表示(Encoder 输出),这就是 Encoder-Decoder Attention
    • 模型在生成下一个词时,通过这个注意力模块能够“查看”输入句子的每个词与当前要生成的目标词之间的关联。

3. 重点总结

  • Transformer 的核心特点

    • 不再依赖传统 RNN 或 CNN 结构,而是使用 Attention 完成序列到序列的映射。
    • 通过自注意力(Self-Attention)模块能够同时关注序列中所有位置的依赖关系,让模型可以高效并行并捕捉长距离依赖。
    • 模型结构由堆叠的编码器层和解码器层组成,形成高度模块化的设计。
  • Attention 的核心作用

    • 通过 Q-K-V 机制计算每个词对目标词的相关性,将最重要的上下文信息赋予更高的权重。
    • 多头注意力能够从不同的投影空间提取信息,提高模型对语义的捕捉能力。

总之,Transformer 是一种彻底基于 Attention 机制的神经网络结构,克服了 RNN 难以并行以及捕捉长距离依赖不足的缺点。Attention(尤其是自注意力)在其中扮演了最重要的角色,通过对不同词之间关联度的计算和加权,不仅显著提升了模型的性能,还极大加速了训练与推理过程。
接下来我会在我的这个专栏里详细解读一下Transformer的原理,以及常见的LLM是如何使用Transformer这个历史转折点一样的结构的。希望大家多多关注!

参考: jalammar


http://www.ppmy.cn/ops/148551.html

相关文章

C# 中的命名空间与Java和Python中的导入

在 C#、Java 和 Python 这三种语言中,命名空间和导入机制都是用来组织和管理代码及其依赖的工具,但它们在具体实现和使用方式上存在一些差异。 1、问题背景 在 Java 和 Python 世界中,我们可以通过查看源文件来了解所有导入的来源&#xff0…

CSS进阶和SASS

目录 一、CSS进阶 1.1、CSS变量 1.2、CSS属性值的计算过程 1.3、做杯咖啡 1.4、下划线动画 1.5、CSS中的混合模式(Blending) 二、SASS 2.1、Sass的颜色函数 2.2、Sass的扩展(extend)和占位符(%)、混合(Mixin) 2.3、Sass的数学函数 2.4、Sass的模块化开发 2.5、Sass…

解决报错net.sf.jsqlparser.statement.select.SelectBody

在我们项目集成mybatis-plus时,总会遇到奇奇怪怪的报错,比如说下面的这个报错 而这个报错,是告诉我们的分页依赖冲突,要加个jsqlparser依赖来解决这个冲突,也相当于平衡,但是可能因为我们版本的不匹配,还是会报错,例如下面这样 但是我们是不知道到底是什么依赖冲突的,这个时候就…

《前端web开发-CSS3基础-1》

文章目录 《前端web开发-CSS3基础》1.CSS引入方式2.选择器-标签和类3.选择器-id和通配符选择器4.画盒子5.字体修饰属性6.字体大小、粗细和倾斜6.1字体大小6.2 字体粗细6.3字体倾斜 7.行高8.字体族9.font复合属性10.缩进、对齐和修饰线10.1 文本缩进10.2 文本和图片对齐10.3 文本…

蓝桥杯算法|练习记录

位运算 按位与运算符(&) 运算规则:两位同时为1,结果才为1,否则结果为0。例如, -3(在计算机中表示为1101)&5(0101) 0101(即十进制的1&…

SpringSecurity抛出异常但AccessDeniedHandler不生效

文章目录 复现原因 复现 Beanpublic SecurityFilterChain securedFilterChain(HttpSecurity http) throws Exception {//...//异常http.exceptionHandling(except -> {except.authenticationEntryPoint(new SecurityAuthenticationEntryPoint());except.accessDeniedHandle…

数据库---HSQLDB使用教程详解

本学校期末的课程设计要求使用HSQLDB数据库,作为一个小众且轻量的数据库,很少人接触过,再加上同学们都问这个方面,所以就出教程,展示怎么使用HSQLDB。 第一步:启动HSQLDB 下载HSQLDB的jar包,因…

MVCC实现原理及其作用

这里写自定义目录标题 为什么要有MVCC?如何实现?Read View以及可重复读的隔离原理读已提交是如何实现的?总结 为什么要有MVCC? 从用户需求出发,数据库想要实现什么功能呢?事务想要实现隔离性,也…