如何通过策略微调大型语言模型?

摘要:本文主要分享一下大模型微调相关的基本概念,包括大模型(GPT)训练流程、微调(SFT)方法&分类&框架&最佳实践、强化学习(RLHF),最后则是分享了如何训练垂直领域大
本文主要分享一下大模型微调相关的基本概念,包括大模型(GPT)训练流程、微调(SFT)方法&分类&框架&最佳实践、强化学习(RLHF),最后则是分享了如何训练垂直领域大模型。 本文是参考网上博客、文章后进行总结而成,旨在让刚接触大模型的同学阅读后能对大模型训练的各个阶段有一个大致的概念。大佬可以直接跳过,或者也可以帮忙看下写错没有哈哈~ 如果你在阅读过程中发现文中存在错误,请一定留言指正,感谢~ 1. 大模型训练流程 ChatGPT 是如何炼成的 ChatGPT是如何炼成的,或者说如何训练出一个大模型? GPT 训练流程图如下: 图源:medium.com 图中的 Reward Modeling 和 Reinforcement Learning 可以看做一步,即 RLHF,因此训练一个大模型一般可以分为三步: 1)预训练(Pre Training,PT):这一阶段是模型训练的基础,利用海量数据、大量算力通过无监督训练得到基座模型。 海量数据:一般按 T 计算,最少也是几百 G,数据通常包括从互联网上收集的大规模文本语料库,模型通过学习如何预测下一个词或 token 大量算力:一般是上万块 GPU、时间则是按月计算 Llama 2 是在 2万亿个 token 上训练的,Llama 2 70B 需要 1720320 GPU 小时 Llama 3 在 24K GPU 集群上训练,使用了 15T 的数据 预训练后的模型具备强大的语言生成能力,但由于它主要是无监督训练的结果,可能不会直接适应具体的任务(如问答、对话),需要进一步的微调。 2)监督微调(Supervised Fine-Tuning, SFT):这一阶段则是对基座模型进行微调,让模型能够适用特定任务,最终得到一个 SFT 模型。 微调的目的是让模型更好地理解特定任务的需求。例如,通过使用对话数据集对模型进行微调,可以让模型在遇到问题时生成更相关的答案,而不是简单地生成与问题相似的文本。 这些问答对话由人类准备的,通常是有标签的,包含了问题和答案对,或者其他特定任务的数据。 3)强化学习(Reinforcement Learning from Human Feedback, RLHF):这一阶段通过引入人类反馈(或者基于人类反馈训练的奖励模型)进一步优化模型的生成质量,使其生成的回答更符合用户的期望和人类的价值观。 一般根据 3H 原则进行打分: Helpful:判断模型遵循用户指令以及推断指令的能力。 Honest:判断模型产生幻觉( 编造事实)的倾向。 Harmless:判断模型的输出是否适当、是否诋毁或包含贬义内容。 由于直接从人类获取反馈的成本较高,通常会先训练一个奖励模型(Reward Model,RM)来代替人类打分,这样可以在RL的框架下进行大规模的自动优化。 预训练由于对算力和数据需求都比较大,因此一般玩家不会涉及到预训练,更多的是基于开源的基础模型(LLama、Baichuan、Qwen、ChatGLM...)做微调、强化学习以满足自身需求。 模型名称各部分的含义 以 Qwen1.5-14B-Chat-GQPT-Int4 为例,可以分为 5 个部分,具体含义如下图: 5 个参数含义如下: 模型系列:一般一个公司、组织的模型都会归属于同一个系列 比如阿里的 Qwen 系列、Meta 的 Llama 系列,智普的 Chatglm 系列 模型版本:一个系列的模型也会有多个版本,一般是有大更新时才会更新 比如 Qwen 系列就存在 Qwen、Qwen1.5、Qwen2 三个系列 参数量:一般为 xx B,B 为单位,表示 10 亿参数 比如 7B 则是有 70 亿参数,72B 则是 720 亿参数 这个只是一个大致范围,比如 68 亿、72 亿参数的模型一般也叫做 7B 微调:开源模型为了能够直接使用,一般会提供经过问答任务微调的版本,即 Chat 模型 量化:为了降低内存占用有的也会提供量化版本,比如大模型一般使用 FP32/FP16 精度,即一个参数占 4 或者 2 字节,而量化则是将权重参数使用更低精度的格式来存放,比如量化为 FP8 则是只需要 1 字节,Int4 则只需要 4 位。 我们需要注意的就是是否经过微调、量化: 基座模型:不带任意后缀,或者 -Base 后缀,就是预训练后未经过微调的原始模型 比如 Qwen1.5、Llama3 SFT 模型:带特定领域任务后缀,比如 xxx-chat,就是对基座模型做了问答任务微调。
阅读全文