2023年的深度学习入门指南(14) - 不能只关注模型代码

2023年的深度学习入门指南(14) - 不能只关注模型代码

最近,有一张大模型的发展树非常流行:

这个图是相当不错的,对于加深对于Transformer模型编码器、解码器作用的理解,模型的开源和闭源情况等等都相当有帮助,大家使用Hugging Face库的时候,也可以从这张图入手寻找相应的模型。

但是,这篇论文是分为三部分的,除了模型之外,还有数据和下游任务两部分。它们被忽视的重要原因是没有一张像上面一样的图。

而且,即使是在图上的部分,也并不一定是模型本身有升级,而可能是增加了其他的东西。

比如从GPT-3到InstructGPT这一个发展,并不是增加了模型大小,而是基于GPT-3进行了跟人类打标的数据做对齐。

人类指导强化学习并不容易

假如现在给你一个任务,让你发明一套武功叫做太极拳。如果你成功发明出来一个动作跟真实的太极拳一样,就给你加一分。这就是一个强化学习的任务。对于大多数人来说,我们既不是武当张真人,也没有达摩祖师一样的天赋,究我们一生可能一个动作也发明不出来。

如果想让我们能完成这个任务,就需要写个拳谱,或者更进一步,有演示录像。我们参照录像学习,这就是一个人类指导的强化学习的过程。

不过,录像有可能只看到正面,看不到侧面和背面,就算是完美模拟,仍然可能有错误。这时候最好的办法是有老师可以指点一下哪里不对,然后继续练习。

好,现在我们换成当老师的角色,假如我们要教100个学生学习打太极拳,遇到他们每一次出错都要指导纠正,指导一次可能还不够,学生学了后面的还可能忘了前面的。这是不是相当花精力的事情?比如要教100万个学生呢?

我们来看一下Instruct GPT是如何做到的。

有监督的微调

在第一篇的时候,我们已经粗略的看了一眼Instruct GPT的步骤图。经历了对于基础知识和编程实战的历练,现在是时候挑战下原理部分了。

请注意,人类打标的工作是分两部分的:
第一部分是根据问题,由人类写答案。然后用来对大模型进行微调。这一步被称为SFT,有监督的微调。
第二部分是根据模型生成的几个答案,由人类进行排序。人类排序的结果用于训练强化学习的奖励模型。

在准备人类写的答案的时候,OpenAI也是充分动了脑筋的,他们设计了三种情况:

  • 纯文本:就是正常平时大家聊家的一问一答的方式。
  • few-shot:这其实就是我们学习prompt工程常用到的方式。给出一个指令,然后给出若干组供模型学习的例子。举个例子,指令是英译中,后面给几对英语和对应的中文的例子。
  • 预定义的十大类问题:
    • 生成(generation)
    • 开放式问答(open QA)
    • 封闭式问答(closed QA)
    • 头脑风暴(brainstorming)
    • 聊天(chat)
    • 改写(rewriting)
    • 摘要(summarization)
    • 分类(classification)
    • 提取(extraction)
    • 其他(other)

我们来看几个例子。

  1. 头脑风暴:列出五个重拾职业热情的想法
  2. 封闭式问答:回答以下问题:地球的形状是什么? A) 圆形 B) 球形 C) 椭圆形 D) 平面
  3. 开放式问答:如何对正弦函数求导?
  4. 生成:写一个关于一只棕熊去海滩,与一只海豹交朋友,然后返回家的简短故事

人类排序的奖励模型

第二部分,由模型生成,而人来进行排序。模型生成4到9个结果,然后由人类来进行排序。
我们将模型生成的结果记为K,则打标者需要进行 ( K 2 ) \left(\begin{array}{c}K \\ 2\end{array}\right) (K2)次比较。

