今天我们来个新话题——对大模型进行微调,让通用大模型具备“特殊能力”,能够完成特定的任务。
如果大家的电脑配置跑不了大模型的微调任务,可以申请阿里云ACP考试的免费试用。
老规矩,先看最终效果。
选用的原始大模型是“Qwen2.5-1.5B-Instruct” (因为足够小、足够傻)。
微调的目标是:让其具备解答数学题的能力,其他行业模型微调方法类似。
任务的设计:
"在一块底边长18米,高6米的三角形菜地里种萝卜.如果每平方米收萝卜12千克,这块地可收萝卜多少千克?"
微调前的效果:分析的头头是道,但就是给不出答案
微调前模型:模拟考试10道数学题,看看能得多少分?30!
微调后模型:模拟考试10道数学题,看看能得多少分?70!
(为啥不是满分,文末有详述)
以下是详细的实现过程。
一、在开始之前,我们先补充几个模型微调的原理知识,做好笔记哦
1)大模型的训练原理
后面会单独写一篇文章详细介绍,这里仅简介。
生成式大模型的原理就是,根据用户输入的信息,经过大模型神经网络各层的计算,把概率高的相关内容作为结果反馈给用户。
那如何才能得到更精准的答案呢?
在大模型的训练过程中,需要不断地进行参数调整,让结果更加精确。大模型的训练过程,也就是参数调优的过程。
所以参数越多,控制就越精细化,效果就越好。
就好比,仅仅用身高、体重、年龄等有限特征去识别一个人,和用臂展、腿长、脸型、眼距、额宽等等更多细节特征去识别人物,效果肯定不一样。
当然参数越多,所需要的资源和时间也就会越多。
2)大模型到底是如何学习的
-
用数学公式,通过数据找规律;
-
根据输入,通过数学公式计算,得到输出;
-
如果输出与预期不相符,则需要进行参数调整,用损失函数,来代表输出与预期的不相符程度
-
参数调整的目标,就是让损失函数(代价函数)最小。那如何最小呢。
使用梯度下降法,找到最低点。
-
那如何使用梯度下降呢。
1. 是找调整方向。
类似二维空间的求导找斜率,以最快的角度到达最低点;
三位空间的求偏导,找二维向量以最快的角度到达最低点;
以此类推到更高维的空间;
2. 是找调整幅度
过大可能直接跨过了最低点,太小需要太长的时间。
总结下来,模型的微调就是做以上这几件事。
3)快速微调
LoRA:(Low-Rank Adaptation)低秩适应微调,通过矩阵运算将微调需要更新的参数抽象分解成两个小得多的低秩矩阵,模型原有矩阵不训练。
通俗的讲,就是20%的矩阵,携带了80%的信息,我们只需要使用信息密度最高的那些矩阵就好了。
二、任务拆解
1、下载原始模型
2、准备训练集
3、模拟考试,用原始模型,看看答题能得多少分
4、使用ms-swift框架,设置不同的参数,进行微调
5、模拟考试,用微调后的模型,看看答题能得多少分
三、下载模型并装载
1、准备环境
1) 克隆工程并安装必要的python包
git clone https://github.com/AlibabaCloudDocs/aliyun_acp_learning.git
pip install accelerate==1.0.1 rouge-score==0.1.2 nltk==3.9.1 ms-swift[llm]==2.4.2.post2 evalscope==0.5.5rc1
2)下载原始模型包并加载到内存中
四、准备数据训练集
数据集使用1000+道由DeepSeek-R1生成的题解进行训练,如果数据太少,会过拟合,类似“背题”,而不是找到“解题方法”。
五、模拟考试:用原始模型做模拟考试
准备了10道测试题,原始模型只答对了3道,得分30分(满分100分)。
六、设置不同的参数,进行多轮微调
1、参数及其含义:
learning_rate - 学习率,也就是调整幅度,太大容易跨过最低点,太小时间会太久
lora_rank - lora的秩,也就是训练模型的大小,越大信息越多,但难度越大
num_learning_epoches - 每个训练集训练的次数,太多容易过拟合,太少则可能找不到解题规律
batch_size - 一次计算平均梯度的数量,太大可以加速训练,但容易过拟合;太小训练时间会加长。
eval_steps - 评估间隔,训练多少数据进行一次评估,不能等到所有都训练完了才评估。
2、开始一步一步的微调吧。
1) 第一次微调
参数设置:
learning_rate = 0.1
lora_rank = 4
num_learning_epoches=1
通过日志:23:54:59开始跑~23:55:14跑完,大概用了1分钟
通过损失函数图像看:训练损失增大、验证损失增大,意味着没找到最小值
原因可能就是调整幅度太大了,降低learning_rate=0.00005
2)第二次微调
参数设置:
learning_rate = 0.00005
lora_rank = 4
num_learning_epoches=1
通过日志:大概用了3分钟
通过损失函数图像看:训练损失减小、验证损失也减少但起伏不定
原因可能是欠拟合,增大每个数据集的学习次数和batch_size
3)第三次微调
参数设置:
learning_rate = 0.00005
lora_rank = 4
num_learning_epoches=3
batch_size = 16
evel_step = 20
通过日志:大概用了7分半
通过损失函数图像看:训练损失减小、验证损失先减少后增大
原因可能是过拟合,增大数据集的数量,降低学习次数,增大lora_rank.
4)第四次微调
参数设置:
learning_rate = 0.00005
lora_rank = 8
num_learning_epoches=3
batch_size = 16
evel_step = 20
通过日志:大概用了5分半
通过损失函数图像看:训练损失减小、验证损失也平滑的减少
原因,训练已经接近成功,多训练就好了。增加每次训练的题量。
5)第五次微调 - 微调成功:
参数设置:
learning_rate = 0.00005
lora_rank = 8
num_learning_epoches=15
batch_size = 16
evel_step = 20
通过日志:大概用了25分钟
通过损失函数图像看:训练损失和验证损失基本不变
微调成功!
七、用微调后模型,进行模拟考试
注意:一定要选取训练过程中表现最好的checkpoint
微调后,得分从微调前30分提升到70分!
为啥还没到满分呢。
比如,针对天数计算,例如是否要+1问题还是不行;最小公倍数也算错了!!!
原因:模型的训练量还是太小!后续可以通过增加训练量来提升。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