关于Bert
Bert的15%mask比例怎么来的
猜测,可以类似CBOW中滑动窗口的中心词,区别是这里的滑动窗口是非重叠的。
学习率为什么使用warm-up优化策略
- 有助于减缓模型在初始阶段对mini-batch的提前过拟合,保持分布的平稳;
- 有助于保持模型深层的稳定性(decay)
热启动到最大learning rate之后为什么还要decay呢?模型训练一定阶段后,模型分布已经比较固定了,即可以学到的新东西就很少了,如果还沿用较大学习率,就会破坏这种稳定性,即在接近loss的local optimal时,需要更缓慢的更新。
LayerNorm和BatchNorm
Bert中使用LayerNorm结构。二者区别主要是规范化的维度不同。
Norm操作在激活函数之前进行。
LayerNorm:针对单个样本,即对每层输出的768维隐层向量做规范化
BatchNorm:针对一个batch里的数据进行规范化,即面向当前batch的所有输入,1.求batch_x均值;2.求batch_x方差;3.对x做归一化;4.引入缩放参数w
和平移参数b
计算最终的输出。
(补充:如果仅对x做归一化,不做后续处理,会使得模型学不到东西,加入参数后,可以保证每一batch数据经过归一化之后还保留学来的特征,同时完成归一化操作。
Bert词表里的wordpiece
Bert词表中如果某词出现频率过低,会被标记为UNK标签。使用wordpiece可以将单词打散为字符(片段),在分词时将OOV的词进行切分,使得模型依旧可以学到该词的信息。
wordpiece与BPE(Byte Pair Encoding)算法类似,也是每次从词表中选出两个子词合并成新的子词。与BPE的最大区别在于,如何选择两个子词进行合并:BPE选择频数最高的相邻子词合并,而WordPiece选择能够提升语言模型概率最大的相邻子词加入词表。
CLS标志
self-attention会使用上下文本的词来增强目标词的语义表示,但在计算过程中,目标词本身的语义依旧占较大的比例。而[CLS]位本身没有语义,经过12层,得到的是attention后所有词的加权平均,相比其他正常词,可以更好的表征句子语义。
input embedding 为什么要加positional encoding?
由于self-attention是位置无关,无论当前token在哪个位置,其hidden embedding都一样。positional encoding公式:对不同维度使用不同频率的正\余弦进而得到不同位置的高维位置编码。
Bert与ELMo比较:
ELMo效果挼于Bert的原因可能有以下几点见解:LSTM的特征抽取能力弱于Transformer;经前向后向特征拼接得到的信息弱于self-attention得到的特征信息;Bert模型参数多。
Bert中为什么使用单独的[MASK]标志,而不是借鉴attention中计算score使用的sequence mask?
[MASK]标志起到一个占位符的作用,虽然词义本身被mask掉了,但position embedding的信息是有的。如果使用attention mask,相当于这个位置的token永远不会参与计算。
关于transformer
QKV参数矩阵的影响
在相同量级下,qi和ki的点积值会是最大的,即在softmax中会使得当前词i多占比重为最大,这有悖于“利用上下文信息来增强当前词的语义表示”,因此,乘以QKV矩阵后,会使每个词的q, k, v不同,能有效减轻上述情况。而且,QKV也使得多头attention可以捕获到更丰富的特征。
self-attention的时间复杂度
self-attention的相似计算(matmul)、加权平均都可看作两个矩阵相乘,因此T=O(n^2 * d)
;
multi-head self-attention也是T=O(n^2 * a * m)=O(n^2 * d)
Transformer的权重共享
(1) 在Encoder和Decoder之间的Embedding层做了权重共享:
源论文中是允许目标语言和源语言之间共享词表,作词嵌入时只有对应embedding被激活,在遇到相同subword时可以共享语义信息。但会增加softmax的计算量。
(2) Decoder层中的Embedding层和FC层权重共享
attention在matmul之后为什么要scaled
做点积运算后的结果与dim大小成正比,dimension大的情况下会导致点积的方差很大,在均值为0的前提下这就意味着点积后的值会更大,该值很大时,经softmax之后梯度会消失为0,造成参数更新困难。除以后可以让attention的权重分布方差为1,而不是 。
Transformer位置编码总结
将位置信息融入输入中,有两种做法:
- 绝对位置编码。将位置编码当作可训练参数,随模型训练进行更新,这种做法的缺陷是无法处理超出固定长度的文本。绝对编码有:三角函数式编码、递归式编码(如采用RNN得到位置编码,但会牺牲一定并行性和速度)。
- 相对位置编码。相对位置并没有完整建模每个输入的位置信息,而是在算attention时候考虑当前位置于被attention位置的相对距离