我们来看下奖励模型的损失函数:
loss ⁡ ( θ ) = − 1 ( K 2 ) E ( x , y w , y l ) ∼ D [ log ⁡ ( σ ( r θ ( x , y w ) − r θ ( x , y l ) ) ) ] \operatorname{loss}(\theta)=-\frac{1}{\left(\begin{array}{c} K \\ 2 \end{array}\right)} E_{\left(x, y_w, y_l\right) \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(θ)=(K2)1E(x,yw,yl)D[log(σ(rθ(x,yw)rθ(x,yl)))]

怕公式的同学不要慌,我来分步解释下,这只是形式化地描述了下,其中并不涉及高深的数学或者机器学习的理论。

其中,x表示输入, y w y_w yw是排序赢了的输出, y l y_l yl是输的了。
r是奖励函数,参数为 θ \theta θ

于是, r θ ( x , y ) r_\theta(x, y) rθ(x,y)是奖励模型对提示 x x x和完成 y y y的标量输出。

σ \sigma σ 是 sigmoid 函数,将输出值映射到 ( 0 , 1 ) (0, 1) (0,1) 之间。这表示一个概率,即在给定一对比较时,优选完成 y w y_w yw 被选中的概率。

然后取对数,因为对数损失(或者叫交叉熵损失)是优化分类问题的常用方式,它可以直接优化预测的概率。

1 ( K 2 ) \frac{1}{\left(\begin{array}{c}K \\ 2\end{array}\right)} (K2)1 表示归一化因子,用于在不同大小的比较集合之间进行平衡。

E ( x , y w , y l ) ∼ D E_{\left(x, y_w, y_l\right) \sim D} E(x,yw,yl)D 表示在数据集 D D D 上的期望值。 D D D 是包含人类比较的数据集。如果你不理解数学期望的话,这其实就是平均值。

最后,损失函数是所有 ( K 2 ) \left(\begin{array}{c}K \\ 2\end{array}\right) (K2)个比较的平均对数损失的相反数,取相反数是因为在优化过程中,我们希望最小化损失,而不是最大化损失。
在训练过程中,模型会学会在给定一对完成时,预测人类标签者更可能选择哪个完成。

总结起来一句人话就是:我们希望选择参数 θ \theta θ,使得 r θ ( x , y w ) − r θ ( x , y l ) r_\theta(x, y_w) - r_\theta(x, y_l) rθ(x,yw)rθ(x,yl)尽可能大。也就是让人类选择的结果获取更高的分。

人类指示的强化学习

好,前两步搞明白了,我们讲最后的强化学习。这里使用到了PPO算法。
这里的强化学习部分只是给大家一个概念,用如此小的篇幅能讲明白就见鬼了。大家理解目标在哪里就好,后面我们会用相当的篇幅来详细介绍。

PPO算法

PPO是Proximal Policy Optimization的缩写,是一种策略梯度方法,用于解决强化学习中的策略优化问题。

PPO算法的主要思想是:在策略更新过程中,要确保新旧策略足够接近,以保证学习的稳定性。这是通过引入一个幅度限制来实现的,新策略不能偏离旧策略太多。正如算法名称中“Proximal”所体现的,优化的新策略始终近似于原策略。

比如,发现了门可以进的策略,以后遇见门就优先选择进。

PPO算法的主要步骤是:

  1. 定义一个参数化的策略函数 π θ ( a ∣ s ) \pi_\theta (a|s) πθ(as) ,用神经网络来近似。
  2. 用当前的策略 π θ ( a ∣ s ) \pi_\theta (a|s) πθ(as) 与环境交互,收集一批轨迹数据 { s t , a t , r t , s t + 1 } \{s_t,a_t,r_t,s_{t+1}\} {st,at,rt,st+1}
  3. 计算每个时间步的优势函数 A t A_t At ,用于评估每个动作的好坏。
  4. 定义一个目标函数 L ( θ ) L (\theta) L(θ) ,用于衡量新策略和旧策略的差异,并加入一个惩罚项来防止更新幅度过大。
  5. 用梯度下降更新策略参数 θ \theta θ ,使目标函数 L ( θ ) L (\theta) L(θ) 最大化。
  6. 重复上述步骤,直到策略收敛或达到预设的迭代次数。

PPO算法的主要优点是稳定性高、样本利用率高。相比A2C、ACKTR等方法,PPO可以更快、更稳定地找到较优策略,这使其适合处理许多在线和离线强化学习问题。

回到我们的微调中来,我们构建一个赌博环境,它会呈现一个随机的客户提示,并期望对该提示做出回应。根据提示和回应,它会通过奖励模型生成一个奖励,并结束该回合。此外,我们在每个令牌上添加了来自SFT模型的逐令牌KL惩罚,以减轻对奖励模型的过度优化。价值函数从RM进行初始化。我们将这些模型称为“PPO”。

KL散度

下面还得先补充一个概念,KL散度。

假设你有两个食谱,一个是你跟你妈学的,另一个是你在网上找到的。你按照这两个食谱分别做了两个菜,然后你想知道这两个菜有多相似。你可能会看看它们的颜色、形状、味道等等,然后给出一个"相似度"的评分。这个评分就是KL散度。如果这两个菜完全一致,那么KL散度就是0。如果不一样,那么就是一个大于0的数,差异越大,KL散度的数值越大。

KL散度(KL divergence)是信息论中的一个重要概念, 全名是Kullback-Leibler divergence。它是用来度量两个概率分布之间差异的一种方法。

上面的解释其实还不够说明KL散度的信息论上的含义。

假设你是一个男生,高考报志愿想去一个女生多的专业。你在网上查,某学校的英语专业的男生与女生的比例是1:9。于是兴冲冲报了这个专业。结果当你入学了之后发现,这个专业竟然一个女生都没有,你是不是会特别惊讶?

这个"惊讶度",就是KL散度要衡量的东西。

从信息论的角度来看,如果你在入学前查到是1:9,入学后发现真是1:9,那么你就没有获得新的信息。但是你发现是10:0,说明你获得了巨大的信息量。

如果你入学后发现,没有1:9那么夸张,但是也达到了3:7,女多男少的情况是真的。你就不会特别惊讶。这时候你获得的信息量比较小,KL散度也比较小。

在这里插入图片描述

所以简单地说,KL散度衡量从一个概率分布转到另一个分布,你需要获得多少新的信息,或者另一个分布会给你带来多大的惊讶。如果两个分布很接近,转变不需要新的信息,KL散度很小。如果两个分布很不同,转变需要很多新的信息来减少惊讶,KL散度就比较大。

故事听完了,我们上公式 _

KL散度的定义如下:对于两个概率分布P和Q,P的KL散度相对于Q是:

K L ( P ∣ ∣ Q ) = ∑ x P ( x ) log ⁡ P ( x ) Q ( x ) KL(P||Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)} KL(P∣∣Q)=xP(x)logQ(x)P(x)

