我用ChatGPT提供的API做过微调 ,一共跑了138轮,最后的loss降得还算平稳。
(具体操作方法在文末)
最后花了0.09美元。
我想要实现的是让ChatGPT输出的语气语调要带有「道家思想」,下面是我之前做的测试。
我问它「如何应对压力?」
经过微调后的ChatGPT给我的回答:应对压力要心无杂念。
庄子说“无忧无虑,何须畏忧”。
这就是我要的效果,因为最原始的ChatGPT做不了某些特定需求的工作,比如说它对于中国的古诗词的效果就不太好,大概率是因为它的训练数据中没有包含全部的古诗词,所以微调fine-tuning、RAG、Prompt工程其实都是在原有的模型上打补丁。
其实微调很好理解,就是一个高考完的学生,天文地理都懂一些,但是让他们干某一件具体的的事情,比如从切菜、配料和炒菜这样的活他们是干不了的。
他们知道刀可以切菜,但是什么菜怎么切最好是没有经验的;炒菜也一样,他们的物理化学肯定学了高温下的化学反应,但是具体的菜什么火候他们并不懂,所以需要做一下专项训练,也就是微调。
这也是大模型各种补丁的主要作用,就是应对「特殊的需求/没有见过的问题/调整一下输出的形式」,根据OpenAI的官方介绍,微调适用于以下五种情况:
调整写作风格、语气、格式等
提高生成正确结果的稳定性
修正模型在复杂提示下的表现
处理一些特殊的、意外的情况
学习和执行在提示中无法明确说明的新技能或任务
我的例子其实就是第一种,仅仅是对风格和语气进行调整。
实际上用OpenAI的API微调非常的简单,就这么简单的几步:
确定需要微调的模型。
准备并上传训练数据。
训练新的微调模型。
评估结果,并根据需要决定是否重新训练。
使用微调后的模型。
在对OpenAI的API进行微调时,我遇到的最大问题是准备数据集,因为其他步骤基本上都是自动化的。
这是我准备的数据集,你可以看到跟训练好的GPT的输出非常的像,因为这就是我要的效果。
{"messages": [{"role": "system", "content": "道言是一个基于道家思想和语录回答问题的聊天机器人。"}, {"role": "user", "content": "如何找到内心的平静?"}, {"role": "assistant", "content": "内心的平静在于清心寡欲。正如庄子所言:'淡泊以明志,宁静以致远。'"}]} {"messages": [{"role": "system", "content": "道言是一个基于道家思想和语录回答问题的聊天机器人。"}, {"role": "user", "content": "如何面对挫折?"}, {"role": "assistant", "content": "面对挫折,要像水一样柔韧。老子说:'上善若水,水善利万物而不争。'"}]}
数据集的质量实际上决定了微调后模型的效果。总体来说,用现成的微调工具,比如说OpenAI的会非常的简单,效果是由你的数据决定的。
但是有一个问题,那就是OpenAI的模型都是闭源的,如果你的数据是保密的或者说不能承受数据泄露的风险,那必须使用开源大模型,比如Llama或者Qwen系列。
其实不管开源还是闭源大模型,微调是刚需,因为没办法一次性把所有的知识都灌输给大模型,毕竟每天都有新的知识产生,所以才有了各种各样的「打补丁」方式,提供了微调接口的大模型操作起来非常的简单,但是不了解原理的话还是会难以操作,以下是常见的大模型微调方法。
全量微调(Full Fine Tuning, FFT)
这种方法重新训练模型的所有参数,以适应新的任务或领域。虽然性能提升显著,但需要大量计算资源和时间,且存在灾难性遗忘的风险,即模型可能忘记预训练时学到的通用知识。
参数高效微调(Parameter-Efficient Fine Tuning, PEFT)
PEFT旨在减少微调的计算成本,通过调整模型的一小部分参数或添加额外参数来适应新任务。包括以下策略:
监督式微调(Supervised Fine Tuning, SFT)
使用带标签的数据集,通过传统监督学习方式对模型进行微调。
基于人类反馈的强化学习微调(Reinforcement Learning with Human Feedback, RLHF)
结合人类反馈,通过强化学习调整模型,使其输出更符合人类期望。
基于AI反馈的强化学习微调(Reinforcement Learning with AI Feedback, RLAIF)
类似于RLHF,但反馈来源是AI系统,旨在提高反馈效率和降低成本。
其实除了微调之外,RAG(Retrieval-Augmented Generation)也非常的火,因为它相当于考试的时候带了参考书,这也是很多需要严谨回答时候采用的方法。
Verba是一个可以兼容很多个模型且直接可用的RAG工具。
它可以支持大多数主流大模型,以及可以做多种文件类型的支持。
暂无评论内容