?
大语言模型构建流程:
训练数据:
GPT-1:仅使用Transformer的解码器部分。
是一个自回归模型,使用了单向(从左到右)的训练方式。
它预测下一个词是基于之前所有词的。
其自回归特性,它更擅长根据之前的上下文生成文本。
主要用于文本生成任务,如文本补全、翻译、摘要等。
12 个(图中12x)Transformer的解码器 组成:
左边:
右边:
?
无监督预训练:
给定一个无标签的序列u={u1,···,un},优化目标是最大化下面的似然函数:
L 1 ( U ) = ∑ i log ? P ( u i ∣ u i ? k , … , u i ? 1 ; Θ ) h 0 = U W e + W p h l = transformer_block ( h l ? 1 ) ? i ∈ [ 1 , n ] P ( u ) = softmax ( h n W e T ) \begin{gathered} L_{1}(\mathcal{U}) =\sum_i\log P(u_i|u_{i-k},\ldots,u_{i-1};\Theta) \\ h_0=UW_e+W_p \\ h_l=\text{transformer\_block}(h_{l-1})\forall i\in[1,n] \\ P(u)=\text{softmax}(h_nW_e^T) \end{gathered} L1?(U)=i∑?logP(ui?∣ui?k?,…,ui?1?;Θ)h0?=UWe?+Wp?hl?=transformer_block(hl?1?)?i∈[1,n]P(u)=softmax(hn?WeT?)?
这个公式描述的是一个语言模型的工作原理,一步步拆解:
首先,你有一串没有标记的词语,就像一串珍珠,我们叫它u
。这串珍珠里每一颗都有它的位置,比如u1, u2, ... , un
,就像是第1颗, 第2颗, ... , 最后一颗
。
要猜每颗珍珠(每个词)是什么,只能看它前面几颗珍珠(前面的词)。这就是L1(U)
这个公式告诉我们的,我们要尽可能地猜得准确,这样游戏得分就会越高。
游戏开始前,我们给每颗珍珠配上了一个UWe
,让它们看起来更容易被识别,还有一个计分板Wp
记录分数。
然后,我们开始一轮轮游戏,每一轮我们都用transformer_block
来帮助我们,让我们更好地猜下一颗珍珠。这个超级电脑每轮都会变得更聪明。
最后,当我们猜完所有的珍珠后,超级电脑会使用softmax
来告诉我们每颗珍珠最可能是什么。
你在玩一个猜词游戏,你要猜的不是珍珠,而是一连串的词,电脑会帮你记住前面的词,然后猜下一个词。
你想让你的得分越高越好,因为这意味着你猜的越准确。
游戏规则,就是最大化这个似然函数L1(U)
,这个函数告诉我们我们的猜词游戏得分多高。
?
有监督的精调:
对于有标签的数据集C,每个实例有m个输入token{x1,...,xm} 和标签y组成
P ( y ∣ x 1 , … , x m ) = ? . s o f t m a x ( h l m W y ) L 2 ( C ) = ∑ x , y log ? P ( y ∣ x 1 , … , x m ) L 3 ( C ) = L 2 ( C ) + λ L 1 ( C ) \begin{gathered}P(y|x^1,\ldots,x^m)\overset{.}{\operatorname*{=}}\mathrm{softmax}(h_l^mW_y)\\\\L_2(\mathcal{C})=\sum_{x,y}\log P(y|x^1,\ldots,x^m)\\\\L_3(\mathcal{C})=L_2(\mathcal{C})+\lambda L_1(\mathcal{C})\end{gathered} P(y∣x1,…,xm)=.softmax(hlm?Wy?)L2?(C)=x,y∑?logP(y∣x1,…,xm)L3?(C)=L2?(C)+λL1?(C)?
就像教一台机器分辨不同的水果一样。
在这个任务中,每个水果(比如苹果、香蕉、橘子)都有一些特征(比如形状、颜色、大小),这些特征就像是输入的tokens(令牌)。
第一部分(P(y|x1,…,xm)):预测标签的概率
第二部分(L_2?):损失函数
第三部分(L_3?):正则化的损失函数
GPT1 训练数据:BookCorpus 7000 本书籍。
核心思想是:
做打生成式,输入都是一问一答
使用无监督生成式预训练代替传统标注数据,这意味着它在训练时不依赖于标记好的数据集。
让机器通过广泛阅读来自主学习语言,通过阅读大量文本来学习如何生成文本,而不是依赖于特定的“问题-答案”对。
这种方法允许GPT-1掌握语言的广泛用法,并能在各种情境中灵活应用所学知识,而不仅仅是回应特定的提示或问题。
?
GPT1 的问题在于:
GPT2 扩展数据集、模型参数,实现一脑多用(多个任务)。
p ( x ) = ∏ i = 1 n p ( s n ∣ s 1 , … , s n ? 1 ) p ( output|input ) p ( s n ? k , … , s n ∣ s 1 , s 2 , … , s n ? k ? 1 ) p ( output|input,task ) \begin{aligned}p(x)&=\prod_{i=1}^np(s_n|s_1,\ldots,s_{n-1})&&p(\text{output|input})\\\\p(s_{n-k},\ldots,s_n|s_1,s_2,\ldots,s_{n-k-1})&&p(\text{output|input,task})\end{aligned} p(x)p(sn?k?,…,sn?∣s1?,s2?,…,sn?k?1?)?=i=1∏n?p(sn?∣s1?,…,sn?1?)?p(output|input,task)?p(output|input)
GPT2被训练来学习很多很多的故事和对话:
第一部分(p(x)):预测下一个词
第二部分(p(output|input)):基于输入预测输出
第三部分(p(output|input, task)):针对特定任务的预测
牛逼之处,在于当模型容量非常大、数据量非常丰富的时候,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务。
通过阅读海量的文本,学到了很多东西。
GPT-2这样的模型因为读过很多东西,学了很多知识,所以它能处理各种不同的任务,就算这些任务以前没直接学过。
GPT2 训练数据:Reddit 高赞文章 800 万篇 40G。
?
GPT2 的极限没有被开发出来,模型参数、训练数据还是太少了。
GPT3 参数增长到 1750 亿,45 TB 训练数据。
除了大,GPT3 还提出了提示的情景式学习方式。
左图是传统的方式,右图是GPT3提出的提示引导。
在一个预训练模型处理多种不同的任务中,不是每个任务都有一个单独的模型,而是使用“提示”(Prompts)来指导同一个预训练模型完成不同的任务。
这种方法的优势在于它不需要针对每个任务训练一个完整的模型,只需要调整相对较小的提示部分,就可以引导同一个大模型完成不同的任务。
这种原理来自于 — 元学习。
通过学习任务间共性和差异,发现规律,并迁移到新任务上。
使用少量数据,寻找初始化范围,使得模型在有限数据集上,快速拟合。
prompt学习方法,根据提示情景,有针对的回答。
用户:你觉得tiktok是个好应用吗?
GPT:Do you think tiktok is a good app?
GPT:tiktok 是什么呀?
GPT:我不能做出有偏袒的评价。
提示学习方法的核心在于,通过给模型不同的指令或情境,可以影响模型的输出,使其更适合特定的用途或遵循特定的交流原则。
在实际应用中,这使得同一个模型可以在不同的情境下以不同的方式回答相同的问题,这非常有用,尤其是在需要模型适应多种对话风格和需求的场合。
有 3 种学习方式:
GPT3 只需要给一个或者几个例子,就能一直按照原意去干活。
GPT3 受限 Transformer 建模能力,对于长文章会重复输出;也不能保证生成的内容不包含敏感内容。
?
GPT-3.5 是 GPT-3 的一个更新版本,提供了更好的性能和更准确的语言理解能力。
InstructGPT 在 GPT-3.5 的基础上通过进一步的训练来专门优化执行指令的能力。
InstructGPT 是 GPT-3.5 的一个特定版本,专门针对理解和执行复杂指令进行了优化,旨在提供更加精准的指令执行和更好的用户体验。
这意味着 InstructGPT 更擅长根据用户给出的指令产生相关的输出,比如回答问题、解释概念、生成文本等。
指示学习和提示学习:
俩者,是一起用的。
?
人工反馈强化学习 RLHF。
单纯训练得到的模型并不可控,模型是训练集分布的拟合,当生成数据时,训练数据的分布极大影响生成内容的质量
不能只靠训练数据的影响,要人为可控的保证生成数据的真实性、可用性、无害性
就要引入人类偏好的机制,使用强化学习引入
强化学习是通过奖励函数来指导模型训练
训练流程:
RM 损失函数:
loss ? ( θ ) = ? 1 ( K 2 ) E ( x , y w , y l ) ~ D [ log ? ( σ ( r θ ( x , y w ) ? r θ ( x , y l ) ) ) ] \operatorname{loss}\left(\theta\right)=-\frac{1}{\binom{K}{2}}E_{(x,y_w,y_l)\sim D}\left[\log\left(\sigma\left(r_\theta\left(x,y_w\right)-r_\theta\left(x,y_l\right)\right)\right)\right] loss(θ)=?(2K?)1?E(x,yw?,yl?)~D?[log(σ(rθ?(x,yw?)?rθ?(x,yl?)))]
目标是,最大化人类喜欢(好回答)、不喜欢的(坏回答)的差值。
r θ ( x , y w ) r_\theta(x, y_w) rθ?(x,yw?) 和 r θ ( x , y l ) r_\theta(x, y_l) rθ?(x,yl?):
σ \sigma σ:
相减和对数:
期望值 E E E 和平均:
负号和最小化损失:
强化学习 PPO:
o b j e c t i v e ( ? ) = E ( x , y ) ~ D π ? R L [ r θ ( x , y ) ? β log ? ( π ? R L ( y ∣ x ) / π S F T ( y ∣ x ) ) ] + γ E x ~ D p r e t r a i n [ log ? ( π ? R L ( x ) ) ] \begin{aligned} objective (\phi)=& E_{(x,y)\sim D_{\pi_{\phi}^{\mathrm{RL}}}}\left[r_{\theta}(x,y)-\beta\log\left(\pi_{\phi}^{\mathrm{RL}}(y\mid x)/\pi^{\mathrm{SFT}}(y\mid x)\right)\right]+ \\ &\gamma E_{x\sim D_{\mathrm{pretrain}}}\left[\operatorname{log}(\pi_{\phi}^{\mathrm{RL}}(x))\right] \end{aligned} objective(?)=?E(x,y)~Dπ?RL???[rθ?(x,y)?βlog(π?RL?(y∣x)/πSFT(y∣x))]+γEx~Dpretrain??[log(π?RL?(x))]?
目标函数 o b j e c t i v e ( ? ) objective (\phi) objective(?):
第一部分:
第二部分:
这个公式的目的是指导模型学习如何更好地回答问题: