BERT是一个deep bidirectional Transformer。
Transformer可参考 https://baijiahao.baidu.com/s?id=1622064575970777188&wfr=spider&for=pc 非常详细易懂
Transformer是一个encoder-decoder框架。
编码器的结构:
其中,自注意力层在编码某个词的时候就会考虑这个词所在句子的所有词,所以在编码的时候,self-attention是bidirectional的。
解码器的结构如下:
在解码器中,self-attention的处理模式和编码器中的self-attention不同。在解码器中,self-attention只允许处理输出序列中更靠前的那些位置,把后面的位置隐去。就是相当于只处理这个词之前的词,所以,在解码器中的self-attention是unidirectional的。
但是,BERT在解码过程中会使用这个词前后的所有上下文,所以说是bidirectional Transformer.
原文中的说明是:
另,为什么使用self-attention?(下面是从attention as all you need https://arxiv.org/pdf/1706.03762.pdf里面翻译的)
1.考虑每层的计算复杂度
2.可以并行的计算
3.网络中长依赖的路径长度。影响学习这种长依赖的一个主要因素是在网络中向前和向后的信号需要穿过的路径的长度。输入序列和输出序列中的任何的位置组合之间的路径越短,就越容易学习到跨度长的依赖。
![](https://i-blog.csdnimg.cn/blog_migrate/12b879c1e98a9b12bdd414c56d8348ea.png)