GPT4是如何训练出来的?它的底层逻辑有趣在哪里?可以听听Andrej Karpathy的这个演讲。这个演讲的前半部分是科普性质的,但尤其精彩的是后半部分,谈到了很多大模型更加底层的东西,很值得一看。
前半部分的小结:
- 大模型训练的成本和参数量与token数正相关。Meta的Llama是一个65B的模型,使用了1.4万亿个token,2,000 个 GPU,训练了 21 天,大约花费了数百万美元。这些数据可以用来参考大模型的训练成本。
- 训练主要分为4个主要阶段:预训练、有监督微调、奖励建模、强化学习。
- 第1阶段预训练占了训练时间的99%,结束后得到的是一个基础模型。需要注意的是,基础模型不是助手(assistant),它们不想回答你的问题,它们只是想完成文件。你需要通过trick甚至欺骗它来达到你的目的;
- 第2阶段SFT(Supervised Finetuning ,有监督微调)的目的是为了让基础模型变成一个GPT Assistant。这个阶段会收集“几万个”高质量的数据集,通常来自人工承包商,针对给定问题,遵循规则文档写出“理想”的回复,要求每条回复都能做到:有帮助、真实且无害。市场上绝大部分的大模型完成SFT这个阶段就结束了;
- 第3阶段是奖励建模(Reward Modeling ),是RLHF的第一步。目前ELO评级Top13的大模型里面,只有排名前三的GPT-4,Claude和GPT-3.5经历了这个阶段,因为RLHF非常复杂,不稳定并且很难训练,而其他所有的模型都只是SFT模型。在这一步里,SFT模型会对某个问题给出3个补全答案,人类为这3个答案排序,给予不同的奖励。最终,Transformer会学会在给出答案的同时预测对应的奖励;
- 第4阶段是强化学习(Reinforcement Learning),是RLHF的第二步。利用上一步创建的Reward Modeling作为反馈,来调整整个神经网络,在得到较高奖励时,其答案中对应的token会被强化,得到更高的出现概率,在得到较低奖励时,对应的token会以更低的概率出现,以便最终输出结果更加接近人类的标准。
后半部分的takeways:
- 为什么RLHF会让模型变得更弱?因为这个阶段模型失去了一些熵。换句话说,为了向人类标准“妥协”,模型可能给出的极端答案变少了,多样性更少了,更中庸了。在一些需要更多灵感和创意可能性的任务里,基础模型的表现会显著好于RLHF驯化过的模型;
- 为什么chain of thoughts会比直接输出答案的效果更好?为什么切换到“系统2”(“let's think step by step")之后,模型给出的答案就更好了?按照Andrej Karpathy的说法,其实只是因为模型输出的token数变多了。“GPT花费相同的算力去计算每一个token… 如果你的任务需要推理,不要指望Transformer对每个token进行更多的推理,因此你必须真正将推理分散到越来越多的token上。换句话说,你不能向Transformer提出一个非常复杂的问题,并期望它在几个token中得到答案,因为用于计算的时间不够。“Transformer需要更多的token来思考。” 换句话说,token就是Transformer的算力资源,是某种思考货币。你如果需要更加靠谱的答案,你就要允许模型拥有更加充裕的货币;
- 除了chain of thoughts之外,还有其他的方式来让模型给出更靠谱的答案 - 本质上都是让它输出更多的tokens。例如,你可以用few-shot prompt来让模型按照给定的模板来输出,或者用tree of thoughts,让模型生成多个答案,然后从中挑出最好的一个,等等。类比到人类,这些其实是在帮模型建立一些试错、回顾、反思的机制。毕竟,人类思考时也没法保证第一次输出的结果就是最好的。AlphaGo下围棋的时候,用的就是类似的策略,通过蒙特卡洛搜搜寻找各种可能方案,评估之后保留最好的。因此,大模型的深度思考和AlphaGo的原理相同;
- 大模型有种“不想成功”的心理怪癖。从原理上,它们只是想模仿,它们并不想成功。“如果你想成功,你应该要求它。”因此,尽管上文说的“let's think step by step”这种prompt 非常强大,但更好的提示方法是,“let's think in a step by step way to be sure that we have the right answer.”
- 大模型只是想模仿,但他们不知道应该模仿谁 - 训练集里针对同一个问题,可能有来自专家的正确答案,也有来自外行的糟糕答案,但Transformer无法区分它们之间的区别。它会随便抓来一个进行模仿。因此,可能的解决方案是给大模型一个人设,“You are an leading expert on this topic”,“Pretend that you have an IQ of 120”等等,让它能够更好地选择自己应该输出的token;
- 大模型和向量数据库搜索的联动会更有效,这就好比人类在做任务的时候,如果能够一边在图书馆里查询资料一边做,比纯粹依靠记忆力,结果会更好。
最后,Andrej自制了一个“From Zero to Hero”的神经网络系列课程,手把手地教小白用户在python里写神经网络,先是写了一个bigram的单层基础网络(带反向传播),之后又升级成一个多层的Multi Layer Perceptron Model,最终变成了一个Decoder only的Transformer。对于有一点点编程基础的人来说,这个课程的讲解算是深入浅出,有助于理解大模型的基础原理。
链接:
github.com