Attention is All You Need-Transformer模型论文精读+架构分析--简单易懂版

news2025/3/13 1:07:16

Foreword写在前面的话:

  大家好,我是一名刚开始学习Transformer的新手。这篇文章是我在学习Transformer过程中的一些笔记和心得,希望能和同样在学习人工智能深度学习模型的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便我能不断学习和进步。同时,我也会在文章中注明参考的资料,以示对原作者的尊重。

PS:本帖以记录学习心得和课堂笔记为主,没有其他大博主那么专业,但是简单易懂^-^

本贴的其他相关学习笔记资料可以通过订阅专栏获取,喜欢的小伙伴可以多多点赞+关注呀!后续会 持续更新相关资源的~

-本帖示意图源自b站课程截图和原论文图示,引号部分表示引自原论文原句,如有侵权请联系作者删除~

  课程学习资源:根据b站Transformer论文逐段精读【论文精读】 视频学习记录而成。原视频网址:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili

先验知识补充:

序列转录模型Sequence Transduction Model:给你一个序列,生成另外一个序列。如:英文翻译成中文

Abstract论文摘要分析:

“The Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely.”——引自原论文,作者说明transformer仅仅使用了自注意力机制,而并没有使用循环和卷积的架构。(和之前大家表现很好的模型的架构长得不一样)

“Being more parallelizable and requiring significantly less time to train”——引自原论文,作者说到其并行计算能力更佳+训练耗时更短

最开始的时候,Transformer整体架构是针对于机器翻译而开发的

Conclusion论文结论分析:

  1. Multi-headed self-attention多头自注意力机制

Introduction and Background:

  1. 2017年最常用的时序模型是RNN Recurrent Neural Network(包括LSTM long short-term memory长短时记忆 和 GRU gated recurrent neural networks 门控循环神经网络架构)
  2. GRU用于解决RNN在处理长序列数据是可能会发生的梯度消失和梯度爆炸问题-通过引入门控机制,更好地捕捉长距离依赖关系。
  3. 不使用循环神经层,而是纯基于注意力机制
  4. 模拟卷积神经网络的多输出通道的效果--transformer的多头自注意力机制
  5. “the Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequence-aligned RNNs or convolution.”指的是说transformer是第一个利用自注意力机制来做encode到decode架构的模型。

Model Architecture模型架构:

  1. 当前(2017)现状:“Most competitive neural sequence transduction models have an encoder-decoder structure.”目前市面上的神经序列转录模型基本上都采用了编码器-解码器这个架构。
  2. 编码器encoder:就是将输入序列(x1, ...,xn)转化为机器学习可以理解的向量(z1, ..., zn)。
  3. 解码器decoder:将编码器的输出序列转化成最终的输出序列(y1, ..., ym) -m与n可以相同也可以不同,因为翻译句子的时候不一定翻译后的结果与原文长度相同。
  4. 注意:在编码的时候可以一次性看完整个句子,但是在解码的时候只能一个一个生成--即自回归模型Auto-regressive model AR模型
  5. 因此,transformer也通过堆-自注意力和point-wise堆在一起 使用了这个结构:“The Transformer follows this overall architecture using stacked self-attention and point-wise, fully connected layers for both the encoder and decoder.”

(Transformer示意图引自原论文Attention Is All You Need)

  1. 在这幅图中,左边是编码器,右边是解码器
  2. Embedding:嵌入层(encoder和decoder都有)
  3. “N×”指的是N个层layer叠在一起
  4. Feed Forward Neural Network 前馈神经网络
  5. 编码器的输出作为解码器的输入
  6. 解码器相对于编码器多了一个Masked Multi-Head Attention

具体模块的实现:

  1. 基础知识补充:MLP Multilayer Perceptron多层感知机-经典的神经网络架构,由输入层+隐藏层+输出层组成(每层由多个神经元组成)-能够通过隐藏层的非线性激活函数拟合复杂的非线性关系
  2. 基础知识补充:Batch Normalization BN,也成为Batch Norm批量归一化,是深度学习中一种重要的技术,用于加速神经网络的训练过程、稳定模型的收敛并缓解梯度消失和梯度爆炸等问题。-用于解决内部协变量偏移(随着网络层数增加,前一层输出的分布会发生变化从而导致下一层的输入分布发生偏移-即内部协变量偏移),BN通过归一化每一层(列,当输入的是二维数据时)的输入,使其均值为0,方差为1,从而减小输入数据分布的变化。
  3. Transformer对BN的修改:LayerNorm,在归一化时将每一行(当输入数据为二维时)变为均值=0,方差=1。可以理解为layernorm就是把数据转置后放入batchnorm的结果。

  1. 解码器运用自回归机制:当前输出的输入集其实是上面一些时刻的输出。因此这意味着:在预测t时刻的输出时,不应该看到t时刻以后的那些输入。所以为了避免这种机制被破坏(因为自注意力机制意味着机器可以看到所有的输入),作者采用了一个带掩码的注意力机制masked multi-head attention

