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

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

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

相关文章

Golang切片与数组

在Go语言中,切片(Slice)和数组(Array)是两个核心的数据结构,它们在内存管理、灵活性以及性能方面有着显著的区别。接下来将解析Golang中的切片与数组,通过清晰的概念解释、案例代码和实际应用场…

小林Coding_操作系统_读书笔记

一、硬件结构 1. CPU是如何执行的 冯诺依曼模型:中央处理器(CPU)、内存、输入设备、输出设备、总线 CPU中:寄存器(程序计数器、通用暂存器、指令暂存器),控制单元(控制CPU工作&am…

[word] word页面视图放大后,影响打印吗? #笔记#学习方法

word页面视图放大后,影响打印吗? word文档的页面视图又叫普通视图,又叫打印视图,是系统默认的视图,是用户用的最多最常见的视图。 问:怎样打开页面视图? 答:两种方法 方法一、点…

JS 基本语句

函数调用&#xff0c;分支&#xff0c;循环&#xff0c;语句示例。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

【Funny guys】龙年专属测试鼠标寿命小游戏...... 用Python给大家半年了......

目录 【Funny guys】龙年专属测试鼠标寿命小游戏...... 用Python给大家半年了...... 龙年专属测试鼠标寿命小游戏用Python给大家半年了贪吃龙游戏 文章所属专区 码农新闻 欢迎各位编程大佬&#xff0c;技术达人&#xff0c;以及对编程充满热情的朋友们&#xff0c;来到我们的程…

【项目实践03】【布隆过滤器】

文章目录 一、前言二、项目背景三、实现方案1. 谷歌 布隆过滤器2. Redis 布隆过滤器 四、思路延伸1. 布隆过滤器的实现原理2. 布隆过滤器的一些扩展3. 布谷鸟过滤器 五、参考内容 一、前言 本系列用来记录一些在实际项目中的小东西&#xff0c;并记录在过程中想到一些小东西&a…

基于python+控制台的车辆信息管理系统

基于python控制台的车辆信息管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 打印功能菜单、添加车辆信息、删除车辆信息、修改车辆信息、显示车辆信息、退出系统&#xff0c;并且需要接收用户的输入&#xff0c;在根据输入内容调用相应函数实现…

Docker部署Grafana+Promethus监控Mysql和服务器

一、Grafana部署所需资源 Grafana 需要最少的系统资源&#xff1a; 建议的最小内存&#xff1a;512 MB建议的最低 CPU&#xff1a;1 官方文档&#xff1a;https://grafana.com/docs/grafana/latest/getting-started/build-first-dashboard/ 可以看到&#xff0c;我的这台服务…

有了Future为什么还要CompletableFuture?

文章目录 Future 接口理论知识复习Future 接口概述场景描述小结 Future 接口常用实现类 FutureTask 异步任务Future 的作用Futrue 编码测试优缺点分析优点缺点小结 面对一些复杂的任务对于简单的业务场景使用 Future 接口完全 OK回调通知创建异步任务多个任务前后依赖可以组合对…

DFS——连通性和搜索顺序

dfs的搜索是基于栈&#xff0c;但一般可以用用递归实现&#xff0c;实际上用的是系统栈。有内部搜索和外部搜索两种&#xff0c;内部搜索是在图的内部&#xff0c;内部搜索一般基于连通性&#xff0c;从一个点转移到另一个点&#xff0c;或者判断是否连通之类的问题&#xff0c…

[Python] opencv - 什么是直方图?如何绘制图像的直方图?

什么是直方图&#xff1f; 直方图是一种统计图&#xff0c;用于展示数据的分布情况。它将数据按照一定的区间或者组进行划分&#xff0c;然后计算在每个区间或组内的数据频数或频率&#xff08;即数据出现的次数或占比&#xff09;&#xff0c;然后用矩形或者柱形图的形式将这…

C++学习Day03之构造函数和析构函数

目录 一、程序及输出1.1 构造函数1.2 析构函数1.3 构造和析构必须要声明在全局作用域 二、分析与总结 一、程序及输出 1.1 构造函数 构造函数 没有返回值 不用写void 函数名 与 类名相同 可以有参数 &#xff0c;可以发生重载 构造函数 由编译器自动调用一次 无须手动调用 创建…

C语言——Q/编译和链接

目录 一、翻译环境和运⾏环境 二、翻译环境 1、预处理&#xff08;预编译&#xff09; 2、编译 2.2.1 词法分析&#xff1a; 2.2.2 语法分析 2.2.3 语义分析 3、汇编 4、链接 三、运行环境 一、翻译环境和运行环境 在ANSI C 的任何⼀种实现中&#xff0c;存在两个不…

CentOS7局域网内搭建本地yum源

CentOS7.6 局域网内搭建本地yum源 一、背景 客户机房服务器无法直连公网&#xff0c;远程通过堡垒机部署环境&#xff0c;因为机器比较多&#xff0c;最终选择通过安装自定义yum源进行部署。以下为自己部署yum源过程&#xff0c;以备后续使用。 二、准备yum源Packages 网上…

【刷题题解】最长回文子序列

给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列 这道题&#xff0c;一眼动态规划&#xff0c;但是即使动起来也规划…

python_蓝桥杯刷题记录_笔记_全AC代码_入门3

前言 记录我的解法以及笔记思路&#xff0c;谢谢观看。 题单目录 1.P2141 [NOIP2014 普及组] 珠心算测验 2.P1567 统计天数 3.P1055 [NOIP2008 普及组] ISBN 号码 4.P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here 5.P1308 [NOIP2011 普及组] 统计单词数 6.P1047 […

深度学习之循环神经网络进阶

这一讲我们学习如何实现一个循环神经网络的分类器&#xff1a; 我们要解决的问题是名字分类&#xff0c;我们根据名字找到其对应的国家。 上一讲我们介绍了循环神经网络。 我们在处理自然语言的时候我们通常是以上这种方式&#xff0c;我们在处理单词的时候&#xff0c;通常…

一文彻底搞懂MySQL基础:B树和B+树的区别(简洁版)

文章目录 1. 节点结构2. 插入和删除3. 查询4. 性能5. 适用场景6.关于 B树和 B树的常见问题6.1. B树和B树的区别是什么&#xff1f;6.2. 什么情况下应该使用 B树&#xff1f;6.3. 什么情况下应该使用 B树&#xff1f; B树和B树都是多路搜索树&#xff0c;它们都用于数据库索引中…

命令注入漏洞原理以及修复方法

漏洞名称 &#xff1a;命令注入 漏洞描述&#xff1a;Command Injection&#xff0c;即命令注入攻击&#xff0c;是指由于Web应用程序对用户提交的数据过滤 不严格&#xff0c;导致黑客可以通过构造特殊命令字符串的方式&#xff0c;将数据提交至Web应用程序中&#xff0c;并利…

一文讲明Jetpack中的图片组件

Jetpack Compose系列(5) - 图片组件 Jetpack Compose中的常用图片组件有两个&#xff1a;Icon和Image。从命名上就不难看出这两个组件在内容呈现上就是负责图形和图片相关。 需要说明的是&#xff0c;Compose获取资源方式有四种&#xff1a; 文本 -> stringResource(R.s…