Transformer实战-系列教程1:Transformer算法解读1

🚩🚩🚩Transformer实战-系列教程总目录

有任何问题欢迎在下面留言

Transformer实战-系列教程1:Transformer算法解读1
Transformer实战-系列教程2:Transformer算法解读2

现在最火的AI内容,chatGPT、视觉大模型、研究课题、项目应用现在都是Transformer大趋势了

名称解释:

  • Transformer:一个基于Encoder-Deocder使用纯注意力机制的基础网络
  • embbeding:词嵌入,将一个单词(或者汉字)转化为一组向量
  • Positional Encoding:位置编码
  • Multi-Head Attention:多头注意力机制
  • Add:残差连接
  • Norm:Normalization,主要分为Batch Normalization和Layer Normalization,一个是对批做归一化,一个是对层做归一化
  • Feed Forward:全连接神经网络,加上激活函数以及Dropout
  • Encoder-Deocder:编码器-解码器,编码器将原始输入转化为特征,解码器将特征转化为输出

1、传统的RNN

在这里插入图片描述
Transformer是基于RNN改进提出的,RNN不同于CNN、MLP是一个需要逐个计算的结构来进行分类回归的任务,它的每一个循环单元不仅仅要接受当前的输入还要接受上一个循环单元的输出,因此它被提出是为了提取带有先后关系、时序信息的特征的。

因此在很长的一段时间,RNN以及RNN的变体LSTM、GRU都被经常用来时间序列分析、文本分析的任务。

如图所示 x 0 x_0 x0经过一个循环单元的计算,得到了 h 0 h_0 h0,而 h 1 h_1 h1 h 0 h_0 h0 x 1 x_1 x1经过一个循环单元的计算得到的结果,当然 h 0 h_0 h0的计算不仅有 x 0 x_0 x0还有一个初始化的h。因此这种计算方式使得 h 1 h_1 h1包含了 x 0 x_0 x0 x 1 x_1 x1的特征, h 2 h_2 h2包含了 x 0 x_0 x0 x 1 x_1 x1 x 2 x_2 x2的特征, h t h_t ht包含了前面所有的特征

2、RNN的局限性

RNN的每一个循环单元的计算,都需要前面的所有循环单元计算结束后才可以进行,比如 h 1 h_1 h1的计算需要等 h 0 h_0 h0计算完成后才可以进行,后面同理。当输入序列比较长的时候,对于前面的信息容易遗忘,比如 h t h_t ht可能已经对 h 0 h_0 h0 h 1 h_1 h1的信息已经包含的较少了(当序列比较长的时候)。还有RNN没有对每一个输入的重要性进行筛选,可能我们最后需要的结果在0到t个输入中,有些比较重要,有些重要性比较低,而有些则根本不重要。

因此可以总结出RNN的三大缺陷:

  1. 不能并行计算,只能串行计算,效率低
  2. 容易遗忘早期信息
  3. 不能计算各个输入信息的重要性

3、Attention与self-Attention

注意力机制就是用来计算各个输入信息的重要性的一种方法,出现过大量的CNN、RNN结合注意力机制去做CV、NLP任务,2017年一篇论文《Attention is all you need》把注意力机制带到了高潮,因为它是一种纯注意力机制的架构,这个架构被命名为Transformer,后面的故事大家都已经很熟悉了。

在这里插入图片描述

所谓的Attention就是让机器学习注意点那些更有价值的信息

比如这两句句话:
The animal didn’t cross the street because it was too tired.
The animal didn’t cross the street because it was too narrow.

如果是这来那个句话对比,很显然,每个词对一句话表达的含义的重要性很显然不同,而且每一个词与每一个词之间的相关性也显然不同,比如第一句话animal和tired的相关性大,第二句话street 和narrow相关性大,因为它们修饰的词都不一样,很显然tired是修饰animal的,narrow是修饰street的。

每个词之间的相关性各不相同,使用Attention将这种相关性计算出来,就被称为Attention机制

每个词之间都存在相关性,那一个词自己与自己之间也是有相关性的,而且这个相关性最大的,考虑了自己与自己之间的关系的Attention被称为self-Attention,自注意力机制。
在这里插入图片描述

  1. 假设这个句话有N个词
  2. 第一个词都与所有的词计算相关性,可以得到N个相关系数
  3. N个相关系数经过softmax可以得到N个权重
  4. N个权重再与所有的词的特征进行重构,得到N个特征
  5. 用这N个特征代替原本第一个词的特征
  6. 第二个词也用同样的方式进行计算
  7. 将原本所有的特征都进行重构

这个权重是怎么计算的呢?肯定是通过学习得到的

4、self-Attention如何计算

在这里插入图片描述