Scaled Dot-Product Attention(可以把scaled理解为

  1. “The input consists of queries and keys of dimension dk, and values of dimension dv.”

 Query 和 key 这两个向量做内积,若这两个向量的长度相等,内积的值越大,表明这两个向量的相似度就越高;若内积的值=0,说明两向量正交。

  1. 之后再除以向量长度√dk,再放进softmax function,就会得到n个非负的加起来和等于1的权重。再把对应的权重作用到value上就得到输出了(但是在实际应用中这样一个一个算出输出效率太低,因此可以进一步修改)
  2. 进一步修改:可以把query写成一个矩阵,做两次矩阵乘法

  1. 两种常见的注意力机制:1)加型注意力机制additive attention,用于处理query和key不等长的情况;2)点积注意力机制dot-product attention (dot-product attention is identical to our algorithm,except for the scaling factor of )
  2. 为什么该文作者采用scaled dot-product attention而非单纯的dot-product attention?避免在套完softmax函数后得到的值向0和1两端靠拢-梯度变小-跑不动

  1. Mask:当计算到qt时不让它看到t之后的kt+1,...,kn--即先把k值全部算出来时候,将k时刻以后的k值全部换成很大的负数(套入softmax函数后就会变成0-即权重变为0-即在算output的时候不会考虑t+1及以后时刻的k),从而达到mask掩盖的效果。

Multi-Head Attention 多头注意力机制函数

  1. 即把整个query、key、value投影到低维度(即进入线性层linear)h次,再做h次的注意力函数(就是h次的Scaled Dot-Product Attention),然后每一个函数的输出(h个)把它们并在一起,然后再投影(linear层)得到我们最后的输出。

