Bert 结构详解
1 Bert 模型结构
图1,我们导入bert 14 分类model,并且打印出模型结构。
图2
图 2 是BertForSequenceClassification 模型的结构,可以看出 bert Model 有两大部分组成,embeddings 和 encoder。上面我们已经介绍过了transformer,Bert的结构就是 transformer encoder 的结构。 下面我们分别介绍embeddings 和 encoder。
2 bert embedding 层
图3
由图3 可以看出, word_embeddings 转换器 输入维度是 21128 ,输出维度是 768,21128就是bert字典的大小。 由于max_length 取了512,positional_embeddings 转换器的输入维度是512,它要给每个字加上位置信息。Bert 中token type 只有0 和1,因此,token_type_embeddings 转换器输入为2维。最后 我们把word embedding,positional embedding 和 token_type_embedding 进行向量相加,把最后结果进行 layer Normalization。
3 bert encoder
图4
如图4 bert encoder 主要分为两部分,自注意力和前馈神经网络。3.1 bert attention
3.1.1什么是查询向量、键向量和值向量向量?
图5
图6
图7
3.1.2通过矩阵运算实现自注意力机制
图8
图9
3.1.3 多头注意力
Bert base 使用的是 12 heads attention,multi head attention扩展了模型专注于不同位置的能力。
图10
使用 multi head attention,我们为每个头保持独立的查询、键、值权重矩阵。我们使用X乘以WQ/WK/WV 矩阵来产生查询、键、值权值矩阵。
图11
图 11 与上面自注意力机制计算相同,只需要进行12次不同的权重矩阵运算,我们就可以的到12个不同的Z矩阵。
图12
最后把 12个矩阵拼接成一个矩阵
3.1.4 bert多头注意力
图13
图13 我们再对照一下BertSelfAttention结构。Linear(in_features=768, out_features=768, bias=True) 其实就是query_weight ,key_weight, value_weight 矩阵。Bert base 使用的是 12 heads attention,其query,key,value是64维度。12*64 = 768,这正好和 in_features, out_features 和 embedding size维度想对应。
图14图14 经过attentions 后Z矩阵和input embeddings 求和归一。
3.2 前馈神经网络
图15
图15 我们把图14 的结果输入到前馈神经网络中,将其结果和输入求和归一。其输出的结果作为下一个bert layer 的输入。
图16
图16 大家可以对照bert encoder 和 代码看一下。4 任务层
图17
图17 这个模型是bert 14 分类任务,因此最后 连接了一个 Linear 层,输入768 维度,输出14维度。