如何最简单、通俗地理解Transformer?

史上最小白之Transformer详解 1.前言 博客分为上下两篇,您现在阅读的是史上最小白之从Attention到Transformer详解(下) 上篇博客地址:史上最小白之从Attention到Transformer详解(上) 在上篇中我们已经介绍了Encoder-Decoder,Attention机制,self-Attention,今天就来一起看看近两年大火的Transformer。 2.Transformer 原理 2.1 Tr... 阅读详情

(本文按照李宏毅老师课程思路讲解,加入了个人的一些思考)

闲话少说,就问一件事情,大家在搞科研的时候有没有遇到这种情况,就是当前输入维度为N训练一个网络,但后期N的大小可能就变了,这时候普通的MLP或者CNN都会傻眼,但Transformer可以非常完美地解决这个问题,并且效果极佳。

这里给大家分享我整理的87篇Transformer及相关变体的论文仓库、世界上唯一一本全面涵盖Transformer架构的系统书籍!相信对你学习和使用Transformer一定非常有帮助!

图片

章中所有的数据和资料,可添加小助手无偿分享~
扫码添加小助手即可无偿获取~

也可以关注“AI技术星球”公众号,关注后回复“221C”获取。

在介绍Transformer之前,首先要了解其中的一个非常重要的模块,那就是Attention。

Attention

先说要解决的问题,目前很多模型的输入都是一个向量,输出是一个分布或者一个类别:

图片

然而存在以下情况,即输入是多个向量,而且有可能是改变的:

图片

输出的话存在这么几种情况:

1、比如输入是N,输出还是N,例如一个句子中所有的词对应词性的判断;

图片

2、输入是N,输出是1,例如对一段话来判断好坏;

图片

3、输入输出维度不定,例如翻译任务:

图片

例如“This is a cat”和“This is not a cat”两句话,一个4个词一个5个词,都想输入这个模型怎么办呢?这就是Attention想要解决的问题。这里只讨论第一种输出情况,即N个输入N个输出的情况。

在引入Attention之前我们能想到的便是FC全连接的操作,即1个词输入到一个FC中,但由于句子中可能存在同义词的问题(例如“I saw a saw”,前一个saw是动词,后一个是名词),所以需要引入上下文机制:

图片

虽然能用这种window的思想做,但存在很多bug,例如window给多长?给定的window内的信息能不能学到我想要的上下文信息?变长的输入到底怎么解决?......

这时候Self Attention就要来了!言简意赅地总结,Self Attention就是输入几个向量,输出就是几个向量。并且输出的每个向量中,都包含了其余输入向量的信息。如下图:

图片

了解了Self-Attention的实现结果,那么Self-Attention到底是怎么运作的呢?简单来说,可以表示成下面的隐含层的样子:

图片

即每一个都

图片

包含了其他的α的输入信息。当然,具体的实现肯定不是这样的。这里要提到一种Dot-product的方式,可以计算两个向量之间的相关性,如下图:

图片

两个向量经过两个矩阵参数运算后,得到两个向量q和k,经过点乘可以得到二者的联合信息。那么在Self-Attention中,具体的实现方式就是应用的Dot-Product,如下图:

图片

第1个向量与q(query)计算得到的值,分别与其余的向量的k(key)做点积,再经过一个softmax得到最终的权重。

上述的权重可以理解为,其余每个向量的信息对于该向量的权重比例,接下来要利用这个权重对每个向量的信息进行提取,如下图:

图片

以上,

图片

的计算就结束了,是不是很简单?其余的

图片

也是通过这种方式并行计算统一得到的,这里就不再用这种方式展示了。

有了上面的介绍理解起来会很轻松,接下来从矩阵乘法角度再介绍一遍Self-Attention。

上面的方法是一个一个计算出来得到的,但实际计算过程中会用矩阵相乘,其中

图片

可以拼凑起来,如下图所示:

图片

以上我们可以轻易地得到Q,K,V矩阵。

那么对于权重α的计算,可以清晰地用下面的图表示出来(在此不得不提李宏毅老师讲的是真的细,线代的内容都讲):

图片

我们可以发现最终的α矩阵A可以用

图片

表示出来。

至此我们得到了相应的α矩阵,那么最终的b矩阵怎么得到呢?

按照先前所讲的,得到b就是把α的值与v相乘,矩阵表示的话如下图所示:

图片

把刚刚的矩阵乘法概括一下,从Q,K,V得到到最终的b矩阵O,如下图:

