赞
踩
本次要总结和分享的论文是GPT2,参考的实现代码model。本论文方法是在openAI-GPT的基础上进行了一些微小的修改得到的,从模型的角度来讲,只是大幅增大了模型规模,去掉了fine-tune过程,无论是在预训练和预测阶段都是完全的无监督,这点就很不可思议,但是的确做到了,而且效果还不错。网上对这篇论文的讲解非常多,这里本人就讲下自己浅薄的见解。
标准的语言模型:
p
(
x
)
=
∏
i
=
1
n
p
(
s
n
∣
s
1
,
s
2
,
.
.
.
,
s
n
−
1
)
p(x) = \prod_{i=1}^n p(s_n| s_1,s_2,...,s_{n-1})
p(x)=i=1∏np(sn∣s1,s2,...,sn−1)
对于单一任务的语言模型:
p
(
o
u
t
p
u
t
∣
i
n
p
u
t
)
p(output|input)
p(output∣input)
因为我们希望一个足够泛化的模型应该可以在多个不同任务上能表现良好,甚至对于相同的输入,针对不同的任务能得到不同的输出,也即是:
p
(
o
u
t
p
u
t
∣
i
n
p
u
t
,
t
a
s
k
)
p(output|input, task)
p(output∣input,task)
实际上,有监督学习的目标和无监督学习的目标是一致的,只不过有监督仅在序列的子集(而无监督是要生成整个序列)上进行评估,因此无监督目标的全局最小值也是有监督目标的全局最小值。论文中讲到,初步的实验证明,只要语言模型足够大,是可以进行多任务学习的,但是学习速度比有监督可要慢得多。
在这部分,论文讲了一大堆数据的重要性,例如数据量、数据多样性、数据质量等等对模型的影响。而本论文旨在尽可能地构建和利用足够大且多样化的数据集,以便模型能应用到尽可能多的不同NLP任务上。
因为本论文所提方法是完全无监督的,所以不需要特别的去收集带标签的数据,可以直接在互联网中采集数据。论文中是这样采集的:
最终收集到的数据大小有40G,模型将在这40G的数据集上进行预训练。
在数据预处理上,论文并没有对句子做分词处理,而是采用字节粒度上的BPE方式,自动的对所有的字节按照其出现的频率进行贪心方式的合并,从而达到了自动的分词效果,并且阻止BPE跨任何字节序列的字符类别的合并,防止避免得到类似于’dog.’、‘dog!’、‘dog?.’ 的词,从而提高了词表空间使用效率。
几乎与GPT1中的模型完全一样,只不过在加了两层layer-normalization,分别放在模型输入后和最后一个self-attention block后。 使用了修改的初始化方案,该方案考虑了具有模型深度的残差路径上的累积。 我们在初始化时将残差层的权重缩放
1
/
n
1/\sqrt{n}
1/n
倍,其中N是残差层的数量。 词表大小扩大到50,257。 我们还将上下文大小从512个token增加到1024,并使用更大的batch_size=512。
上图中最小的模型,12层的transform block,即最原始的GPT模型
24层的transform block,即BERT模型
48层的transform block,即是论文中GPT2模型,可见GPT2模型在容量上,预训练数据量上都大幅超越以往的模型。
一定要注意,无论在任何任务,任何数据集上,论文中的GPT2都是直接进行无监督的预测或生成!!!,没有fine-tune!!!
这里挑几个有意思的任务说下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。