Transformer 和 Attention机制入门

news2025/1/8 10:54:11

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.coloradmin.cn/o/2273163.html

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

相关文章

Fabric链码部署测试

参考链接:运行 Fabric 应用程序 — Hyperledger Fabric Docs 主文档 (hyperledger-fabric.readthedocs.io) (2)fabric2.4.3部署运行自己的链码 - 知乎 (zhihu.com) Fabric2.0测试网络部署链码 - 辉哥哥~ - 博客园 (cnblogs.com) 1.启动测试…

数据结构与算法之二叉树: LeetCode 107. 二叉树的层序遍历 II (Ts版)

二叉树的层序遍历 II https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/description/ 描述 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历&a…

Python插件化开发实战:开发个图片浏览器

在本篇教程中,我将详细介绍如何使用Python开发一个基于插件架构的图片浏览器。这个项目将展示如何实现插件系统、如何处理图片显示,以及如何使用wxPython构建GUI界面。 “C:\pythoncode\pythonplugin\your_project\main_app.py” 项目概述 我们将开发一个具有以下…

根据python代码自动生成类图的实现方法[附带python源码]

概述 利用python库抽象语法树(AST)和类图描述语言(PlantUML),实现自动将python代码生成类图的目的。 环境 windowsvscodepythonplantuml ✒️网上好像大部分都是用Pyreverse库来实现的,但是我实际测试发现只能在一个文件中才能行,当然应该有解决方法…

下载b站高清视频

需要使用的edge上的一个扩展插件,所以选择使用edge浏览器。 1、在edge浏览器上下载 强力视频下载合并 扩展插件 2、在edge上打开b站,登录自己账号(登录后才能下载到高清!!)。打开一个视频,选择自…

flutter 专题二十四 Flutter性能优化在携程酒店的实践

Flutter性能优化在携程酒店的实践 一 、前言 携程酒店业务使用Flutter技术开发的时间快接近两年,这期间有列表页、详情页、相册页等页面使用了Flutter技术栈进行了跨平台整合,大大提高了研发效率。在开发过程中,也遇到了一些性能相关问题和…

UE5 打包要点

------------------------- 1、需要环境 win sdk ,大约3G VS,大约10G 不安装就无法打包,就是这么简单。 ----------------------- 2、打包设置 编译类型,开发、调试、发行 项目设置-地图和模式,默认地图 项目…

vulnhub靶场【DC系列】之5

前言 靶机:DC-5,IP地址为192.168.10.4 攻击:kali,IP地址为192.168.10.2 都采用VMWare,网卡为桥接模式 对于文章中涉及到的靶场以及工具,我放置网盘中https://pan.quark.cn/s/2fcf53ade985 主机发现 使用…

双模态视觉特征流用于医学报告生成|文献速递-视觉大模型医疗图像应用

Title 题目 Dual-modality visual feature flow for medical report generation 双模态视觉特征流用于医学报告生成 01 文献速递介绍 医学报告生成是一项新兴的跨模态文本生成任务(X. Zeng et al., 2020;Najdenkoska et al., 2022;Li et…

基于Fluent和深度学习算法驱动的流体力学计算与应用

物理模型与深度学习的融合:研究如何将传统的物理模型与深度学习算法相结合,以提高流体力学问题的预测准确性和计算效率。复杂流动模拟:利用深度学习技术对复杂流动现象进行模拟和分析,包括湍流、多相流、非牛顿流体等,…

记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-动态表单(2)

接1的内容,那么有这么一个需求! 需求分析 需要修改某一个配置的时候 1.从对应的api中读取消息,消息内容为Json格式的 2.基于当前的Json渲染成表单提供给管理端的客户呈现 3.管理端的用户可以基于这个表单的内容进行修改,然后提交…

pycharm-pyspark 环境安装

1、环境准备:java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…

Clisoft SOS设置Workarea

Clisoft SOS设置Workarea 本人也是刚刚接触这个软件,可能有些方面不够完善,欢迎大佬指点。 这里就不演示创建创建Server和Project,可以参考Clisoft SOS设置Server和Project 创建Workarea 创建好目录并设置好权限 # 创建组 [bhlumaster ~]$…

数据结构:LinkedList与链表—无头双向链表(二)

目录 一、什么是LinkedList? 二、LinkedList的模拟实现 1、display()方法 2、addFirst(int data)方法 3、addLast(int data)方法 4、addIndex(int index,int data)方法 5、contains(int key)方法 6、remove(int key)方法 7、removeAllKey(int key)方法 8、…

基于SpringBoot实现的保障性住房管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

【Linux】硬链接和软连接(符号连接)

目录 硬链接 软连接 硬链接和软连接的区别 硬链接 ln根据linux系统分配给文件inode(ls -li)进行建立,没办法跨越文件系统 格式:ln 被链接的文件(源文件) 生成的链接文件(目标文件) 1) 硬链接的属性 - 相当于生成一个副本 起别名 2) 修改内容都变化…

多目标优化算法——基于聚类的不规则Pareto前沿多目标优化自适应进化算法(CA-MOEA)

基于聚类的不规则Pareto前沿多目标优化自适应进化算法(CA-MOEA) 一、算法简介 简介: 现有的多目标进化算法(moea)在具有规则Pareto前沿且Pareto最优解在目标空间上连续分布的多目标优化问题(MOPs&#xff…

基于SpringBoot的乐器商城购物推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

【vba源码】自动获取汇率

Hi,大家好! 没有想到今天居然是腊八,过了腊八就是年,离过年越来越近了,那在这里给大家就拜个年,希望大家在新的一年都有好事发生。 最近在弄点小项目,在项目遇到了一个汇率计算的问题&#xff…

JavaEE初阶——计算机工作原理

一、什么是JavaEE JavaEE(Java Platform,Enterprise Edition)是sun公司(2009年4月20日甲骨文将其收购)推出的企业级应用程序版本。这个版本以前称为 J2EE。能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器…