图片

这里面只有

图片

是需要学习的参数,其余的都是能计算得到的。这时候发现,即使I的维度发生变化,也只是会导致Q,K,V发生变化,但参数的值并不会发生改变。

对Self-Attention的进阶,是Multi-head-Attention,其实很简单,就是把Self-Attention的query变成多个头,然后自己的头去算自己的值,最后再通过一些方式处理一下,(例如再加入个矩阵相乘,或者拼接,这里就是玄学了),得到最终的

图片

图片

这时候有个非常有趣的问题,那就是输入的所有向量,它们好像并没有位置的关系,也就是输入的向量,没有先输入或者后输入的影响。

最简单的方式,就是在

图片

前面加上一个专属的位置信息

图片

,就可以解决啦:

图片

当然,Self-Attention也存在很多的问题,比较经典的一个就是在做语音处理的时候,由于信息很长,最终会导致A矩阵非常大,这时候就可以人为的限制输入长短影响:

图片

Transformer

提到Transformer,不得不说的一大经典任务就是Seq2Seq的任务,虽然当下ChatGPT等众多模型已经把这种任务玩烂了,但目前值得去学习和优化的依旧没有减少。而Seq2Seq任务不得不提的一个模块,就是Encoder编码和Decoder解码模块。

首先说Encoder部分,其目的就是输入一排向量,再输出一排向量,其实这么一想,不光Self-Attention,RNN等都可以实现。

图片

对于Transformer的Encoder来说,其架构可以转化成下面的样子(非常好理解):

图片

也就是输入一坨子向量,经过一个Block,输出中间向量,再经历n个Block之后,得到最终的输出向量。而每个Block中,应用的便是Self-Attention与FC的结合。

而真正的Block在操作过程中,并不是简单的经过了Self-Attention与FC,而是有一个类似于Resnet残差的操作,还有一个针对特征Norm的操作,如下:

图片

在经过Self-Attention之后会加上之前的向量数据,并经过一个norm,同理FC也是类似的操作。

对比原论文中的操作,我们可以看一下,整个Encoder网络是长这个样子的,其中输入也有Self-Attention中所介绍的位置信息:

图片

下面介绍下Decoder的网络结构,首先是Autoregressive(AT)网络。

图片

首先要将Encoder的输入放到Decoder的网络中,每次输入也都会用到Encoder输出的信息。这里具体怎么放进去的稍后说,Decoder的流程如下:

1、在最开始的时候,Decoder要单独输入一个Start的token(告诉机器,这是这句话最开始的一个表示),然后经过Decoder之后,输出得到一个向量(黄色),这个黄色向量经过Softmax之后,可以得到一个具体的概率值,从而选择相应的字符,比如这里是“机”;

2、把Start tocken和“机”一起输入,这种时候会输出一个“器”;

3、循环往复,直到生成完一整句话。

综上来看,Decoder的输入是有先后顺序的,后一个向量的输出会由前面的向量所决定。

我们这里对比看一下Encoder和Decoder的区别:

图片

其实遮住中间一部分看,Encoder和Decoder的网络基本是类似的,都是经过Attention和FC之后,再加上一点小操作输出。注意这里有一个Mask-Attention的操作,具体方式是这样实现的:

图片

例如计算第二个

图片

的时候,只拿前两个的q去操作,而不用后面的输入了,说白了就是Decoder的过程并不能“看着答案写作业”了,要一个一个往后输入才能得到。

这时候又有一个问题了,那就是Decoder输出到底什么时候结束呢?(输出最终有多长?)简单啊,在输出的向量的softmax里面多加一个值,用来决定是否是End不就完了么:

图片

接下来说另一个Decoder的技术,叫Non-Autoregressive(NAT)。

图片

前面说了,AT解码是一个一个往外输出的,所以会比较耗时,NAT的想法就是一口气输入多个Start,然后一口气输出多个向量,接着再看具体哪个是End,然后找End前面的部分就好,这样做非常的省时。但是,NAT效果往往不如AT。

下面开始详细说,Encoder和Decoder具体是怎么结合的。细心的朋友可以发现,之前中间遮住的部分,其实是有两个输入的:

图片

也就是Encoder的输入要输入到Decoder中两次,为什么呢?下面这幅图说明了这个Cross Attention的原理:

图片

