chatGPT会写作业,写代码,写文案,写提示词喂给AI绘画模型来作画,各种各样的玩法,使得chatGPT成为了一个”得力助手”,微软也在自家的搜索引擎Bing中引入了chatGPT,大有要引领搜索引擎新未来的趋势,chatGPT(或者类似的模型)正逐步走向大众视野。

在体验过chatGPT后,可以明显感觉到,对方不再像是各大手机厂商的智能语音助手,而是一个可以结合对话上下文语境实现真正连续对话的”机器人”。

是什么使得chatGPT脱颖而出呢?

这还要从许多年前讲起。

chatGPT的前身是GPT模型,GPT的全称是Generative Pre-trained Transformer,这是一种生成模型,采用自回归的方式来不断的生成新的内容:

$$P_{\theta}(x_{t+1}|x_1,x_2,…,x_{t})$$

将上式中的$x$看作是模型生成的字,那么$x_i$就表示模型生成的第$i$个字,在生成第$t+1$个字时,模型需要将${x_i}^{t}_{i=1}$作为输入。

可以看到,在模型的一次预测中,后面文字的生成依赖于之前生成的内容,chatGPT也继承了这一特点,这也是为什么在使用chatGPT时,它总是像打字机一样一个字一个字往外吐的原因。

GPT作为生成模型,其模型输出的是一个概率分布,比如在前$t$个时刻已经生成的内容是:

1
今天天气真

将这句话再喂给GPT,GPT会输出下一个要生成的字的概率分布:

1
2
3
4
好      0.51
冷 0.46
火 0.0001
... ...

由于”好”的概率最大,因此GPT下一个生成的字就是”好”。

但是,上述方式可能会使得生成结果比较单一,比如模型总是在”今天天气真”的后面预测”好”,但实际上,预测”冷”也是完全ok的,但是由于”好”对应的概率值最大,而模型总是选取最大概率值对应的预测结果。

找到问题所在就好办了,比如,针对预测的概率分布,不再直接使用最大概率值对应的预测结果,而是选取前k个最大的预测概率值作为一个候选集合,通过设置每个候选结果的采样概率,允许概率值较大的结果被抽中的概率也较大,然后随机从这个集合里面抽一个作为预测结果,这样既保证了概率值较大的结果被抽中的概率也较大,同时也引入了随机性,从一定程度上缓解了预测结果的单一性。

当然,这只是其中一种方法,也可以使用比如基于温度采样的方法,通过修改softmax函数来缩小不同预测结果对应概率值的数值差异,然后通过设置好的采样方法确定最终的预测结果。

在具体训练GPT时,喂给GPT的数据来自于互联网上的各种博客,对话,文章,论文,开源代码等等,毫不夸张地说,GPT模型几乎把互联网上的知识学了个遍。

训练好的GPT已经具备了如今chatGPT的基本功能:对话。

然而,GPT给出的回复并不一定是用户所期望的,比如用户询问GPT:

1
如何学习Python?

那么用户肯定是期望GPT能够给出学习的Python的具体路线,比如

1
2
3
4
5
6
7
要学习 Python,首先需要下载并安装 Python 解释器。
一旦设置了解释器,您就可以通过教程和示例开始探索该语言。
此外,还有一些在线课程和资源可以帮助您学习 Python,例如 Codecademy、 Coursera 和 Udemy。
随着您对这种语言越来越熟悉,您可以开始处理更复杂的项目和挑战。
最后,跟上最新的 Python 更新和发展以确保您的技能与时俱进是非常重要的。

对了,您也可以关注wx公众号"南极Python",在后台回复"21"获取原创电子书《21天入门Python》。

但是,如果GPT恰好也看过知乎上的一个问题:”如何学习Python?本人是刚入门计算机的编程小白,求指教。”

那么GPT针对上述用户问题的回答也可能是这样的:

1
本人是刚入门计算机的编程小白,求指教。

emm…此时的GPT的目标似乎只是”能输出内容就行”,而不关心具体输出什么内容。

为了使得GPT的输出具有针对性,训练师又给GPT喂入了一些标注好的数据,这些数据的制作方式为:由人类提出一些问题,同样由人类对这些问题给出”理想”的回答,这里的”理想”意味着希望模型也给出类似的回答,而不是随便一个答案。

在学习了这些数据后,GPT的输出内容不再那么答非所问,而具有了较强的针对性。

前面说过,GPT的输出具有随机性,因此,针对同一个问题,GPT会给出不同的回答,那么哪一个回答是用户更加期望的回答呢?

为了解决这个问题,需要设计一个能够对GPT的生成结果进行打分的模型,具体实现为:

针对同一个用户的输入,假设运行4次GPT,生成结果分别为{A,B,C,D},然后交由人类对这4次生成结果进行打分,根据人类打分结果训练一个能够对GPT的不同预测结果进行正确打分的模型,训练打分模型的损失函数为:

其中,$x$是GPT的预测结果,$r$是打分模型,$y_w$代表人类的打分大于$y_l$的得分,这里举个例子解释下$y_w$和$y_l$:

假设人类对于上述{A,B,C,D}的打分值从高到低为:D>C>A=B,那么:

当$w$=A时,$l$=B

当$w$=C时,$l$={A,B}

当$w$=D时,$l$={A,B,C}

也就是说,$l$永远是打分低于$w$的GPT预测结果的集合。

由于优化目标总是最小化损失函数,将上述损失函数的负号取反,可以看到,打分模型的目标是最大化得分较高的GPT预测结果与得分较低的GPT预测结果之间的距离,从而促使打分模型对于那些人类认为不太好的GPT预测结果给与更低的打分,而对于那些人类认为比较好的GPT预测结果给与更高的打分,这正符合我们的目的。

在训练好打分模型$r$后,再次向GPT发起提问,由GPT给出预测结果$x$,将预测结果喂给打分模型,打分模型给出打分结果$r(x)$。

最后再通过强化学习的方式不断迭代上述操作,将打分模型作为奖励函数,使用奖励函数的得分对GPT进行微调,从而实现GPT模型生成能力的进一步提升。

至此,chatGPT诞生了。

参考: