一文搞懂AI人工智能大模型训练、推理、微调
一文搞懂AI人工智能大模型训练、推理、微调
Fine-tuning - 训练和推理(Training vs Inference)
模型训练(Training)是通过大量数据优化模型参数以学习数据特征的过程,而模型推理(Inference)则是利用训练好的模型对新数据进行高效准确的处理以得出结论的过程。
模型训练(Training):已知一系列(x, y)对,通过优化算法调整F的参数,使得F能够尽可能准确地映射x到y。
函数y=f(x)

模型推理(Inference):已知训练好的函数F和新的输入x,使用F计算得到对应的输出y的预测值。

一、模型(Model)
什么是模型?带有未知的参数(parameter)的函数称为模型(model)。
$$\mathrm{y=b+w%2Ax1}$$,就是一个带有未知的参数的函数,特征(feature) x1 是这个函数里面已知的,它是来自于打标的数据,而 w 跟 b 是未知的参数。w 称为权重(weight),b 称为偏置(bias)。

机器学习和深度学习模型的区别?机器学习模型依赖手工设计和提取特征,而深度学习模型则能自动从数据中学习并提取高级特征。
-
手工设计和提取特征:在机器学习模型中,通常需要人工参与到特征提取的过程中。这意味着在将数据输入到机器学习算法之前,需要由专家或领域知识丰富的人员来设计和选择哪些特征对于模型来说是重要的,并将这些特征从原始数据中提取出来。这个过程称为特征工程,它对于机器学习模型的性能有着至关重要的影响。
-
自动学习特征:与机器学习不同,深度学习模型能够自动从原始数据中学习并提取有用的特征,而无需人工干预。深度学习模型通过构建多层神经网络,每一层都能够从前一层提取更高级别的特征。这种自动学习特征的能力使得深度学习在处理复杂、高维的数据(如图像、语音、文本等)时具有显著的优势。

二、模型训练(Training)
什么是模型训练?使用一组已知的数据(称为训练数据)来训练(或学习)一个模型,以便该模型能够学习数据的内在模式和特征,从而能够准确地对新数据进行预测或分类。

如何进行模型训练?在模型训练过程中,算法会调整模型的参数(如神经网络中的权重和偏置),以最小化一个预先定义的目标函数(或损失函数)。
这个目标函数衡量了模型预测值与真实值之间的差异,训练的目标就是找到一组参数,使得这种差异最小。

模型训练过程通常包括以下几个步骤:

模型训练过程通常包括以下几个步骤:
-
数据准备:收集并准备训练数据,包括数据清洗、标注、归一化、分割成训练集和验证集(有时还有测试集)等。
-
模型选择:根据任务需求和数据特性选择合适的模型架构。这可能是一个简单的线性回归模型,也可能是一个复杂的深度神经网络。
-
参数初始化:为模型的参数(如权重和偏置)赋予初始值。这些初始值通常是随机生成的,但也可以是预先设计的。
-
前向传播:将训练数据输入到模型中,通过模型的各层进行计算,得到模型的预测输出。
-
损失计算:计算模型的预测输出与真实输出之间的差异,即损失值。
-
反向传播:根据损失值,使用梯度下降等优化算法计算模型中每个参数的梯度,并将这些梯度反向传播回模型的每一层。
-
参数更新:使用梯度来更新模型的参数,以减少损失值。
-
迭代训练:重复执行前向传播、损失计算、反向传播和参数更新的过程,直到满足某个停止条件(如损失值降低到一定阈值以下,或达到预设的训练轮次)。
三、模型推理(Inference)
什么是模型推理?在模型训练完成后,使用训练好的模型对新数据进行预测或生成的过程。
在模型训练阶段,模型通过大量数据的学习,掌握了某种特定的能力或模式。而在推理阶段,模型则利用这种能力对新的、未见过的数据进行处理,以产生预期的输出。

如何评估模型性能?模型评估(Evaluation)是指对训练完成的模型进行性能分析和测试的过程,以确定模型在新数据上的表现如何。