它有以下几个重要性质:

  1. KL散度是非对称的,即 K L ( P ∣ ∣ Q ) ≠ K L ( Q ∣ ∣ P ) KL(P||Q) \neq KL(Q||P) KL(P∣∣Q)=KL(Q∣∣P)。它度量的是 P P P相对于 Q Q Q的信息量。

  2. KL散度总是非负的, K L ( P ∣ ∣ Q ) ≥ 0 KL(P||Q) \geq 0 KL(P∣∣Q)0。只有当P和Q完全相同时, K L ( P ∣ ∣ Q ) = 0 KL(P||Q)=0 KL(P∣∣Q)=0

  3. KL散度衡量的是两个分布的差异,而不是距离。它表达的是 P P P相对于 Q Q Q丢失或获得的信息量。

  4. KL散度并不满足三角不等式。

KL散度有许多应用,主要用于量化概率分布之间的差异,或者作为损失函数的一部分。例如:

  • 机器翻译中,限制神经机器翻译与统计机器翻译的差异。
  • 变分推断中,测量后验分布与概率模型的差异,并最小化。
  • 评估生成模型的性能,比如GAN、VAE等。

所以总的来说,KL散度是一个非常有用的工具,用于衡量和控制概率分布之间的差异程度。在许多机器学习模型和算法中有重要应用。

将强化学习和预训练结合起来

我们还尝试将预训练梯度混合到PPO梯度中,以修复在公共NLP数据集上的性能回归。我们将这些模型称为"PPO-ptx"。在RL训练中,我们最大化以下组合目标函数:

objective ⁡ ( ϕ ) = E ( x , y ) ∼ D π ϕ R L [ r θ ( x , y ) − β log ⁡ ( π ϕ R L ( y ∣ x ) / π S F T ( y ∣ x ) ) ] + γ E x ∼ D pretrain  [ log ⁡ ( π ϕ R L ( x ) ) ] \begin{aligned} \operatorname{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_{\text {pretrain }}}\left[\log \left(\pi_\phi^{\mathrm{RL}}(x)\right)\right] \end{aligned} objective(ϕ)=E(x,y)DπϕRL[rθ(x,y)βlog(πϕRL(yx)/πSFT(yx))]+γExDpretrain [log(πϕRL(x))]

