Transformer原理

news2024/11/20 1:51:02

在《机器学习综述》中大致罗列人工智能常见算法,近些年深度学习发展快速,其中Transformer为甚,其英文的意思是变形金刚,对的就是我们看电影变形金刚的意思。Transformer是大语言模型的基础,比如现在常见的GPT、Bert、PaLM等大模型。Transformer概念是由谷歌在2017年《Attention is All You Need》首次提出。它提出了sequence to sequence with self-attention机制,利用attention解决RNN等长文本无法并行计算。


4a10218b39bfc5c373684fa976d53485.jpeg


参考李宏毅的视频,来全面介绍一下Transformer的原理。


1 背景


在transformer出现之前,一般采用的是基于RNN(包括其变种LSTM、GRU等)或CNN的encoder-decoder框架。

e03987fe5c840c28aa4cd3c0b7565fdb.jpeg


由于RNN模型是按照时间顺序处理文本(如上图),无法并行计算,在长文本中处理中经常出现梯度消失和爆炸问题,同时需要大量内存维护隐藏状态。

d74a0838954b2f7840389df9e9af7fe6.jpeg


后面也有人使用CNN去做文本并行计算(如上图),但是CNN缺少长时依赖建模能力,很难捕捉长距离的语义关系。


2 Transformer架构应运而生4ff9798fdf68de6c1ff93fc7133e64aa.jpeg


Transformer架构包括编码器和解码器2部分。


2.1 输入向量化
2.1.1 词向量

首先对输入文本进行向量化。计算机无法识别字符,只识别数字,将现实生活中的文字映射成计算机能够识别的向量。


2.1.2 位置向量


由于是并行计算,文本的顺序看错是被打乱了,为了让同个词在不同文本中的含义不一样,将位置向量考虑进来,不是简单将2个向量相加,而是进行连接串起来。

f1a32a2e1fc8936ba91b873b1b294205.jpeg


常见的位置向量有人工预设和自学习方式。


2.2 自注意力机制


在Encoder和Decoder机制中都有Attention机制,何为自注意力机制,自注意力机制实际上是想让机器注意到整个输入中不同部分之间的相关性,能够专注输入的不同部分,正如人类在处理信息会更加关注某些细节和词语。注意力机制是基于三个向量运作的:


5ee81c5be50e8e23768cefcd4a95543c.jpeg

查询(Queries):取匹配其他部分的作用

键(Key):用来被匹配的

值(Values):被抽取出来的信息

c45cff252c782f710f115d2c0410cca6.jpeg


接下来,将每个Query去对每个Key做Attention,得到一个分数,决定了模型对输入各个部分的关注度。通过Softmax函数之后,得到正则化的关注评分:

bc00e28d2c9d275d576967c24f1e3d3c.jpeg


关注度与每个抽取信息作乘积求和,得到输出的第一个向量b1,产生b1已经看到所有输入,并且跟所有输入有不同关注,比如,需要不关心某i个位置输入,只要将a1,i设置为0。

6a146266294a7ee344f42068cc7999a8.jpeg


参考上述的计算逻辑,可以计算出每个位置的输出向量(注意这个过程可以并行),而RNN生成必须按照a1、a2、a3、a4顺序计算。这个也是为什么Transformer在速度,伸缩性上较RNN来说要好很多。


2.3 多头注意力机制


所谓多头注意力机制,是基于上述注意力机制,分化出多个q、k、v,如下图所示,以2个头为例。

af5ba7e11db75baf834ca70e96757b60.jpeg


为啥要做多头呢?在文章《Attention Is You Need》中提到,多个头为的是可以有多个关注点,每个关注点关注的内容不一样。

bd8bb94cee80e4e6c2c562ab7157179d.jpeg
2.5 Encoder架构


在了解向量化和注意力机制之后,我们来进一步剖析Transformer中的Encoder架构。

0ee182bb902a760f10e9eb65876529a6.jpeg


Muli-Head Attention就是上面介绍的多头注意力机制,在注意力机制层后,多了一个Add&Norm层,再进行全链接层,最后再来一个Add&Norm层,其中Add&Norm层就是输入+输出再进行Layer Norm结果。这样Encoder架构可以叠加N个。