分类任务常见的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)和F1分数(F1 Score)等。

-
准确率(Accuracy)
-
定义:准确率是最直观也最常被提及的评估指标之一,它衡量的是模型预测正确的样本数占总样本数的比例。
-
计算公式:准确率 = %28真正例 + 真负例%29 / %28真正例 + 假正例 + 真负例 + 假负例%29
-
精确率(Precision)
-
定义:精确率是指模型预测为正例中真正是正例的比例,它反映了模型预测为正例的结果的可信度。
-
计算公式:精确率 = 真正例 / %28真正例 + 假正例%29

-
召回率(Recall)
-
定义:召回率,也称为灵敏度(Sensitivity)或真正例率(True Positive Rate),是指模型在所有实际为正类的样本中,被正确预测为正类的样本的比例。它反映了模型捕获正类样本的能力。
-
计算公式:召回率 = 真正例 / %28真正例 + 假负例%29
-
F1分数(F1 Score)
-
定义:F1分数是精确率和召回率的调和平均数,旨在综合两者的表现,提供一个平衡指标。
-
计算公式:F1分数 = 2 %2A %28精确率 %2A 召回率%29 / %28精确率 + 召回率%29
预训练和微调(Pre-training vs Fine-tuning)

预训练(Pre-training)是预先在大量数据上训练模型以学习通用特征,而微调(Fine-tuning)是在特定任务的小数据集上微调预训练模型以优化性能。

预训练(Pre-training)
为什么需要预训练?预训练是为了让模型在见到特定任务数据之前,先通过学习大量通用数据来捕获广泛有用的特征,从而提升模型在目标任务上的表现和泛化能力。

预训练技术通过从大规模未标记数据中学习通用特征和先验知识,减少对标记数据的依赖,加速并优化在有限数据集上的模型训练。

-
数据稀缺性:在现实世界的应用中,收集并标注大量数据往往是一项既耗时又昂贵的任务。特别是在某些专业领域,如医学图像识别或特定领域的文本分类,标记数据的获取更是困难重重。预训练技术使得模型能够从未标记的大规模数据中学习通用特征,从而减少对标记数据的依赖。这使得在有限的数据集上也能训练出性能良好的模型。
-
先验知识问题:在深度学习中,模型通常从随机初始化的参数开始学习。然而,对于许多任务来说,具备一些基本的先验知识或常识会更有帮助。预训练模型通过在大规模数据集上进行训练,已经学习到了许多有用的先验知识,如语言的语法规则、视觉的底层特征等。这些先验知识为模型在新任务上的学习提供了有力的支撑。

预训练的技术原理是什么?预训练利用大量无标签或弱标签的数据,通过某种算法模型进行训练,得到一个初步具备通用知识或能力的模型。

预训练是语言模型学习的初始阶段。在预训练期间,模型会接触大量未标记的文本数据,例如书籍、文章和网站。目标是捕获文本语料库中存在的底层模式、结构和语义知识。
-
无监督学习:预训练通常是一个无监督学习过程,模型在没有明确指导或标签的情况下从未标记的文本数据中学习。
-
屏蔽语言建模:模型经过训练可以预测句子中缺失或屏蔽的单词、学习上下文关系并捕获语言模式。
-
Transformer 架构:预训练通常采用基于 Transformer 的架构,该架构擅长捕获远程依赖关系和上下文信息。

微调(Fine-tuning)
为什么需要微调?尽管预训练模型已经在大规模数据集上学到了丰富的通用特征和先验知识,但这些特征和知识可能并不完全适用于特定的目标任务。

微调通过在新任务的少量标注数据上进一步训练预训练模型,使模型能够学习到与目标任务相关的特定特征和规律,从而更好地适应新任务。
模型微调可以更好地利用预训练模型的知识,加速和优化新任务的训练过程,同时减少对新数据的需求和降低训练成本。