如图所示,计算Thinking与Machines之间的相关性

  1. Thinking和Machines各自embbeding成一个向量(可以是预训练的词嵌入), x 1 x_1 x1 x 2 x_2 x2
  2. x 1 x_1 x1经过 W Q W^Q WQ W K W^K WK W V W^V WV 3组可学习参数,生成3个特征 q 1 q_1 q1 k 1 k_1 k1 v 1 v_1 v1
  3. 同理, X 2 X_2 X2生成 q 2 q_2 q2 k 2 k_2 k2 v 2 v_2 v2
  4. q 1 q_1 q1 q 2 q_2 q2和拼接得到Q,K、V同理,这就是Q(Query)K(Key)V(Value)的来源
  5. q 1 q_1 q1 k 1 k_1 k1内积得到一个值 s 1 s_1 s1 q 1 q_1 q1 k 2 k_2 k2内积也得到一个值 s 2 s_2 s2,这个s表示的是Score分数的意思
  6. s 1 s_1 s1 s 2 s_2 s2都要除以一个数 d k \sqrt{d_k} dk 再经过softmax,得到两个 w 1 w_1 w1 w 2 w_2 w2,这两个权重分别乘以 v 1 v_1 v1 v 2 v_2 v2后再相加,得到 z 1 z_1 z1
  7. 同理 q 2 q_2 q2 k 1 k_1 k1 k 2 k_2 k2也经过这样的计算得到 z 2 z_2 z2 X 1 X_1 X1 X 2 X_2 X2就这样重构成了 z 1 z_1 z1 z 2 z_2 z2

这就是两个特征之间进行一次self-Attention计算的结果,实际任务中不可能只有两个特征相互计算,可能是10个100个等,那么同样也是这样的计算方式,比如 q 1 q_1 q1就要和 k 1 k_1 k1 k 2 k_2 k2、…、 k 100 k_{100} k100计算内积得到100个分数,再除以对应的 d k \sqrt{d_k} dk 后经过softmax得到100个权重,100个权重再分别和 v 1 v_1 v1 v 2 v_2 v2、…、 v 100 v_{100} v100相乘后再相加就得到了 z 1 z_1 z1

其中 d k d_k dk表示的是 q 1 q_1 q1 k 1 k_1 k1这些向量的长度,所有的q、k、v的维度(一般用768比较多)都是一样的

为什么要除以 d k \sqrt{d_k} dk 呢,因为不能让分值随着向量维度的增大而增加

因为 z 1 z_1 z1 z 2 z_2 z2、…、 z n z_{n} zn的计算都是可以同时进行的,所以这种并行的计算方式相比RNN,极大的提高了运行速度,此外也不会产生遗忘早期信息的问题,而经过多次计算损失的训练, W Q W^Q WQ W K W^K WK W V W^V WV 与经过softmax计算的权重都会使得所有的z能够更好的关注在原始输入中( x 1 x_1 x1 x 2 x_2 x2、…、 x n x_{n} xn)与自己相关性比较大的的输入。这完美的解决了RNN存在的3个问题

Transformer实战-系列教程1:Transformer算法解读1
Transformer实战-系列教程2:Transformer算法解读2

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识webpack(一)概念、入口配置、输出配置、loader等

目录 (一)概念 webpack的依赖图 (二)webpack的基本使用 (三)webpack的配置文件 1.入口(entry)配置 2.输出(output)配置 (三)loader 1.css文件处理 (1)安装css-loader和style-loader (2)在webpack.config.js中配置loader 2.less文件处理 3.postcss的使用 (1)安装…

mysql索引有哪些,如何分类

前言 按数据结构分类可分为:Btree索引、Hash索引、Full-text索引。 按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。 按字段特性分类可分为:主键索引、普通索引、前缀索引。 按字段个数分类可分为&#xff1…

C++拷贝构造函数、赋值运算符重载

1.拷贝构造函数 拷贝构造函数的写法如图所示 调用方式如下 接下来我来说说它的特征 1.1特征 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。 拷贝构造函…

推荐系统(Recommender Systems)

一、问题形式化 在接下来的内容中,我将开始讲解推荐系统的一些理论知识。我们从一个例子开始定义推荐系统,假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分 前三部电影是爱情片,后两部是…

GPT用来润色论文\生成完整长篇论文\进行AI绘图,真的太香了!

详情点击公众号:技术科研吧 链接:GPT用来润色论文\生成完整长篇论文\进行AI绘图,真的太香了! 一:AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百…

歌声悠扬如往昔

有一首歌 - 朱晓琳(网易云单曲) 作词 : 陈彼得作曲 : 陈彼得有一首歌我想起你那时候微风轻轻有一首歌我想起你你的感觉温馨有多少的欢笑就有多少的忧伤 愿时光在这里停住(好景不常在)歌声悠扬如往昔哦哦哦咿咿咿有一首歌我和你词意朦胧旋律依稀唱一首歌…

