【BERT】BERT

2021-07-27  本文已影响0人  pub_bug

Transformer

参考资料

https://zhuanlan.zhihu.com/p/48508221

http://jalammar.github.io/illustrated-transformer/

也是一种Seq2Seq网络

image.png

这种RNN就不能并行运算

self-attention机制进行并行计算,在输入和输出都相同

传统的word2vect缺点:

1)词向量训练好了,就不会变啊

2) 一词多义 上下文不同 词义也不同

整体架构

更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。

一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中取得了BLEU值得新高。

1)并行计算要求

2) 解决RNN中 对远距离的词记忆效果弱

Transformer的编码部分是由6个编码器,同样解码有6个解码器组成

image.jpeg

每个编码器的结构是先做一个self-attention,得到attention z,然后用一个全连接FNN对z的降维;

输入的序列,先流入第一层self-attention,计算出当前词与其他单词的

image.jpeg

两个公式:1)计算attetion 2)FNN 全连接层,两层第一层ReLU,第二层线性激活函数

image.jpeg

decoder中

  1. 1)Self-Attention:当前翻译和已经翻译的前文之间的关系;

  2. 2)Encoder-Decnoder Attention:当前翻译和编码的特征向量之间的关系。

image.gif

先做词嵌入,算出词向量 论文中:用的词向量维度dK=512

输入如何编码? 输出结构是啥? attenion目的? 怎样组合在一起?

【一、self-attention是什么?】

举例:”The animal didn't cross the street because it was too tired”

根据实际吃的数据,可以看他的上下文,从而确定词义

self-attetion怎么计算?

1)把每一个词编程词向量,文章用的是Xi是512维的,而乘出来后的q,k,v这些新向量是64维的。

这样做的目的是可以持续计算多头

image.png image.png

当我得到Q、K、V三个矩阵时,便可以计算每个词与其他词的得分;这里用一个点积运算,可以求出某两个词的相关性;

2)计算socre

image.png

3)-4)这里第三和第四步

image.png

softmax得分表示出每一个单词在此位置的分量,比如thinking在这个句子中对machine只占0.12

5)将每个词的value*softmax得分,凭直观可以看出只关注那些我们注意的词,而drop-out那些无关的词(只需要乘以一个足够小的数)

image.png

6)把softmax*v加起来便可得到当前词对于整个序列而言的attetion

image.png

======================================================================

【附录】 关于计算attention进一步解释

要把分值转换成一个概率,所以这里用到一个softmax,便可以得到一个词与其他词的分值,然后与其他词value做点积,便可得到self-attention的值

image.png

一个关于self-attention的流程

image.png image.png

这个的最后用softmax输出与z做一个点积运算 求sum,单个词的对其他词的attention,然后在乘以V(实际特征信息)

image.jpeg

【三、位置信息表达】

词的位置会产生影响,所以add一个vector到输入的嵌入层,引入的这个vector要能够表达出整个序列词的顺序,还有不同词之间的distance信息;

image.png

【四、残差块】

image.png image.png

【Decoder】

decoder多了一个encoder-decoder attetion层

image.png
  1. self-attention略有不同
image.png

decoder如何处理encoder的编码结果

  1. 加入mask机制: decoder是做预测的,要根据之前的输出预测当前的,所以在把当前的mask掉;
image.png image.gif

Bert

按照官网给出的Bert技术牛皮,一方面因为是unsupervised,另一方面是因为用于预训练NLP的深度双向系统

与训练表示既可以是context-free 也可是 contexual

context-free: word2vec 和 glove

I made a bank deposit中 对bank的理解 bert会看bank的前后,而其他模型要么只看左边,要么只看右边

pre-training & fine-tunings

难的是对词的编码,就是transfomer的encoder部分;

如何训练bert

image.png image.png

方法二:

image.png

end2end训练方式

image.png
上一篇下一篇

猜你喜欢

热点阅读