我们为语言模型微调介绍了一种新的脱机RL算法,该算法可以包含任何真实价值?任何先前存在的语言数据上的奖励功能。
?chkey假设是将LM从LM视为RL设置中的单个动作。使用此假设,我们获得了参考策略的序列级别值估算,并具有其验证集绩效。在我们案例中,参考策略仅仅是SFT模型,具有负log可能性(NLL)IE行为克隆。 A-lol的最终学习方程式看起来像:
使用参考策略价值估计,我们发现培训集的子集仍然具有积极的优势(即剩余的午餐?),并且仅在该子集上训练优先采样。我们还通过修改重要的权重项-A-LOL参考,A-lol SEQ,A-LOL KL (本文中的更多详细信息)来测试A-lol的三种变体。总体而言,A-LOL非常容易实施?除了标准NLL登录外,还可以效率稳定和样本效率吗?脱机RL算法可以包含任何奖励功能和数据源。
由于A-lol具有合并任意奖励功能和数据源的灵活性?我们在各种语言模型任务上训练语言模型,包括:(1)有用和无害的助手(HHA),(2)常识变压器(Comet)生成任务,(3)具有5个不同的奖励,(3)5个不同的奖励,(4)忠实的知识对话,(4)忠实的知识对对话的生成4 Rewards 4 Rewards。在每个实验中,我们将A-lol与其他离线策略梯度方法(例如加权行为克隆(WBC)和奖励黄金(先前方法的修改版本)进行比较。在HHA中,我们还与流行的基于首选项的离线RL方法进行了比较,包括PRO,DPO和标准在线PPO实现。总体而言,在大多数奖励的实验中,A-LOL方法非常稳定,并且优于其他方法。
安装软件包: pip install -r requirements.txt
目的是在HHA数据集上的Finetune Llama 7b型号,以提高响应困难的用户查询时的帮助和安全性。我们重复使用Pro的数据和奖励模型。
如何获得无害和有用的助理任务数据集?
wget https://ylab-mobile-prod.oss-cn-beijing.aliyuncs.com/yueli.ybw/data.zipdata/文件夹中。 data/文件夹中应存在文件夹hh_dev , hh_test , hh_train_len2 。python data_cleaning.py如何以奖励和优势的离线RL方法来培训模型?
python lolrl_qlora_llama_hh.py
参数和选项:
--algorithm :options- ['nll', 'wbc', 'r_gold', 'r_lol', 'a_lol', 'a_lol_ref_free', 'a_lol_seq', 'a_lol_kl']--sampling_strategy :默认None 。选项good_priority将以优势或奖励基于离线RL使用--ppo_clip :默认为0.9 。 R-lol,a-lol和a-lol Seq的PPO夹参数--kl_beta :默认值0.0 。 A-lol KL的KL Beta参数。使用KL时,请确保将PPO_CLIP设置为0.0如何使用基于首选项的离线RL方法培训模型?
python dpo_qlora_llama_hh.py --output_dir "./checkpoints/dpo_qlora_llama/" 。添加--reference_free测试DPO的无参考版本。python pro_qlora_llama_hh.py --output_dir "./checkpoints/pro_qlora_llama/"如何使用在线RL方法培训模型?
python ppo_qlora_llama_hh.py --output_dir "checkpoints/ppo_timdettmers_qlora_llama_6e/" --cache_dir "cache/ppo_tim_cache" --total_steps 6000python ppo_hh_eval.py --model_name_or_path "reciprocate/ppo_hh_pythia-6B" --output_dir "checkpoints/ppo_hh_pythia_6B/"如何评估测试集的任何Qlora模型?
python qlora_llama_hh_eval.py --adapter_path [PATH_TO_ADAPTER] --output_dir [OUTPUT_DIR]
上载了预审计的适配器,以实现有益而无害的助理任务,从最佳方法到拥抱面
目的是通过使用彗星 - 批判性分类器作为奖励功能来改善原子^10x数据上的常识性推理。
data/symbolic_knowledge_distillation/python convert_keras_roberta_to_huggingface.py将最终分类器保存为Robertamodel,Tokenizer和自定义分类头,并在
saved_models/comet_critic_keras_to_pytorch上保存了特定的激活。
分类器保存在文件夹中的“ custom_roberta_classification_head.pt”文件中
初始化分类头如下:Robertacificationhead(1024,512,1)
python preprocess_comet_and_add_rewards.py -i data/symbolic_knowledge_distillation/downloaded -it data/symbolic_knowledge_distillation/atomic2020/atomic2020_data-feb2021/ -ccm saved_models/comet_critic_keras_to_pytorch -o data/comet_rewarded/ -bs 32 python train_generation_task_with_off_policy_PG.py -i data/comet_rewarded/ -tn COMET -m data/symbolic_knowledge_distillation/downloaded/comet-distill/ -s [MODEL_SAVE_DIR] -o [OUTPUT_DIR] -mt data/symbolic_knowledge_distillation/downloaded/comet-distill-tokenizer/ -ccm saved_models/comet_critic_keras_to_pytorch -ml 30 -algo [ALGORITHM] -vf 16 -e 1 -bs 16 -as 1 -v_bs 32 -t -ev_b
算法选项: ["nll", "wbc", "r_gold", "r_lol", "a_lol", "a_lol_ref_free", "a_lol_seq", "a_lol_kl"]
python aggregate_generation_task_results.py -bmps "{'comet_distill': True}" -tn COMET -o final_results/comet_final_results.csv
目标是训练一个Reddit对话框模型,该模型同时改善了5个方面:流利,安全性,参与度,投票概率和多样性。我们对每个属性使用先前存在的序列分类器,并将所有分数总和为最终的标量奖励。为了测试A-lol对嘈杂数据的鲁棒性,我们创建了两个培训数据拆分:(1)仅投票注释,(2)仅投票注释。
数据下载:从以下几点下载upited和投票的reddit评论对:
阳性评论得分10%:[66.0,72.0,79.0,88.0,100.0,116.0,139.0,139.0,174.0,236.0,385.0,9582.0]
负注释分数10%:[-2946.0,-25.0,-18.0,-14.0,-12.0,-12.0,-10.0,-9.0,-8.0,-8.0,-8.0,-7.0,-7.0,-6.0]
奖励预测:下载toxichat分类器并将其保存在saved_models中
python preprocess_reddit_comment_scores_and_add_rewards.py -i data/reddit_comment_scores_kaggle/ -m microsoft/DialoGPT-medium -cm textattack/roberta-base-CoLA -ucm microsoft/DialogRPT-updown -dcm microsoft/DialogRPT-depth -om saved_models/DGPT_medium_OC_S_and_SBF_offensive_e2 -o data/reddit_comment_scores_kaggle/preprocessed
火车对话对话中nll参考策略reddit upvoted( reddit_pos )和倾斜( reddit_neg )注释python train_generation_task_with_off_policy_PG.py -i data/reddit_comment_scores_kaggle/preprocessed -tn reddit_pos -m microsoft/DialoGPT-medium -s saved_models/reddit_pos/dgpt_nll -o final_results/reddit_pos/dgpt_nll/train_log -cm textattack/roberta-base-CoLA -ucm microsoft/DialogRPT-updown -dcm microsoft/DialogRPT-depth -om saved_models/DGPT_medium_OC_S_and_SBF_offensive_e2 -algo nll -vf 2 -e 6 -t -bs 8 -as 2 -v_bs 32
python train_generation_task_with_off_policy_PG.py -i data/reddit_comment_scores_kaggle/preprocessed -tn reddit_neg -m microsoft/DialoGPT-medium -s saved_models/reddit_neg/dgpt_nll -o final_results/reddit_neg/dgpt_nll/train_log -cm textattack/roberta-base-CoLA -ucm microsoft/DialogRPT-updown -dcm microsoft/DialogRPT-depth -om saved_models/DGPT_medium_OC_S_and_SBF_offensive_e2 -algo nll -vf 2 -e 6 -t -bs 8 -as 2 -v_bs 32
python train_generation_task_with_off_policy_PG.py -i data/reddit_comment_scores_kaggle/preprocessed -tn [TASK_NAME] -m saved_models/[TASK_NAME]/dgpt_nll -s [MODEL_SAVE_DIR] -o [OUTPUT_DIR] -cm textattack/roberta-base-CoLA -ucm microsoft/DialogRPT-updown -dcm microsoft/DialogRPT-depth -om saved_models/DGPT_medium_OC_S_and_SBF_offensive_e2 -algo [ALGORITHM] -vf 2 -e 3 -bs 8 -as 2 -v_bs 32 -t -ev_b
task_name选项: ["reddit_pos", "reddit_neg"]
算法选项: ["nll", "wbc", "r_gold", "r_lol", "a_lol", "a_lol_ref_free", "a_lol_seq", "a_lol_kl"]
python aggregate_generation_task_results.py -bmps " {'dgpt_nll': True} " -tn reddit_pos -o final_results/reddit_pos_final_results.csv
python aggregate_generation_task_results.py -bmps " {'dgpt_nll': True} " -tn reddit_neg -o final_results/reddit_neg_final_results.csv目标是训练一个忠实的知识接地对话模型,该模型同时改善了4个方面:忠诚,流利,参与度和多样性。我们对每个属性使用先前存在的序列分类器,并将所有分数总和为最终的标量奖励。我们再次使用三种不同的数据拆分:(1)Wikipedia(WOW)的向导 - 嘈杂/低质量,(2)FaithDial-清洁剂和(3)WOW + FAITHDIAL。
python preprocess_wow_and_add_rewards.py -i [TASK_NAME] -o data/[TASK_NAME]/preprocessed_and_rewarded/ -m microsoft/DialoGPT-medium -cm textattack/roberta-base-CoLA -fcm McGill-NLP/roberta-large-faithcritic -dcm microsoft/DialogRPT-depth -bs 32["wow", "faithdial", "faithdial_wow"]python train_generation_task_with_off_policy_PG.py -i data/[TASK_NAME]/preprocessed_and_rewarded/ -tn [TASK_NAME] -m microsoft/DialoGPT-medium -s saved_models/[TASK_NAME]/dgpt_nll -o final_results/[TASK_NAME]/dgpt_nll/train_log -cm textattack/roberta-base-CoLA -fcm McGill-NLP/roberta-large-faithcritic -dcm microsoft/DialogRPT-depth -algo nll -vf 2 -e 6 -t -bs 8 -as 2 -v_bs 32["wow", "faithdial", "faithdial_wow"] python train_generation_task_with_off_policy_PG.py -i data/[TASK_NAME]/preprocessed_and_rewarded/ -tn [TASK_NAME] -m saved_models/[TASK_NAME]/dgpt_nll -s [MODEL_SAVE_DIR] -o [OUTPUT_DIR] -cm textattack/roberta-base-CoLA -fcm McGill-NLP/roberta-large-faithcritic -dcm microsoft/DialogRPT-depth -algo [ALGORITHM] -vf 2 -e 3 -bs 8 -as 2 -v_bs 32 -t -ev_b
task_name选项: ["wow", "faithdial", "faithdial_wow"]
算法选项: ["nll", "wbc", "r_gold", "r_lol", "a_lol", "a_lol_ref_free", "a_lol_seq", "a_lol_kl"]
python aggregate_generation_task_results.py -bmps "{'dgpt_nll': True}" -tn [TASK_NAME] -o final_results/[TASK_NAME]_final_results.csv
task_name选项: ["wow", "faithdial", "faithdial_wow"]
论文:https://openreview.net/pdf?id=zdgkpbf0vq
@inproceedings{
baheti2024improving,
title={Leftover-Lunch: Advantage-based Offline Reinforcement Learning for Language Models},
author={Ashutosh Baheti and Ximing Lu and Faeze Brahman and Ronan Le Bras and Maarten Sap and Mark Riedl},
booktitle={The Twelfth International Conference on Learning Representations},
year={2024},
url={https://openreview.net/forum?id=ZDGKPbF0VQ}
}