这个公式定义了PPO-ptx模型的优化目标(objective function)。它由两部分组成:

  1. 强化学习部分:
    E ( x , y ) ∼ D π ϕ R L [ r θ ( x , y ) − β log ⁡ ( π ϕ R L ( y ∣ x ) / π S F T ( y ∣ x ) ) ] 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] E(x,y)DπϕRL[rθ(x,y)βlog(πϕRL(yx)/πSFT(yx))]
    这部分的含义是:在强化学习得到的轨迹分布 D π ϕ R L D_{\pi_\phi^{\mathrm{RL}}} DπϕRL下,计算每个时间步的奖励 r θ ( x , y ) r_\theta(x, y) rθ(x,y)与KL惩罚 β log ⁡ ( π ϕ R L ( y ∣ x ) / π S F T ( y ∣ x ) ) \beta \log \left(\pi_\phi^{\mathrm{RL}}(y \mid x) / \pi^{\mathrm{SFT}}(y \mid x)\right) βlog(πϕRL(yx)/πSFT(yx)),并取均值。KL惩罚的作用是限制强化学习策略与监督学习策略的差别。
    这个项前的系数 β \beta β是KL奖励系数,用于控制KL惩罚的强度。

  2. 预训练部分:
    γ E x ∼ D pretrain  [ log ⁡ ( π ϕ R L ( x ) ) ] \gamma E_{x \sim D_{\text {pretrain }}}\left[\log \left(\pi_\phi^{\mathrm{RL}}(x)\right)\right] γExDpretrain [log(πϕRL(x))]
    这部分的含义是:在预训练数据分布 D pretrain  D_{\text {pretrain }} Dpretrain 下,计算强化学习策略的对数似然,并与超参数 γ \gamma γ相乘,作为预训练损失加入到总的优化目标中。

所以总的来说,这个优化目标在强化学习的同时,也利用预训练数据继续训练模型,以修复强化学习在一些NLP数据集上的性能问题。 β \beta β γ \gamma γ是控制KL惩罚项和预训练损失项强度的超参数。

小结

Chatgpt的成功,跟人类对齐的技术功不可没。

比起用越来越多的数据和越来越强大的算力堆更大的模型,人类打标的工作不管从方案设计上,学习技术上,还是执行上,都是一样费时费力且琐碎的事情。

训练好的大模型是一件充满挑战且要耐得住烦的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14237.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅评ChatGPT在软件开发上的辅助能力(附GPT-4对比)

01 背景 ChatGPT于去年正式公测后,凭借其强大的自然语言处理能力迅速获得业内广泛关注,特别是辅助软件开发上,初步表现出了令人满意的能力,然而正当业内积极探索引入ChatGPT后的新工作模式之时,OpenAI又发布了基于GPT-…

PDF转CAD在线怎么转换?分享个在线转换的方法

从事CAD设计的小伙伴有没有经常收到PDF格式的CAD文件呢?因为使用PDF格式来传输不仅方便我们查阅,且能保证图纸内容不会因不同设备导致内容错乱,而且如果用手机查阅也不用担心不能直接打开文件!但是PDF文件不能直接进行编辑&#x…

如何转换DWG文件格式?来试试这两种方法

DWG格式的文件如何转换格式呢?从事CAD相关工作的小伙伴都知道,DWG格式文件是CAD文件里最常见的一种文件格式,与它相伴出现的还有DXF格式,如果我们想要将DWG格式文件转换成DXF格式文件来进行绘图,我们该如何转换呢&…

CAD怎么转换成JPG图片?教大家一个好用的转换方法

怎么把CAD文件转换成JPG格式的图片呢?CAD文件经常出现在建筑行业或者是一些建设行业中,因为很多的施工单位在施工前都会以CAD文件格式来绘制好图纸。但是CAD文件离开专业的设备一般不容易打开,我们想要随时随地的浏览文件是一个问题。实际上我…

1分钟告诉你cad版本转换器怎么用

部分从事设计行业的小伙伴,通常会使用CAD软件进行创作,但有些人习惯了老版本的操作界面,便可能出现他人发送图纸供你查阅时,因为版本过低打不开文件的情况。 其实要解决这一困扰并不难,我们只要将新版本的CAD图纸转换…

cad在线转成低版本的途径分享,适合新手

CAD如何转换成低版本?CAD作为一种绘图工具已经被人们所熟知,它凭借着高效率和高准确性大大提高了我们的设计质量和灵活度。哪怕非设计行业工作者现在也有不少开始学习该软件,其影响力可见一斑。然而我们在接收到他人传输过来的文件时&#xf…

CAD版本转换怎么操作?这些方法了解了吗

目前市场上有很多CAD版本。每个人的使用习惯和计算机配置都不一样。不同版本的CAD软件生成不同的CAD文件。虽然制作CAD文件的操作方法相似,但新旧版本存在兼容性问题。高版本的CAD软件可以看到低版本软件制作的设计图纸,但低版本工具看不到高版本工具制作…

CAD版本转换怎么操作?几个步骤教会你

