小飞侠 - 指令微调
type: channel
link: http://www.kexue.love/index.php/category/指令微调/
items: 大模型微调的几种方法

大模型微调的几种方法
type: item
date: 2024-04-26T00:54:00+00:00
description: 一般分三大类Fine-Tuning：全量微调PEFT：高效微调（SOTA PEFT），部分参数的微调方法RLHF：基于人工反馈机制的强化方法一、大模型微调需要的参数量当模型的参数量大小为 B ，模型所占用的硬盘空间为 的 2 倍， 推理所需的显存一般是 ** 的 2 倍。对于全参数微调所需显存，目前来说普遍的说法是约为推理所需显存的 4 倍（包括模型推理（1倍）、梯度（1倍）、优化器状态（AdamW 2倍，SGD 1倍））例如：当模型的参数量大小为 7B ，模型所占用的硬盘空间为14G，推理所需的显存一般是14G多15G，对于全参数微调所需显存，目前来说普遍的说法是约为推理所需显存的 4 倍，也就是60G左右。一、 Fine-Tuning：全参微调定义：全微调是指对整个预训练模型进行微调，包括所有的模型参数。在这种方法中，预训练模型的所有层和参数都会被更新和优化，以适应目标任务的需求。适用范围：这种微调方法通常适用于任务和预训练模型之间存在较大差异的情况，或者任务需要模型具有高度灵活性和自适应能力的情况。Full Fine-tuning需要较大的计算资源和时间，但可以获得更好的性能。1.Fine tuning经典的Fine tuning方法包括将预训练模型base-model与少量特定任务数据一起继续训练。在这个过程中，预训练模型的权重被更新，以更好地适应任务。所需的Fine-tuning量取决于预训练语料库和任务特定语料库之间的相似性。如果两者相似，可能只需要少量的Fine tuning。如果两者不相似，则可能需要更多的Fine tuning。二、PEFT、高效微调（SOTA PEFT）：部分参数的微调方法微调顶层：只微调预训练模型的顶层，以适应新的任务。逐层微调：从底层开始，逐层微调预训练模型，直到所有层都被微调。冻结底层：将预训练模型的底层固定不变，只对顶层进行微调。Lora(在旁边添加训练参数)(Low-Rank Adaptation)：由微软在2021年提出，通过低秩矩阵分解来实现高效的参数调整。P-tuning:( 2021年3月) 清华大学提出的可自动学习模版的P-tuning,这种方法通过引入连续提示（continuous prompts）的方式替代传统的离散文本提示（discrete text prompt），以更少的可训练参数量来适应特定下游任务。在P-Tuning中，通常会为输入序列添加一个或多个可学习的向量（虚拟token），这些向量作为额外的“prompt”嵌入到模型的输入序列中，用于指导模型生成与特定任务相关的输出。相比于直接对整个模型进行微调，P-Tuning仅需要调整这部分新增的prompt参数，从而显著减少所需的计算资源和时间。P-tuning2:(在每一层前面加入训练参数 2021年10月)基于Prefix Tuning，增加了多个Embedding层，连续的Prompts，在预训练的每一层都增加了prompts，适合GLM模型的微调Adapter（在前面添加训练参数）Adapter Tuning：由Houlsby N等人在2019年提出，通过增加模型层数来引入额外的灵活性，但这也导致了额外的推理延迟Prefix-tuning（在中间添加训练参数）由斯坦福大学提出，在原有模型基础上，增加一个可被训练的Embedding层，用于给提示词增加前缀，从而更好的让模型理解提示词的意图，通过修改输入的前缀来调整模型的行为，但这种方法难以训练，并且可能影响模型性能。Prompt tuning:由谷歌提出，类似于Prefix-Tuning，通过修改输入提示来调整模型行为。QLora在这些方法中，LORA因其优越的性能和较低的成本而备受推崇。1、LoRALoRA是一种用于微调大型预训练语言模型（如GPT-3或BERT）的方法。它的核心思想是在模型的关键层中添加小型、低秩的矩阵来调整模型的行为，而不是直接改变整个模型的结构。这样做的好处是，可以在不增加太多额外计算负担的情况下，有效调整模型，同时保持其原有的性能。LoRA的工作原理如下：数学原理：原参数矩阵，加上一个小的、简单的低秩矩阵（B*A升维之后，+W），来生成新的参数矩阵。在 Transformer 的 multi-head attention 中使用 LoRA.选择要调整的权重矩阵：在大型模型（如GPT）中，我们首先确定要微调的权重矩阵。通常，这些矩阵位于模型的多头自注意力（Multi-head Self-Attention）和前馈神经网络（Feed-Forward Neural Network）部分。引入两个低秩矩阵：接着，我们引入两个低秩矩阵，记为A和B，这两个矩阵的维度比原始权重矩阵小得多，例如，如果原始矩阵的尺寸是dd，那么，A和B的尺寸可能…