可以发现,Decoder在经过mask版的Attention之后,还会再有一个Attention结构(Cross-Attention)。Decoder 的单个的输出,去生成q,而Encoder中生成的向量,去生成相应的k和v,然后再按照Self-Attention那一套去加权计算,得到一个值,就是当前Decoder单个输入所对应的值。

当然,产生第二个字符之后,操作也是一样的。(生成一个新的q,随后继续操作)

接下来就是玄学时刻:如何训练。首先,我们需要有很多label的数据,比如一组语音,对应着“机器学习”这四个字理论的输出。这时候其实就可以转化成一个分类问题了:

图片

值得注意的是,在Decoder的输入环节,也是输入的真实值,毕竟如果一套试卷给了答案,做完后效果肯定会更好的啊。

针对Transformer来说,还有很多小Trick可以操作。首先就是Copy Mechanism,对于常用的数据,可以直接通过copy的方式生成,从而减小错误率。

再有就是局部最优和全局最优的情况。可能最开始选择最好的,但越往后生成的效果越差,但如果最开始选差一点,后面的效果就会很好,这里可以用Beam Search的操作。

以上基本就是Attention和Transformer相关的最基础的知识了,当然利用Transformer后期操作的方法还有很多,比如经典的GPT、Bert都有用过,有机会再去讲解啦。

图片

章中所有的数据和资料,可添加小助手无偿分享~
扫码添加小助手即可无偿获取~

也可以关注“AI技术星球”公众号,关注后回复“221C”获取。

transformer中QKV的通俗理解(剩女与备胎的故事) 用vit的时候读了一下transformer的思想,前几天面试结束之后发现对QKV又有点忘记了, 写一篇文章来记录一下 参考链接: 哔哩哔哩:在线激情讲解transformer&Attention注意力机制(上)在线激情讲解transformer&Attention注意力机制(上)_哔哩哔哩_bilibiliAttention is all you need介绍 更具体的介绍可以去阅读论文在Attention is all you need这篇文章中提出了著名的Transformer模型Transforme 阅读详情

相关推荐

【机器学习】实验3,贝叶斯垃圾邮件识别(完整代码实现+报告)

电子邮件是互联网的一项重要服务,在大家的学习、工作和生活中会广泛使用。但是大家的邮箱常常被各种各样的垃圾邮件填充了。有统计显示,每天互联网上产生的垃圾邮件有几百亿近千亿的量级。因此,对电子邮件服务提供商来说,垃圾邮件过滤是一项重要功能。而朴素贝叶斯算法在垃圾邮件识别任务上一直表现非常好,至今仍然有很多系统在使用朴素贝叶斯算法作为基本的垃圾邮件识别算法。本次实验数据集来自的中文垃圾邮件数据集,目录解压后包含三个文件夹,其中data目录下是所有的邮件(未分词),已分词好的邮件在data_cut目录下。

高丽大学人工智能硕士在读|专注大模型、RAG、OCR与AI工程实践 5026

带你轻松理解 Transformer(上)

引言 Transformer 模型内部细节很多,本文只主要讲解 Attention 部分和 Self-Attention 部分,如果感兴趣可以查看论文。 什么是 Transformer Transformer 是一个 Seq2Seq 模型,很适合机器翻译任务。不了解 Seq2Seq 模型的,可以看我之前的文章 《Seq2Seq 训练和预测详解以及优化技巧》 它不是循环神经网络结构,而是单纯靠 Attention 、Self-Attention 和全连接层拼接而成的网络结构。 Transforme

王大呀呀的博客 637

GT-Power柴油机瞬态性能仿真与优化——基于EGR-VGT耦合控制策略【附案例】

本文探讨了GT-Power在柴油机瞬态性能仿真与优化中的应用,重点分析了EGR-VGT耦合控制策略的实际效果。通过案例研究展示了如何通过仿真优化提升柴油机的动力响应速度和排放性能,为车辆工程领域的工程师提供了实用的技术参考。

green的博客 763

笔记-Attention机制

带有笔记的文章是最近正在研究的内容,质量有可能很差,只有自己看的懂,所以看的笔记的大致看看就可以,我也正在积累,等感觉没问题了就会重新整理再发一次 1、为什么要引入Attention机制? 计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息“记忆”能力并不高 2、Attenti

lzay的博客 2263

Flink CDC 3.0 详解

Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。Flink CDC 于2023年12月7日重磅推出其全新的 3.0 版本,3.0版本的发布对 Flink CDC 而言具有里程碑的意义,自此 Flink CDC 从捕获数据变更的Flink 数据源正式迈向为以 Flink