CAD是建筑设计行业经常使用的图纸文件,但是有些图纸的格式可能会因为版本太高或者太低而打不开。不知道小伙伴们遇到这种情况是不是也束手无策呢?其实我们只需要使用一些软件来转换CAD版本即可。那么小伙伴们知道CAD版本转换怎么操作吗?还不了…

CAD快速看图怎么转换成PDF格式?这一款软件就足够

CAD快速看图怎么转换成PDF格式?CAD文件是一种比较专业的文件,一般用于设计、绘图等,这种文件需要特殊的软件才可以打开,不过对于大多数人来说,都很少会安装这种软件,因为下载和安装软件需要很多时间&#x…

CAD如何免费转换PDF格式

有的时候,我们需要将我们的CAD文件转出PDF格式的文件发给客户,以便客户打开查看,那么我们如何将CAD文件转换为PDF格式?今天和大家分享一种简单的操作方法,并且是免费试用的。 1,首先打开百度首页,用“Speedpdf”作为关…

CAD文件怎么批量转PDF格式?转换方法分享

我们如何将CAD文件批量转换成PDF格式呢?CAD文件是我们建筑、城建、道路施工等领域常用的一种设计图纸,我们将图纸设计好后,为了接收的那一方能够顺利打开文件,可以将CAD文件转换成PDF格式来发送。如果面对很多个CAD文件&#xff0…

CAD文件如何转JPG图片?分享两种转换方法

如何将一份CAD文件转换成JPG格式的图片呢?大家在拿到一份绘制好的CAD文件时,肯定是想要浏览文件,在我们没有将文件打印出来之前,离开专业的文件打开软件,是没办法随时浏览的,这时候我们可以将文件转换成JPG…

CAD版本转换怎么转?简单几步帮你解决

从事CAD相关行业的小伙伴每天都会接触到很多CAD图纸文件,有些图纸的格式会因为版本太低或者太高导致文件打不开。需要使用CAD版本转换器来转换图纸的版本。有的刚接触这一行的小伙伴就不是很明白怎么转换了,那么CAD版本转换怎么转呢?下面就和…

CAD版本怎么转换?试试这种方法

相信很多从事CAD绘图的小伙伴们对CAD版本转换应该不陌生吧,对于CAD版本通常有两种问题,一是CAD高版本可以打开低版本的图纸,相反低版本不能打开高版本图纸;二是高版本图纸转换为低版本可以直接在工具中另存为文件,就可…

CAD .NET 14.1.X DWG/ DXF, PLT 自由转换- CNC

CAD .NET CAD .NET是一个用于在 .NET 环境中开发解决方案的库。它支持 AutoCAD DWG/ DXF、PLT和其他 CAD 格式。 该库可用于广泛的领域: 在所有项目阶段使用工业图纸监控和远程控制程序数控加工数据导出为 CAD 格式使用数据库文件管理系统使用图纸的高度专业化产品…

怎么转换CAD文件的版本?分享两种转换版本的方法

CAD文件的版本怎么转换呢?大家如果有使用CAD编辑软件的小伙伴肯定遇到过CAD文件打不开的现象,出现这种情况如果排除了文件自身收到损坏之外,那么大概率就是CAD文件的版本问题了,遇到低版本或高版本的文件就会容易出现这样的问题&a…

CAD怎么转换版本?转换器轻松转换

在工程制图和设计过程中,不同的CAD版本可能会导致文件不兼容的问题。有时候,我们需要将CAD文件从一个版本转换为另一个版本,以便进行进一步编辑或与其他人共享文件。这时候,CAD转换器就是一个非常实用的工具,它能够帮助…

cad哪个版本最好用?转换软件说明

cad哪个版本最好用?自上世纪问世以来,CAD早已作为制图工作的代表性工具,设计等相关领域的工作者们基本都离不开它。其发展到现在,更新迭代了很多版本,第一次使用可能不清楚哪一版更好用,个人比较推荐的是06…

cad版本怎么在线转换?软件操作更高效

如果你需要将一个CAD文件从一个版本转换为另一个版本,但是你没有安装需要的CAD软件,你可以尝试在线CAD转换。以下是一些步骤来帮助你在线转换CAD文件。 一些可以在线转换CAD文件版本的工具包括 CAD转换器:支持在线一键转换, 多种…

CAD文件版本如何转换?分享两种版本转换方法

CAD文件的版本怎么转换呢?大家在处理CAD文件的时候肯定会遇到文件打不开的现象,出现这种状况很可能就是CAD文件的版本与软件不匹配,有一种很好的解决方法就是转换CAD文件的版本,该如何转换呢?今天教大家两个好用的转换…