| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Transformer(Attention is All You Need) -> 正文阅读 |
|
[人工智能]Transformer(Attention is All You Need) |
? ?Self-Attention和Transformer - machine-learning-noteshttps://luweikxy.gitbook.io/machine-learning-notes/self-attention-and-transformer1.概述????????Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建。 1.1Transformer为何优于RNN? ? ? ? RNN的计算限制是顺序的,带来两个问题: ? ? ? ?1.时间片?t?的计算依赖?t?1?时刻的计算结果,这样限制了模型的并行能力; ? ? ? ?2.顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力 ? ? ? ?Transoform的提出解决上述问题:
2.Transformer模型架构?注:编码器和解码器可以是多个,注意左右边的Nx也就是,设置几个编码、解码器 2.1Encoding部分输入部分:Embedding与位置编码Embedding:对其进行随机初始化(当然也可以选择Pre-trained的结果),但设为Trainable。这样在training过程 中不断地对embeddings进行改进。 即End2End训练方式。 位置编码:想让网络知道这个单词所在句子中的位置是什么,是想让网络做自注意力的时候,不但要知道注意力要聚焦在哪个单词上面,还想要知道单词之间的互相距离有多远。 为什么要知道单词之间的相对位置呢?因为Transformer模型没有用RNN也没有卷积,所以为了让模型能利用序列的顺序,必须输入序列中词的位置。所以我们在Encoder模块和Decoder模块的底部添加了位置编码,这些位置编码和输入的向量的维度相同,所以可以直接相加,从而将位置信息注入。 Attention机制目的是将输入X1转换为另一个向量Z1,两个向量的维度相同 计算步骤:1.Self-attention ?x1和x2输入互相不知道对方的信息,通过W发送信息交换,所有r1,r2各自都有从x1和x2得来的信息。通俗来讲就是输入一个句子内的单词,互相看其他单词对自己的影响力有多少, ?Self_attention的计算机制 上述过程中,不同Xi分享了同一个Wq,Wk,Wv,通过该操作,Xi之间发生某种程度上的信息交换。 ?为什么要有q,k,v向量? ?该想法来自于信息检索领域,q是query,k-v是键值对,k是关键词,v是对应的值。 比对query与key的相似性。 最终的公式表示: 此处用矩阵运算是是因为能GPU加速,会更快,参数更少,更节省空间。 Dk:是q或者k的维度,这两者的维度一定是相同的,做点积运算。 ?multi-headed Attention为什么需要multi-headed Attention? 让Attention有更丰富的层次,产生不同的z 。 ? ? 用不同的Wq,Wk,Wv,就能得到不同的q,k,v。multi-headed Attention指用了很多不同的w。 这样做的好处:让Attention有更丰富的层次,产生不同的z 。 注:最后需要将多个z,结合为一个z。 ? ?用公式表示: 3.1Decoding部分Encoding与Decoding三大主要的不同:
Multi-Headed Attention输入端模型训练阶段: Decoder的初始输入:训练集的标签Y,并且需要整体右移(Shifted Right)一位。 Shifted Right的原因:T-1时刻需要预测T时刻的输出,所以Decoder的输入需要整体后移一位 3.2Mask?????????mask表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer模型里面涉及两种mask,分别是 padding mask和sequence mask。 其中,padding mask在所有的scaled dot-product attention 里面都需要用到,而sequence mask只有在Decoder的Self-Attention里面用到。 Padding Mask????????什么是padding mask呢?因为每个批次输入序列长度是不一样的也就是说,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以我们的Attention机制不应该把注意力放在这些位置上,所以我们需要进行一些处理。 ????????具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过softmax,这些位置的概率就会接近0! 而我们的padding mask 实际上是一个张量,每个值都是一个Boolean,值为false的地方就是我们要进行处理的地方。 Sequence mask文章前面也提到,sequence mask是为了使得Decoder不能看见未来的信息。也就是对于一个序列,在time_step为t的时刻,我们的解码输出应该只能依赖于t时刻之前的输出,而不能依赖t之后的输出。因此我们需要想一个办法,把t之后的信息给隐藏起来。 那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。 sequence mask的目的是防止Decoder “seeing the future”,就像防止考生偷看考试答案一样。这里mask是一个下三角矩阵,对角线以及对角线左下都是1,其余都是0。下面是个10维度的下三角矩阵: ?4.Transforemer总结
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:46:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |