⌈ 传知代码 ⌋ 如何把大模型调教成派大星?

💛前情提要💛

本文是传知代码平台中的相关前沿知识与技术的分享~

接下来我们即将进入一个全新的空间,对技术有一个全新的视角~

本文所涉及所有资源均在传知代码平台可获取

以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~



💡本章重点

  • 如何把大模型调教成派大星?

🍞一. 论文概述

  1. 背景介绍:预训练语言模型(如BERT、RoBERTa等)在NLU任务上表现出色,但传统的微调方法需要更新模型的所有参数,这在训练时消耗大量内存,并且在推理时需要为每个任务保留模型参数的副本。

  2. 提示调整(Prompt Tuning):与传统的微调相比,提示调整通过只调整连续的提示(prompts),而不是整个模型参数,来减少每个任务的存储和内存使用。但以往的研究表明,对于非大型预训练模型,提示调整的性能并不理想。

  3. P-Tuning v2方法:文章提出了P-Tuning v2,这是一种深度提示调整方法,它通过在预训练模型的每一层添加连续提示来提高性能。这种方法在不同规模的模型和NLU任务上都表现出与微调相当的性能,同时只有0.1%-3%的参数需要调整。

  4. 实验结果:P-Tuning v2在多个模型规模(从300M到10B参数)和各种NLU任务上进行了广泛的实验验证,包括简单的分类任务和难度较高的序列标记任务(如命名实体识别和抽取式问答)。实验结果显示,P-Tuning v2在性能上与微调相当,同时显著减少了训练时间和每个任务的存储成本。

  5. 优化和实现细节:文章还讨论了一些关键的优化和实现细节,包括重参数化(Reparameterization)、提示长度(Prompt Length)、多任务学习(Multi-task Learning)以及分类头(Classification Head)的选择。


🍞二. 模型图

封面图像 C 是从所有自然图像 PC 的概率分布中采样的。然后,隐写图像 Si 由学习的编码器 E(C, M ) 生成。然后通过学习的解码器 D(S) 提取秘密消息M。在训练当中,对信息的准确性和图片的质量(psnr)进行联合优化。

从图中可以对p-tuing v2有一个非常直观的理解了。

p-tuing就只是在模型的输入层添加几个虚拟的token,然后就微调这些参数,让模型适应新的任务,但是这样做效果存在一些问题。

p-tuing v2就是在模型的每一层都添加虚拟token,让可以训练的参数变多了,也能达到比较好的效果。

p-tuing v2的思路确实非常简单,但是简单有效,目前仍然是模型微调中比较流行的方法之一。


🍞三.实验结果

在这里插入图片描述

可以看一下部分实验结果,FT表示全参数微调,PT表示Pp-tuing,PT-2表示p-tuing v2。

可以看到PT2虽然只有小小的改进,但是对比PT效果的提升是比较明显的。


🍞四.如何把大模型变成派大星?

接下来将使用p-tuing v2的方法对chatglm3-6b进行微调,让其自身的自我认知发生改变。

chatglm3-6B

ChatGLM3-6B 是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的,是国内最流行的大模型之一。

我们可以看一下他的自我认知:

在这里插入图片描述
我们的目标就是让他说出自己是派大星,也就是这样:

在这里插入图片描述

数据集准备

  • train.json的部分展示
[{"conversations": [{"role": "user", "content": "你好"}, {"role": "assistant", "content": "您好,我是派大星,一个由海绵宝宝打造的人工智能助手,请问有什么可以帮助您的吗?"}]},
{"conversations": [{"role": "user", "content": "你好呀,你叫什么名字呀"}, {"role": "assistant", "content": "您好!我是一个人工智能助手,你可以叫我派大星。很高兴见到您,请问有什么事情是我可以为您服务的呢?"}]}]

数据集格式如上,列表中的每个字典就是一段对话,也就是一条数据集。

role表明角色,user就是用户,也就是我们提的问题,assisant就是助手,也就是大模型自己 content 就是各自说的话的内容。

dev.json格式也是同上。


🍞五.核心代码

def load_tokenizer_and_model(
        model_dir: str,
        peft_config: Optional[PeftConfig] = None,
) -> tuple[PreTrainedTokenizer, nn.Module]:
    tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
    if peft_config is not None:
        if peft_config.peft_type.name == "PREFIX_TUNING":
            config = AutoConfig.from_pretrained(model_dir, trust_remote_code=True)
            # 设置虚拟token数量
            config.pre_seq_len = peft_config.num_virtual_tokens
            config.use_cache = False
            # 模型每一层都添加虚拟token
            model = AutoModelForCausalLM.from_pretrained(
                model_dir,
                trust_remote_code=True,
                config=config,
            )
    print_model_size(model)
    return tokenizer, model

加载模型每一层都添加虚拟token,然后微调这些token即可。

代码运行

pip install -r requirements.txt --default-timeout=120 -i https://pypi.tuna.tsinghua.edu.cn/simple

python finetune_hf.py  data/  THUDM/chatglm3-6b  configs/ptuning_v2.yaml

 断点微调(从微调好3000步的基础上继续微调)
python finetune_hf.py  data/  THUDM/chatglm3-6b  configs/ptuning_v2.yaml 3000

微调结果

在这里插入图片描述

  • 可以看到,chatglm3-6b改口了,知道自己是派大星了!

🫓总结

综上,我们基本了解了“一项全新的技术啦” 🍭 ~~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读😆

后续还会继续更新💓,欢迎持续关注📌哟~

💫如果有错误❌,欢迎指正呀💫

✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

【传知科技 – 了解更多新知识】

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dream-Y.ocean

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

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

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

打赏作者

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

抵扣说明:

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

余额充值