一文彻底搞懂论文 - GPT-1

文摘   科技   2024-10-16 12:37   湖北  

GPT-1利用一个可扩展、与任务无关的系统,在一系列多样化的语言任务上取得了最先进的结果。GPT-1的方法结合了两种现有思想:Transformer无监督预训练。这些结果表明,将监督学习方法无监督预训练相结合效果非常好;这是许多人过去已经探索过的思想,GPT-1将这一思想应用于更大、更多样化的数据集上。

接下来分为四部分:摘要、引言、框架、实验,一起来精读论文:GPT-1:Improving Language Understanding by Generative Pre-Training(通过生成式预训练提升语言理解能力)

GPT-1:通过生成式预训练提升语言理解能力

一、摘要

自然语言处理(NLP)面临的挑战是什么?尽管大量未标注的文本语料库丰富多样,但用于学习这些特定任务的标注数据却十分稀缺,这使得判别式训练模型难以达到令人满意的性能。
无标签文本多,有标签的文本少 -- 架构师带你玩转AI

如何解决现状问题?通过对未标注文本多样语料库上的语言模型进行生成式预训练,然后对每个特定任务进行判别式微调,可以在这些任务上实现显著提升。
无监督预训练,有监督微调。这个思路非常的大胆、创新,将计算机视觉(CV)的预训练思想引入到NLP。 -- 架构师带你玩转AI

在计算机视觉领域,预训练通常依赖于像ImageNet这样的标注数据集。而GPT在自然语言处理领域带来了创新,它通过无监督预训练使得大量无标签数据能够被有效利用。此外,预训练好的模型还可以进行微调,以适应各种下游任务。


一文彻底搞懂Fine-tuning - 预训练和微调(Pre-training vs Fine-tuning)
Pre-training + Fine-tuning的效果如何?我们的通用任务无关模型在12项研究任务中的9项上显著优于针对每项任务专门设计的架构的判别式训练模型,刷新了这些任务上的最先进水平。例如,我们在常识推理(Stories Cloze Test)上实现了8.9%的绝对提升,在问答(RACE)上实现了5.7%的绝对提升,在文本蕴含(MultiNLI)上实现了1.5%的绝对提升。
12项任务中,有9项达到SOTA。-- 架构师带你玩转AI

二、引言

为什么要使用无标签数据?能够从未标注数据中利用语言信息的模型为收集更多标注数据提供了一种有价值的替代方案,因为收集标注数据既耗时又昂贵

一文彻底搞懂大模型 - 开源数据标注平台Label Studio

如何利用无标签数据?当时最成功的还是词嵌入模型(Word Embeddings)

一文彻底搞懂Embedding - Word2Vec(Skip-Gram和CBOW)
然而,从未标注文本中利用超过词级信息存在两大挑战
  • 损失函数设计困难:不清楚什么样的优化目标对文本有效。

  • 特征迁移困难:怎么样把学习到的问题表示,传递到下游的子任务上;没有一种表示,能够迁移到所有子任务上。

如何解决这两个挑战?探索了一种结合无监督预训练和监督微调的语言理解任务半监督方法。我们的目标是学习一种通用表示,该表示能够经过少量调整就迁移到各种任务中。

提出一个半监督的方法(无监督预训练+有监督微调),即在无标签的数据上,先训练一个比较大的语言模型,然后根据子任务进行微调。

基于预训练模型进行微调的时代来临了,后续的BERT、GPT-2、GPT-3、GPT-4继续沿着这条路线探索,只是后来不再称为半监督学习,而是叫做自监督学习。-- 架构师带你玩转AI

三、框架

模型的训练过程是什么?我们的训练过程分为两个阶段。首先,我们以无监督的方式在大量数据上训练一个 Transformer 模型,然后我们在小得多的监督数据集上微调该模型,以帮助它解决特定任务。
两个阶段:无监督预训练 + 有监督微调
什么是无监督预训练(Unsupervised pre-training)?给定一个未监督的语料信息 𝑈={𝑢1,…,𝑢𝑛},使用标准的语言模型,使下面这个似然函数最大化:

𝐿1(𝑈)=∑log⁡𝑃(𝑢𝑖∣𝑢𝑖−𝑘,…,𝑢𝑖−1;Θ)

其中k是上下文窗口的大小,条件概率P使用带有参数Θ的神经网络进行建模。

使用最大似然估计(Maximum Likelihood Estimation,MLE),根据上文的k个单词,预测下一个最大概率的单词𝑢𝑖。

如何实现根据上文预测下一个单词?在我们的实验中,我们使用多层Transformer解码器作为语言模型。该模型对输入上下文令牌执行多头自注意力操作,然后应用位置全连接层来产生目标令牌上的输出分布。

其中,𝑈=(𝑢−𝑘,…,𝑢−1)为上下文tokens向量,𝑛为transformer的层数,𝑊𝑒为词嵌入矩阵,𝑊𝑝为位置编码矩阵。

什么是有监督微调(Supervised fine-tuning)?我们假设有一个带标签的数据集C,其中每个实例由一个输入令牌序列x1, ..., xm以及一个标签y组成。输入通过我们的预训练模型传递以获得Transformer块的最后一层输出 ,然后将其输入到带有参数Wy的附加线性输出层中以预测y。

L3(C) = L2(C) + λ * L1(C) (5),除了考虑微调损失,还考虑了预训练部分的损失,并用λ加权。

总的来说,在微调期间我们需要的唯一额外参数是Wy分隔符令牌的嵌入

如何针对特定任务进行输入转换?对于某些任务,如文本分类,我们可以直接按照上述描述对模型进行微调。然而,其他一些任务,如问答或文本蕴含,其输入具有特定的结构,例如有序的句子对,或者文档、问题和答案的三元组

  • 文本分类:一段文本,在前面加入开始词元[Start],在后面加入抽取词元[Extract],模型对最后一个词抽取的特征[Extract]放入线性层进行分类。

  • 文本蕴含:给一段话,再给一个假设,判断前面一段话是否蕴含提出的假设。即两段文本做三分类问题(支持,不支持,既不支持也不反对)。将两段问题串成一个序列,使用开始符[Start],分隔符[Delim],抽取符[Extract]

  • 相似性:判断两段文字是不是相似。相似是对称的,a和b相似,则b和a也相似。生成两个序列,两个序列的文字顺序不同,再使用开始符[Start],分隔符[Delim],抽取符[Extract]。得到两段输出后,经过Transformer相加,最后经过线性层进行二分类。

  • 多选题(答和常识推理):如果有n个答案,构造n个序列,前面是问题,每一个答案作为第二个序列;每个序列进入Transformer块,最后经过线性层,输出答案的置信度;最后做一个softmax。

复用预训练的Transformer解码器结构,加一个线性层,不同的任务需要不同的输入。

四、实验

无监督预训练使用什么数据集?我们使用BookCorpus数据集来训练语言模型。它包含了7,000多本独特的未出版书籍,涵盖冒险、奇幻、浪漫等多种体裁。
模型的规格有多大?我们的模型在很大程度上遵循了原始的Transformer工作。我们训练了一个12层的仅解码器Transformer,带有掩码自注意力头(状态维度为768,注意力头数量为12)。


参考资料

  • https://openai.com/index/language-unsupervised/
  • https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf

  • https://www.bilibili.com/video/BV1AF411b7xQ/


架构师带你玩转AI
分享人工智能,让所有人玩转AI
 最新文章