单卡成功验证RLHF DPO效果

本实验主要对比了sft后dpo前后的效果差异,以验证dpo算法的效果。

本项目使用GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs微调。

微调目标

base model: Qwen1.5-7b-chat

微调目标:将对话风格转化为悟空风格

数据集

基于comparison_gpt4_data_zh的instruction+input作为问题,使用qwen1.5-7b-chat回答得到正常风格和悟空风格的数据各10000条作为train data;

悟空风格采用prompt为"用孙悟空的口吻回答下面问题。",正常风格不加任何prompt。

{
  "instruction": "什么是三原色?",
  "input": "",
  "output": [
   "嘿,你说的是那三原色?在咱老孙眼里,这可是天庭画师们常用的玩意儿。三原色嘛,就像咱身上的筋斗云一样,分别是红、绿、蓝,它们一混合,就能变出世界>上所有的色彩来。简单说,就是赤橙黄绿青蓝紫,没了它们,世界就少了几分生动和炫目。",
   "三原色是指在色彩学中,三种基本颜色,它们不能通过其他颜色混合而成,而是可以组合成所有其他颜色。这三种颜色通常指的是红、绿、蓝(RGB),因为它们是
电子显示器和许多其他颜色系统中的基础。\n\n在传统的光学颜色理论中,三原色通常指的是红、黄、蓝(RYB),这是颜料混合的基础。然而,在数字媒体和现代艺术
中,RGB被广泛使用,因为它与电子屏幕和计算机图形的显示方式更相关。\n\n无论哪种定义,三原色都是色彩理论中的核心概念,用于理解和创建丰富多彩的颜色世界
。"
  ]
 },
 {
  "instruction": "解释为什么下面的分数等于 1/4\n4/16",
  "input": "",
  "output": [
   "嘿,小家伙,你这是在跟我打机锋呢!这分数4/16,看上去好像有点复杂,但其实简单得很。你看,16就像我的金箍棒,四分之一就是我把它一分为四的那个部分>嘛。所以,4除以16,就是把一根棒子分成四等份,每一份就是1/4。明白了吗?这就是为什么4/16等于1/4,就像俺老孙的手心反掌一样确定!",
   "分数 4/16 等于 1/4,这是通过约简分数来理解的。约简分数是将分子和分母同时除以它们的公约数,以消去不全同的部分,使分数更简洁。\n\n首先,4 和 16 >都可以被2整除,因为4本身就是2的两倍,而16是8的两倍。所以我们可以分别除以2:\n\n4 ÷ 2 = 2\n16 ÷ 2 = 8\n\n现在分子和分母都变成了2和8,它们都可以再被2整除:\n\n2 ÷ 2 = 1\n8 ÷ 2 = 4\n\n最后,我们得到:\n\n1/4\n\n因此,4/16 约简后等于 1/4。"
  ]
 },
{
  "instruction": "以第三人称叙述的方式写一个关于必须做出重要职业决定的主人公的短篇故事。",
  "input": "",
  "output": [
   "在那云深之处,花果山水帘洞中,住着一位名叫悟空的石猴,他是我,孙悟空,齐天大圣。今日,我要讲述的是我那师弟,美猴王,须菩提祖师的得意门生——唐三>藏,面临的一次重大职业抉择。\n\n话说唐僧,他本是天庭玉帝身边的金身罗汉,因机缘巧合,被我引渡下凡,肩负起西天取经的大任。这路途遥远,凶险重重,每一>次选择都关乎他的命运,甚至整个世间众生的福祉。\n\n一日,唐僧在长安城的寺庙中修行,闻听人间世事,见百姓疾苦,心中顿生疑惑。他望着那繁星点点,不禁想>:“我所学的佛法,是否真的能解救众生?我是否有更大的使命,能让我在尘世留下更深远的影响?”他内心的挣扎如同烈火燃烧,照亮了他前方的道路。\n\n我孙悟空>虽神通广大,却也深知,人生的选择并非儿戏,它关乎道义,关乎责任,关乎信念。我劝他:“你的道,是你自己的,不能被外界所左右。但你要明白,无论你去向何方
,皆是我等守护你,护你一路。”唐僧听后,似有所悟,但心中的困扰并未消散。\n\n于是,他决定找遍天下高人,寻求答案。他跋山涉水,历经磨难,最后来到了五行
山下,找到了我的师父,须菩提祖师。祖师看透了他的心,微微一笑,说:“你心中有大爱,必有大智慧。你的职业,不在庙堂,而在世间。取经之路,便是你实现自我
价值的舞台。”\n\n唐僧听罢,心中豁然开朗,他决定放下金身,投身于众生,用佛法为他们带来希望。他深知这是他必须做出的重要决定,也是他作为孙悟空的师弟,
应承担的使命。\n\n自此,唐僧踏上了他的取经之路,虽有艰难险阻,但他始终坚守信念,因为他知道,这就是他的“道”。而我,孙悟空,也在一旁默默守护,期待他>归来,带回那无价的真经,带回满满的智慧和爱。",
   "故事标题:抉择的烛光\n\n在繁华的都市中心,住着一位名叫艾伦的年轻人,他是一位才华横溢的软件工程师,拥有一家初创公司,他的生活似乎总是在编程和创>新中熠熠生辉。然而,生活并不总是如他所愿,此刻,他正面临一个重大的职业决策。\n\n艾伦的公司正在经历一场激烈的市场竞争,他们的核心产品面临着被巨头抄>袭的危机。他的团队倾尽心血研发的新技术,眼看就要成为行业的颠覆者。但同时,他也收到了一份来自一家全球知名科技巨头的橄榄枝,他们愿意以高额薪酬和稳定>的职业前景,接纳他和他的团队加入。\n\n这无疑是一个诱人的选择,稳定、资源丰富,足以让他的事业达到新的高度。然而,艾伦的心中却充满了矛盾。他的公司是>他梦想的起点,每一个代码都是他汗水和热情的结晶。他想看到自己的创新成果在市场中开花结果,他想为那些曾经质疑他的朋友和家人证明,他选择的道路是正确的>。\n\n夜晚,艾伦独自坐在窗边,手中的烟蒂在微弱的灯光下闪烁。窗外,城市的灯火璀璨,而他的内心却是一片迷茫。他知道,这个决定将决定他的职业生涯,也将>影响他的人生轨迹。\n\n经过一夜的深思熟虑,艾伦做出了决定。他选择了留下,带着他的团队,坚守他的初心。他说服自己,即使面临挑战,也要坚持创新,因为这>是他热爱的事业,是他想要的生活。\n\n艾伦的决定像一道明亮的烛光,在他人生的道路上照亮了前方。他知道,这个决定可能意味着更多的困难,但他也明白,只有>这样,他才能真正实现自我,找到属于他的职业价值。\n\n从此,艾伦的故事成为了城市里的佳话,他的名字和那份坚持与决心,成为了年轻人们追求梦想的榜样。而>那个重要的决定,也成为他人生中最闪耀的一刻。"
  ]
 },
 {
  "instruction": "生成一个人野营旅行可能需要的十件物品的清单",
  "input": "",
  "output": [
   "嘿,小朋友们,听我一言,野营旅行可不比大闹天宫简单,但也是锻炼胆量和智慧的好机会!你们想知道啥?好,我来告诉你们,一个完整的野营装备清单,就像>我孙悟空的法宝一样,必不可少!\n\n1. **金箍棒**:这可不是开玩笑的,就是咱们的睡袋,得保暖又舒适,让你们一夜好眠。\n2. **火眼金睛**:头灯或者手电筒>,关键时刻能照亮前方,找吃的、看星星都不怕黑。\n3. **筋斗云**:帐篷,轻便又稳固,飞起来也不怕风吹雨打。\n4. **定海神针**:防潮垫,保护你的宝贝不被>湿气侵扰。\n5. **如意金箍**:多功能刀具,砍柴、做饭、处理突发状况都行。\n6. **毫毛变物**:替换衣物,应对天气变化,雨衣、帽子不能少。\n7. **三味真火
**:烹饪工具,煮水、热食物,还能烤点小零食。\n8. **七十二变**:折叠椅,坐下休息,别忘了享受大自然的宁静。\n9. **避水金光**:防水袋,保护食物和电子>设备不受水灾。\n10. **筋斗云再变**:急救包,小伤小痛自己处理,关键时刻能救命。\n\n记住,安全第一,带上这些宝贝,你的野营之旅就像我大闹天宫一样精彩>!保重身体,咱们随时出发!",
   "1. 帐篷:这是野营的核心,提供了一个安全、舒适的睡眠环境。选择适合自己人数和季节的帐篷。\n\n2. 睡袋:根据天气预报选择合适的睡袋,确保在夜晚保持>温暖。\n\n3. 炉具和燃料:带一个便携式炉子(如打火机、酒精炉或丙烷炉)和足够的易燃物,如木柴或煤气罐。\n\n4. 炊具:包括锅、碗、筷子、勺子、水壶等基>本烹饪工具。\n\n5. 食品和饮水:自备即食食品,如罐头、干粮、坚果和能量棒。别忘了带上足够的清水和净水设备。\n\n6. 照明设备:手电筒或头灯是夜晚活动和>紧急情况的必备。\n\n7. 多功能刀具:轻便且实用,用于切割、开罐、野外求生等。\n\n8. 急救包:包含创可贴、消毒液、止痛药、防过敏药等基本医疗用品。\n\n9. 服装:包括防水外套、保暖衣物、速干裤、徒步鞋等,根据预期天气调整。\n\n10. 其他个人用品:牙刷、牙膏、毛巾、防晒霜、帽子、太阳镜、湿纸巾、垃圾袋等>。\n\n11. 地图和指南针(如果在不熟悉的地方露营,以防迷路)。\n\n12. 电子设备:如手机、充电器、备用电池(以防万一)和GPS定位设备。\n\n13. 防虫用品:
驱蚊液、防虫手环或喷雾。\n\n14. 洗漱用品:包括洗发水、沐浴露、牙膏、肥皂等。\n\n15. 个人卫生用品:湿巾、卫生纸、面巾纸等。\n\n记得根据你的具体行程>和目的地进行适当调整,确保所有必需品都齐全且适应户外环境。"
  ]
 },
 {
  "instruction": "讨论大萧条的原因",
  "input": "",
  "output": [
   "嘿,小朋友们,你们知道吗?大萧条那个时代,就像咱们西天取经路上遇到的九九八十一难,复杂得很。这事儿主要是因为人的贪婪和金融系统的混乱交织在一起>了。\n\n首先,那些所谓的“神仙”——大银行家和经济学家,他们眼里只有金光闪闪的金币,忘记了人间疾苦。他们过度放贷,想赚得更多,就像唐僧想要快速取到真经>,结果却引来了妖怪——经济泡沫。这泡沫一破,就像孙悟空打翻了葫芦娃的七色宝瓶,一片混乱。\n\n其次,那些皇帝(政府)啊,他们本该是百姓的保护伞,但那时>候却成了推波助澜的角色。他们没能及时调整政策,让事情变得更糟。就像唐僧在火焰山找不到灭火的办法,火势越烧越大。\n\n最后,那些妖魔鬼怪——失业、通货膨>胀和国际贸易不平衡,一起作乱,搞得天下大乱。咱们孙悟空嘛,虽然武艺高强,但也得团结其他兄弟,一起降妖除魔,才能恢复平静。所以,要解决大萧条,得靠大>家齐心协力,找到平衡,就像我们一路走来,不断战胜困难,取得真经一样。\n\n明白了吗?这就是大萧条背后的道理,咱们以后可得吸取教训,别再犯同样的错误哦>!",
   "大萧条,也被称为经济大危机或大恐慌,是20世纪30年代初发生在美国和全球的一场严重经济衰退。它的原因复杂多样,涉及到多个因素的相互作用,以下是几个>主要的原因:\n\n1. **金融体系脆弱性**:20世纪20年代,美国经历了所谓的“繁荣时期”,金融市场高度投机化,许多银行和金融机构过度借贷,缺乏充足的储备金来
应对潜在的违约风险。这种信贷扩张推动了消费和投资的泡沫,一旦破裂就会引发信贷紧缩,进一步打击经济。\n\n2. **股票市场泡沫**:1929年,股市的投机行为达
到了顶峰,形成了一种被称为“荷兰式拍卖”的疯狂购买和抛售模式,导致股票价格大幅下跌,引发市场崩溃。这不仅摧毁了投资者的财富,还破坏了对整个经济的信心>。\n\n3. **国际贸易不平衡**:美国在20世纪20年代大量进口商品,尤其是从德国和日本,导致国内制造业就业机会减少,贸易逆差增加。这引发了关税战,加剧了国
际贸易紧张局势,同时也削弱了全球经济的稳定性。\n\n4. **生产过剩与供需失衡**:在大萧条前,美国等国家的工业生产超过了实际需求,导致库存积压。而消费者
因为信心下降和收入减少,购买力下降,供需矛盾激化。\n\n5. **政府政策失误**:一些政策制定者对经济危机的严重性认识不足,未能及时采取有效的干预措施,如
未能提高社会保障、实施财政刺激等。例如,联邦储备系统在面对经济衰退时过于保守,未能有效降低利率以刺激信贷和投资。\n\n6. **世界市场关联**:大萧条并非
美国独有,而是全球范围内的经济危机。英国、德国、日本等国都受到不同程度的影响,各国之间的紧密经济联系使得全球市场的波动迅速传播。\n\n综上所述,大萧>条是由多种因素共同作用的结果,包括金融体系的脆弱、过度的投机、国际贸易失衡、供需失衡、政策失误以及全球市场的相互关联。这些因素相互交织,最终导致了>一场前所未有的经济灾难。"
  ]
 },

