Transformer 和 Attention机制入门

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.mzph.cn/bicheng/66513.shtml

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

相关文章

Unity学习笔记(七)使用状态机重构角色攻击

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 攻击状态重构 首先我们重构攻击状态的动画 之前的动画,我们是使用状态(isAttacking)攻击次数(comboCounter)完成动画的过渡,这样虽然能完成功能,但是如…

Windows10环境下安装RabbitMq折腾记

最近有个老项目需要迁移到windows10环境,用的是比较老的rabbitmq安装包,如下所示。经过一番折腾,死活服务起不来,最终果断放弃老版本启用新版本。现在把折腾过程记录下: 一、安装erlang 安装完成后的目录结构&#xff…

了解RabbitMQ中的Exchange:深入解析与实践应用

在分布式系统设计中,消息队列(Message Queue)扮演着至关重要的角色,而RabbitMQ作为开源消息代理软件的佼佼者,以其高性能、高可用性和丰富的功能特性,成为了众多开发者的首选。在RabbitMQ的核心组件中&…

分布式主键ID生成方式-snowflake雪花算法

这里写自定义目录标题 一、业务场景二、技术选型1、UUID方案2、Leaf方案-美团(基于数据库自增id)3、Snowflake雪花算法方案 总结 一、业务场景 大量的业务数据需要保存到数据库中,原来的单库单表的方式扛不住大数据量、高并发,需…

Linux 系统搭建网络传输环境汇总

Ubuntu 系统搭建 TFTP 服务器 1. 创建 /home/username/workspace/tftp 目录并赋予最大权限,username 是自己用户名 sudo mkdir -p /home/username/workspace/tftp sudo chmod 777 /home/username/workspace/tftp 2. 安装 tftp-hpa( 客户端软件包&#x…

“AI智慧语言训练系统:让语言学习变得更简单有趣

大家好,我是你们的老朋友,一个热衷于探讨科技与教育结合的产品经理。今天,我想和大家聊聊一个让语言学习变得不再头疼的话题——AI智慧语言训练系统。这个系统可是我们语言学习者的福音,让我们一起来揭开它的神秘面纱吧&#xff0…

线性代数考研笔记

行列式 背景 分子行列式:求哪个未知数,就把b1,b2放在对应的位置 分母行列式:系数对应写即可 全排列与逆序数 1 3 2:逆序数为1 奇排列 1 2 3:逆序数为0 偶排列 将 1 3 2 只需将3 2交换1次就可以还原原…

精选2款.NET开源的博客系统

前言 博客系统是一个便于用户创建、管理和分享博客内容的在线平台,今天大姚给大家分享2款.NET开源的博客系统。 StarBlog StarBlog是一个支持Markdown导入的开源博客系统,后端基于最新的.Net6和Asp.Net Core框架,遵循RESTFul接口规范&…

关于FPGA中添加FIR IP核(采用了GOWIN EDA)

文章目录 前言一、IP核二、MATLAB文件三、导出系数COE文件1.设计滤波器2.用官方的matlab代码或者直接用文本文件 四、进行模块化设计源文件 前言 FIR滤波器的特点是其输出信号是输入信号的加权和,权值由滤波器的系数决定。每个系数代表了滤波器在特定延迟位置上的“…

51单片机——中断(重点)

学习51单片机的重点及难点主要有中断、定时器、串口等内容,这部分内容一定要认真掌握,这部分没有学好就不能说学会了51单片机 1、中断系统 1.1 概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在&#…

VVenC 编码器源码结构与接口函数介绍

VVenC VVenC(Fraunhofer Versatile Video Encoder)是由德国弗劳恩霍夫海因里希研究所(Fraunhofer Heinrich Hertz Institute, HHI)开发的一个开源的高效视频编码器。它实现了最新的视频编码标准——Versatile Video Coding (VVC)…

耗时一天,我用AI开发了AI小程序

小码哥从事前后端开发近十年,但是随着技术的更新迭代,有时候没有时间和精力去优化UI、实现一些前后端功能,以及解决一些bug。特别是我想开发小码哥AI的移动端,但觉得自己没有那么多时间去研究移动端了,准备放弃了&…

C#中的关键字out和ref的区别

目录 一、out 二、ref 三、拓展 一、out 在 C# 中,out 是一个关键字,通常用于方法参数,表示该参数是输出参数。使用 out 关键字的参数要求在方法内部必须被赋值,而这个参数的值会在方法返回时传递给调用者。可以理解为&#xf…

SpringBootWeb案例-1(day10)

准备工作 需求 & 环境搭建 需求说明 环境搭建 步骤: 准备数据库表(dept、emp)创建 springboot 工程,引入对应的起步依赖(web、mybatis、mysql 驱动、lombok)配置文件 application.properties 中引入 mybatis 的配置信息&…

VUE条件树查询 自定义条件节点

之前实现过的简单的条件树功能如下图&#xff1a; 经过最新客户需求确认&#xff0c;上述条件树还需要再次改造&#xff0c;以满足正常需要&#xff01; 最新暴改后的功能如下红框所示&#xff1a; 页面功能 主页面逻辑代码&#xff1a; <template><div class"…

保险丝驱动电路·保险丝有什么用应该如何选型详解文章!!!

目录 保险丝基础知识 保险丝常见类型 保险丝功能讲解 保险丝驱动电路 ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电…

李宏毅机器学习课程笔记02 | 机器学习任务攻略General Guide

第一步&#xff1a;分析loss on training data 先检查在训练数据上模型是否很好的学习 情况1&#xff1a;如果在训练集上&#xff0c;loss很大&#xff0c;说明在训练资料上没有训练好 可能性1&#xff1a;设置的模型太简单了&#xff0c;模型存在model bias模型偏差&#x…

Gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置

gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置 1. 说明2. 实操&#xff08;以docker执行器为例&#xff09;2.1 修改默认的builds_dir2.1.1 调整gitlab-runner的配置文件2.1.2 CI文件 2.2 启用custom_build_dir2.2.1 调整gitlab-runner的配置文件2.2.2 CI文件…

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…

QT RC_FILE 应用程序图标设置

1.先做一个app.ico 文件&#xff0c;并将文件放入资源文件夹中 2.打开QT项目的.pro文件在最下面增加 RC_FILE $$PWD/res/app.rc 3.在资源文件夹中创建一个app.rc文件。在QT开发工具中编辑并输入下在内容 IDI_ICON1 ICON "app.ico" 4.测试效果