2.6 Decoder架构


Transformer Decoder与Encoder最大不同之处在于Decoder有两个注意层。

d903c4bbcd94b633a7e003891bcbfd3f.jpeg


Masked Multi-head self-attention layer: 确保在每个时间的词语是基于过去的输出和当前的预测词语。

c49f4a0356c0809c3a9142e843cf18f8.jpeg


Encoder-decoder attention layer:以解码器的中间表示作为 queries,对 encoder stack 的输出 key 和 value 向量执行 Multi-head Attention。通过这种方式,Encoder-Decoder Attention Layer 就可以学习到如何关联来自两个不同序列的词语。


2.7 Encoder和Decoder如何产生关系


主要是使用了cross attention机制:

7838d5c004caabc16d8c676603f382b4.jpeg


decoder生成queries,对 encoder stack 的输出 key 和 values 向量执行 Multi-head Attention。通过这种方式,Encoder-Decoder Attention Layer 就可以学习到如何关联来自两个不同序列的词语,例如两种不同的语言。解码器可以访问每个 block 中 Encoder 的 keys 和 values。

02f6decdcff0f52ae56eb98141147bef.jpeg3 应用场景


transformer不仅仅可以应用于文本领域:

(1)语音

(2)图像识别(CNN是特殊的self-attention)

(3)NLP(文本摘要、文本情感等)

(4)GNN(图网络)

(5).......

等等,为很多领域提供了新的思路和工具,Transformer在人工智能有一统模型江湖的感觉。

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

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

相关文章

详解Python中%r和%s的区别及用法

首先看下面的定义: %r用rper()方法处理对象 %s用str()方法处理对象 函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(如果没有等价的语法,则会发生SyntaxError 异常) 某对象没有适于人…

数据库增删改查以及联合查询——数据库——day1

今天学习了数据库的知识 首先数据库分为关系型数据库和非关系型数据库 关系型数据库:Mysql OracleSqlServerSqlite 非关系型数据库:RedisNoSQL我们首先来看一下数组、链表、文件、数据库的区别 数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失) …

JS数组相关知识

获取数组的最大值/最小值&#xff1a; let arrary [2,5,4] let max arrary[0] for(let i 0;i<arrary.length;i){if(arrary[i]>max){max arrary[i]} }console.log(max);//查询数组最小值let arr [2,21,34,23,45] let min arr[0] for(let i 0;i<arr.length;i){if…

“我快无聊死了”用英语怎么说?柯桥英语口语学习,成人零基础学外语

每日一句 Im bored to death. 我快无聊死了。 单词解析&#xff1a; bored / bɔːd / adj.无聊的&#xff0c;厌倦的 bored to d15857575376eath&#xff1a;指非常无聊或厌烦&#xff0c;达到了极点的程度。 "bored" 和 "boring" 都与无聊相关&#…

蓝桥杯练习系统(算法训练)ALGO-980 斐波那契串

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;10.0s Java时间限制&#xff1a;30.0s Python时间限制&#xff1a;50.0s 问题描述 斐波那契串由下列规则生成&#xff1a;   F[0] "0";   F[1] "1";   F[n] F[n-1] F[n-2]…

AI人工智能改变项目管理及控制的5种方式,最后一个你认同吗?

前言 斯蒂芬霍金说&#xff1a;“AI is likely to be either the best or the worst thing to happen to humanity. 人工智能可能是发生在人类身上的最好或最坏的事情”。根据Gartner的说法&#xff0c;它将是前者。它预测到2020年&#xff0c;人工智能将减少1万个就业机会&am…

软件设计师15--进程资源图

软件设计师15--进程资源图 考点1&#xff1a;进程资源图例题&#xff1a; 考点1&#xff1a;进程资源图 例题&#xff1a; 1、在如下所示的进程资源图中&#xff0c;D&#xff09;。 A、P1、P2、P3都是非阻塞节点&#xff0c;该图可以化简&#xff0c;所以是非死锁的 B、P1、…

Linux:1_常见指令以及权限理解(上)

