【AI知识】两类最主流AI应用(文生图、ChatGPT)中的目标函数
之前写过一篇 【AI知识】了解两类最主流AI任务中的目标函数,介绍了AI最常见的两类任务【分类、回归】的基础损失函数【交叉熵、均方差】,以初步了解AI的训练目标。
本篇更进一步,聊一聊流行的“文生图”、“聊天机器人ChatGPT”模型中的目标函数。
0、提纲
- 如何衡量“文生图”效果?
- ChatGPT如何奖励好的回答?
- 小结与番外
1、如何衡量“文生图”效果?
“文生图”工具大家肯定很熟悉了,仅凭一段文字就能收获一些不错的图片,实乃辅助创意工作的利器。
类似Midjourney、DALL-E、Stable Diffusion、FLUX.1等优秀的“文生图”应用,在训练中势必要重点关注“如何衡量推测分布(生成的图像)与实际分布(原始的图像)的差距”。
“文生图”的大概过程
“文生图”算法大多基于扩散模型(Diffusion Model),以主流开源的Stable Diffusion为例,架构如下:
扩散模型的大体过程分为"训练 + 采样"两个阶段:
1、训练阶段(前向加噪):不断给原始样本图片加入高斯噪声,再训练“UNetModel模型”来预估噪声。
2、采样阶段(逆向去噪):也就是我们输入文本提示词产出图像的阶段。过程中需要使用训练好的“UNetModel模型”不断迭代去噪,所有使用过程中往往需要等待好几秒。
另外,提示词文本(Prompt)会经CLIP类的多模态模型,在两个阶段均喂给“UNetModel模型”以理解文本上下文意图。
此处不关注其它复杂的细节,单看如何评估生成数据与真实数据之间的差异,这里会引入【KL散度】。
- KL散度(Kullback-Leibler Divergence),也叫相对熵,表示使用预测分布Q(X) 来近似真实分布 P(X) 时所需的额外信息量(也就是预测结果相比于真实情况的信息丢失量)。
- 如果相对熵的值较大,说明预测分布与真实分布之间的差异较大,使用预测分布编码真实数据时会产生更多的信息损失;反之,如果相对熵接近于零,则表示两个分布非常相似。
在扩散模型中,【损失函数 = 重构损失 + KL散度】。
- 此处的重构损失正是之前介绍的“MSE均方误差”,用于评估生成结果与真实样本之间的相似性;
- 而KL散度则作为正则化项,鼓励模型学习到的分布接近先验真实分布。
熵、交叉熵、相对熵(KL散度)
熵、交叉熵和相对熵是信息论中的重要概念。简单理解一下:
- 熵:衡量随机变量的不确定性,熵越大表示系统的不确定性越高(越混乱)。
- 交叉熵:衡量在真实分布下使用推测分布所需的平均编码长度,反映模型预测与真实分布之间的差异。
- 相对熵(KL散度):衡量一个分布相对于另一个分布的信息损失,越小表示两个分布越接近。
一个具体的例子(掷六面骰子):
2、ChatGPT如何奖励好的回答?
ChatGPT的来历
OpenAI于2022年11月30日推出聊天机器人ChatGPT推动了当下这一波AI浪潮。
- 其实早在2018年6月第一代GPT(Generative Pre-trained Transformer)就问世了,其核心理念是无监督地学习大量文本(约40G,网页、维基百科、书籍等来源),用Transformer-Decoder来完成“词语接龙”。在【AI实践】个人免费数学老师系列之(二):自动切题【目标检测】中介绍了Transformer的架构,感兴趣的朋友可以看看。
- GPT1的效果一般,不如Google同时期推出的基于Transformer的BERT(完成类似“完形填空”)。但GPT类似“词语接龙”的方式,天然适合AIGC生成式的任务。
- 而GPT2、3探究了NLP中全新的“预训练、提示、预测”的通用任务处理范式,让模型具备根据用户提示词(Prompt)直接完成各种各样任务的通用能力(开启通往AGI之路)。而以往,一般都需要根据具体任务在预训练模型基础上进行微调(fine-tune)。
- GPT3.5(含InstructGPT、公开发表过论文)开始引入“基于人类反馈的指令学习”,其思路如下:
结合上面两张图,InstructGPT的训练分为三个阶段:
1、利用人工编写的问答数据(约13k、“问题-答案”对)去对GPT3进行有监督训练出SFT模型(Supervised fine-tuning,监督微调)。【为了对齐人类的直觉,重走监督微调的老路】
2、基于人类偏好排序的数据(约33k、针对具体问题的4-9个候选答案进行人工排序)训练一个奖励模型Reword Model 。【将直接打分转化为排序、消除一定的主观差异 】
3、最终在最大化奖励的目标下通过PPO算法来优化策略。【用强化学习模型,模仿人工进行更多结果的优劣排序,进一步优化结果】
- ChatGPT正是延续GPT3.5的路线继续发展壮大而生,而GPT4则进一步扩展了多模态的能力(能理解图片了)。【AI实践】个人免费数学老师系列之(三):题目识别【OCR2.0】中介绍了多模态的破圈之作CLIP模型。
奖励模型中的目标函数
喂给SFT模型一个问题文本,得到4个回答(A、B、C、D),人类标注员进行排序(D>C>A>B)。问题来了:怎么让奖励模型吸收这个排序偏好信息呢?
可以将4个语句两两组合成6个比较对(比如D>A),分别计算loss再相加取均值,这就是“成对排序损失(Pairwise Ranking Loss)”,公式如下:
其中,K为待排序的回答数(比如4);x为问题文本;回答y_w比回答y_l更优(两个y为一对,pairwise);r_θ(x,y)为给奖励模型输入问答对(x、y)之后输出的标量得分;Logistic函数呈S形指数增长;而σ函数也为单调递增的sigmoid 函数,σ(r_θ(x,y_w)−r_θ(x,y_l))越接近 1,表示y_w比y_l排序高。
综上,训练奖励模型正是为了最大化r_θ(x,y_w)−r_θ(x,y_l)【从而印证回答y_w比回答y_l更优】,即最小化上述损失函数loss(θ)。
3、小结与番外
本篇通俗讲述“文生图”、聊天机器人背后的大致原理,重点阐述衡量生成结果与真实情况之间分布差异的KL散度(相对熵)、评估排序信息的成对排序损失(Pairwise Ranking Loss)两种任务类型的目标函数。
番外
最近在细读尤瓦尔·赫拉利的《人类简史:从动物到上帝》,有个观点角度够新颖:
现代科学与先前的知识体系有三大不同之处:
1、愿意承认自己的无知。我们承认了自己并非无所不知。更重要的是,我们也愿意在知识进展之后,承认过去相信的可能是错的。于是,再也没有什么概念、想法或者理论是神圣不可挑战的。
2、以观察和数学为中心。承认无知之后,现代科学还希望能获得新知。方式则是通过收集各种观察值,再用数学工具整理连接,形成全面的理论。
3、取得新能力。光是创造理论,对现代科学来说还不够。它希望能够运用这些理论来取得新的能力,特别是发展出新的科技。