奔跑的蜗牛的博客 2639

ROS与UR10e机械臂实战:从零搭建到精准控制

本文详细介绍了如何从零开始搭建ROS与UR10e机械臂的开发环境,包括硬件准备、软件配置、网络设置以及MoveIt!运动控制实战。通过具体的代码示例和常见问题排查,帮助开发者快速掌握UR10e机械臂的精准控制技术,适用于工业自动化和实验室研究场景。

m3n5b7v8c9x的博客 772

transformer的简要解读(应该都能看懂)

本人是学视觉对抗学习的,读论文的时候有论文用到了transformer,所以特地学习一下。博客里没有涉及代码实现,都是基础理论。个人感觉自己写的应该比较易懂吧,适合小白看。

qq_40663469的博客 2万+

2.4G跳频算法 2.4G切信道算法 (简例示意nRF52832)

2.4G跳频算法 nRF52832示例 2.4G自适应信道算法

Peter.Min 956

如何最简单、通俗地理解Transformer

核心组件就是上面所提到的Self-Attention和Feed Forward Networks,但还有很多其他细节,接下来我们就开始逐个结构的来解读Transformer。1. 有监督模型向半监督甚至无监督方向发展数据的规模的增长速度远远超过了数据的标注速度,这也就导致了大量无标签数据的产生。这些无标签的数据并非没有价值,相反,如果找到合适的“炼金术”,将可以从这些海量的数据中获取意想不到的价值。如何利用上这些无标签的数据来改善任务的表现变成了一个越来越无法轻视的问题。

顺其自然~专栏 734

全网最全的AItium Designer 16下载资源与安装步骤

Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。...

WQ的博客 1万+

STM32定时器ARR寄存器详解:从‘水桶接水’到精准测速,你的PWM和编码器都靠它

本文深入解析STM32定时器ARR寄存器的核心原理与应用技巧,从PWM波形生成到编码器测速实战。通过水桶模型和硬件本质的比喻,揭示ARR如何作为定时器的'心跳节拍器',并详细探讨其在动态调频、死区时间配置和高精度PWM中的关键作用。特别针对编码器模式下的ARR配置和溢出补偿算法进行优化建议,帮助工程师提升系统性能和实时性。

weixin_33734785的博客 379

如何最简单、通俗地理解GPT的Transformer架构?

OpenAI 最近开了自家的第一届开发者大会,发布的GPT-4 Turbo和GPTs等成果令人震撼。虽然国内各种大模型马不停蹄,但看了这个发布会,感觉跟ChatGPT的差距又变大了,ChatGPT是真的遥遥领先了。对于许多人来说,理解其背后的核心技术——Transformer模型仍然是一个挑战。您是否曾经好奇,是什么使得GPT能够如此精准地生成文本、回答问题,甚至编写程序代码?但Transform...

fuyipingwml1976124的博客 526

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 791

最简单、通俗地理解GPT的Transformer架构:从零开始编写 Transformer

模型参数 w:w1、w2,b:b,设了初始值# 设置要求计算梯度# 线性回归模型:定义 torch.mm(X, w) + b,mm是矩阵乘法(m:multiply缩写)# 定义损失函数:y_pred=预测值、y=真实值,最简单的 平方误差# 定义梯度下降算法:sgd# params是参数(data 是参数值、grad 是梯度值),lr是学习率,batch是数量# 为什么要除batch?因为这个梯度值,是在batch个数据上累加算的# 注意这里更改param时用的param.data。

2301_78285120的博客 621

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

人工智能之如何最简单、通俗地理解GPT的Transformer架构?

解码器的每一层包含三个主要组件:掩蔽多头注意力子层(防止位置后看)、编码器-解码器注意力子层(将解码器的注意力集中到编码器的输出上)和前馈网络,每个子层后都有残差连接和层归一化。线性层(Linear):解码器的最后输出通过一个线性层,这个层的作用是将解码器层的高维输出映射到一个更大的词汇空间,这个空间的每一个维度对应一个可能的输出单词。在推理阶段,解码器通常一次生成一个词。解码器的每一层也接收上一层的输出作为输入,但解码器的第一层接收的是目标序列的嵌入向量(在训练时是正确的序列,采用教师强制)和位置编码。

人工智能讲师分享前沿技术 173

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

transformer通俗理解

