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

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

RNN_2">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包含了前面所有的特征

RNN_11">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,得到两个权重,这两个权重分别乘以 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的维度都是一样的

为什么要除以 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个问题

5、Multi-head机制

在4中我们的输入是X( x 1 x_1 x1 x 2 x_2 x2、…、 x n x_{n} xn)经过一次self-Attention计算后得到Z( z 1 z_1 z1 z 2 z_2 z2、…、 z n z_{n} zn),这可以当成是单头注意力机制。

而多头注意力机制,假如是8头,输入X,同时生成8个Z,即有 Z 0 Z_0 Z0 Z 1 Z_1 Z1、…、 Z 7 Z_7 Z7,而每一个Z的计算都是同时计算和生成的,每一个Z对应的 W Q W^Q WQ W K W^K WK W V W^V WV 可学习参数与生成Q、K、V还有经过softmax计算相关性的权重都是不一样的,而这8个Z拼接在一起再经过一层全连接生成新的Z,这个新的Z的维度和原来的Z的维度可以相同也可以不相同

不同的注意力结果,得到的特征向量表达也不相同

所以Multi-head机制实际上就是将self-Attention堆叠多层


http://www.niftyadmin.cn/n/5359467.html

相关文章

excel怎么设置密码?轻松保护您的工作表

在数字化时代,数据的安全性显得尤为重要。excel作为我们日常工作中广泛使用的办公软件,其中可能包含了大量的敏感数据。为了确保这些数据不被未授权的人访问,本文将为您详细介绍excel怎么设置密码,从而有效地保护您的数据安全。 方…

Python代码重构库之rope使用详解

概要 Python是一门强大的编程语言,但在大型项目中,维护和重构代码可能会变得复杂和困难。为了提高开发人员的效率和准确性,有许多工具可用于辅助代码重构和智能代码补全。其中之一是Python Rope。 Python Rope是一个用于Python编程语言的强大工具,它提供了丰富的功能,包…

Typora导出html文件图片自动转换成base64

Typora导出html文件图片自动转换成base64 一、出现问题二、解决方案三、编码实现3.1.创建Java项目3.2.代码3.3.打包成Jar包 四、如何使用endl 一、出现问题 typora 导出 html 的时候必须带有原图片,不方便交流学习,文件太多显得冗余,只有将图…

sql指南之null值用法

注明:参考文章: SQL避坑指南之NULL值知多少?_select null as-CSDN博客文章浏览阅读2.9k次,点赞7次,收藏21次。0 引言 SQL NULL(UNKNOW)是用来代表缺失值的术语,在表中的NULL值是显示…

【HTML 基础】多媒体标签

文章目录 1. <audio>2. <video>3. <iframe>4. <canvas>结语 在现代网页中&#xff0c;多媒体元素是提升用户体验的重要组成部分。HTML 提供了一系列多媒体标签&#xff0c;如 <audio>, <video>, <iframe>, <canvas> 等使得网页…

前后端分离,RSA加密传输方案

1.原理 RSA是一种非对称加密算法。通过生成密钥对&#xff0c;用公钥加密&#xff0c;用私钥解密。对于前后端分离的项目&#xff0c;让前端获取到公钥对敏感数据加密&#xff0c;发送到后端&#xff0c;后端用私钥对加密后的数据进行解密即可。 2.实现 RSA工具类&#xff1…

从0开始搭建、上传npm包

从0开始搭建、上传npm包 1、上传一个简单获取水果价格的包创建 vite 项目在项目根目录 src 文件夹中创建 index.ts 文件&#xff0c;文件内容如下&#xff1a;在 main.ts 文件中导入、导出上面创建的方法创建 vite.config.ts 配置文件&#xff0c;文件内容如下配置 package.jso…

前端自己整理的学习面试笔记

简介 以下是本人一年多整理的前端学习笔记&#xff0c;现汇总分享给大家&#xff0c;很多问题都是面试必问的 更多学习资源&#xff0c;可以点击我获取更多 1 js数据类型 原始类型&#xff1a; null undefined number string boolean Symbol BigInt 引用类型&#xff1a; 对…