亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

參數高效微調PEFT(一)快速入門BitFit、Prompt Tuning、Prefix Tuning ──peft教程-CSDN博客

標簽:
雜七雜八
概述

PEFT高效调参入门探索了参数高效微调技术,旨在通过微调预训练模型的一部分参数来提高性能,减少资源消耗。本文通过全量微调Bloom模型、应用微调技术如BitFit、Prompt Tuning和Prefix Tuning,展示了如何在生成式问答等任务中实现轻量化微调,同时评估了每种方法的优缺点,为资源有限环境下的NLP任务提供了高效解决方案。

1. 参数高效微调(PEFT)简介

1.1 预训练语言模型 + 下游任务微调

预训练语言模型通过在大规模未标记文本上进行预训练,学习到通用的语言表示。然后,这些模型通过微调特定下游任务的数据集来进一步优化,以解决特定的NLP问题。这种方法大大提高了模型的性能,同时减少了为每个任务单独训练模型所需的时间和资源。

1.2 PEFT的简介

PEFT(Parameter-efficient fine-tuning)是一系列技术,旨在通过微调预训练模型的一部分参数来提高模型的性能,同时显著减少计算和存储需求。相较于全量微调,PEFT方法通常只需要训练模型的几千个参数,从而降低资源消耗。

2. 全量微调bloom模型

2.1 生成式问答机器人

  • 数据集:alpaca-zh数据集,用于问答任务的指令微调数据集,可以从魔搭社区下载。

  • 模型选择:使用澜舟科技开源的Bloom预训练生成模型-中文-389m(langboat/bloom-389m-zh)。

  • 全量微调
    • 数据预处理:加载数据集并使用HuggingFace库进行预处理,包括构建输入输出对。
    • 模型实例化:从预训练模型中实例化AutoModelForCausalLM。
    • 训练配置:设置训练参数和训练器,例如学习率、批量大小和训练轮次。
    • 训练与推理:使用Trainer类进行训练,并通过generate()方法进行推理,展示微调后的模型对于生成式问答的响应。

3. BitFit

3.1 BitFit概述

BitFit是一种参数高效微调技术,专注于更新模型的特定部分参数,如偏置(bias)和特定层的参数,来实现对下游任务的微调,同时显著减少资源消耗。

3.2 BitFit轻量微调bloom模型

  • 准备:加载已预处理的数据集和Bloom模型。
  • 参数更新:设置模型参数,只更新偏置参数。
  • 训练配置:配置训练参数,例如学习率策略和优化器。
  • 训练与推理:通过Trainer类进行训练,并展示通过generate()方法评估的推理结果,以验证BitFit方法的有效性。

4. Prompt Tuning

4.1 Prompt Tuning概述

Prompt Tuning是通过微调特定的提示(prompt)来引导模型在生成式任务上的表现,这可以看作是微调模型参数的一种高效方式,通常只需要微调少量参数。

4.2 Prompt Tuning案例

from transformers import AutoTokenizer, AutoModelForCausalLM

# 加载预训练模型和分词器
model_ckpt = "langboat/bloom-389m-zh"
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)
model = AutoModelForCausalLM.from_pretrained(model_ckpt)

# 定义微调提示
prompt = "解释一下:"
# 更新模型参数以适配特定提示
# 这里简化处理,实际操作可能涉及更复杂的策略
model = prompt_tuning(model, prompt)

# 评估模型在给定提示下的性能
prompted_outputs = model.generate(input_ids=tokenizer(prompt, return_tensors="pt").input_ids, max_length=50)
print(tokenizer.decode(prompted_outputs[0]))

5. Prefix Tuning

5.1 Prefix Tuning概述

Prefix Tuning是为模型添加任务特定的前缀(prefix),以引导模型在没有全量微调的情况下生成期望的输出。此方法通过添加连续可微的虚拟标记(soft prompts)来实现,相比离散提示更易于优化。

5.2 Prefix Tuning案例

from transformers import AutoTokenizer, AutoModelForCausalLM

# 加载预训练模型和分词器
model_ckpt = "langboat/bloom-389m-zh"
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)
model = AutoModelForCausalLM.from_pretrained(model_ckpt)

# 设计前缀
prefix = "这是问题:"
# 更新模型参数以适配特定前缀
# 这里简化处理,实际操作可能涉及更复杂的策略
model = prefix_tuning(model, prefix)

# 评估模型在给定前缀下的性能
prompted_outputs = model.generate(input_ids=tokenizer(prefix, return_tensors="pt").input_ids, max_length=50)
print(tokenizer.decode(prompted_outputs[0]))

6. 总结与实践建议

  • 对比分析:总结全量微调、BitFit、Prompt Tuning和Prefix Tuning的优缺点。
  • 实践建议:基于不同的资源(计算能力、存储空间)和任务需求,推荐使用合适的参数高效微调方法。
  • 案例总结:通过具体案例分析,展示每种方法在实际应用中的效果和效率。

结语

参数高效微调技术,如BitFit、Prompt Tuning和Prefix Tuning,为NLP领域提供了节省资源、提高效率的解决方案,尤其在计算资源有限的场景下具有显著优势。通过对预训练模型的特定部分进行微调,这些技术不仅减少了训练时间和成本,还能保持或提升模型的性能,是当前微调策略的重要发展方向。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消