Transformer是一个利用注意力机制来提高模型训练速度的模型。trasnformer可以说是完全基于自注意力机制的一个深度学习模型,因为它适用于并行化计算,和它本身模型的复杂程度导致它在精度和性能上都要高于之前流行的RNN循环神经网络。那什么是transformer呢?你可以简单理解为它是一个黑盒子,当我们在做文本翻译任务是,我输入进去一个中文,经过这个黑盒子之后,输出来翻译过后的英文。那么在这个黑盒子里面都有什么呢?里面主要有两部分组成:Encoder 和 Decoder当我输入一个文本的时候,该文

追光少年的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Transformer通俗笔记:从Word2Vec、Seq2Seq逐步理解到GPT、BERT

我在写上一篇博客《》时,有读者在文章下面评论道:“july大神,请问BERT的通俗理解还做吗?”,我当时给他发了张俊林老师的BERT文章,所以没太在意。直到今天早上,刷到优快云上一篇讲BERT的文章,号称一文读懂,我读下来之后,假定我是初学者,读不懂。(这是),再比如国内张俊林老师的这篇《》,然后你会发现几乎网上关于Transformer/BERT的文章无外乎是以下这几种情况。

结构之法 算法之道 14万+

Transformer通俗理解

输入一句话↓[Embedding 层] → 把每个词变成数字向量↓[位置编码 Positional Encoding] → 告诉模型“词的顺序”↓[编码器 Encoder] → 理解这句话的意思(6 层)↓[解码器 Decoder] → 生成回答(也是 6 层)↓输出回答Fully connected layer(全连接层)把最后的向量变成一个大数组数组的长度 = 词汇表大小(比如 30,000 个词)每个值代表“这个位置出现某个词的概率”步骤中文英文作用1输入文本。

weixin_46081608的博客 956

快速、通俗地理解Transformer

利用 Attention 机制计算每个单词与其他所有单词之间的关联,如当翻译 games 时,“2022” “Beijing” “Winter” 都有较高的 Attention Score,利用这些权重加权表示,放到前馈神经网络中并得到新的表示,就很好的嵌入了上下文的信息,这样的步骤重复几次效果更好。很简单,输入 love 的时候,后续应该输出为 you,但是如果没有mask的情况下,love 后面的 you 和 now 都在为此时的输出提供信息,这显然是不合逻辑的。方法:1、随机初始化;

m0_64711692的博客 1702

transformer中QKV的通俗理解(渣男与备胎的故事)

transformer中QKV的通俗理解(渣男与备胎的故事) Attention is all you need

Weary_PJ的博客 7万+

Transformer之Token的通俗理解

首先解释为什么不能用Encoder-Decoder的模型(原因和GAN是相同的),因为输入和输出是相同的,模型在训练中会什么都不做,导致模型崩溃,这样根本无法解析出词向量。这些语言除了统计学规律,是不具备任何数学计算的能力的,所以,需要利用一定的映射方法,将其映射为数学语言,比如:数字或者矩阵。的维度填充,然后刨除部分维度,实现降维,使得编码结果对语义的信息表达不仅限于维度,还可以通过维度的长度表达。总结一下,就是把单词之类的语言,从one-hot形式的高维表达,通过矩阵变换实现降维,

Soonki的博客 5360

如何通俗理解transformer架构

输入句子→ 一篇文章编码器→ 快速标注重点的编辑团队自注意力→ 用荧光笔标出关联词解码器→ 根据重点写摘要的作家位置编码→ 给每段文字加上页码。

zmhzmhzm的博客 673

Transformer架构通俗例子理解

为避免混淆,先明确关键符号的含义和维度(以输入句子长度n=4为例):符号含义维度(以 “我喜欢吃苹果” 为例)x输入词 ID 序列[4](“我”=101, “喜欢”=324, “吃”=567, “苹果”=890)E词嵌入矩阵PE位置编码矩阵X嵌入 + 位置编码后的向量自注意力 Q/K/V 线性层权重[d_model, d_k×h] = [4, 4](因 h=2,d_k=2,总维度 4)W_O多头注意力输出线性层权重前馈网络线性层权重。

zdl6286389的博客 2264
上一篇: 破防了!这本计算机图形领域最受尊敬天才写的书,居然只需要会乘法就能入门深度学习!
下一篇: 一文详解经典卷积神经网络(LeNet、AlexNet、VGGNet、GoogLeNet、ResNet、DenseNet等)
深度学习机器学习
博客等级 码龄2年 495粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值