一、Transformer模型

本节主要认识Bert模型,那么Bert到底是什么?这里就要谈及Transformer模型了⬇
在这里插入图片描述
我们可以看到,Transformer模型可以被分为两部分,左边为编码器,右边为解码器。Bert就属于编码器部分,而生成模型gpt属于解码器部分,所以Bert主要的作用就是编码。所以,Bert的核心到底是什么?

二、Bert的嵌入层(Embedding)

文字怎么编码?

要做自然语言处理,自然要能把一段文字以计算机能看懂的方式输入到模型,这种方式就是编码

最朴素的想法,就是用独热编码(One-hot),但是独热编码实在是太大太浪费空间,而且无法体现段落中文字之间的关系,所以我们希望通过模型训练出来一种更加凝练的编码方式。这种新的编码不仅更节省空间,还能蕴含字词的语义信息与文本的关联关系,是一种更高级的稠密编码

其实思路很简单,用一个简单的线性模型就可以实现。比如我们要给汉字编码,假设我们有21128个汉字,希望得到768维的特征输出,那么只需将每个汉字对应的独热编码,通过一个Linear(21128,768)即可。实际上,在这里所谓的线性模型被称为嵌入层(Embedding),而Linear(21128,26)被称为Embedding(21128,768),每个汉字的编码长度由21128降到了768。

Q.为什么独热编码无关系?
A.因为独热编码的本质是孤立的稀疏向量,每个向量之间相互正交(相似度为 0)

Q.Embedding的作用?
A.Embedding解决了独热编码长度爆炸的问题,更是重要的是向量之间不再正交,因此语义相似的词距离可以靠得更近

Q.独热编码只能输入字啊?
A.词的话有别的模型

三、Bert的自注意力机制(Self-attention)

Embedding 层通过训练,让向量编码了词的语义,但是考虑到词在不同的序列中,会拥有不同的含义,因此,我们还要赋予模型在处理序列时,动态捕捉不同位置的上下文关联的能力

Bert引入了自注意力机制(Self-attention),这种机制在原本线性的基础上,为每个文字(输入向量)增加了注意力向量,例如,我们有四个文字α1 α2 α3 α4,那么(α1,1 α1,2 α1,3 α1,4)=(0.1 0.2 0.3 0.4) 就是α1对其他输入向量的注意力。

那么注意力向量如何计算?Bert给出的流程是这样的:Bert拥有一个注意力权重矩阵,这个矩阵内含有三个分工明确的矩阵,分别是查询权重矩阵Wq(Query Weight Matrix),键权重矩阵Wk(Key Weight Matrix)值权重矩阵Wv(Value Weight Matrix)

举个栗子:

例如要求α1对其他输入向量的注意力,首先我们需要q1=α1Wq,k1=α1Wk,k2=α2Wk,k3=α3Wk,k4=α4Wk,其中q1用于“主动查询”,k1,k2,k3,k4用于“被动提供”信息,我们初步令𝛼1,1=q1k1,𝛼1,2=q1k2,𝛼1,3=q1k3,𝛼1,4=q1k4,然后使用Soft-max进行归一化,得到𝛼‘1,1,𝛼‘1,2,𝛼‘1,3,𝛼‘1,4。然后我们还需要做v1=α1Wv,v2=α2Wv,v3=α3Wv,v4=α4*Wv的主动映射,这样(𝛼‘1,1+v1,𝛼‘1,2+v2,𝛼‘1,3+v3,𝛼‘1,4+v4)就是注意力向量,b1=𝛼‘1,1+v1 + 𝛼‘1,2 v2+ 𝛼‘1,3 +v3 + 𝛼‘1,4+v4就是输出向量的第一个值。
在这里插入图片描述

当然上面的说法只是单个运算的例子,实际上通过矩阵运算这个过程是很简单的。我们令Q=(q1.q2,q3,q4),K=(k1,k2,k3,k4),V=(v1,v2,v3,v4),I=(α1,α2,α3,α4),这样Q=IWq,K=IWk,V=IWv,然后令A’=softmax(QKT),然后令O=A’*Vj就得到了输出向量。

Q=I*Wq,K=I*Wk,V=I*Wv A'=softmax(Q*KT) O=A'*Vj
Q.注意力机制为什么不用RNN或LSTM?
A.RNN和LSTM的核心机制都是记忆单元,而记忆单元的传递是逐字的,这就导致速度太慢

Q.Self-attention的优点是什么?
A.Self-attention考虑了上下文关联问题,同时并行计算使得效率提高

Q.可训练参数有哪些?
A.截至目前为Embedding的参数W,Self-attention的Wq,Wk,Wv

Q.维度变化?
A.One-hot编码为21128,经过Embedding变为768,经过Self-attention不变仍为768

Q.模型深度?
A.Self-attention输入输出同维度,所以深度可以做的很深

Q.做分类问题时,可能会对输出做加法,这样的话比如”我爱你“和”你爱我“就无法区分了?
A.所以我们可以优化Embedding 为词Embedding 和位置Embedding ,在Bert中,位置Embedding 提供了一族可被训练的位置向量,我们要用这个向量和词Embedding 的输出相加,以此来携带位置信息

除以上,Bert还有残差连接,两次linear,N次深度增加等机制

四、实际中Bert的其他机制

上面介绍了Bert最核心的机制,实际的Bert模型还有一些其它要知道的地方

1、比如本文最开始的那张Transformer图,可以看到其中还有残差连接,两次linear,N次深度增加

2、Bert是自监督预训练模型,这意味着我们主要用其通过微调完成下游任务 流下了贫穷的泪水

3、Bert主要的训练方式是遮盖的方法,80%进行遮盖,10%进行替换,10%不进行改动

4、Bert的Embedding,除了Token Embedding和Position Embedding之外,还有Segment Embedding,用于区分不同的句子

5、在token中,有一些特殊token。[CLS]往往设置在句子的开头,因为包含与其他token的关系,可以直接用来做分类任务。[ESP]是标点符号,以及结束标记。
在这里插入图片描述
6、在分类任务中,需要的是整个句子的语义表征,也就是仅一个向量,而我们的输出是所有Token的向量,所以需要一次池化。Bert的池化有四种方式,只输出CLS, 平均池化,最大池化和其他,最常用的就是仅保留CLS

更多推荐