transformer原理

Transformer注意力架构原理
输入层
embedding词嵌入向量
将文本中词汇的数字表示转变为向量表示,在这样的高维空间捕捉词汇间的关系
语义相近的词语对应的向量位置也更相近
每个词先通过词典转换成tokenId,在把tokenId转化为一个512纬的向量
位置编码
将每个词的位置向量(通过位置编码矩阵算出)增加到文本嵌入层输出向量中,这样输入层的向量就有了位置的信息
编码层
注意力层
注意力流程
Q通过K,V挖掘到KV中更重要的权重,把Q生成一个新的V
通过Q通过K在张量层面获取注意力(占比),在把占比乘以V就获得了新的张量作为获得注意力的张量
Q和K主要是为了获得占比
注意力机制公式
QKt是矩阵Q乘矩阵K的转置
处以√dk解决梯度消失的问题
softmax是计算出通过矩阵运算后的Q对于K的占比
最后乘以V是通过比例和值的乘运算获得最终的结果
自注意力
自注意机制的Q=K=V,通过转置计算,每个词都和其他所有词进行了计算
他的优点还在于,可以直接跨越一句话中不同距离的词,远距离学习到序列的只是依赖和语序结构
多头注意力机制
将句子词向量切分成多个部分每个部分分别进行注意力处理,最后再拼接到一起
多头可以在更细致的层面上提取不同的head的特征,提取特征的效果更好
规范化层norm
它是所有深层网络模型都需要的标准网络层
随着网络层数的增加,通过多层的计算后参数可能开始出现过大或过小的情况,这样可能会导致学习过程出现异常,模型可能收敛非常的慢. 因此都会在一定层数后接规范化层进行数值的规范化,使其特征数值在合理范围内
子层连接结构(残差连接)add
残差连接是2015年提出的论文解决神经网络深度过大导致的问题
神经网络模型在深度到达一定程度后,会造成梯度消失、梯度爆炸等问题
将浅层的输出和深层的输出求和,作为下一阶段的输入
通过残差连接这样一个简单的处理,成功将上百层的模型得以收敛,从而在分类任务中达到了更高的精度,在2016年resnet的改进中,模型的深度达到了1000层
Add & Norm
Add表示残差连接,Norm表示规范化层
对于每一个EncoderBlock,两个子层后面都有Add & Norm
对于每一个DecoderBlock,三个子层后后面都有Add & Norm
残差连接可以让信息传递的更深,增强了模型的拟合能力
规范化层,可以让模型减少参数过大过小的问题,防止模型收敛慢的问题
前馈全连接层Feed Forward
在Transformer中前馈全连接层就是具有两层线性层的全连接网络
考虑注意力机制可能对复杂过程的拟合程度不够, 通过增加两层网络来增强模型的能力
前馈全连接层由两个线性变化组成,中间有一个Relu激活函数
原始论文中的前馈全链接层输入和输出的纬度都是512,层内连接纬度是2048,均采用4倍的关系
前馈全链接层作用:单纯的多头注意力机制不足以提取到理想的特征,因此增加全链接层来提升网络的能力
编码器
Encoder部分是6个一模一样的Encoder Block层层堆叠在一起(网络串行)
解码层
第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
多头自注意力层:需要做掩码,来遮掩未来的信息,提升模型的能力
对于生成类模型就是一个字一个字的崩出来,不能提前给模型透露未来的信息,如果透露了,他预测的能力会下降
第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接
多头注意力层:Q来自于Decoder端,KV来源于Encoder端
为什么要让原始文本(编码器输入)作为K V,翻译文本作为Q呢
训练过程中,要让目标文本在原始文本中提取到更重要的信息
预测过程中,更是要让生成文本在原始文本中提取到更重要的信息
谁更重要,谁信息量更大,谁就要在K V(通常K V是一样的)
这样设计的目的是为了让Decoder端的token能够给予Encoder端对应的token更多的关注
第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接
输出层
全连接线性层+softmax激活函数获得最终的结果
Transformer相比于传统RNN的优势
Transformer能够利用分布式GPU进行并行训练,提升模型训练效率
Encoder并行化
Embedding层(输入)、前馈全链接层、规范化残差连接层,都可以进行并行化
从Embedding层到注意力层之间因为存在依赖关系,这两个阶段无法并行
在注意力层因为采用了矩阵运算,可以一次性计算所有主力张量的计算,数学上也是一种并行化的体现
Encoder在训练和预测阶段都可以实现并行化
Decoder并行化
Embedding层(输入)、前馈全链接层、规范化残差连接层,都可以进行并行化
在注意力层因为采用了矩阵运算,可以一次性计算所有主力张量的计算,数学上也是一种并行化的体现
Decoder在训练阶段可以并行化阶段
Decoder在预测阶段不可并行化阶段
在分析预测更长的文本时, 捕捉间隔较长的语义关联效果更好
基于注意力的机制设计本身就能跨越较长文本,提取长文本特征,并通过注意力权重提现到embedding中
transformer原理的更多相关文章
- 【手搓模型】亲手实现 Vision Transformer
前言 博客主页:睡晚不猿序程 首发时间:2023.3.17,首发于博客园 最近更新时间:2023.3.17 本文由 睡晚不猿序程 原创 作者是蒻蒟本蒟,如果文章里有任何错误或者表述不清,请 tt 我, ...
- Task10.Bert
Transformer原理 论文地址:Attention Is All You Need:https://arxiv.org/abs/1706.03762 Transformer是一种完全基于Atte ...
- 13.深度学习(词嵌入)与自然语言处理--HanLP实现
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 13. 深度学习与自然语言处理 13.1 传统方法的局限 前面已经讲过了隐马尔可夫 ...
- 2. Attention Is All You Need(Transformer)算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- 一文看懂Transformer内部原理(含PyTorch实现)
Transformer注解及PyTorch实现 原文:http://nlp.seas.harvard.edu/2018/04/03/attention.html 作者:Alexander Rush 转 ...
- Spatial Transformer Networks(空间变换神经网络)
Reference:Spatial Transformer Networks [Google.DeepMind]Reference:[Theano源码,基于Lasagne] 闲扯:大数据不如小数据 这 ...
- LDO稳压器工作原理
LDO稳压器工作原理 随着便携式设备(电池供电)在过去十年间的快速增长,像原来的业界标准 LM340 和LM317 这样的稳压器件已经无法满足新的需要.这些稳压器使用NPN 达林顿管,在本文中称其为N ...
- RxJava(10-操作符原理&自定义操作符)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51791120 本文出自:[openXu的博客] 目录: 自定义创建操作符 数据序列操作符li ...
- 【译】图解Transformer
目录 从宏观上看Transformer 把张量画出来 开始编码! 从宏观上看自注意力 自注意力的细节 自注意力的矩阵计算 "多头"自注意力 用位置编码表示序列的顺序 残差 解码器 ...
- 深入理解BERT Transformer ,不仅仅是注意力机制
来源商业新知网,原标题:深入理解BERT Transformer ,不仅仅是注意力机制 BERT是google最近提出的一个自然语言处理模型,它在许多任务 检测上表现非常好. 如:问答.自然语言推断和 ...
随机推荐
- [FE] Quasar BEX 所有位置类型 types
科普:[FE] Quasar BEX 预览版指南 New Tab Quasar BEX 的默认类型是 New Tab,在新 tab 栏里打开内容. Dev Tools 也就是在开发者栏里面的内容. O ...
- WPF 多线程下跨线程处理 ObservableCollection 数据
本文告诉大家几个不同的方法在 WPF 里,使用多线程修改或创建 ObservableCollection 列表的数据 需要明确的是 WPF 框架下,非 UI 线程直接或间接访问 UI 是不合法的,设计 ...
- Django之ajax简介
1.MTV与MVC 框架类型:MVC: M:models V:views C:controller Django用的框架就是MTV MTV: M:models T:templates V:views ...
- Java开启异步的两种方式
二.Java开启异步的两种方式 1.注解开启:@Async 1.1.配置异步的线程池 必须配置异步线程池,否则异步不会生效. @EnableAsync 注解:指定异步线程池.不指定默认使用:Simpl ...
- 云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
01 方案概述 现在绝大多数客户都有很多非结构化的数据存在 OSS 中,以图片,视频,音频居多.举一个图片处理的场景,现在各种终端种类繁多,不同的终端对图片的格式.分辨率要求也不同,所以一张图片往往会 ...
- NOIP2023游寄
Day -?? 模拟赛挂分. Day -18 模拟赛挂大分,挂分大于得分.(180/400,得分/标准分,下同) 连着挂了好多场了,感觉有点迷茫了. Day -17 模拟赛--AK了?(400/400 ...
- 11、操作系统安全加固-Windows 加固
1.账号管理与认证授权 1.1.按用户类型分配账号 目的:根据系统要求,设定不同账户和组,管理员.数据库sa.审计用户.来宾用户等 实施方法: 打开本地用户和计算机管理器 或 打开运行,输入 lusr ...
- 免费的visual studio智能代码插件——CodeGeeX
CodeGeeX是什么?什么是CodeGeeX? CodeGeeX是一款基于大模型的智能编程助手,它可以实现代码的生成与补全,自动为代码添加注释,不同编程语言的代码间实现互译,针对技术和代码问题的智能 ...
- rails byebug
Gemfile里添加 gem 'byebug' bundle install 在要打断点的地方写 byebug byebug -h #帮助 c 放行,入下走 n 单行调适 q 退出进行 启动异步任务推 ...
- ARM64: ARDP
1 指令语法 ardp <Xd>, <lable> 2 指令语义 1 获取程序计数器PC寄存器的值: 2 将PC寄存器值的低12位全部取0; 3 将lable的值乘以4096, ...