云端录制直播流视频,上传云盘

前言 哪一天我心血来潮,想把我儿子学校的摄像头视频流录制下来,并保存到云盘上,这样我就可以在有空的时候看看我儿子在学校干嘛。想到么就干,当时花了一些时间开发了一个后端服务,通过数据库配置录制参数,…

Vue引入Axios

1.命令安装axios和vue-axios npm install axios --save npm install vue-axios --save 2.package.json查看版本 3.在main.js中引用 import axios from axios; import VueAxios from vue-axios; Vue.use(VueAxios,axios) 4.如何使用 (初始化方法) 将下列代…

微信小程序实现时间轴效果

目录 引言时间轴效果的应用场景微信小程序的优势时间轴效果的设计思路时间轴界面布局数据结构设计实现时间轴效果WXML结构设计WXSS样式设计JavaScript逻辑实现说明引言 时间轴效果的应用场景 时间轴效果作为一种独特且直观的信息展示形式,已经被广泛应用于各种场景中,提供了…

2023年最受欢迎的4款绘图软件全面评测!

无论你是一个专业的插画家,还是一个有创造力的人,想要随时记录生活的灵感,现在你只需要拿起平板电脑或打开电脑浏览器来描述你脑海中的图片。在这篇文章中,我们选择了四个强大、方便和易于使用的绘图软件,其中一个必须…

【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++)

文章目录 1. 前言2. 算法例题46.全排列78.子集 1. 前言 dfs问题 我们已经学过,对于排列、子集类的问题,一般可以想到暴力枚举,但此类问题用暴力解法 一般都会超时,时间开销过大。对于该种问题,重点在于尽可能详细的 画…

【python】pyqt6信号与槽的代码与designer设置方法

pyqt6信号与槽的作用 整体过程 对象(控件)接收到一个信号(类似clicked这样的函数),就会对接受者(自身或者其他控件)发出一个我被点击了的信息,然后这个接受者就会执行槽&#xff0…

计算机网络_1.6.3 计算机网络体系结构分层思想举例

1.6.3 计算机网络体系结构分层思想举例 1、实例引入(用户在主机中使用浏览器访问web服务器)2、从五层原理体系结构的角度研究该实例3、练习题 笔记来源: B站 《深入浅出计算机网络》课程 本节通过一个常见的网络应用实例,来介绍计…

代码混淆技术综述与优化方法

摘要 本文介绍了代码混淆的概念和目的,并提供了Python代码混淆的宏观思路。同时,还介绍了一种在线网站混淆Python代码的方法,并给出了混淆前后的示例代码。 引言 在当今信息时代,软件代码的保护显得尤为重要。代码混淆是一种常…

ReentrantLock相较于synchronized有哪些区别(一)?

ReentrantLock特点 相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量 与 synchronized 一样,都支持可重入 基本使用语法如下: public class Test {public static void main(String[] args) {Reentran…

第十一章[文件系统]:11.2:文件的复制/删除/移动

一,相关文档: os模块: os --- 多种操作系统接口 — Python 3.12.1 文档源代码: Lib/os.py 本模块提供了一种使用与操作系统相关的功能的便捷式途径。 如果你只是想读写一个文件,请参阅 open() ,如果你想操作文件路径,请参阅 os.path 模块,如果你想读取通过命令行给出的所…

Java GC-常见垃圾回收器

目录 前言一、垃圾回收器分类二、垃圾回收器介绍1、Serial 收集器2、ParNew 收集器3、Parallel Scavenge 收集器4、Serial Old 收集器5、Parallel Old 收集器6、CMS 收集器(多线程标记清除算法)7、G1 收集器 三、项目中垃圾收集器选型 前言 Java的垃圾回…

蓝桥杯每日一题-----数位dp

前言 今天浅谈一下数位dp的板子,我最初接触到数位dp的时候,感觉数位dp老难了,一直不敢写,最近重新看了一些数位dp,发现没有想象中那么难,把板子搞会了,变通也会变的灵活的多! 引入…

如何以管理员身份删除node_modules文件

今天拉项目,然后需要安装依赖,但是一直报错,如下: 去搜这个问题会让把node_modules文件先删掉 再去安装依赖。我在删除的过程中会说请以管理员身份来删除。 那么windows如何以管理员身份删除node_modules文件呢? wi…

Python绘制热力图

最近投SCI论文的时候,有些实验结果需要热力图展示,所以专门试了一下如何用python绘制热力图,发现简单好用,下面分享给大家具体方法。 一、安装python库 需要安装pandas、seaborn、matplotlib安装包依赖,均用pip一键安…