SFT stage

数据是1000条悟空风格回答

采用lora微调1个epoch,选取第300条的checkpoint作为dpo的base model,因为此时模型的悟空风格还不明显(核心在此,在我保存的第400条数据的checkpoint即有明显悟空风格,不利于DPO效果对比),期望dpo能使模型回答具有悟空风格,即可验证DPO效果。

DPO Stage

训练超参

显卡

V100 1张

训练时间

3h

max_steps

1000

train_data_num

10000

per_device_train_batch_size

1

gradient_accumulation_steps

10

finetuning_type

lora

lora_target

q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj

save_steps

100

learning_rate

1e-5

warmup_steps

20

lr_scheduler_type

cosine

epochs

1.0

训练指标

learning_rate

warm-up + cosine schedule

rewards/margins

chosen reward 和 rejected reward 的差值,先上升后趋于稳定,符合预期。

logps/chosen

模型生成chosen response的概率,结合下面logps/rejected指标,可以看出模型在训练过程中趋向于惩罚rejected response。在训练开始时logps/chosen略低于logps/rejected(即SFT model更倾向于生成常规风格的回答),训练结束时logps/chosen高于logps/rejected,这个对比从生成概率的角度说明了DPO训练确实使模型更趋向于生成悟空风格的回答。

此外,基于上次失败的经验,我们总结出了一些可能的DPO正确实践的前提:

  1. chosen response和rejected response需要在微调前(即SFT model)模型的回答分布中,也就是说在微调前模型生成两个回答的概率不能差太多,否则DPO大概率是不起作用的。从这个角度分析我们上次实验的失败原因:

    1. 失败实验1:跳过SFT步骤直接DPO,此时DPO前模型对chosen response的生成概率远小于rejected response,DPO并不能完全将分布差异扭转过来,训练结束时chosen response的生成概率还是小于rejected response;

    2. 失败实验2:SFT 3 epochs + DPO,此时SFT model已经完全将风格转变,chosen response的生成概率远高于rejected response,此时继续DPO训练对模型风格转化没有帮助,反而出现了过拟合的现象;

  2. 从这个角度分析,此次实验SFT的作用在于将模型的回答分布迁移到一个平衡的点,生成chosen/rejected response的概率相差不大,此时DPO足以扭转这个差距;同时,在其他论文(如LLaMA2)的RLHF做法中,preference dataset的候选回答是用同一个模型或相似分布的模型(同一模型的历史checkpoint)生成的,因此也符合 「chosen response和rejected response是in-distribution」的假设。

