BERT总结
一、 rnn和cnn的局限性
RNN的输入是一串vector sequence ,输出是另外一串vector sequence。如果是单向RNN,输出b4时候,会把a1到a4都看过,输出b3时候,会把a1到a3都看过。
所以RNN存在的问题是不容易被平行化,即要算出b4,那么需要从a1依次看到a4才能算出。
CNN的好处是可以平行化,缺点是每一个CNN只能考虑非常有限的内容,要叠加很多层才能看到长期资讯。
CNN的特点是局部连接和权值共享。由输入层,卷积层,激活函数,池化层,全连接层组成。
二、self-Attention
过程
1,将单词转换成词向量
2,乘以三个不同的权值矩阵Wq,Wk,Wv得到Q,K,V
3,Q乘以K的转置
4,裁剪原因是如果点乘结果过大,会使得经过softmax之后的梯度很小,不利于反向传播
5,softmax归一化
6,结果点乘V得到Z
注释
(1)点积的集合意义:两个向量越相似,他们的点积就越大,否则就越小。
(2)d为向量q和v的维度,直观解释公式中除以根号d是因为q和k做点积的数值会随着维度增加而增大,为了把注意力矩阵变成标准正态分布,使得softmax归一化后的结果更加稳定,以便反向传播的时候获取平衡的梯度。
三、Multi-head self-Attention
用多头是因为我们要用注意力机制来提取多重语意的含义。
多头的好处是不同的head关注点不一样,多个头有多个Wqkv组合,可以关注不同的特点,获得不同特征,更有整体性。
四、BERT
bert输入字向量(token embedding)文本向量(segment embedding)位置向量(position embedding)
最后bert模型将三种向量的加和作为模型输入。
bert输出是文本中各个字词融合了全文语义信息后的向量表示
BERT预训练任务
bert用的是transformer的encoder侧的网络结构,使用了大规模数据进行预训练,用了两个任务来预测训练模型,第一个是maskLM方式,在输入一句话的时候,随机选取一些要预测的词mask掉,15%的概率mask词,80%用[mask]替换,10%随机替换其他字,10%不替换,然后根据上下问预测这些字。
第二个任务是NSP,判断两个句子在文章中是否为上下文,然后用语料进行训练。