大模型微调---BitFit微调

一、前言

BitFit微调,全称是 bias-term fine-tuning,其高效微调只去微调带有 bias 的参数,其余参数全部固定 。
对于中小型训练数据,在预训练的BERT模型上应用BitFit与微调整个模型具有竞争力(有时甚至更好)。对于较大的数据,该方法与其他稀疏微调方法相比具有竞争力。
BitFit具有三个关键属性:

  • 匹配完全微调模型的结果。
  • 使任务能够到达流中,这样就不需要同时访问所有数据集。
  • 仅对模型参数的一小部分进行微调。

二、BitFit实战

模型——Qwen/Qwen2.5-0.5B-Instruct
数据集——lyuricky/alpaca_data_zh_51k

这里的分词模型和预训练模型是同一个模型
在这里插入图片描述

依赖:

pip install transformers
pip install  datasets

导包

from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, DataCollatorForSeq2Seq, TrainingArguments, Trainer

1、模型与数据集准备

我们先把数据集和模型下载到本地

# 下载数据集
dataset_file = load_dataset("lyuricky/alpaca_data_zh_51k", split="train", cache_dir="./data/alpaca_data")

# 下载分词模型
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
# Save the tokenizer to a local directory
tokenizer.save_pretrained("./local_tokenizer_model")

#下载与训练模型
model = AutoModelForCausalLM.from_pretrained(
    pretrained_model_name_or_path="Qwen/Qwen2.5-0.5B-Instruct", 
    torch_dtype="auto",
    low_cpu_mem_usage=True,
    cache_dir="./local_model_cache"  # 指定本地缓存目录
)

2、加载分词模型处理数据

#加载分词模型
tokenizer_model = AutoTokenizer.from_pretrained("../local_tokenizer_model")

# 加载数据集
ds = load_dataset("../data/alpaca_data", split="train[:10%]")
print(ds[0])

