ViT (Vision Transformer) ---- Transformer Model(1)
transform是2017年提出来的,当时横扫NLP领域的多个任务,Vaswani et al. Attention Is All You Need. In NIPS,2017.
transform模型是Seq2Seq模型
transform不是RNN
transform是基于attention机制和全连接层的
这里通过最初的基于RNN的Seq2Seq模型,到基于RNN+attention的Seq2Seq模型,在到把RNN去掉全部基于attention的Seq2Seq模型,然后transform模型的思路进行讲解,这里前面几个都是前面讲过的,这里只是简单介绍即可
基于RNN的Seq2Seq模型
先介绍RNN是怎么更新状态的
基于RNN的Seq2Seq模型
这里简单的说一下,为什么在编码器中只需要使用最后一个状态的输出,为什么不使用中间的状态,因为最后一个状态包含了输入的所有信息,中间的状态,包含的信息不全
接着:
基于RNN+attention的Seq2Seq模型
可以发现基于attention的Seq2Seq的模型增加了context状态,通过context状态在计算输出状态h如下:
因此基于attention的RNN解决了长序列依赖问题,因为每个状态都包含了输入的整个信息。
计算context方法
上面采用的计算context方法并不是很常用,常用的方法是如下:
即引入三个矩阵和三个状态,其实本质上和上面的目的是一样的,只是处理方式不同,增加更多的参数,使模型表达能力更强。
他们的区别是什么?其实大家可以这样想,在获取解码器的输出状态时,使用RNN对seq2seq进行建模时,会发现,输入和上一个状态的S进行concat,然后乘上一个矩阵A,那么我们是否可以拆开呢?单独对输入创建一个参数矩阵和单独对状态创建一个矩阵,当然可以啊,两个矩阵的目的都是一样的,增加参数矩阵的表达能力,为了引入注意力机制,就需要计算相关性 ,那么也可以引入一个矩阵即可,因此,本质上transform就是通过计算相关性,然后把输出状态和每个输入的状态都关联起来,至于关联度其实就是相关性了,如何计算相关性,方法很多,而目前比较受欢迎的方法就是transform的这个方法,即设置参数矩阵Q、K、V:
Q矩阵是query就是当前的状态需要和编码器的状态计算相识度,因此需要解码器当前状态S乘上一个参数矩阵Q,表示该矩阵需要询问编码器所有的状态
K矩阵是key的意思,因为解码输出状态Q需要和编码器输出状态计算相关性,那么编码器的输出就是key了,因为每个编码器的输出都需要和Q相乘,因此称为key
V值其实很简单,在Q和K计算输出后是以矩阵,而相关性系数是一个值,因此需要另一个矩阵把Q和K的矩阵值在乘上一个矩阵V使其结果为一个相关性向量,这样就可以获取完整的α了,下面介绍基于RNN和attention的seq2seq模型
从上可以发现key和value的输出向量都是编码器的输出h状态,还是所有的状态,而q的输入是解码器当前的输出S状态,其中S0的状态为h_m,C0初始化为0,把S0和C0进行concat在通过激活函数就可以得到S1了,关键是如何通过attention计算法C1,其实很简单,此时S1和编码器的h_i都是知道的,那么分别创建W_Q矩阵和W_K矩阵和W_V矩阵,q矩阵是解码器当前输出状态S的参数矩阵,K是编码器的输出状态h的参数矩阵,V是为了计算相识度α的矩阵,该输入也是编码器的输出状态。
通过K和q的矩阵相乘,在通过softmax获取相识度α权重,然后计算当前输出状态的上下文C了
基于Attention的Seq2Seq模型
上面的是全部基于attention实现的seq2seq模型,从上可以发现,K和V的输入都是基于编码器的输入x_i,q的输入是解码器的上一个输出x^',其他的很基于rnn的attention类似,这里不过多解释,下面介绍如何组建成transform模型
Attention Layer
把上面模块化形成attention层
Self-attention层
Self-attention层和attention类似,只是这里的输入全为x_i,同样没有RNN网络,只有attention,其中Q、K、V的输入都是x,通过类似的方式及时α值,具体如下:
计算α值:
计算C值:
Self-attention层:
简化:
ViT (Vision Transformer) ---- Transformer Model(1)相关推荐
- Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二)
Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二) Rasa 官网 https://rasa.com/ Choosing the Right ...
- Transformer综述大全(1)【A Survey of Visual Transformers】
Transformer 1 Introduction 2 原始Transformer 1注意力机制Attention Mechanism 2多头注意力机制Multi-Head Attention Me ...
- Transformer综述大全(2)【A Survey of Visual Transformers】
Transformer 4 TRANSFORMER FOR DETECTION目标检测 1Transformer Neck 1)原始检测器 2)稀疏关注的Transformer 3)空间先验Trans ...
- 深入理解深度学习——Transformer:解码器(Decoder)部分
分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(Attention Mechanism):基础知识 ·注意力机制(Attention Mechanism):注意力汇聚与Na ...
- 深入理解深度学习——Transformer:解码器(Decoder)的多头注意力层(Multi-headAttention)
分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(Attention Mechanism):基础知识 ·注意力机制(Attention Mechanism):注意力汇聚与Na ...
- Segment Anything Model(SAM)
Segment Anything Model(SAM)是Facebook Research近来开源的一种新的图像分割任务.模型.Segment Anything Model(SAM)可以从输入提示(如 ...
- The Annotated Diffusion Model(翻译)
The Annotated Diffusion Model(翻译) 来源: https://huggingface.co/blog/annotated-diffusion code: 在这篇博文中,我 ...
- 在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图
在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图 前提介绍 这个文章我们要讨论,在ASP.NET MVC模型的项目中,怎么选择一个最有效的方式来将多个数据模型(m ...
- Django中的Model(字段) - 第五轻柔的code - 博客园
Django中的Model(字段) - 第五轻柔的code - 博客园 Django ORM 中的批量操作 - AlphaJx - 博客园
- Django中的Model(操作表) - 第五轻柔的code - 博客园
Django中的Model(操作表) - 第五轻柔的code - 博客园
最新文章
- 1055 The World‘s Richest (25 分)【难度: 一般 / 知识点: 多关键字排序】
- Android Studio Problems
- C#LeetCode刷题之#933-最近的请求次数(Number of Recent Calls)
- 判断数据类型的几种办法
- 用信号量及其PV操作处理实际问题
- ROS2 Galactic Depth to World coordinate RGBD相机的深度数据转换到世界坐标系
- Android Contentprovider的学习实例总结
- 初识kmp算法(呕心沥血之文----看视频+总结)
- 虚拟机服务器安装iis报错,Windows2008R2安装iis和iis下搭建web服务器(9.18 第七天)...
- jQuery实现广告图片轮播切换
- 逐步推进的团队项目准备工作全记录
- Zircon - Fuchsia 内核分析 - 启动(平台初始化)
- 微软应用商店打不开代码: 0x80131500
- 热敏电阻和压敏电阻的区别与特性
- 遗传算法(GA)求解TSP问题
- ESP32 LVGL8.1 ——Style local style 样式当地的风格 (Style 11)
- 三千预算进卡吧的顺口溜是啥
- Jackson膜封闭:选择合适的封闭试剂孵化时间和洗涤
- Mac上将dmg文件转成iso的方法
- oracle11.2.0.4全套安装包及最新补丁包(珍藏版)
热门文章
- 8月23号,来上海整整一年
- NetBeans 时事通讯(刊号 # 80 - Nov 15, 2009)
- redhat as4 上安装 MySQL5
- Mybatis 动态传入order by 参数排序无效
- python将list转为数组_python如何将list中的字符转为数字
- 一个mapper接口有多个mapper.xml 文件_MyBatis 源码解析:映射文件的加载与解析(上)
- 山西省职业技能鉴定计算机操作员(中级工)理论知识试卷,山西省职业技能鉴定统一试卷 中级...
- DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式
- Three.js 学习笔记 - 给跳一跳小游戏添加光源,阴影
- JS高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法