-
BERT
1、整个结构的介绍
(1)模型输入
输入句子分字符,字符的embedding+position embedding + segement embedding求和作为模型的输入,其中会随机掩盖掉15%的字符,其中80%用[mask]字符代替,这10%的随机替换成其它字符,10%不做改变。
(2)模型输出:
预训练模型的输出是输入的各个字符经过模型编码后的embedding,两个任务是预测输入中被掩盖掉的词,以及预测输入的两句是上下两句话还是拼接的。
(3)模型结构:
12层的transformer中的encoder组成,每层encoder由4个部分组成,首先是一个multi-attention,后面结一层残差计算加layer normalization,再加上一层前向全连接层,通过relu激活,增加非线性性(多个头的拼接是线性的),最后就是一次残差计算加layer normalization。
2、encoder结构的介绍
multi-attention后面接一层残差网络,然后再做一个layer normalization
feed forward后面接一层残差网络,然后再做一个layer normalization
3、输入的位置向量是怎么得到的
在BERT中使用的是随机初始化一个向量,然后用数据学习这个位置向量。在transformer中是使用三角函数计算的。两者的计算方式和优缺点可以参考:自注意力与位置编码
4、为什么要用multi-attention?
Attention: Attention机制的中文名叫“注意力机制”,顾名思义,它的主要作用是让神经网络把“注意力”放在一部分输入上,即:区分输入的不同部分对输出的影响。
Self-Attention旨在用文本中的其它字来增强目标字的语义表示。由于每个注意力头初始化参数不一样,所以每个注意力头可以学习到不同的注意力空间。在不同的语义场景下,Attention所重点关注的字应有所不同。因此,Multi-head Self-Attention可以理解为考虑多种语义场景下目标字与文本中其它字的语义向量的不同融合方式。
5、BERT的多头是怎么分割的?
BERT在每个attention的计算中,是直接用输入的词向量分别跟三个768*768大小的矩阵相乘获得512*768的query,key和value矩阵的,然后每个矩阵在768的那个维度上进行切割,切割成12个512*64的矩阵,那么每个头的query、key和value都是512*64的矩阵,每一层有12个这样的头。这就是多头的切割。
多头的合并是在attention计算完之后,每个头得到各个字符新的语义表示之后,通过concat拼接而成的,这里的拼接是线性操作,在做完残差连接和LN之后,接了一层全连接网络,用gelu激活,这样就增加了注意力的非线性性,增强模型的表达力。
6、残差连接的作用是什么
解决网络层数比较多时产生的梯度消失的问题。
7、layer normalization 和batch normalization的区别
计算的维度不同,BN是基于不同batch的同一个channel计算的,LN是基于同一个batch的不同字符之间计算的。具体不同待更新。
8、为什么attention层后面还要接一个全连接层,这个的作用是什么
在做完残差连接和LN之后,接了一层全连接网络,用gelu激活,这样就增加了注意力的非线性性,增强模型的表达力。
9、bert-as-server提取词向量是提取的最后一层还是倒数第一层
- BERT的引申问题
-
transformer的结构的介绍
-
transformer中的位置向量是怎么计算的
-
为什么transformer中可以用三角函数计算position embedding
-
有没有对BERT的结构做过改进
-
为什么要用BERT模型
-
预训练模型是一个自监督的过程,不需要进行样本标记
-
谷歌在大语料上进行训练,学习到了较好的公共语言知识,后期只用少量的预料进行微调就可以了。
-
-
BERT跟word2vec的区别
-
self-attention和attention的区别