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原理的更多相关文章

  1. 【手搓模型】亲手实现 Vision Transformer

    前言 博客主页:睡晚不猿序程 首发时间:2023.3.17,首发于博客园 最近更新时间:2023.3.17 本文由 睡晚不猿序程 原创 作者是蒻蒟本蒟,如果文章里有任何错误或者表述不清,请 tt 我, ...

  2. Task10.Bert

    Transformer原理 论文地址:Attention Is All You Need:https://arxiv.org/abs/1706.03762 Transformer是一种完全基于Atte ...

  3. 13.深度学习(词嵌入)与自然语言处理--HanLP实现

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 13. 深度学习与自然语言处理 13.1 传统方法的局限 前面已经讲过了隐马尔可夫 ...

  4. 2. Attention Is All You Need(Transformer)算法原理解析

    1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...

  5. 一文看懂Transformer内部原理(含PyTorch实现)

    Transformer注解及PyTorch实现 原文:http://nlp.seas.harvard.edu/2018/04/03/attention.html 作者:Alexander Rush 转 ...

  6. Spatial Transformer Networks(空间变换神经网络)

    Reference:Spatial Transformer Networks [Google.DeepMind]Reference:[Theano源码,基于Lasagne] 闲扯:大数据不如小数据 这 ...

  7. LDO稳压器工作原理

    LDO稳压器工作原理 随着便携式设备(电池供电)在过去十年间的快速增长,像原来的业界标准 LM340 和LM317 这样的稳压器件已经无法满足新的需要.这些稳压器使用NPN 达林顿管,在本文中称其为N ...

  8. RxJava(10-操作符原理&自定义操作符)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51791120 本文出自:[openXu的博客] 目录: 自定义创建操作符 数据序列操作符li ...

  9. 【译】图解Transformer

    目录 从宏观上看Transformer 把张量画出来 开始编码! 从宏观上看自注意力 自注意力的细节 自注意力的矩阵计算 "多头"自注意力 用位置编码表示序列的顺序 残差 解码器 ...

  10. 深入理解BERT Transformer ,不仅仅是注意力机制

    来源商业新知网,原标题:深入理解BERT Transformer ,不仅仅是注意力机制 BERT是google最近提出的一个自然语言处理模型,它在许多任务 检测上表现非常好. 如:问答.自然语言推断和 ...

随机推荐

  1. [FAQ] Vue iframe 的 src 是链接地址却加载了相对路径 ?

    iframe 的 src 是链接, 但是加载的实际链接是相对路径,只有一种可能:链接地址不正确. 检查链接有没有少符号,常见错误:http//,http:/ Refer:Vue的iframe错误 Li ...

  2. [FE] Quasar 变通 loading 单纯使用遮罩效果的方法

    Quasar 的 loading 组件是提供加载中的遮罩效果的. 如果你不想要 loading 的效果,只想保留遮罩效果,那么你可以通过 show() 方法的参数进行调整. 把 spinnerSize ...

  3. dotnet 读 WPF 源代码 聊聊 DispatcherTimer 的实现

    本文来告诉大家在 WPF 框架里面,是如何实现 DispatcherTimer 的功能.有小伙伴告诉我,读源代码系列的博客看不动,原因是太底层了.我尝试换一个方式切入逻辑,通过提问题和解决问题的方法, ...

  4. django-rest-framework框架(一)

    1.Web开发模式 # web开发模式 #前后端混合开发(前后端不分离):返回的是html的内容,需要写模板 #前后端分离:只专注于写后端接口,返回json,xml格式数据 # xml格式 <x ...

  5. springboot+kafka(centos7集群部署kafka)

    1.kafka简介 1.1:Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动 ...

  6. STM32F10X 部分引脚不能使用的问题

    一.概述 说来惭愧,我到现在都没有完整的学习过STM32.接触 STM32 还是突然的一个项目,需要用到 STM32,紧急需求,只能边学边完成.不过好在 ST 的资料还是比较多的,相对也比较简单,基本 ...

  7. QT MySQL连接自动断开

    参考链接 MySQL链接10天后自动断开解决方案:<https://blog.csdn.net/xiaoxiao133/article/details/123006881 方式一 QT中可以通过 ...

  8. SAP集成技术(七)集成解决方案咨询方法论(ISA-M)

    目前,ISA-M 主要以 Microsoft PowerPoint 演示文稿的形式提供.可以在 SAP Community 博客文章(https://blogs.sap.com/)以及关于ISA-M ...

  9. Docker 必知必会----初识

    什么是Docker?Docker 是一个开源的容器管理引擎.开发者可以通过Docker直接管理应用程序所需要的容器.它的logo如下: 为什么需要Docker使用Docker主要有两个原因,1.屏蔽不 ...

  10. Windows 上安装 PostgreSQL详细图文教程

    转载于微信公众号:SQL数据库运维,如需转载请注明出处,谢谢! PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库". 这里使用 Enterprise D ...