大模型的"预训练+微调"范式是当前主流训练方法。预训练阶段通过自监督学习在无标注数据上训练模型,使其掌握基础知识和特征表示;微调阶段则利用少量标注数据调整模型参数,使其适应特定任务。文章详细介绍了预训练算法、微调流程,并通过实践案例展示了如何使用HuggingFace库微调BERT模型,使开发者能够快速上手构建专用AI应用。
前排提示,文末有大模型AGI-CSDN独家资料包哦!
本篇分享一下最近学习的一些关于AI模型预训练和微调的知识。
简介
大模型之所以能够展现出强大的泛化能力和任务适应性,很大程度上归功于“预训练 + 微调”这一经典而高效的两阶段训练范式。这一方法不仅大幅降低了从零开始训练模型所需的计算成本和数据门槛,也使得通用模型能够快速适配到特定下游任务中。
那么,什么是预训练 ?什么又是微调 ?
简单来说,预训练是指在一个大规模、通用的数据集(例如互联网文本、海量图像等)上,对模型进行初步训练,使其学习到广泛的语言结构、语义知识或视觉特征表示。这一阶段的目标不是解决某个具体任务,而是让模型“见多识广”,建立起对输入数据的基础理解能力。
而微调则是在预训练模型的基础上,使用特定任务的小规模标注数据(如情感分类、命名实体识别、医学图像分割等),对模型参数进行进一步调整,使其在目标场景下达到最优性能。微调通常只需较少的训练轮次和计算资源,却能显著提升模型在具体应用中的准确率和鲁棒性。
预训练
预训练模型依赖的算法本质上是一套自监督学习或弱监督学习策略。他的目的是在没有人工标注的大规模原始数据上,自动构造任务,让模型从中学习特征表示。在NLP中常用的预训练算法包括
- • 自回归语言建模
当前主流大模型使用的算法,模型被训练来逐词生成文本,每一步都只能看到当前词之前的上下文,来预测下一个最有可能的词。为了保证模型不偷看后面的词,Transformer架构里引入了因果掩码:
- 在注意力机制计算softmax之前,把注意力权重矩阵里未来的位置设置为负无穷
- 计算softmax之后,这些注意力权重变为0,即“看不见”
模型自回归会计算一次训练的损失函数,来衡量其在给定历史上下文下预测下一个词的准确性,并以此驱动参数优化,逐步提升语言建模能力。
- • 掩码语言建模
BERT模型采用的预训练算法,核心思想是随机盖上句子里面的一些词,让模型根据左右两侧上下文来预测被掩盖的词。
例如原始的句子是“北京是中国的首都”,掩盖后的句子是“北京是[MASK]国的首都”
- • 去噪自编码
该算法采用编码器-解码器结构,编码器读取被破坏的输入,提取语义表示。解码器基于该表示,自回归地重建原始序列。
句子的破坏过程和掩码建模看起来有点相似,但是两个算法还是有区别,掩码建模的预测目标是被掩盖的位置,而去噪自编码是重建整个原始序列之后再做对比,是一个自回归的过程
- • 对比学习与句子嵌入对齐
主要用在语义搜索、文本聚类等场景。
微调
预训练过程只是让模型学会了通用知识,而非特殊任务的判断逻辑。例如BERT通过预训练知道“苹果”可以是水果,也可以是指苹果公司,但他并不知道在情感分析的任务里,“苹果手机真烂”是正面还是负面。所以我们需要构造微调数据集,在保留通用语言能力的基础之上,注入领域知识与任务目标,让模型从“通才”变为“专才”。
微调算法和流程
以BERT模型分类任务为例子,微调算法流程如下
- 准备数据集
数据集划分为训练集和验证集。训练集用于更新模型参数,验证集不参与参数更新,只用来每个训练周期结束后评估模型效果,防止过拟合,用来选择最佳模型。
- 模型结构:预训练主干及新增的分类任务头
在预训练的BERT模型顶部添加一个全连接层作为分类任务头,分类任务头的计算过程如下:
其中 C 是类别数(如 2),d 是 BERT 隐藏层维度(768)。
- 损失函数计算损失
对于每个训练样本 (x,y),计算预测分布 y^ 与真实标签 y(one-hot 编码)之间的负对数似然:
损失函数计算结果loss越小,说明结果越准确,反之loss越大,说明结果越离谱。
- 优化过程:梯度下降与反向传播
- • 把每个batch的样本输入模型,得到预测结果,计算出损失loss
- • 通过反向传播计算loss对所有参数的梯度,梯度在这里的意义就是当前参数对loss的敏感程度,如果微调了参数,loss会变化多少。这一步的目的就是通过回溯看看如何根据loss的结果更新参数,梯度就是参数调整的直接依据
- • 使用优化器依据梯度优化参数,并且把梯度清零,为下一轮微调做准备
- 验证与模型选择
每完成一个周期,在验证集上计算准确率。保存性能最好的checkpoint,如果验证指标多个周期不提升,则提前终止训练,避免过拟合。
实践-使用transformers微调BERT模型
我们可以使用HuggingFace的transformers库微调一个执行分类任务的BERT模型。
引入依赖
from transformers import AutoTokenizer, BertForSequenceClassification, TrainingArguments, Trainerimport torchfrom torch.utils.data import Dataset自定义数据集类:
class IntentDataset(Dataset): def__init__(self, data, tokenizer): self.label_map={"正":0,"负":1} self.max_length = 128 self.data = data self.tokenizer = tokenizer def__len__(self): returnlen(self.data) def__getitem__(self, idx): item = self.data[idx] text = item["text"] label = self.label_map[item["label"]] encoding = self.tokenizer( text, truncation=True, padding="max_length", max_length=self.max_length, return_tensors="pt" ) return { "input_ids": encoding["input_ids"].squeeze(0), "attention_mask": encoding["attention_mask"].squeeze(0), "labels": torch.tensor(label, dtype=torch.long) }微调流程:
#假设数据集和验证集按照[{"text":"今天天气真好呀","label":"正"},{"text":"现在心情很糟糕","label":"负"}]来构造train_dataset = IntentDataset(train_data, tokenizer, label_to_id)val_dataset = IntentDataset(val_data, tokenizer, label_to_id)#加载模型tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")model = BertForSequenceClassification.from_pretrained( "bert-base-chinese", num_labels=4)#设置微调训练配置training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=4, per_device_eval_batch_size=4, num_train_epochs=3, save_strategy="epoch")#开始微调训练过程trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=val_dataset,)trainer.train()运行上述微调训练代码,命令行会一直打印每个周期微调、验证的loss值,当数据集有效的时候,你就会发现loss一直在变小且越来越接近0。
总结
“预训练 + 微调”作为当前大模型落地的主流范式,成功地在通用能力与任务适配之间找到了高效平衡。
预训练阶段通过自监督学习,让模型在海量无标注数据中掌握语言或视觉的底层规律;微调阶段则借助少量标注数据,将这种通用知识精准引导至具体应用场景——从情感分析到医疗诊断,从文本分类到多模态理解。
更重要的是,得益于 Hugging Face Transformers 等开源生态的成熟,这一强大范式已不再是研究者的专属工具,而是每一位开发者都能快速上手的工程实践。只需几行代码,我们就能站在百亿参数模型的肩膀上,构建出高性能的专用 AI 应用。
未来,随着多模态、推理优化、高效微调(如 LoRA)等技术的发展,“预训练 + 微调”的边界将持续拓展,但其核心思想不变:先学会理解世界,再学会解决具体问题。而这,正是人工智能走向实用化的关键路径。
读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用。
针对0基础小白:
如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段:从大模型系统设计入手,讲解大模型的主要方法;
第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求:大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能,学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力:大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