BERT
模型结构与输入输出
BERT框架两个步骤:预训练和微调
- 预训练是在无标签数据集上训练的
- 微调使用的也是BERT模型,其权重初始化为预训练权重。所有权重在微调时都会参与训练,微调时使用有标签的数据。
- 每个下游任务都会创建一个新的BERT模型,来训练自己的任务。说明见下图:
BERT的一个显着特征是其跨不同任务的统一体系结构。 预训练的体系结构与最终的下游体系结构之间的差异很小。
模型结构
BERT的模型架构是多层双向Transformer编码器,基于Vaswani等人描述的原始实现。
模型输入输出
为了可以处理多种任务,BERT输入可以是一个句子,也可以是句子对。在整个工作中,“句子”可以是一段连续的文本,而不仅仅真正语义上的一句话。BERT的输入是一个标记序列,可以是一个或两个句子。
Transformer
- 纯attention,并行化,克服了卷积难以对长的序列进行建模的缺点。
- 使用 multi-head attention 的原因是模拟卷积神经网络的多通道机制。
- transformer 使用了 auto-regressive (自回归机制),过去时刻的输出会作为当前时刻的输入,这一点在解码器部分有所体现,因为在做预测的时候是看不到当前时刻之后的输出的。
- 在自注意力机制里面,每一次都是能够看到完整的输入,因此通过使用带掩码的注意力机制对解码器进行训练,使得在预测第t个时刻的输出时,只能看到t个时刻之前的输出。
- 预测的时候使用的是全局的均值和方差。
- 相似度 compatibility function 不同的注意力机制有不同的算法。
- transformer 使用的是 scaled dot-product attention 是一种最简单的注意力机制。
- query 和 key 的大小是等长的,每个 query 和 key作内积,如果内积的值越大,这两个向量的相似度越高,内积为0,两个向量内交,那么相似度为0
- 算出相似度之后,除以根号下 dk , dk也就是向量的长度,然后再使用一个 softmax 来得到权重,得到n个非负的,且向加值为1的权重,然后将这个权重作用在value上得到最终的输出。
- MLP 的作用是进行一个语义空间的转换,对序列信息进行一个有效的使用,也就是对position encoding 的编码进行一个有效的转化使用
- embedding 层的权重乘上了根号下 dmodel = 512 为了保证和 position encoding 那一部分保证同一个 scale
layer normal 和 batch normal 的区别:
batch normal 是对整个batch构成的特征图中,对每一个特征进行归一化,也就是减去 feature map 某一列构成的向量的均值,再除以方差。
layer normal 是对整个batch构成的特征图中,对每一个样本进行归一化,也就是减去 feature map 某一行构成的向量的均值,再除以方差。
Mulit_Head_Attention
所谓的多头注意力机制,其实有点像CNN中的通道的意思。在处理VKQ时,不直接输入到注意力机制模块中,而是先将其投影到低维,这个投影的W参数是可以学一个参数,然后将这个低维的东西输入到Attention模块中。这个过程我们做了h次,每次我们希望投影的角度不同,即希望其学到不同的东西,也因此我们有多个不同的可以学习的W参数。随后,将这些输出直接进行concat,这样就得到了结果。在transformer中,h取的是8.