GPT这篇论文,我还是在GPT-2出来了之后,被它能续写《红楼梦》这一事件而震惊,所以才统一看了一下这两篇论文。这俩都是OpenAI出的,也是用pretrain+fintune的套路进行处理。
文章目录
一. GPT原理
GPT的训练分为两个阶段:1)无监督预训练语言模型;2)各个任务的微调。
1. 无监督pretrain
这一步论文里面用的是Transformer的decoder作为LM。它的目的是优化如下的损失函数:
L 1 ( U ) = ∑ i l o g P ( u i ∣ u i − k , . . . , u i − 1 ; Θ ) L_1(U) = \sum_i logP(u_i | u_{i-k}, ..., u_{i-1}; \Theta) L1(U)=i∑logP(ui∣ui−k,...,ui−1;Θ)
对于transformer的decoder,可以简写为如下的样子:
h 0 = U W e + W p h_0 = UW_e + W_p h0=UWe+Wp
h l = t r a n s f o r m e r _ b l o c k ( h l − 1 ) ∀ i ∈ [ 1 , n ] h_l = transformer\_block(h_{l-1}) \forall i \in [1, n] hl=transformer_block(hl−1)∀i∈[1,n]
P ( u ) = s o f t m a x ( h n W e T ) P(u) = softmax(h_n W_e^T) P(u)=softmax(hnWeT)
熟悉Transformer的读者应该都知道,这里就不再赘述,不熟悉的可以看笔者之前的博客
2. 有监督finetune
以分类任务为例,在用前面的LM得到最后一个timestep的输出之后,可以用如下的方式去进行finetune:
P ( y ∣ x 1 , . . . , x m ) = s o f t m a x ( h l m