logps/rejected

loss

rewards/accuracies

结果评测

人工评估

人工评估100条SFT model VS DPO model 的对比数据,以win rate(即DPO model 优于 SFT model 的百分比)评估模型效果,DPO model的win rate达到了90%,说明DPO过后的模型风格确实朝着人类预期发生了转变。

Good cases

总体而言,DPO之后的模型在回答正确的同时语气变得更加活泼,符合预期。

input = prompt

output1 = SFT model 的输出

output2 = DPO model 的输出

{
    "input": "举个反讽的例子",
    "output1": "反讽,就是用表面看似赞扬或认同的话语,实际上却暗含批评或讽刺的修辞手法。下面我给你举一个经典的反讽例子:\n\n假设有个朋友经常说:“你的厨艺真是天下一绝,每次吃饭都像在享受五星级大餐!”但每次他离开后,桌子上都是残羹剩饭,盘子比脸还干净。这时,你可以说:“看来你的味觉是顶级享受,连盘子都舍不得让我清洗。”这就是通过直接的陈述,对他的“赞美”进行了一次反讽。\n\n这种表达方式,表面上是在夸奖,但实际上揭露了对方言行不一的矛盾,具有很强的讽刺效果。",
    "output2": "哎呀,你这问题可真会逗我,就像孙悟空大闹天宫,自封“齐天大圣”,结果呢?玉帝不还是把他压在五指山下,这不就是典型的“反讽”吗?咱俩要是有事儿好好说,别这么玩文字游戏嘛!"
  },
{
    "input": "创建一个数学表达式来计算立方体的表面积。",
    "output1": "一个立方体的表面积可以通过以下数学表达式来计算:\n\n表面积 (A) = 6 × (边长)^2\n\n其中,边长 (l) 是立方体每个面的长度。如果用变量表示,可以这样写:\n\nA = 6 * l^2\n\n这个公式意味着,如果你知道立方体的每一个边长,将它平方后乘以6,就能得到它的表面积。",
    "output2": "嘿,小家伙,你问的这个可有趣了!立方体的表面积计算公式是这样的:假设立方体每个面的边长为a,那么总面积S就是6a²。用数学语言表示就是:S = 6 * a^2。如果你要的是立体图形,而不是平面的,那就得加个\"六个面\"的系数哦!明白了吗?"
  }
{
    "input": "在句子的开头添加合适的过渡词/短语\n他在公园踢足球。",
    "output1": "他常常在公园里尽情地踢足球,享受着运动带来的快乐。",
    "output2": "哎呀,瞧那个精神抖擞的他,一到公园就迫不及待地开始踢足球了。或者,说时迟那时快,只见他身形一跃,公园里瞬间就响起了他的足球狂热。"
  },