微调的技术原理是什么?在预训练模型的基础上,针对特定任务或数据领域,通过在新任务的小规模标注数据集上进一步训练和调整模型的部分或全部参数,使模型能够更好地适应新任务,提高在新任务上的性能。

微调如何分类?微调分为在新任务数据集上全面或基于人类反馈的监督训练(SFT与RLHF),以及调整模型全部或部分参数以高效适应新任务(Full Fine-tuning与PEFT)。
-
在新任务的小规模标注数据集上进一步训练
这种方式通常使用预训练模型作为基础,并在新任务的小规模标注数据集上进行进一步的训练。这种训练过程可以根据具体的训练方法和目标细分为不同的策略,如监督微调(Supervised Fine-tuning, SFT)和基于人类反馈的强化学习微调(Reinforcement Learning with Human Feedback, RLHF)。

监督微调(SFT)
定义:在新任务的小规模标注数据集上,使用有监督学习的方法对预训练模型进行微调,以使其适应新任务。
步骤:加载预训练模型 → 准备新任务的数据集 → 调整模型输出层 → 在新任务数据集上训练模型。
应用:适用于那些有明确标注数据集的任务,如文本分类、命名实体识别等。
基于人类反馈的强化学习微调(RLHF)
定义:在SFT的基础上,通过强化学习和人类反馈来进一步微调模型,使其输出更加符合人类的偏好或期望。
步骤:首先进行SFT → 收集人类反馈数据 → 训练奖励模型 → 使用奖励模型指导强化学习过程来微调模型。
应用:适用于那些需要高度人类判断或创造力的任务,如对话生成、文本摘要等。

-
调整模型的部分或全部参数
这种方式更加关注于模型参数层面的调整,根据是否调整全部参数,可以细分为全面微调(Full Fine-tuning)和部分/参数高效微调(Parameter-Efficient Fine-tuning, PEFT)。

全面微调(Full Fine-tuning)
-
定义:在新任务上调整模型的全部参数,以使其完全适应新任务。
-
步骤:加载预训练模型 → 在新任务数据集上训练模型,调整所有参数。
-
应用:当新任务与预训练任务差异较大,或者想要充分利用新任务数据集时,可以选择全面微调。
部分/参数高效微调(PEFT)
-
定义:仅调整模型的部分参数,如添加一些可训练的适配器(adapters)、前缀(prefixes)或微调少量的参数,以保持模型大部分参数不变的同时,实现对新任务的适应。
-
步骤:加载预训练模型 → 在模型中添加可训练的组件或选择部分参数 → 在新任务数据集上训练这些组件或参数。
-
应用:当计算资源有限,或者想要快速适应新任务而不影响模型在其他任务上的性能时,PEFT是一个很好的选择。

Fine-tuning三种微调方式
方式一:Prompt-tuning
什么是Prompt-tuning?
Prompt-tuning通过修改输入文本的提示(Prompt)来引导模型生成符合特定任务或情境的输出,而无需对模型的全量参数进行微调。
这种方法利用了预训练语言模型(PLM)在零样本或少样本学习中的强大能力,通过修改输入提示来激活模型内部的相关知识和能力。

核心原理:PLM(预训练模型)不变,W(模型的权重)不变,X(模型输入)改变。

如何进行Prompt-tuning?小模型适配下游任务
设计任务相关提示模板,并微调提示嵌入以引导预训练模型适应特定任务。仅需微调少量提示嵌入(Prompt Embeddings),而非整个模型参数。

设计提示模板:
-
模板中应包含任务描述、输入文本占位符、输出格式要求等元素。
准备数据集:
-
数据集应包括输入文本、真实标签(对于监督学习任务)或预期输出格式(对于生成任务)。
微调提示嵌入:
-
在预训练模型的输入层添加提示嵌入层,使用数据集对模型进行训练,特别是微调提示嵌入。

方式二:Prefix-tuning
什么是Prefix-tuning?Prefix-tuning是Prompt-tuning的一种变体,它通过在输入文本前添加一段可学习的“前缀”来指导模型完成任务。
这个前缀与输入序列一起作为注意力机制的输入,从而影响模型对输入序列的理解和表示。由于前缀是可学习的,它可以在微调过程中根据特定任务进行调整,使得模型能够更好地适应新的领域或任务。

