BEV(0)---Transformer

news/2024/11/24 9:48:04/

1 Transformer

Transformer是一个Sequence to Sequence model,特别之处在于它大量用到了self-attention,替代了RNN,既考虑了Sequence的全局信息也解决了并行计算的问题。
在这里插入图片描述

1.1 self-attention:

①. 输入x1 ~ x4为一个sequence,每一个input (vector)先乘上一个矩阵W得到embedding,即向量a1 ~ a4。将每个a1 ~ a4分别乘上3个不同的可学习参数矩阵,Wq, Wk,Wv,次时每个向量ai分别得到3个向量qi,ki,vi
在这里插入图片描述
②. 拿每个query q 对每个key k做attention, 获得α:
d是q跟k的维度。因为q.k的数值会随着dimension的增大而增大,所以要除以dimension的开方,相当于归一化的效果。在这里插入图片描述
在这里插入图片描述
③. 将计算结果α1i分别进行softmax,同时与其对应的vi进行相乘,最终将他们结果相加,即可获得bi,此时bi中考虑到了整个sequence的信息。

在这里插入图片描述在这里插入图片描述

矩阵计算形式如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 Multi-head self-attention:

还有一种multi-head的self-attention,以2个head的情况为例:
①. 由ai生成的qi进一步乘以2个转移矩阵变为qi1和qi2 ,同理由ai生成的ki 进一步乘以2个转移矩阵变为ki1和 ki2,由ai生成的vi进一步乘以2个转移矩阵变为vi1和vi2
②. 接下来qi1与ki1做attention后与vi1相乘,qi1与kj1做attention后与vj1相乘,两者相加获得bi1。同理得到bi2
③. 将bi1和bi2concat起来,再乘以一个转移矩阵调整维度,使之与bi1和bi2的维度一致。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.3 Positional Encoding:

1.3.1 Positional Encoding目的

为了给self-attention添加位置信息,给每一个位置规定一个表示位置信息的向量 ei,让它与ai 加在一起之后作为新的ai参与后面的运算过程,但是这个向量ei是由人工设定的,而不是神经网络学习出来的。每一个位置都有一个不同的 ei

在这里插入图片描述

1.3.2 Positional Encoding公式

PE:位置编码结果
pos: 输入向量在sequence中的位置
2i、2i+1:Positional Encoding的维度,i的取值范围[0, 1, 2…, dmodel/2)。

示例:pos=1时:
PE(1) = [sin(1/100000/512), cos(1/100000/512), sin(1/100002/512), cos(1/100002/512), …, sin(1/10000512/512), cos(1/10000512/512)]
在这里插入图片描述

1.3.3 公式优势:

①. 保证了每个位置有唯一的positional encoding。
②. 使PE能够适应比训练集里面所有句子更长的句子,假设训练集里面最长的句子是有 20 个单词,突然来了一个长度为 21 的句子,则使用公式计算的方法可以计算出第 21 位的 Embedding。
③. 可以让模型容易地计算出相对位置,对于固定长度的间距 ,任意位置的PEpos+k 都可以被PEpos的线性函数表示

1.4 self-attention 与RNN、CNN的对比

1.4.1 self-attention与RNN

单向RNN只能获得前面输入的信息对于后面输入的信息是未知的,双向RNN改变了单向RNN的这一劣势,但仍然是串行运算,而self-attention不仅可以获得全局信息,同时可以并行运算。

1.4.2 self-attention与CNN

self-attention去处理一张图片时,使用的是某一个pixel产生的query与其余所有pixel产生的key进行相关度计算,这考虑到了全局信息,而CNN则只考虑到了卷积核内部的pixel之间的信息。所以CNN可以看作是一种简化版本的self-attention。
self-attention可以看作感受野自适应的CNN,因此其更flexible,因而需要的训练数据量也更多。
在这里插入图片描述在这里插入图片描述


http://www.ppmy.cn/news/69543.html

相关文章

什么是SpringBoot自动配置

概述: 现在的Java面试基本都会问到你知道什么是Springboot的自动配置。为什么面试官要问这样的问题,主要是在于看你有没有对Springboot的原理有没有深入的了解,有没有看过Springboot的源码,这是区别普通程序员与高级程序员最好的…

【2023/05/17】smalltalk

Hello!大家好,我是霜淮子,2023倒计时第12天。 Share His own morning are new surprises to God. 译文: 神自己的清晨,在他自己看来也是新奇的。 Life finds its wealth by the claims of the world,and its worth…

learn C++ NO.4 ——类和对象(2)

1.类的6个默认成员函数 1.1.默认成员函数的概念 在 C 中,如果没有显式定义类的构造函数、析构函数、拷贝构造函数和赋值运算符重载函数,编译器会自动生成这些函数,这些函数被称为默认成员函数。 class Date { };初步了解了默认成员函数&am…

【啃书C++Primer5】-编写一个简单C++程序

每个C程序都包含一个或多个函数(function),其中一个必须命名为main。操作系统通过调用main来运行C程序。下面是一个非常简单的main函数,它什么也不干,只是返回给操作系统一个值: int main() {return 0; }一个函数的定义包含四部分:返回类型(r…

springboot+vue留守儿童爱心网站(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的留守儿童爱心网站。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

【Spring框架全系列】SpringBoot配置日志文件

🍧🍧哈喽,大家好,我是小浪。那么上篇博客我们学习了SpringBoot配置文件的相关操作,本篇博客我们将学习一个新的知识点,SpringBoot日志文件。🖥🖥 📲目录 一、日志是什么…

第N2周:中文文本分类-Pytorch实现

目录 一、前言二、准备工作三、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 三、模型构建1. 搭建模型2. 初始化模型3. 定义训练与评估函数 四、训练模型1. 拆分数据集并运行模型 一、前言 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 …

在线PS软件有哪些不错的推荐

许多新的UI设计合作伙伴非常关心在线ps工具的选择。现在市场上有各种各样的ps网页替代工具,数量众多,令人眼花缭乱。本文简要介绍了10个在线PS工具,我相信一定有一个适合你! 1.即时设计 即时设计是一款在线 UI 设计工具&#xf…