RAG更像是开卷考试,但是数学考试不能通过开卷提高成绩。提高数学能力的核心是提高逻辑推理、计算能力,而非知识检索。
==》因此可以引入微调来提升逻辑推理能力。
微调原理
模型如何学习
机器学习-通过数据寻找规律
事先不知道规则(参数),但可能知道一些现象(数据)。
==》通过数据,找到参数,即训练模型。
Loss Function & Cost Function
- Loss(损失函数):每一个样本的误差的平方。
- Cost(代价函数):所有样本的误差的平方的均值。
梯度下降算法-自动寻找最优解
学习率。
学习率调整策略:help.aliyun.com/zh/model-st…
其他参数
- batch size:
- 较大:加速训练,但是可能导致模型泛型能力下降。
- 小Batch Size的噪声优势:小批量训练(如Batch Size=32)每次更新的梯度基于少量样本计算,引入了更多随机噪声。这种噪声有助于模型逃离局部最优解,探索更广阔的参数空间,从而可能找到泛化性能更好的“平坦最小值”(flat minima)。
- 大Batch Size的确定性增强:大批量训练(如Batch Size=1024)的梯度估计更稳定,但减少了随机性,使模型倾向于收敛到“尖锐最小值”(sharp minima)。这类最小值对输入扰动敏感,测试时表现较差。
- eval step:多少个training step后,做一次验证。通常不会在一个迭代之后才做验证。
- epoch:
- 早停法:在验证集上表现不再提升,则停止训练。
- 动态调整学习率:根据验证集的损失动态调整学习率。
神经网络-万能复杂函数逼近器
ReLU等激活函数:引入非线性能力,能够逼近任意复杂的函数。
如果神经网络仅用线性计算,则无法拟合非线性数据(如图像分类、自然语言处理)。
高效微调技术
训练数据量 决定了 总算力。
在实际的模型训练过程中,还面临一个挑战:标注数据的获取成本高昂,尤其是对于特定任务(如医学图像分析或小众语言处理)。你可以尝试对模型进行“预训练”和“微调”分步训练,其中:
-
预训练:在一个大规模通用数据集上训练模型,使其能够学习到广泛的基础知识或特征表示。这些知识通常是通用的,不针对任何具体任务。预训练不针对特定任务,而是为各种下游任务提供一个强大的初始模型。典型的预训练模型:Qwen2.5-Max、DeepSeek-V3、GPT-4等。
-
微调:在预训练模型的基础上,使用特定任务的小规模数据集对模型进行进一步训练。其目的是让模型适应具体的下游任务(如医疗、法务等专业领域需求)。
下表展示了预训练与微调的主要区别:
| 特性 | 预训练 | 微调 |
|---|---|---|
| 目标 | 学习通用特征 | 适应特定任务 |
| 数据 | 大规模通用数据 | 小规模任务相关数据 |
| 训练方法 | 自监督/无监督 | 有监督 |
| 参数更新 | 所有参数可训练 | 部分或全部参数可训练 |
| 应用场景 | 基础模型构建 | 特定任务优化 |
第一步:直接选择预训练模型(如Qwen、DeepSeek、GPT),这样可以节省从零训练一个模型的综合成本。
第二步:根据自己的实际场景,微调模型,通常只需要构建几千条适用于实际场景的标注数据,因为训练数据总 Tokens 数大大降低,使得训练时间有效缩减,从而进一步降低训练成本。
-
全参微调(Full Fine Tuning) 在预训练模型的基础上,进行全量参数微调。避免重新开始训练模型,又能避免部分参数未被微调导致模型性能下降。但是,训练成本高昂。
-
高效微调技术(PEFT) 调整少量参数。典型方法包括Adapter Tuning、Prompt Tuning 和 LoRA。LoRA 训练小参数矩阵(即低秩矩阵,仅需原模型0.1%-1%的参数)。
LoRA(Low Rank Adaption)
通过矩阵运算将微调需要更新的参数抽象分解成两个小得多的低秩矩阵和用于训练,模型原有矩阵不训练,即。
主要的可调参数是低秩:越大,越能捕捉更复杂的特征变化,但更难微调,需要更多的显存和训练轮次。
- 小的训练集(1k-10k样本):建议秩,避免训练轮次太多,而模型去背训练集而不是学习里面的特征。
- 大的训练集(100k+样本):可尝试秩,充分挖掘数据中的潜在模式。
总结
微调并不简单,需综合考虑算力成本、数据规模与质量等因素。 尤其需要关注这几个方面:
- 提示词工程、RAG等低成本解决方案是否足够处理问题。
- 数据数量和质量(至少1000条优质数据)。
- 确保项目预算和专家技术能力匹配,性价比可以接受。