核心原理:PLM(预训练模型)不变,W(模型的权重)不变,X(模型输入)不变,增加W%27(前缀嵌入的权重)。

如何进行Prefix-tuning?在 Transformer 中适配下游任务
在Transformer模型的输入层或各层输入前添加可学习的前缀嵌入,并通过训练这些前缀嵌入来优化模型在特定任务上的表现。

-
初始化前缀嵌入
-
在Transformer模型的输入层之前,初始化一个固定长度的前缀嵌入矩阵。
-
-
将前缀嵌入与输入序列拼接
-
将初始化好的前缀嵌入与原始输入序列的词嵌入进行拼接,形成新的输入表示。这个新的输入表示将作为Transformer模型各层的输入。
-
-
训练模型
-
在训练过程中,模型会根据输入序列(包括前缀嵌入)和标签数据进行学习。通过反向传播算法,模型会更新前缀嵌入的参数。
-
方式三:LoRA
什么是LoRA?LoRA(Low-Rank Adaptation)通过分解预训练模型中的部分权重矩阵为低秩矩阵,并仅微调这些低秩矩阵的少量参数来适应新任务。
对于预训练权重矩阵 $$\mathbf{W_0\in\mathbb{R}^{d\times d}}$$,LoRa限制了其更新方式,即将全参微调的增量参数矩阵Δ 表示为两个参数量更小的矩阵A、B,即ΔW = AB。
其中, $$\mathbf{B\in R^{d\times r}}$$和 $$\mathbf{A\in R^{r\times d}}$$为LoRA低秩适应的权重矩阵,秩r远小于d。

核心原理:W(模型的权重)不变,X(模型输入)不变,分解ΔW(分解为两个低秩矩阵A、B)。

如何进行LoRA微调?在冻结预训练模型权重的基础上,通过优化算法训练低秩矩阵A和B以近似增量参数,最小化下游任务损失,从而实现高效的模型微调。
-
设置LoRA模块
-
在预训练模型的基础上,添加LoRA模块。LoRA模块通常包含两个参数量较少的矩阵A和B,它们的乘积用于近似全参数微调中的增量参数。
-
初始化矩阵A和B,通常使用高斯函数进行初始化,以确保训练开始时LoRA的旁路(即BA)为0,从而与全参数微调有相同的起始点。
-
-
训练LoRA模块
-
在训练过程中,冻结预训练模型的权重,仅训练LoRA模块中的矩阵A和B。
-
通过优化算法(如Adam)更新矩阵A和B的参数,以最小化下游任务的损失函数。
-

LLaMA-Factory通过集成LoRA微调方法,为大型语言模型提供高效、低成本的微调方案,支持多模型、多算法和实时监控,仅训练低秩矩阵实现快速适应新任务。

LoRA参数主要包括秩(lora_rank,影响性能和训练时间)、缩放系数(lora_alpha,确保训练稳定)和Dropout系数(lora_dropout,防止过拟合),它们共同影响模型微调的效果和效率。

1. 秩(Rank)
-
参数名称:
lora_rank -
描述:秩是LoRA中最重要的参数之一,它决定了低秩矩阵的维度。
-
常用值:对于小型数据集或简单任务,秩可以设置为1或2;对于更复杂的任务,秩可能需要设置为4、8或更高。
2. 缩放系数(Alpha)
-
参数名称:
lora_alpha -
描述:缩放系数用于在训练开始时对低秩矩阵的更新进行缩放。
-
常用值:缩放系数的具体值取决于秩的大小和任务的复杂度。
3. Dropout系数
-
参数名称:
lora_dropout -
描述:Dropout系数决定了在训练过程中随机丢弃低秩矩阵中元素的概率。
-
常用值:Dropout系数的常用值范围在0到1之间。

更多推荐




所有评论(0)