自监督学习是一种无标注的学习方式。由于其不使用标注的数据,它可以看作是一种无监督学习方法。有趣的是,自监督学习的模型大多是以芝麻街的角色命名 image-20260221174135904

BERT

BERT 是一个 Transformer 的编码器,BERT 的架构与 Transformer 的编码器完全相同,里面有很多自注意力和残差连接、归一化等。

BERT 的输入是一段文字,接下来需要随即掩码一些输入文字,被掩码的部分是随机决定的。有两种方式实现掩码,第一种方法是用特殊符号替换句子里的单词,使用 “MASK” 来表示特殊符号;另一种方法是用另一个字随即替换一个字

掩码的两种方法

如下图,掩码后,向 BERT 输入了一个序列,BERT 的相应输出就是另一个序列。接下来查看掩码部分的对应的输出,对这个输出的向量做线性变换(乘一个矩阵),然后做 softmax 并输出一个分布。输出是一个很长的向量,包含要处理的每个汉字,每个字对应一个分数,这个向量是 softmax 生成的分布。BERT 预测过程

BERT 的训练过程是这样的:由于 BERT 不知道掩码的实际字符,训练的目标是输出一个尽可能接近真实答案的字符,用 one-hot 编码表示该字符,并最小化输出和 one-hot 向量之间的交叉熵损失。这个问题可以看作一个分类问题,只是类的数量和汉字的数量一样多。在训练过程中,在 BERT 之后添加一个线性模型并将它们一起训练 BERT 的训练过程

训练 BERT 时,除了掩码之外,还有另一种方法:下一句预测。即从句子数据库中拿出两个句子,并在句子中间加入一个特殊 token [SEP] 来代表它们之间的分隔,这样 BERT 就可以知道这两个句子是不同的句子,我们还会在整个序列的最前面加入一个特殊 token [CLS],然后通过某种方式判断两个句子是否是相接的。由于该方法对 BERT 的提升微乎其微,本文不再赘述。

BERT 的使用方式

在训练时,让 BERT 学习两个任务。

• 把一些字符掩盖起来,让它做填空题,补充掩码的字符。

• 预测两个句子是否有顺序关系(两个句子是否应该接在一起),这个任务没什么用。

通过这两个任务,BERT 学会了如何填空。在训练模型填空后,也可以用于其他任务。如下图所示,这些任务不一定与填空有关,它可能是完全不同的东西. 尽管如此,BERT 仍然可以用于这些任务. 这些任务是真正使用 BERT 的任务,可称为下游任务 image-20260221201256549

给 BERT 一些有标注的数据,它可以学习各种任务,将 BERT 分化并用于各种任务称为微调。在微调之前产生此 BERT 的过程称为预训练。要测试 BERT 的能力,通常会在多个任务上进行测试,不会只测试它在单个任务上的能力。可以让 BERT 分化做各种任务来查看它在每个任务上的正确率,再取平均值。对模型进行测试的不同任务的这种集合,可以将其称为任务集,任务集中最著名的基准测试称为通用语言理解评估(GLUE),这里面一共有 9 个任务,如果我们想知道 BERT 这样的模型训练的是否很好,可以针对 9 个单独的任务进行微调。因此,实际上会为 9 个单独的任务获得 9 个模型,这 9 个任务的平均准确率代表该自监督模型的性能。

BERT 究竟是如何使用的?接下来介绍下 4 个使用 BERT 的情况

情感分析

给机器一个句子,并让它判断句子是正面的还是负面的。给它一个句子,把 [CLS] 词元放在这个句子前面。[CLS]、$w_1$、$w_2$、$w_3$ 4 个输入对应 4 个输出。接着,对 [CLS] 对应的向量应用线性变换,将其乘上一个矩阵. 这里省略了 softmax,通过 softmax 来确定输出类别是正面的或负面的。值得一提的是,必须要有下游任务的标注数据。在训练时,线性变换和 BERT 模型都利用梯度下降来更新参数. 线性变换的参数是随机初始化的,而 BERT 初始的参数是预训练得出的,接着利用梯度下降来更新这些参数,最小化损失 用 BERT 做情感分析

词性标注

词性标注是指给定机器一个句子,其可以知道该句子中每个单词的词性。即使这个词是相同的,它也可能有不同的词性。向 BERT 输入一个句子,对于这句话中的每个词元都有一个对应的向量,然后把这些向量依次通过线性变换和 softmax 层,最后网络预测给定单词所属的类别。,注意要有一些带标签的数据,这仍然是一个典型的分类问题,同时,BERT 的初始参数也是预训练的权重 用 BERT 做词性标注

自然语言推理

给机器两个输入语句:前提和假设。机器所做的是判断是否可以从前提中推断出假设,即前提与假设是否矛盾。给定两个句子,这两个句子之间有一个特殊的 token [SEP],并把 [CLS] 词元放在最前面,这就是 BERT 的输入,然后 BERT 将输出另一个长度相同的序列,但只将 [CLS] 词元作为线性变换的输入,然后决定这两个句子之间的类别。它仍需要标注的数据对模型进行训练,同时,BERT 的初始参数也是预训练的权重

使用 BERT 进行自然语言推理

基于提取的回答

