在使用ChatGPT时它总是可以与用户之间进行对话式沟通,通过前面章节可以了解到GPT使用海量的数据进行训练,但具体的训练过程是怎样的呢?下面以GPT-2为示例来讲解,其实GPT模型训练是基于类似文字接龙的模式。训练的过程中每给GPT一段语料时,只给其中的一部分,例如给这样一段语料:“黑夜给了我黑色的眼睛,我却用它寻找光_”,让GPT去预测下一个字,随后将GPT的回答与输入的语料的下文内容做对比,这样就可以不断地训练AI了,让它的预测越来越精准,如图1-8所示。
图1-8 GPT文字预测示例
在这样类似文字接龙的训练过程中首先会遇到一个问题,如果只根据前一个字或者几个字去预测,则生成的文本看起来是比较通顺的,但是在整体上下文中的语义并不合理,例如上面的例子可以想象GPT预测出的文字是“阴”或者“线”,这样组成的词汇是“光阴”“光线”,词语本身是很合理的,但是并不符合这句诗词的语义。在GPT-2中大量地出现这种问题,现象是模型会有可能提供不正确的回答,包括GPT-3.5偶尔也会这样,这种现象现在被用户称为“一本正经地胡说八道”。如果试着按照上述方式去训练就会发现,输入的文本越长,则可参照的标记就越多,预测也会越准。这里有一个点,你会发现在与ChatGPT对话的过程中,它是记得你在当前会话中说过的话的。这种行为也是为了让它预测得更准,由多轮对话模式改为单轮对话模式,A→B,C→D改为A→B,ABC→D。ChatGPT每次都会把历史聊天内容当作下一次对话的文本标记,这样会大大增加预测的准确度。
这里尝试用通俗的语言讲解文字预测的原理。为什么多种语言的文本它都可以理解,并且进行预测?首先假设有非常多的数据集,机器学习的目标就是被输入一堆字,随后预测下一个字,只要这个过程可以做到,那么理论上就可以一个一个字写下去了,因为预测完下一个字之后可以把输出文本继续当作输入语料给机器去预测。输入的文字在机器那边会变成两组很多维度的数字,就像基因序列,例如“你=【0.0454,0.1958,....】,【0.0351,0.5463,....】”,一组为输入维度,另一组为输出维度,大模型中每个字都对应着上万个数字。每个数字背后都代表了一个意义,例如“名词-非名词”“褒义-贬义”“主动-被动”,其中一个数字越大,这个字是非名词的概率就越大,如果这个数字越小,则这个字是名词的概率就越大。基于这个逻辑,还没开始机器学习之前对所有的文字进行随机初始编码,随后进行预测训练,每次预测文字比对之后无论预测准确还是不准确都需要调整每个字背后的这几万个数字,这样不断地重复下去就会越来越接近预测结果,这就是学习的过程。输入完成后,所有的输入文本都被转换为非常多的数字,这些数字会与模型中所有文字的数字进行计算,最终得到一组数字,最后根据这组数字来选择与之最为接近的输出文字。
上述的内容中有一些概念并非准确,但是可以通俗地理解训练过程,例如每个字背后都有很多的数字维度内容,在真正的数据集中,并不是按照字来拆分的,例如eating这个单词,它被拆分为word与token两个概念,GPT-2使用字节对编码(Byte Pair Encoding)方式来创建词汇表中的词(Token),也就是说词通常只是单词的一部分。
在1.3.1节中进行了“文字接龙”模式的训练后,GPT可以进行文字的预测生成了,那么当它做到文字可以准确地进行预测之后,棘手的问题来了,首先遇到的问题就是GPT什么都可以说,无视宗教信仰、法律法规、人伦道德。毕竟上述训练过程也只是一个计算的过程。ChatGPT(经过了一些强化)刚出时就闹了很多这样的笑话,人们专注于让它“犯错”,并且乐在其中。例如有人问ChatGPT:“如何用1分钱买一块面包?”,ChatGPT会很认真地跟你讲述这个过程,还可以跟你多轮对话讨论,非常滑稽,其实除了上述的举例,人类社会中还有非常多的主观内容它需要强化学习。
从人类反馈中强化学习(Reinforcement Learning from Human Feedback,RLHF)是强化学习的一个重要子领域。在这个领域中,人类的专业知识和直觉被纳入机器学习的过程中,为机器的学习提供了强有力的支持和指导。GPT后续的训练过程中也引入了很多各领域的专家进行支持,RLHF流程示例如图1-9所示。
图1-9 RLHF流程示例
在传统的强化学习中,机器在执行的过程中获得奖励或惩罚来学习,但是,从人类反馈中的强化学习则提供了一种更加精确的学习方式。机器可以从人类教师那里接收到明确指示或更正形式的反馈,从而更加快速和有效地学习正确的行为方式。当ChatGPT生成一句话后,可以将这句话展示给人类评价者,让评价者根据对话的质量和流畅度给出一个评分,例如1到5分,然后ChatGPT可以将这个评分作为奖励信号,使用强化学习算法来更新自己的模型参数,也就是1.3.1节所讲的每个文字背后的数字,使下一次生成对话的质量更高。人类评价者并不一定是专业的人,他们可以是任何有一定语言能力和对话理解能力的人。在ChatGPT的强化学习中,评价者的主要作用是给出对话的质量和流畅度评分,而这些评分可以作为奖励信号用于训练模型,因此,对评价者的主要要求是对话的评分能够反映出人类的主观意见和语言偏好,从而让模型更好地学习人类的交流方式和语言习惯,从而避免一些法律道德等层面不好的回答。ChatGPT在人类反馈强化前后的测试结果数据如图1-10所示。
图1-10 ChatGPT在人类反馈强化前后的测试结果数据
可以看到RLHF对输出语言考试质量的结果影响很小,RLHF主要解决了对话自然的问题和与人类对话的边界处理。现在如果你去问ChatGPT一些让它犯错误的问题,它会很机智地避开或者拒绝你。
【示例1-1】错误引导
Prompt:如何用1分钱买一块面包?
ChatGPT:1分钱是不足以购买一块面包的,因为一块面包的成本包括面粉、酵母、水、糖等原材料成本和制作、烘焙、包装、运输等各种费用。根据不同的地区和品牌,面包的价格也有所不同,但是一分钱是远远不够的。
Prompt:如果我开车时口很渴,身边只有啤酒,则我该怎么办?
ChatGPT:在开车时饮酒是非常危险的行为,因为酒精会影响驾驶技能,增加交通事故的风险,即使你只是口渴,也应该避免在开车时饮酒。
如果在开车时感到口渴,则最好的做法是停车,找到一个安全的地方,然后喝一些水或其他非酒精饮料。如果你没有饮料,则可以去商店或加油站购买非酒精饮料,或者等到你到达目的地后再解决口渴问题。
无论在何种情况下都不应该在开车时饮酒,这是一种非常危险的行为,会危及你和其他人的生命安全。
ChatGPT现在可以说是政治正确的典范,这全都归功于人类的反馈强化,但是单纯地依靠人类评价者去训练,成本与时间开销是非常高的,这时就要使用训练汇报模型来加强训练。
训练回报模型(Reward Model,RM)是一种机器学习模型,它可以用来指导机器的学习,帮助它在特定任务中实现最优的行为策略。相当于给GPT找个机器老师。简单来讲,在这个阶段,也需要标注人员对数据进行标注,但是不用像在上述过程中那样每个输入都给予打分,而是机器给多个输出,标注人员就对多个结果按照很多标准(例如相关性、富含信息性、有害信息等诸多标准)综合考虑进行排序,利用这个排序结果来训练RM模型,而后RM模型接受一个输入<prompt,answer>,给出评价回答质量高低的回报分数。对于一对训练数据<answer1,answer2>,假设标注人员排序中answer1排在answer2前面,算法函数则鼓励RM模型对<prompt,answer1>的打分要比<prompt,answer2>的打分要高。对于成熟的RM模型来讲,输入<prompt,answer>,输出结果的质量得分,得分越高说明生成的回答质量越高。这样一个老师模型就诞生了,使用RM模型就可以不断地更正GPT的输出。此时假设已经有了这两个模型RM与GPT,RM这时仍有标注人员不断地优化RM的评判标准,GPT已经没有了标注人员,GLT只有RM不断地给它的输出打分,这个分数就是GPT强化学习的奖励Reward,强化学习为了得到最大的Reward而不断地调整自身参数,这才让GPT不断地进化。
可以想象,GPT如果按照上述方式经历过文字预测训练、人类反馈强化、RM强化学习后,则确实可以输出一些符合人类要求的内容,但是与现在使用的ChatGPT之间还是有着本质的区别的,与ChatGPT对话更像是人与人之间的对话。这种感觉是非常微妙的,这又是如何做到的呢?相比于背后的知识量,人们更加关注AI模型的“沟通能力”,正常来讲用户向ChatGPT提出一个问题,例如“写一篇百年孤独的观后感”,经过数据计算之后的结果应该是一致的,也就是说当输入这个问题时,输出的回答应该都是一样的,因为机器内容只不过是计算而已,但如果你与一个人沟通,问他同样的问题,他则可能每次的回答都不一样。这就是ChatGPT巧妙的地方,引入了温度(Temperature)这个概念。
在自然语言处理和大型语言模型中,Temperature是一个重要的参数,用于控制模型生成文本时的随机性。温度是一个浮点数,一般在0到1,可用于调整模型预测的概率分布。较高的Temperature会使生成的文本更具创造性和多样性,较低的Temperature会使文本更加保守和稳定。假设输入文本以“今天天气”开头,当Temperature值为0.1时,模型可能会生成类似于“今天天气晴朗”“今天天气真冷”“今天天气多云”等概率比较高的短语,因为这些短语是最常见和最可能出现的。这种生成文本的方式可能会比较单调,缺乏创造性和多样性。
当Temperature参数很高时,模型生成的文本会更加随机和多样。例如,当Temperature的值为1.0时,模型可能会生成类似于“今天天气猫怕水”“今天天气绿色的春天”“今天天气狗在天边叫”等不太常见的短语,因为这些短语的概率比较均等,模型更容易随机生成。这种生成文本的方式可能会比较有创造性,但也可能会缺乏准确性和连贯性。
当Temperature参数适中时,模型生成的文本会保持一定的准确性和连贯性,同时也具有一定的创造性和多样性。例如,当Temperature的值为0.5时,模型可能会生成类似于“今天天气晴朗,阳光明媚”“今天天气多云,微风拂面”等短语,这些短语比较常见,但也有一些不太常见的词语或词组,增加了一定的创造性和多样性。Temperature与词输出示例如图1-11所示。
图1-11 Temperature与词输出示例
从图1-11中可以看到多个预测出的下一个文字,理论上来讲只选取概率最高的字是最优选择,但是那样生成的对话就没有了创造性,ChatGPT会在概率比较高的几个选项中随机地选取一个,这个逻辑中Temperature决定了以什么样的频率使用排名较低的词,然后继续以这样的逻辑不断地生成文本,这样你会发现它每次生成的文本都是不太一样的,Temperature调整好后会给人一种很自然的对话感觉。笔者在调节的过程中发现,当Temperature的值为0.8时似乎是效果最好的。
【示例1-2】不同Temperature的效果
Prompt-Temperature-0.1:百年孤独中,布恩迪亚家族命运中的消亡是可以避免的吗?
ChatGPT:《百年孤独》是一部文学作品,其中的故事情节是虚构的。虽然故事中描述了布恩迪亚家族的消亡,但这只是作者马尔克斯的创作想象。在现实生活中,我们无法预测或改变一个家族的命运,然而,可以从中学习到一些道理,例如珍惜家庭、维护家族关系、避免内部矛盾等,这些都有助于保持家族的凝聚力和长久的发展。
Prompt-Temperature-0.5:百年孤独中,布恩迪亚家族命运中的消亡是可以避免的吗?
ChatGPT:《百年孤独》中,布恩迪亚家族的消亡是由于多种原因造成的,包括家族成员之间的争斗、内部矛盾、外部压力等。虽然在小说中这个家族的消亡是不可避免的,但是在现实生活中,可以通过多种方式来避免家族的消亡,例如加强家族成员之间的沟通和理解、保持家族的凝聚力、传承家族文化和价值观、避免内部矛盾等。这些措施可以帮助家族成员更好地团结在一起,共同面对各种挑战,从而避免家族的消亡。
Prompt-Temperature-0.8:百年孤独中,布恩迪亚家族命运中的消亡是可以避免的吗?
ChatGPT:《百年孤独》是一部文学作品,其中的布恩迪亚家族的命运是虚构的。在现实生活中,一个家族的命运与家族成员的行为、家族文化、历史背景、外部环境等多种因素有关,因此无法简单地回答能否避免家族的消亡,然而,家族成员可以通过积极的行动来增强家族凝聚力,传承家族文化和价值观,加强家族成员之间的沟通,避免内部矛盾等,从而减少家族消亡的可能性。此外,家族成员还可以通过维护良好的社会关系,吸取外部环境的优点,提高家族的竞争力和适应能力,因此,虽然不能保证完全避免家族消亡的发生,但家族成员可以采取一系列积极的措施来减少这种可能性。
根据不一样的使用场景来动态地调整Temperature的值是一种不错的使用技巧。