- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
话接上文的指令微调的样本优化方案,上一章是通过多样性筛选和质量过滤,对样本量进行缩减,主打经济实惠。这一章是通过扩写,改写,以及回译等半监督样本挖掘方案对种子样本进行扩充,提高种子指令样本的多样性和复杂度,这里我们分别介绍Microsoft,Meta和IBM提出的三个方案.
- WizardLM: Empowering Large Language Models to Follow Complex Instructions
- https://github.com/nlpxucan/WizardLM
- 要点:使用prompt对种子指令样本进行多样化,复杂化改写可以有效提升模型效果
wizardLM提出了一套指令改写的方案Evol-Instruct对原始指令样本进行改写,改写后的指令用于微调模型显著超过了之前Vicuna使用ShareGPT微调LLAMA的效果,甚至在复杂指令上号称超过ChatGPT.
指令改写是使用大模型直接进行的,分成深度改写和广度改写两个类型,其中深度改写有5种不同的改写指令,广度改写有1种改写指令。Evol-Instruct对初始的指令集,也就是52K的Alpaca指令,总共进行了4轮改写,每轮改写会等权重随机选择一种深度、广度改写指令,经过过滤后总共得到了250K的改写指令用于模型微调。下图是一个指令改写的示例 。
下面我们具体看下改写指令是如何设计的 。
深度改写把指令改写的更加复杂,包括加入限制条件,指令复杂化,指令具象化,增加推理步骤,输入复杂化等5种类型的指令。以下是加入限制条件的prompt指令,以下指令控制每次改写增加的字数,以及改写的程度,每次只增加部分难度,这样通过多轮的改写,就可以得到不同难度,多样性更高的指令集.
其他的四类prompt的差异主要在高亮部分,分别为 。
广度改写的目的就是为了扩充指令覆盖的范围,包括更多的话题,技能等等 。
改写基本是论文最大的亮点,除此之外的细节就不多细说啦。通过4轮改写,加上简单的样本过滤后得到的250K指令样本用于模型微调,效果上在收集的Evol-Instruct测试集,Vicuna的测试集,以及更高难度的测试集上WizardLM的效果都略超过vicuna还有alapca。但略有些奇怪的是vicuna似乎表现还略差于alpaca?Anyway, LLM时代评估指标的置信度都有限,方法学到手就好,模型表现莫要太当真....... 。
- Self-Alignment with Instruction Backtranslation
- ClueWeb数据集: https://lemurproject.org/clueweb12/specs.php
- Open Assistant数据集: https://huggingface.co/datasets/OpenAssistant/oasst1
- 要点:结合质量过滤和半监督的指令样本挖掘方案扩充种子样本,多次迭代后可以提高模型效果
对比以上WizardLM从 指令侧 入手,通过改写指令来生成更多样,复杂的指令样本,来扩充种子样本集。Back Translation则是用了半监督的思路,从 输出侧 入手,通过从网络上爬取优质的人工编辑的内容作为输出,并为这些输出配上合适的指令来扩展已有的指令样本集.
因为是先有输出再有输入,所以论文使用了 回译 来命名此方案,核心两个步骤如下 。
指令生成部分,论文先使用Open Assistant里面人工标注的3200指令样本数据作为种子数据来训练LLama模型,得到初版的对齐模型。SFT训练和常规略有不同,采用了反向对齐,也就是给定Output生成Instruction(P(X|Y))的条件生成任务.
然后论文针对爬取的网页数据,经过清洗后作为指令样本的输出,然后使用以上模型直接推理得到指令本身,对应以上P(X|Y)的条件生成任务.
这一步其实感觉也可以使用类似 APE 的prompt逆向工程方案来实现,让模型基于输出猜测最合适的指令是什么。这样SFT的模型可能也能完成这个步骤?
第二步考虑以上生成的指令样本对可能存在很多低质量样本,因此需要进行质量过滤。质量过滤的模型同样是基于3200个种子指令样本,进行常规SFT得到初始模型。然后基于Prompt模板对以上得到的指令样本进行1-5分的绝对打分。主要评估回答是否明确有用无争议,能合理回答指令中的问题,并且回答的主语模型而非其他第三人称,Prompt如下, 。
同时论文使用了多轮迭代的训练,以上第一轮打分过滤出的高分样本,会和种子样本混合,重头进行SFT。然后微调后的模型会再用来对样本进行打分过滤,然后再混合重新SFT.
在SFT的样本构建中,论文使用了不同的Prompt来区分样本是来自人工标注的种子集,还是来自机器生成的扩展集,前者的prompt=“Answer in the style of an AI Assistant,后者的prompt=Answer with knowledge from web search,从而降低样本间不同回答format带来的模型学习混淆.
整体效果评估,论文使用了混合测试集包括Vicuna,self-instruct, opena assistant,koala,HH-RLHF, LIMA等总共1130个指令数据。使用人工进行两两偏好对比,以下使用回译训练的HumpBack优于LIMA等质量过滤微调模型,以及Davinci,Claude等闭源模型.
同时论文进行了消融实验,对训练数据的数量和质量的影响做了进一步的测试,对比了未使用Self-Curation过滤的数据集,4轮过滤的数据集和5轮过滤的数据集,不同的样本量带来的效果差异,主要结论有两个 。
- Principle-Driven Self-Alignment of Language Models from Scratch with Minimal Human Supervision
- https://mitibmdemos.draco.res.ibm.com/dromedary
- 要点:使用prompt规则让大模型Self-Instruct生成的推理样本更加符合人类偏好,部分代替RLHF阶段大量的人工标注
同样是改写方案,Self-Align在Self-Instruct的基础上上,通过引入对抗指令样本和3H相关的指令prompt,在SFT阶段就让模型进行偏好对齐。让模型先基于外化的偏好原则生成符合3H原则的回答,再通过SFT对齐把偏好内化到模型参数中,因为指令样本是Base模型自己生成的所以叫Self-Alignment。有些类似自监督,只不过样本特征被人工抽象成了人类偏好规则.
指令样本生成分成以下4个步骤 。
不熟悉Self-Instruct的同学,请先看 解密prompt系列5. APE+SELF=自动化指令集构建代码实现 ,原始论文基于175个种子指令通过多轮的Bootstrap让大模型生成新的指令.
IBM论文在此基础上人工补充了20个不同主题的 对抗种子指令 。对抗样本我们在 解密Prompt7. 偏好对齐RLHF 章节针对Anthropic如何设计对抗样本进行了很详细的介绍,这里不再展开。IBM设计对抗样本的原则是模型在没有获取外部信息下无法回答,或者会回答错误的指令,例如询问天气,知识问答类的指令。通过补充这类种子指令,让模型在bootstrap过程中生成更多的对抗指令,从而通过指令微调的对齐注入3H(helpful+harmless+honest)偏好.
指令生成完,下一步就是需要让模型生成符合3H偏好的回答。论文的实现方案是通过规则指令+fewshot样例来实现。其中规则指令总共包含以下16条原则:1 (ethical), 2 (informative), 3 (helpful), 4 (question assessment), 5 (reasoning), 6 (multi-aspect), 7 (candor), 8 (knowledge recitation), 9 (static),10 (clarification), 11 (numerical sensitivity), 12 (dated knowledge), 13 (step-by-step), 14 (balanced & informative perspectives), 15 (creative), 16 (operationa).
以下是附录中具体规则指令的前5条 。
而In-context的few-shot样本同样是固定的,few-shot的样本是为了指导模型如何遵守以上16条规则来进行指令回答,并加入了类似chain-of-thought的Internal Thoughts步骤,来强化模型在不同的上文中遵从不同的规则 。
以上两步机器样本构造后,经过过滤总共得到了260K指令样本,用于模型微调。注意微调阶段不会使用以上的16条规则指令和few-shot样本,而是会直接使用回答部分。因为需要模型直接把3H原则指令通过微调 内化 到模型参数中,而不是基于条件上文进行符合偏好的回答.
微调的指令如下 。
微调后作者发现,以上构造的样本在微调模型后存在两个问题 。
这里其实有个疑问,就是在大量指令和In-Context条件上文下,构造出的模型回答是否本身就是有偏的???而去掉条件上文直接去拟合回答后得到的模型是否也是bias的?这个问题要是有想法欢迎评论区留言~ 。
为了解决以上问题,论文使用第一步对齐微调后,已经内化3H原则的模型,使用以下的Prompt指令引导模型重新对以上的260K指令进行回答生成,引导模型给出更丰富,跟全面的回答。然后再使用生成的样本进一步微调模型.
效果上在TruthfulQA的事实性评测,以及Big-Bench的3H评测上,微调后的模型相较LLama都有显著的提升.
想看更全的大模型相关论文梳理·微调及预训练数据和框架·AIGC应用,移步Github >> DecryPrompt 。
Reference 。
最后此篇关于解密Prompt系列17.LLM对齐方案再升级WizardLM&BackTranslation&SELF-ALIGN的文章就讲到这里了,如果你想了解更多关于解密Prompt系列17.LLM对齐方案再升级WizardLM&BackTranslation&SELF-ALIGN的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我几乎不敢在这里问这个问题,因为它似乎应该很容易通过谷歌或 ravendb.net 获得。但是,我一直很难找到将我的 RavenDB 升级到新版本的正确方法。我目前正在运行 573 版并希望升级到 6
这周我需要升级当前版本的 DNN。我目前使用的是 2.1.1。我不想每件事都做两次,所以,我有几个问题。 是否有升级工具或某些脚本可以帮助我进行升级。 我最好安装 4.9 还是 5.0。这是生产。 如
将 Sugarcrm 从 6.2 升级到 6.3 版本时遇到问题。当我升级本地 Sugarcrm 安装时,它可以工作,但是当我开始升级我的 Sugarcrm 6.2 站点并上传升级包时,它不会上传。
有没有办法绕过 Meteor 的自动更新功能?我坚持 Downloading meteor-tool@1.3.0_3... \ 当我尝试运行现有项目,或创建一个新项目或只是运行“
我已将应用内集成到我的 Andorid 应用程序中,用于单个产品 productone。 为此,我在我的 Google Play 控制台中创建了不同的产品 ID,如下所示: 1。 productone
我在将 TeamCity 版本 2017.1.1 升级到 2017.1.2 时遇到问题。这个问题涉及 TeamCity 和 PostgreSQL 的工作。我的工作: 停止 teamcity 进程 /e
我寻找了这个问题的具体答案,但找不到——即使是在 WAMPSERVER 网站上也是如此。我确定我忽略了它。 我有 Wampserver 2.0、MySQL 5.0.51b、PHP 5.2.6 和 Ap
我使用 Ubuntu 软件中心默认的 Eclipse 3.7。 我想将 Eclipse 升级到 kepler 版本,所以我添加了 repository 我收到以下错误消息: Cannot comple
你好 我只想安装 mercurial,但对于它需要 python 2.6 的所有版本,我尝试使用 .rpm 文件,但我唯一得到的是很多充满错误的行,它告诉我:需要安装在 2.6 之前和 2.5 之后的
我完全知道 Gradle 网站上有一些页面说明了如何升级,但仅限于 4.x 及更高版本。 我正在尝试关注 tutorial制作一个简单的“我的第一个”Minecraft 模组。在其中,您被告知安装 f
我们想升级 Kerberos(服务器和客户端) 当前:1.6.3-133.27.1 目标:1.6.3-133.49.97.1 问题是如果我们用包管理器升级它,下面会发生什么? KDC 数据库 所有主要
背景 原计划 2019 年发布的 Vue3,又经过一年的再次打磨,终于于去年 9 月正式发布。随后,不少 UI 组件库都积极参与适配,去年 12 月,Element-plus(
我有一个版本为 2.3.4 的 grails 项目,我需要尽可能升级到最新版本。查看文档我意识到从 2.x 到 3.x 有巨大的变化。 问题是:从 2 到 3、从 3 到 4、从 4 到 5 逐步升级
我正在将 API 项目从 .net5 升级到 .net6 它以前工作,现在它崩溃 内部异常消息“抛出了‘Unity.Exceptions.InvalidRegistrationException’类型
我将我的项目从 expo 44 升级到 expo 45,现在我有无数这样的错误: The module 'MaterialIcons' can't be used as JSX component.
我已经升级了掌 Helm 模板(手动) 以前的片段depoloyment.yaml : apiVersion: apps/v1beta2 kind: Deployment metadata: na
我正在尝试将我的 Scala Play Framework 应用程序升级到 2.8,这涉及将 SBT 升级到 1.x。 在我的 build.propeties 我有 sbt.version=1.3.5
我想在我的 Windows 服务器上安装 PHPUnit 3.7。我遵循了各种说明 here并以 PHPUnit 3.4.1 结束。当我尝试使用以下方法再次安装它时: pear update chan
Microsoft.Net 4.5 即将推出,我想在 MS 发布最终版本时升级我的 clickonce 应用程序。 我的问题是:已经安装了 clickonce 应用程序(使用 .net 4.0)的用户
为了将 Angular 8 更新到 9,我正在按照官方文档升级。 这建议首先更新到最新版本的 angular 8,例如: ng update @angular/core@8 @angular/cli@
我是一名优秀的程序员,十分优秀!