简单的问答系统,给机器读一篇文章,问它一个问题,它就会回答一个答案,假设这个答案必须出现在文章里面,即答案一定是文章中的一个片段,这就叫基于提取的回答。在此任务中,输入序列包含一篇文章和一个问题,它们都是序列:
$$
D = {d_1, d_2,···, d_N}
$$

$$
Q ={q_1, q_2,···, q_N}
$$

对于中文,该式每个 d 代表一个汉字,每个 q 代表一个汉字。将 D 和 Q 放入问答模型中,希望它输出两个正整数 s 和 e,根据 s 和 e 可以直接从文章中截出一段就是答案,即文章中第 s 个单词到第 e 个单词的片段就是正确答案,例如下图 基于提取的问答

与自然语言推理相似,给 BERT 看一个问题、一篇文章,问题和文章之间用 [SEP] 隔开,然后在开头放置 [CLS] 词元。在此任务中,我们唯一需要从头开始训练(随机初始化)的只有两个向量,这两个向量的长度与 BERT 的输出是相同的。

如何使用这两个向量呢,如下图(a)所示,首先计算橙色向量与文档对应的输出向量的内积,然后将它们传递给 softmax 函数,最大的输出即为答案的起始位置。同理计算蓝色向量,得到答案的结束位置。那么蓝色向量和橙色向量有什么区别呢,损失函数是由开始位置的偏差和结束位置的偏差共同决定的,$L=L_{strat}+L_{end}$,想要损失函数最小,就要同时考虑开始位置和结束位置,一个向量只负责降低开始 loss,另一个向量只负责降低结束 loss,最终模型会让两个 loss 都尽量小。它仍需要标注的数据对模型进行训练,同时,BERT 的初始参数也是预训练的权重,但蓝色和橙色向量是随机初始化的。

使用 BERT 来进行问答

BERT 有用的原因

当输入一串文字时,每个文字都有一个对应的向量,即 word embedding。意思相近的字,嵌入更接近。由于编码器有自注意力,同一个字在不同的上下文得到的向量也会不同,比如“吃苹果”和”苹果手机”。 接下来,计算这些向量之间的余弦相似度,BERT 在填空的过程中就学会了每个字的意思 计算余弦相似度

BERT 在学习填空的过程中所做的,就是学习从上下文中提取信息. 训练 BERT 时,给它 $w_1$、$w_2$、$w_3$ 和 $w_4$,掩码 $w_2$,并告诉它预测 $w_2$。它会从上下文中提取信息来预测 $w_2$。所以这个向量就是它的上下文信息的精华,可以用来预测 $w_2$ 是什么。当然,这种想法在 word embedding 的 CBOW 技术中也有体现,BERT 相当于一个深度 CBOW 通过上下文信息预测掩码部分

BERT 还可以根据不同的上下文从相同的词汇中产生不同的嵌入,称为语境化的词嵌入

BERT 的变种

BERT 还有很多其他的变种,比如 多语言 BERT(multi-lingual BERT),它使用中文、英文、德文、法文等多达 104 种语言进行训练 BERT 做填空题。值得注意的是,如下表所示,对于多语言的 BERT,不同的语言的差异不大,因为不管使用中文还是英文,对于意思相同的词,它们的嵌入都会很近。所以兔子和 rabbit 的嵌入很近,跳和 jump 的嵌入很近,鱼和 fish 的嵌入很近,游和 swim 的嵌入很近。在相近的嵌入的情况下,BERT 没有输入英文输出中文的情况,说明它知道来自语言不同语言的信息,它不会完全抹掉语言,语言信息可以被找到。

模型 预训练 微调 测试 EM F1
QANet 中文 66.1 78.1
中文 中文 82.0 89.1
中文 中文 81.2 88.7
BERT 104 种语言 英文 63.3 78.8
中文 + 英文 82.6 90.1

语言信息并没有隐藏很深,把所有的英文单词丢到多语言 BERT 中,把它们的嵌入平均起来,再把所有中文的嵌入平均起来,两者相减就是中文和英文之间的差距。给多语言 BERT 一个英文句子并得到它的嵌入,把这些嵌入加上蓝色的向量就变成了中文的句子,利用这点可以考虑做无监督翻译 中英文之间的差距

生成式预训练(GPT)

GPT 要做的任务是预测接下来会出现的词元,可以说 GPT 是 Transformer 的 Decoder 的扩展。由于 GPT 的规模巨大,训练一个轮次可能都有困难,因此 GPT 系列有一个和人类更接近的使用方式,通过输入任务描述、例子、提示,即 小样本学习(小样本学习,即在小样本上的快速学习能力。每个类只有 k 个标注样本,k 非常小。如果 k = 1,称为单样本学习(one-shot learning);如果 k = 0,称为零样本学习 (zero-shot learning))

语境学习

GPT 中的小样本学习不是一般的学习,这里面完全没有梯度下降,这种训练称为语境学习,代表它不是一种一般的学习,它连梯度下降都没有做。下图为使用 GPT-3 进行语境学习的参数量与准确率及小样本间的关系

使用 GPT-3 进行语境学习

自监督学习不仅可以用在文字上,还可以用在语音和计算机视觉其他领域的自监督学习