# 处理数据
"""
并将其转换成适合用于模型训练的输入格式。具体来说,
它将原始的输入数据(如用户指令、用户输入、助手输出等)转换为模型所需的格式,
包括 input_ids、attention_mask 和 labels。
"""
def process_func(example, tokenizer=tokenizer_model):
    MAX_LENGTH = 256
    input_ids, attention_mask, labels = [], [], []
    instruction = tokenizer("\n".join(["Human: " + example["instruction"], example["input"]]).strip() + 
<think>好的,我需要回答用户关于大模型微调方法的问题。首先,用户要求介绍相关概念和技术教程,所以我要确保内容结构清晰,覆盖主要方法。 首先,得明确大模型微调的基本概念。大模型通常指像GPT、BERT这样的预训练模型,微调就是在特定任务数据上继续训练,使其适应具体任务。这点需要先解释清楚,让用户有基础理解。 接下来是常见的微调方法。根据之前的引用,用户提到有7种方法,但具体是哪些呢?我需要回忆常见的微调技术。比如全参数微调(Full Fine-Tuning)、参数高效微调(Parameter-Efficient Fine-Tuning)如LoRA、Adapter Tuning,还有Prompt Tuning、Prefix Tuning、BitFit和P-Tuning。这些方法需要逐一介绍,说明原理、优缺点和应用场景。 全参数微调是最直接的,但计算成本高,适合数据充足的情况。参数高效的方法比如LoRA,通过低秩矩阵减少参数量,适合资源有限的情况。Adapter Tuning是在模型中插入小模块,同样节省资源。Prompt Tuning和Prefix Tuning通过调整输入提示来引导模型,适合少样本学习。BitFit只调整偏置项,非常轻量。P-Tuning使用连续提示,自动优化提示词。 然后要给出技术教程的步骤,比如准备数据、选择方法、配置环境、训练和评估。这部分需要具体,但用户可能不需要代码细节,所以保持概括性。比如使用Hugging Face库,加载预训练模型,添加适配器,设置训练参数等。 最后,生成相关问题,帮助用户进一步探索。比如比较不同方法的优劣,选择标准,实际应用案例,挑战和未来方向。这些问题要自然,覆盖用户可能的后续疑问。 需要确保所有数学表达式用正确的LaTeX格式,行内用$...$,独立公式用$$...$$。比如在LoRA部分提到的低秩分解,可以写成$W = W_0 + BA$,其中B和A是低秩矩阵。检查是否有遗漏的技术点,比如是否每种方法都说明了原理和适用情况,是否有混淆的地方,比如Prompt Tuning和Prefix Tuning的区别。 同时,注意引用标识,用户提供的引用[^1]是关于大模型微调的资料,需要在回答中适当的位置添加,比如在介绍完所有方法后,提到进一步学习资源时引用。保持回答的中文,避免技术术语翻译错误,比如“微调”而不是“fine-tuning”。 最后,通读检查结构是否清晰,是否符合用户要求的步骤化解答,确保真实可靠,没有错误信息。比如确认LoRA确实是参数高效的方法,Adapter Tuning的结构是否正确描述,避免技术细节错误。</think>### 大模型微调方法介绍 大模型微调(Fine-Tuning)是指基于预训练的大模型(如GPT、BERT等),在特定任务的小规模数据集上进行进一步训练,使其适配具体任务需求的技术。以下是常见的7种微调方法及其技术原理: --- #### 1. **全参数微调(Full Fine-Tuning)** - **原理**:调整模型所有参数,使其适应目标任务。 - **优点**:性能最优。 - **缺点**:计算成本高,易过拟合。 - **公式**: $$ \theta_{\text{new}} = \theta_{\text{pre}} - \eta \nabla_{\theta} \mathcal{L}(\theta) $$ 其中$\theta_{\text{pre}}$为预训练参数,$\eta$为学习率。 --- #### 2. **参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)** - **代表方法**:**LoRA(Low-Rank Adaptation)** - **原理**:通过低秩矩阵分解,仅训练少量参数。 设原权重矩阵为$W \in \mathbb{R}^{d \times k}$,更新为$W + \Delta W$,其中$\Delta W = B \cdot A$($B \in \mathbb{R}^{d \times r}$, $A \in \mathbb{R}^{r \times k}$,$r \ll d,k$)。 - **优点**:节省显存,适合资源有限场景。 --- #### 3. **Adapter Tuning** - **原理**:在Transformer层中插入小型适配器模块(Adapter),仅训练该模块。 适配器结构:降维→激活函数→升维,例如: $$ h_{\text{out}} = h_{\text{in}} + W_{\uparrow} \cdot \sigma(W_{\downarrow} \cdot h_{\text{in}}) $$ 其中$W_{\downarrow} \in \mathbb{R}^{r \times d}$, $W_{\uparrow} \in \mathbb{R}^{d \times r}$,$r$为降维后的维度。 - **优点**:参数少,易于扩展。 --- #### 4. **Prompt Tuning** - **原理**:在输入中添加可学习的提示词(Prompt),通过调整提示向量引导模型输出。 输入格式:$[\text{Prompt}_1, \dots, \text{Prompt}_k; \text{Input Text}]$。 - **优点**:无需修改模型参数,适合少样本学习。 --- #### 5. **Prefix Tuning** - **原理**:在输入前添加可训练的前缀向量,影响模型每一层的注意力计算[^1]。 公式: $$ \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{Q [P; K]^T}{\sqrt{d_k}}\right) [P; V] $$ 其中$P$为前缀向量。 - **应用场景**:文本生成任务。 --- #### 6. **BitFit(Bias-Term Fine-Tuning)** - **原理**:仅训练模型中的偏置项(Bias Terms),冻结其他参数。 - **优点**:极低计算成本,适合极端资源受限场景。 --- #### 7. **P-Tuning** - **原理**:将离散的提示词替换为连续可学习的向量,并通过LSTM/MLP优化提示表示。 - **公式**: $$ \text{Prompt} = \text{MLP}([h_1, h_2, \dots, h_m]) $$ 其中$h_i$为初始提示向量。 --- ### 技术教程步骤 1. **数据准备**:整理任务相关数据集(如分类、生成任务)。 2. **方法选择**:根据资源与需求选择微调方法(例如资源有限时选LoRA)。 3. **环境配置**:安装库(如Hugging Face Transformers、PEFT)。 4. **模型加载**: ```python from transformers import AutoModelForSequenceClassification model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased") ``` 5. **添加微调模块**(以LoRA为例): ```python from peft import get_peft_model, LoraConfig peft_config = LoraConfig(task_type="SEQ_CLS", r=8, lora_alpha=16) model = get_peft_model(model, peft_config) ``` 6. **训练与评估**:使用Trainer类进行训练,保存最优模型。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韭菜盖饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值