赞
踩
在《微调实操三:人类反馈对语言模型进行强化学习(RLHF)》中提到过第三阶段有2个方法,一种是是RLHF, 另外一种就是今天的DPO方法, DPO通过直接优化语言模型来实现对其行为的精确控制,而无需使用复杂的强化学习,也可以有效学习到人类偏好,DPO相较于RLHF更容易实现且易于训练,效果更好.
DPO 是一种自动微调方法,它通过最大化预训练模型在特定任务上的奖励来优化模型参数。与传统的微调方法相比,DPO 绕过了建模奖励函数这一步,而是通过直接在偏好数据上优化模型来提高性能。相对RLHF两阶段而言具有多项优越性:
(1)简单性:DPO更容易实施和培训,使其更易于使用。
(2)稳定性:不易陷入局部最优,保证训练过程更加可靠。
(3)效率:与RLHF 相比, DPO 需要更少的计算资源和数据,使其计算量轻。
(4)有效性:实验结果表明,DPO在情感控制、摘要和对话生成等任务中可以优于 RLHF 。
并不是说DPO没有奖励模型, 而是利用同个阶段训练建立模型和强化学习, 在 DPO 中,目标函数是优化模型参数以最大化奖励的函数。除了奖励最大化目标外,还需要添加一个相对于参考模型的 KL 惩罚项,以防止模型学习作弊或钻营奖励模型。
TRL(Transformer Reinforcement Learning)是一个全面的库,专为使用强化学习训练变换器语言模型而设计。它包含多种工具,可以支持从监督式微调(SFT)开始,通过奖励建模(RM)阶段,最终达到近端策略优化(PPO)阶段和DPO。此库 transformers框架无缝集成。所以未来在人工智能领域transformers必学.
3.1 数据集
采用《微调实操三:人类反馈对语言模型进行强化学习(RLHF)》 阶段中训练奖励模型的数据集
3.2 合并指令微调的模型
!python /kaggle/working/MedicalGPT/merge_peft_adapter.py --model_type bloom \
--base_model merged-pt --lora_model outputs-sft-v1 --output_dir merged-sft/
3.3 DPO训练脚本
# dpo training %cd /kaggle/working/autoorder !ls !git pull !pip install -r algorithm/llm/requirements.txt !pip install Logbook import os os.environ['RUN_PACKAGE'] = 'algorithm.llm.train.dpo_training' os.environ['RUN_CLASS'] = 'DPOTraining' print(os.getenv("RUN_PACKAGE")) !python main.py \ --model_type bloom \ --model_name_or_path ./merged-sft \ --train_file_dir /kaggle/working/MedicalGPT/data/reward \ --validation_file_dir /kaggle/working/MedicalGPT/data/reward \ --per_device_train_batch_size 3 \ --per_device_eval_batch_size 1 \ --do_train \ --do_eval \ --use_peft True \ --max_train_samples 1000 \ --max_eval_samples 10 \ --max_steps 100 \ --eval_steps 10 \ --save_steps 50 \ --max_source_length 128 \ --max_target_length 128 \ --output_dir outputs-dpo-v1 \ --target_modules all \ --lora_rank 8 \ --lora_alpha 16 \ --lora_dropout 0.05 \ --torch_dtype float16 \ --fp16 True \ --device_map auto \ --report_to tensorboard \ --remove_unused_columns False \ --gradient_checkpointing True \ --cache_dir ./cache \ --use_fast_tokenizer
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。