赞
踩
BERT的全称是Bidirectional Encoder Representation from Transformers,即双向 Transformer 的 Encoder,整体是一个自编码语言模型,模型的主要创新点都在 pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
这张图是论文中模型架构图,从主体上看,模型还是遵照了encoder-decoder的框架,左半部分为编码部分,右半部分为解码部分。
图中在Encoder和Decoder两边有Nx的标志,原文中也解释了Encoder部分叠加了6个完全一样的层,同样Decoder层也包含6个相同的层,不过值得注意的是模型中每一层之间都用到了残差连接。
对于每层Encoder的内部,首先会通过一个self-attention层,之后跟一层全连接前馈神经网络;而对于每层Decoder的内部,首先通过一个self-attention,之后会多跟一个attention层用于单词聚焦(类似之前RNN中加入的attention作用),之后同样会跟一层全连接前馈神经网络。
作者在一句话中随机选择 15% 的词汇用于预测。对于在原句中被抹去的词汇, 80% 情况下采用一个特殊符号 [MASK] 替换, 10% 情况下采用一个任意词替换,剩余 10% 情况下保持原词汇不变。
这样做的好处是,BERT 并不知道[MASK]替换的是这 15%个 Token 中的哪一个词(「注意:这里意思是输入的时候不知道[MASK]替换的是哪一个词,但是输出还是知道要预测哪个词的」),而且任何一个词都有可能是被替换掉的,这样强迫模型在编码当前时刻的时候不能太依赖于当前的词,而要考虑它的上下文,为 BERT 模型赋予了一定的文本纠错能力;(类似于 CBOW,用上下文预测当前词)
被随机选择15%的词当中以10%的概率保持不变,缓解了finetune时候与预训练时候输入不匹配的问题(预训练时候输入句子当中有mask,而finetune时候输入是完整无缺的句子,即为输入不匹配问题)。
给定一篇文章中的两句话,判断第二句话在文本中是否紧跟在第一句话之后。在实际预训练过程中,文章作者从文本语料库中随机选择 50% 正确语句对和 50% 错误语句对进行训练,与 Masked LM 任务相结合,让模型能够更准确地刻画语句乃至篇章层面的语义信息。
bert 模型的输入由三种 Embedding 求和平均而成,这三种向量均为随机生成,在训练过程中学习
不同于 RNN 计算当前词的特征要依赖于前文计算,有时序这个概念,BERT 的 Transformer-encoder 中的 self-attention 计算当前词的特征时候,没有时序这个概念,是同时利用上下文信息来计算的,一句话的 token 特征是通过矩阵并行运算的,故并行就体现在self-attention。
Q,K,V 是由 input embedding 分别乘上三个权重矩阵,经过不同的线性变换得到的。
这也是注意力的根本体现,怎么知道哪个 word 的权重最大呢(最重要),Q是目标词矩阵,K是关键词矩阵,V是原始特征,先使用 一个 Q(uery) 检索 key-value memories,计算相关性分数,找到和问题相似的 memory 的key,然后对 value embedding 进行加权求和,得到一个输出向量。即:计算当前词语(Q)对于所有其他每个单词(K)的 self attention 得到 attention weight
score = softmax(q * k / √dk)
value 代表的也是当前单词的词向量(作为最终被加权的向量)value 乘上这个 score 得到加权后的向量 embedding
Multi-Head Attention 相当于多个不同的 self-attention 的集成,形成多个子空间,将多个 attention 矩阵拼接乘一个大的矩阵,可以让模型去关注不同方面的信息。bert 网络同一层中的关注模式是一样的(如网络中的底层更偏向于关注语法,顶层更偏向于关注语义),因此 Multi-Head Attention 可以理解为 CNN 中多个 filter 一样,是一种 ensemble 或 noise 。从不同角度提取信息,提高信息提取的全面性。
作者在论文中的解释是点积后的结果大小是跟维度成正比的,所以经过softmax以后,梯度就会变很小,除以 dk 后可以让 attention 的权重分布方差为 1,否则会由于某个输入太大的话就会使得权重太接近于1(softmax 正向接近 1 的部分),梯度很小,造成参数更新困难。
由于 self-attention 中的计算都是线性的(矩阵乘积),为了提高模型的非线性拟合能力,需要在其后接上前馈网络。Transformer 中的 Feed-Forward Network 部分使用了ReLU作为激活函数,公式为:FFN(x) = max(0,xW1+b1)W2+b2;每一层会使用不同的参数,可以将其理解为两个Kernel size为1的卷积。
在模型结构中,每层都会间隔一层 Add & Norm即 layer-normalization,这里深度残差网络的特性,将前一层和前前一层的输出进行求和正则后,作为下一层的输入。
Decoder部分整体与Encoder是一致的,不过从模型图的右边我们可以看出其多了一个子层Multi-Head Attention,在Decoder时,会先进入第一个子层self-attention,得到Q,之后中间层的atention并不是self-attention,其K、V来自Encoder层,结合前一个Q,进入该子层,有这么几点需要注意下:
Decoder经过两个attention子层和一个FFN子层后的输出,其解码向量经过一个线性映射WX+b,将其映射到整个字典空间,然后经过softmax规整成字典词汇的概率分布,即每个词的分数,之后选取分数最高的词作为输出即可。
https://zhuanlan.zhihu.com/p/151412524
https://cloud.tencent.com/developer/article/1687276
https://www.jianshu.com/p/56a621e33d34
https://www.zhihu.com/question/325839123
https://www.zhihu.com/question/341222779
https://www.zhihu.com/question/339723385/answer/782509914
https://zhuanlan.zhihu.com/p/48508221
https://zhuanlan.zhihu.com/p/93475358
https://www.cnblogs.com/xlturing/p/10824400.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。