attention机制_Seq2seq模型中的 Attention机制

一、背景简介[1][2]

encoder-decoder模型如下图。我们关注的是encoder过程(下图一个注意力分散的例子)

9a024534797bfde4fba4a1d09943face.png

1e48d18f3bb55be5022bba29ca83e7ce.png
  • encode过程会生成一个中间向量C,用于保存原序列的语义信息。但是这个向量长度是固定的,当输入原序列的长度比较长时,向量C无法保存全部的语义信息,上下文语义信息受到了限制,这也限制了模型的理解能力。所以使用Attention机制来打破这种原始编解码模型对固定向量的限制。
  • attention模型用于解码过程中,它改变了传统decoder对每一个输入都赋予相同向量的缺点,而是根据单词的不同赋予不同的权重。在encoder过程中,输出不再是一个固定长度的中间语义,而是一个由不同长度向量构成的序列,decoder过程根据这个序列子集进行进一步处理。

e5bc3042bbf7afc2480601823e8ef86b.png


二、transformer模型

transformer是google brain 在《attention is all you need》中所提的seq2seq模型,目前已经得到非常广泛的应用,BERT(Birectional Encoder Representations From Transformer)就是从transformer中衍生出来的预训练语言模型。

tranformer是并行的(对比:RNN是循环的),可以大大提升计算速率。如下图所示,transformer完成机器翻译任务,左边是encoder,右边是decoder

4d9269a156da494b5e9dddb5c82a5259.png

encoder会涉及到如下几个过程:

  1. 位置嵌入position embedding

lstm、RNN等序列模型都是按顺序处理的,但tranformer是并行处理的、没有循环神经网络中的迭代操作,那如何表示识别语言中的顺序关系呢?因此需要定义一个位置嵌入的概念,位置嵌入维度为[max sequence length, embedding dimension].

论文[3]的实现很有意思,使用正余弦函数。公式如下: PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i)=sin(pos/100002i/dmodel) PE(pos,2i+1)=cos(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel) 其中,pos是指词语在序列中的位置。可以看出,在偶数位置,使用正弦编码,在奇数位置,使用余弦编码。随着embedding dimension的增大,位置嵌入函数呈现不同的周期变化。

2. 自注意机制 self-attention[4]

bda6547a5eb6059dae36d8f328fd8f5a.png

d281fba9844f5a9b33e728a57086a2af.png

multi-head attention:注意嵌入的维度(embedding dimension)必须整除num. of heads(h), 就是必须均匀地把embedding dimension矩阵切割了h份。

9fce6e2123361205771c5416ce32de9b.png

使用softmax归一化,使每个字跟其他所有字地注意力权重的和为1,注意力权重矩阵地作用就是一个注意力权重的概率分布。

点积:两个向量越相似(θ越小,cosθ越大),他们的点积就越大

5d326a5376615d4ff589dd869b42403b.png

这样,每个字都含有当前句子中其他所有字的信息(且注意力权重和=1)

另外,注意有个attention mask的问题:

2d7da85ab17fb63c732e72b527d697b4.png

模型还涉及到l残差链接等,没看懂,算了。

参考

  1. ^注意力机制的基本思想和实现原理  https://blog.youkuaiyun.com/hpulfc/article/details/80448570
  2. ^Attention注意力机制介绍 https://www.cnblogs.com/hiyoung/p/9860561.html
  3. ^Attention Is All You Need https://arxiv.org/abs/1706.03762
  4. ^https://github.com/aespresso/a_journey_into_math_of_ml/tree/master/03_transformer_tutorial_1st_part
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值