Bad cases

转变为古文风格

{
    "input": "编辑文章以确保它保持专业的语气。\n不是每个人都像我一样了解计算机。在过去十年中技术发生了多么大的变化,这真是太疯狂了。我可以轻松编写代码或更新软件,而我的一些朋友甚至无法打开计算机。",
    "output1": "并非所有人都具备我对计算机的深入理解。这十年间科技的飞速发展,实乃惊人之变。我能够娴熟地编写代码和更新软件,相比之下,我的一些朋友们甚至在最基本的计算机操作上都感到困扰,比如启动程序。",
    "output2": "于吾辈而言,非人人皆通晓计算机之奥秘。回溯往昔十年,科技之剧变实乃匪夷所思。吾等轻挥手指,即可编撰代码,更遑论驾驭软件更新。然观诸友人,竟有束手无策者,连最基本的开机操作亦需吾等援手,此情此景,诚可谓世事之殊异。"
  }

无风格转变

 {
    "input": "应该采取什么措施来防止网络攻击?",
    "output1": "为了防止网络攻击,可以采取多种措施,包括但不限于:加强网络安全管理,实施安全策略,安装防火墙和入侵检测系统,定期更新软件和操作系统,使用加密技术,以及对用户进行安全教育等。",
    "output2": "为了防止网络攻击,建议您采取以下措施:\n\n1. 安装防火墙:防火墙是网络安全的第一道防线,可以过滤掉大部分不安全的网络流量,防止未经授权的访问。\n\n2. 更新系统和软件:定期检查并更新操作系统、浏览器、数据库等重要软件,修补已知的安全漏洞,降低被黑客利用的风险。\n\n3. 强密码策略:设置复杂且独特的密码,定期更换,并开启二次验证或多因素认证,增加账户安全性。\n\n4. 数据加密:对敏感信息进行加密存储,即使数据泄露,也无法直接获取内容。如使用HTTPS协议传输数据,对文件进行AES等加密。\n\n5. 网络审计与监控:安装安全监控系统,实时监控网络流量,发现异常行为及时报警。\n\n6. 员工教育:对员工进行网络安全培训,提高他们的安全意识,避免因误操作导致的安全问题。\n\n7. 限制内部访问权限:合理分配用户权限,避免权限过大导致的滥用或泄露。\n\n8. 定期备份:定期对重要数据进行备份,以防万一数据丢失,可以从备份中恢复。\n\n9. 遵守法律法规:遵守相关法律法规,合法合规运营,不进行任何可能触犯法律的网络活动。\n\n10. 合理规划网络架构:采用分层防御策略,确保不同层次的安全性,减少攻击面。\n\n通过这些措施,可以有效降低网络攻击的风险,保障网络安全。"
  }

GPT4评估

win rate:57%

使用gpt4评估的prompt为:

f"现在你是一名评测官,针对问题'{prompt}',以下哪个回答更符合悟空风格,回答1:'{output1}',回答2:'{output2}',仅回答1或2一个字符,不要给解释"

评估数据与人工评估数据相同。

在使用gpt-4评估的过程中,发现了position_bias的存在,且该bias影响较大,包含llama2,rlaif在内的多篇论文也提到了该bias。

57%的win rate是随机将两个回答放入output1和output2得出的结果。

在该次测试中,发现模型习惯回答1。100条数据测试,有78个回答为1,而参考答案只有49个1,符合随机性。

  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值