优秀的博客:
【图解什么是 Transformer(很全)】https://www.jianshu.com/p/e7d8caa13b21
【自注意力机制Self-attention】https://www.cnblogs.com/robert-dlut/p/8638283.html
【BERT大火却不懂Transformer】https://baijiahao.baidu.com/s?id=1622064575970777188&wfr=spider&for=pc
【寒小阳 】https://me.csdn.net/yaoqiang2011
BERT
[https://www.cnblogs.com/rucwxb/p/10277217.html]
[https://baijiahao.baidu.com/s?id=1622064575970777188&wfr=spider&for=pc]
transformer
http://jalammar.github.io/illustrated-transformer/
Attention
SelfAttention
Multi-Attention
Transform
BERT
SelfAttention
1.Attention机制的核心在于对一个序列数据进行聚焦,这个聚焦是通过一个概率分布来实现的。Attention vector实际上达到了让B网络聚焦于A网络输出的某一部分的作用。
2.根据Thinking单词,对输入句子的每个单词进行评分,这个分数决定了对其他单词放置多少关注度。例如 Thinking ,就用它的 q1 去乘以每个位置的 ki
3.目前在NLP研究中,key和value常常都是同一个,也就是query=h1,key=value=s1,s2,s3,s4
Attention函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射。
在计算attention时主要分为三步,第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;、
然后第二步一般是使用一个softmax函数对这些权重进行归一化;最后将权重和相应的键值value进行加权求和得到最后的attention。
google提出来的多头attention的不同之处在于进行了h次计算而不仅仅算一次,
好处是可以允许模型在不同的表示子空间里学习到相关的信息,后面还会根据attention可视化来验证。
token(符号):包括单词和标点
tokenization(分词):我是中国人->['我', '是', '中国人']
corpus 语料库
https://baijiahao.baidu.com/s?id=1622064575970777188&wfr=spider&for=pc
attention有两个RNN网络,一个用来将接收待翻译语句,对其进行编码,最后输出一个vector,这个网络叫encoder。
然后,该vector会作为输入,传给另一个RNN网络,该网络用来根据vector产生目标语言的翻译语句,这个网络叫做decoder
s1,s2,s3,s4是第一句话的四个字各自的输出,h1是第二句话的第一个字的输出
第一步:h1分别与s1,s2,s3,s4做点积,产生了四个数,称其为m1,m2,m3,m4(这些都是标量,不是向量了!)
第二步:m1,m2,m3,m4 传到一个softmax层,产生一个概率分布a1,a2,a3, a4。
第三步:将a1,a2,a3, a4 与s1,s2,s3,s4分别相乘,再相加,得到得到一个vector,称其为Attention vector。
第四步:Attention vector 将作为输入传到B网络的第二个cell中,参与预测。
以上就是Attention机制的基本思想了。我们看到,Attention vector用一个概率分布来融合了s1,s2,s3,s4的信息,
而这个概率分布又是通过B网络上一个cell的hidden state与s1,s2,s3,s4进行点乘得到的。
Attention vector实际上达到了让B网络聚焦于A网络输出的某一部分的作用。
Attention机制的核心在于对一个序列数据进行聚焦,这个聚焦是通过一个概率分布来实现的。这种机制其实有很强的普适性,可以用在各个方面。
比如,根据图片产生描述该图片的文字,首先,图片会经过CNN进行特征的提取,提取的数据会输入到产生描述文字的RNN中,
这里,我们可以引入Attention机制,让我们在产生下一个文字时,聚焦于我们正在描述的图片部位。
假如我们用一个RNN读入了一个句子,产生了h1, h2,h3,h4四个hidden state。
为了得到该句子的摘要,对每一个h计算一个分数:f=vatanh(Wh)。
四个h共产生了4个分数,将这四个分数送入一个softmax层,产生一个概率分布: a=softmax(vatanh(Wh))
根据这个概率分布对四个h进行加和,得到句子摘要的第一个vector: c=Ha
为了得到更多的vector,可以把上面图中的小写va换成一个矩阵,A=softmax(Vatanh(Wh))
a也就变成了多个概率分布组成的矩阵,每个概率分布都可以用来与h进行加和产生一个vector,产生了摘要的多个vector:C=AH
https://www.cnblogs.com/robert-dlut/p/8638283.html
第一步:将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等,也就是s1,s2,s3,s4与h1点积;
第二步:用一个softmax函数对这些权重进行归一化,得到概率分布a1,a2,a3,a4;
第三步:最后将权重和相应的键值value进行加权求和得到最后的attention,即将s1,s2,s3,s4与标量a1,a2,a3,a4加权求和;
目前在NLP研究中,key和value常常都是同一个,也就是query=h1,key=value=s1,s2,s3,s4