常见指令以及权限理解 一.补充知识 为方便初学者更好的理解Linux系统,这部分将对比windows系统补充一部分必要知识1 2 3 4 5 6 二.补充指令 1. 重新认识指令: 指令本质都是程序 —指令、程序、可执行程序都是一回事(都是文件内容属性)指令就是程序 … 安装和卸载是在把可…

【Axure高保真原型】下拉列表切换图表

今天和大家分享通过下拉列表动态切换统计图表的原型模板&#xff0c;我们可以通过下拉列表选择要显示的图表&#xff0c;包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图&#xff1b;而且图表数据可以在左侧表格中动态维护&#xff0c;包括增加修改…

深入理解Vue3中利用mitt:实现轻量级事件监听与触发

深入理解Vue3中利用mitt&#xff1a;实现轻量级事件监听与触发 摘要&#xff1a;本文将介绍如何在Vue3中利用mitt库实现轻量级的事件监听与触发。我们将详细介绍mitt库的特性和使用方法&#xff0c;并通过实际示例展示如何在Vue3组件中应用mitt。 一、引言 在前端开发中&…

LeetCode24.两两交换链表节点

24.两两交换链表中的节点 这道题&#xff0c;重点在于理清楚各个指针之间的关系。 链表的题一定要注意断链和连接的顺序&#xff0c;有时候需要申请新的节点来保存某个节点&#xff0c;防止断链 24。题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交…

Selenium Web自动化测试——基于unittest框架的PO设计模式

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

回归测试,有什么高效的测试方法?

什么是回归测试&#xff1f; 回归测试&#xff08;Regression testing&#xff09; 指在发生修改之后重新测试先前的测试以保证修改的正确性。理论上&#xff0c;软件产生新版本&#xff0c;都需要进行回归测试&#xff0c;验证以前发现和修复的错误是否在新软件版本上再次出现…

虚拟机Centos8登陆之后又弹回到登陆界面

今天开机发行&#xff0c;虚拟机Centos登陆之后又弹回到登陆界面&#xff0c;在网上一通搜索之后&#xff0c;发现Centos7正确输入账号密码后&#xff0c;循环进入输入账号密码界面&#xff08;情况一设置错误PATH&#xff09;&#xff0c;以及进入单用户模式_centos一直卡在用…

120.PyQt5_QPainter_图形绘制控件

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

第6章:6.1 文本格式化 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 在数据处理与报告生成的过程中&#xff0c;我们经常需要将数据转…

AI“造神运动”终结,杀死,重生

AGI回归本质&#xff0c;百亿美金创业机会涌现。 “专注AI技术迭代会让我焦虑&#xff0c;关注业务我不会焦虑&#xff0c;有些问题十年前存在十年后还在&#xff0c;我现在就明确不卷模型&#xff0c;只思考如何让产品能自我‘造血’。” 一位正卷在AI创业洪流里的硅谷创业者…

重学SpringBoot3-WebMvcConfigurer接口

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-WebMvcConfigurer接口 WebMvcConfigurer基本信息为什么WebMvcConfigurer能配置底层行为实现WebMvcConfigurer举例1. 自定义格式化器和转换器2. 添加拦截…

AI新工具(20240313) 世界上第一个完全自主的AI软件工程师Devin 已经开始接外包了;又一个开源本地知识库问答系统

1: Cognition AI Devin 世界上第一个完全自主的AI软件工程师Devin 已经开始接外包了 Devin是世界上第一个完全自主的AI软件工程师&#xff0c;具备长期推理和规划的能力&#xff0c;能够执行复杂的工程任务&#xff0c;包括学习、修复错误、与用户实时合作等。Devin可以学习并…

200W年薪的大佬 随手丢给我“Spring速成宝典”看完这些知识点直接定级P7

面试官&#xff1a;答的很好&#xff0c;最后一个问题&#xff1a;如果没有Spring&#xff0c;你打算怎么开展工作&#xff1f; 这个思考了几分钟后&#xff0c;程序员小建是这么回答的&#xff1a;Spring的核心源码&#xff0c;比如&#xff1a;IOC、AOP、Spring事务、MVC原理…