Datawhale《深度学习-NLP》Task10- Attention原理

参考: transformer github实现:GitHub - Kyubyong/transformer: A TensorFlow Implem...

transformer pytorch分步实现:The Annotated Transformer

搞懂Transformer结构,看这篇PyTorch实现就够了:搞懂Transformer结构,看这篇PyTorch实现就够了! - TinyMind -专注人工智...

“变形金刚”为何强大:从模型到代码全面解析Google Tensor2Tensor系统:“变形金刚”为何强大:从模型到代码全面解析Google Tensor2Tensor系统 - 腾讯云技...

bert理论: bert系列1:https://medium.com/dissecting-bert/dissecting-bert-part-1-d3c3d495cdb3

bert系列2:https://medium.com/dissecting-bert/dissecting-bert-part2-335ff2ed9c73

bert系列3:https://medium.com/dissecting-bert/dissecting-bert-appendix-the-decoder-3b86f66b0e5f

5 分钟入门 Google 最强NLP模型:BERT:5 分钟入门 Google 最强NLP模型:BERT - 简书

BERT – State of the Art Language Model for NLP:BERT – State of the Art Language Model for NLP | L...

google开源代码:GitHub - google-research/bert: TensorFlow code and...

bert实践: 干货 BERT fine-tune 终极实践教程:干货 | BERT fine-tune 终极实践教程 - 简书

小数据福音!BERT在极小数据下带来显著提升的开源实现:小数据福音!BERT在极小数据下带来显著提升的开源实现

BERT实战(源码分析+踩坑):BERT实战(源码分析 踩坑) - 知乎

 

 

Transformer模型结构

Transformer的主体结构图:

image

编码器解码器

模型分为编码器解码器两个部分。

  • 编码器由6个相同的层堆叠在一起,每一层又有两个支层。第一个支层是一个多头的自注意机制,第二个支层是一个简单的全连接前馈网络。在两个支层外面都添加了一个residual的连接,然后进行了layer nomalization的操作。模型所有的支层以及embedding层的输出维度都是dmodeldmodel。
  • 解码器也是堆叠了六个相同的层。不过每层除了编码器中那两个支层,解码器还加入了第三个支层,如图中所示同样也用了residual以及layer normalization。具体的细节后面再讲

输入层

编码器和解码器的输入就是利用学习好的embeddings将tokens(一般应该是词或者字符)转化为d维向量。对解码器来说,利用线性变换以及softmax函数将解码的输出转化为一个预测下一个token的概率。

位置向量

由于模型没有任何循环或者卷积,为了使用序列的顺序信息,需要将tokens的相对以及绝对位置信息注入到模型中去。论文在输入embeddings的基础上加了一个“位置编码”。位置编码和embeddings由同样的维度都是dmodeldmodel所以两者可以直接相加。有很多位置编码的选择,既有学习到的也有固定不变的。

注意力模型

Scaled attention

论文中用的attention是基本的点乘的方式,就是多了一个所谓的scale。输入包括维度为dkdk的queries以及keys,还有维度为dvdv的values。计算query和所有keys的点乘,然后每个都除以dk−−√dk(这个操作就是所谓的Scaled)。之后利用一个softmax函数来获取values的权重。

实际操作中,attention函数是在一些列queries上同时进行的,将这些queries并在一起形成一个矩阵QQ同时keys以及values也并在一起形成了矩阵KK以及VV。则attention的输出矩阵可以按照下述公式计算:

Attention(Q,K,V)=softmax(QKTdk−−√)VAttention(Q,K,V)=softmax(QKTdk)V

image

Multi-Head Attention

本文结构中的Attention并不是简简单单将一个点乘的attention应用进去。作者发现先对queries,keys以及values进行hh次不同的线性映射效果特别好。学习到的线性映射分别映射到dkdk,dkdk以及dvdv维。分别对每一个映射之后的得到的queries,keys以及values进行attention函数的并行操作,生成dvdv维的output值。具体结构和公式如下。

 

MultiHead(Q,K,V)=Concat(head1,...,headh)MultiHead(Q,K,V)=Concat(head1,...,headh)

 

where:headi=Attention(QWiQ,KWiK,VWiV)where:headi=Attention(QWiQ,KWiK,VWiV)

image

模型中的attention

Transformer以三种不同的方式使用了多头attention。

  1. 在encoder-decoder的attention层,queries来自于之前的decoder层,而keys和values都来自于encoder的输出。这个类似于很多已经提出的seq2seq模型所使用的attention机制。
  2. 在encoder含有self-attention层。在一个self-attention层中,所有的keys,values以及qu
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值