Application of Attention in our Model在transformer这个模型里面是如何使用注意力的

  1. 假设输入的句子长度=n,编码器的注意力的输入其实是n个长为d的向量
  2. 数据进入编码器后一分为三作为key,query,value,这里其实是说明这三者就是一个东西(其实就是自注意力)。n个query对应n个输出(输出实际上就是value的一个加权和,权重来自query和key)
  3. 绿色笔这里圈出的部分就是自注意力了,这里是将编码器输出的key和value,以及解码器自身得到的query作为输入处理。然后query计算时,相似度高的权重更大,比如第二个绿色向量对应的query的关于hello的权重就更大。
  4. Position-wise Feed-Forward Networks(fully connected feed-forward network-实际上就是只作用在最后一个维度的MLP)

    Embeddings and Softmax

    Positional Encoding (在attention的输入里面加入时序信息)

    由于输出是value的一个加权和,权重是query和key之间的距离,与序列信息无关,所以当处理时序信息时(比如将同一句话的词语顺序打乱-即语义会发生变化),此时光靠attention机制得到的输出还是一样的,很明显有问题。(attention无法处理时序信息

最后,感谢每一位阅读这篇文章的朋友,你们的反馈对我来说非常宝贵。如果有任何问题或建议,请随时告诉我。让我们一起学习和进步吧!如果您喜欢我的内容,别忘了点赞和关注哦,我会定期分享更多有价值的信息。

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

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

相关文章

Qt跨屏窗口的一个Bug及解决方案

如果我们希望一个窗口覆盖用户的整个桌面,此时就要考虑用户有多个屏幕的场景(此窗口要横跨多个屏幕),由于每个屏幕的分辨率和缩放比例可能是不同的,Qt底层在为此窗口设置缩放比例(DevicePixelRatio&#xf…

Spark--算子执行原理

一、sortByKey SortByKey是一个transformation算子,但是会触发action,因为在sortByKey方法内部,会对每个分区进行采样,构建分区规则(RangePartitioner)。 内部执行流程 1、创建RangePartitioner part&…

javaEE-6.网络原理-http

目录 什么是http? http的工作原理: 抓包工具 fiddler的使用 HTTP请求数据: 1.首行:​编辑 2.请求头(header) 3.空行: 4.正文(body) HTTP响应数据 1.首行:​编辑 2.响应头 3.空行: 4.响应正文…

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …

【C++】STL——list的使用

目录 💕1.带头双向链表List 💕2.list用法介绍 💕3.list的初始化 💕4.size函数与resize函数 💕5.empty函数 💕6.front函数与back函数 💕7.push_front,push_back,pop_front,pop_back函数…

6.PPT:魏女士-高新技术企业政策【19】

目录 NO1234​ NO567 ​ NO1234 创建“PPT.pptx”考生文件夹Word素材文档:选中对应颜色的文字→选中对应的样式单击右键按下匹配对应文字:应用所有对应颜色的文字开始→创建新的幻灯片→从大纲:考生文件夹:Word素材重置 开始→版…

MLA 架构

注:本文为 “MLA 架构” 相关文章合辑。 未整理去重。 DeepSeek 的 MLA 架构 原创 老彭坚持 产品经理修炼之道 2025 年 01 月 28 日 10:15 江西 DeepSeek 的 MLA(Multi-head Latent Attention,多头潜在注意力)架构 是一种优化…

7.抽象工厂(Abstract Factory)

抽象工厂与工厂方法极其类似,都是绕开new的,但是有些许不同。 动机 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 假设案例 假设…

旋钮屏设备物联网方案,ESP32-C3无线通信应用,助力设备智能化升级

在智能家居的浪潮中,旋钮屏以其独特的交互方式和便捷的操作体验,逐渐成为智能家电控制面板上的新宠儿。从智能冰箱、洗衣机到烤箱、空气炸锅等设备,旋钮屏的应用无处不在。 通过简单的旋转和按压操作,用户可以轻松调节温度、时间…

DRGDIP 2.0时代下基于PostgreSQL的成本管理实践与探索(上)

一、引言 1.1 研究背景与意义 在医疗领域的改革进程中, DRG/DIP 2.0 时代,医院成本管理的重要性愈发凸显。新的医保支付方式下,医院的收入不再单纯取决于医疗服务项目的数量,而是与病种的分组、费用标准以及成本控制紧密相关。这…

游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号,直接搜索引擎搜索即可得到,这就不用多说了,但是这里的手机号可以任意输入,只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

安卓/鸿蒙模拟位置信息-Fake Location模拟虚拟定位打卡

一、软件下载安装 需要用到的软件就一个即:FakeLocation虚拟打卡定位 下载地址:FakeLocation虚拟打卡定位.app 二、手机端设置 打开手机设置-关于手机-版本信息-版本号,连续点击版本号直到出现已进入开发者模式字样,此时打开手…

(一)DeepSeek大模型安装部署-Ollama安装

大模型deepseek安装部署 (一)、安装ollama curl -fsSL https://ollama.com/install.sh | sh sudo systemctl start ollama sudo systemctl enable ollama sudo systemctl status ollama(二)、安装ollama遇到网络问题,请手动下载 ollama-linux-amd64.tgz curl -L …

LabVIEW2025中文版软件安装包、工具包、安装教程下载

下载链接:LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安装图文教程》 1、解压后,双击install.exe安装 2、选中“我接受上述2条许可协议”,点击下一步 3、点击下一步,安装NI Packa…

Spring MVC ONE

第一章:Java web的发展历史 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是:JSPJavaBean的模式,它的核心是Jsp页面,在这个页面中,Jsp页面负责整合页面和JavaBean(业务逻辑)&…

【Git】一、初识Git Git基本操作详解

文章目录 学习目标Ⅰ. 初始 Git💥注意事项 Ⅱ. Git 安装Linux-centos安装Git Ⅲ. Git基本操作一、创建git本地仓库 -- git init二、配置 Git -- git config三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…

SQL 秒变三线表 sql导出三线表

🎯SQL 秒变三线表,校园小助手超神啦 宝子们,搞数据分析、写论文的时候,从 SQL 里导出数据做成三线表是不是特别让人头疼😩 手动调整格式,不仅繁琐,还容易出错,分分钟把人逼疯&#…

PySpark学习笔记5-SparkSQL

sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java,Scala,python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…

如何利用maven更优雅的打包

最近在客户现场部署项目,有两套环境,无法连接互联网,两套环境之间也是完全隔离,于是问题就来了,每次都要远程到公司电脑改完代码,打包,通过网盘(如果没有会员,上传下载慢…