国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

機(jī)器學(xué)習(xí) | 從0開始大模型之模型DPO訓(xùn)練

人工智能 機(jī)器學(xué)習(xí)
DPO 訓(xùn)練器對(duì)數(shù)據(jù)集的格式有具體的要求,包括三個(gè)部分:提示(prompt):提示的格式為:prompt: 文本;選中(chosen):選中文本的格式為:chosen: 文本;拒絕(rejected):拒絕選中文本的格式為:rejected: 文本。

1、為什么需要DPO

Rafailov等人在2023年發(fā)表了一篇論文《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》,該論文提出了一種新的訓(xùn)練方法,稱為直接偏好優(yōu)化(DPO),該論文介紹:

雖然大規(guī)模無監(jiān)督語言模型 (LM) 可以學(xué)習(xí)廣泛的世界知識(shí)和一些推理技能,但由于其訓(xùn)練完全無監(jiān)督,因此很難精確控制其行為。  
現(xiàn)有的獲得這種可控性的方法是收集模型生成相對(duì)質(zhì)量的人類標(biāo)簽,并微調(diào)無監(jiān)督語言模型以符合這些偏好,通常使用從人類反饋中進(jìn)行強(qiáng)化學(xué)習(xí) (RLHF)。  
然而,RLHF 是一個(gè)復(fù)雜且通常不穩(wěn)定的過程,首先要擬合一個(gè)反映人類偏好的獎(jiǎng)勵(lì)模型,然后使用強(qiáng)化學(xué)習(xí)微調(diào)大型無監(jiān)督語言模型以最大化這個(gè)估計(jì)的獎(jiǎng)勵(lì),而不會(huì)偏離原始模型太遠(yuǎn)。  
在該論文中,利用獎(jiǎng)勵(lì)函數(shù)和最優(yōu)策略之間的映射來表明,這個(gè)受約束的獎(jiǎng)勵(lì)最大化問題可以通過一個(gè)階段的策略訓(xùn)練進(jìn)行精確優(yōu)化,本質(zhì)上是解決人類偏好數(shù)據(jù)的分類問題。  
由此產(chǎn)生的算法,稱之為直接偏好優(yōu)化 (DPO),穩(wěn)定、高效且計(jì)算量小,無需擬合獎(jiǎng)勵(lì)模型、在微調(diào)期間從 LM 中采樣或執(zhí)行重大超參數(shù)調(diào)整。

由此可見,DPO 主要解決RLHF不穩(wěn)定的問題,直接使用人類偏好數(shù)據(jù)訓(xùn)練模型。

2、DPO的訓(xùn)練原理

DPO 的訓(xùn)練原理如下圖所示(出自原論文):

DPODPO

主要包括兩個(gè)步驟:

  • 數(shù)據(jù)收集:收集一個(gè)偏好數(shù)據(jù)集,其中包含給定提示的生成結(jié)果的正負(fù)選擇對(duì);
  • 優(yōu)化:直接最大化 DPO 損失的對(duì)數(shù)似然函數(shù),該損失函數(shù)是偏好數(shù)據(jù)集上的交叉熵?fù)p失和模型生成結(jié)果的對(duì)數(shù)似然性之間的加權(quán)平均值;

具體公式推導(dǎo)可以參考這篇博客:https://www.cnblogs.com/lemonzhang/p/17910358.html。

3、DPO的代碼實(shí)現(xiàn)

3.1 收集數(shù)據(jù)

DPO 訓(xùn)練器對(duì)數(shù)據(jù)集的格式有具體的要求,包括三個(gè)部分:

  • 提示(prompt):提示的格式為:prompt: 文本;
  • 選中(chosen):選中文本的格式為:chosen: 文本;
  • 拒絕(rejected):拒絕選中文本的格式為:rejected: 文本;
  • 示例:
{
    "id": 0,
    "prompt": "最近,馬其頓流行歌手托瑟·普羅埃斯基在一場(chǎng)巡回展覽中被紀(jì)念。",
    "chosen": "\"最近,馬其頓流行歌手托斯·普羅埃斯基在一場(chǎng)展覽中被人們銘記。\" 讓我?guī)湍憷斫狻_@意味著他們舉辦了一場(chǎng)特別的展示(我們稱之為展覽),以幫助人們記住馬其頓這個(gè)地方的歌手托斯·普羅埃斯基有多特別。這有點(diǎn)像翻看你的相冊(cè)來回憶快樂時(shí)光,但規(guī)模更大,更專注于他成名后的工作和生活。",
    "rejected": "哦!你想知道這句話的意思嗎?好的,讓我告訴你!??\n\n所以,“Son d?nem”在英語中意思是“Last period”。而“Makedon”在英語中是“Macedonian”。而“pop ?ark?c?s?”在英語中意思是“pop singer”!??\n\n所以,句子“Son d?nem Makedon pop ?ark?c?s? Tose Proeski gezer sergide an?l?yor”的意思是“Last period Macedonian pop singer Tose Proeski正在舞臺(tái)上表演。”??\n\n希望這有幫助,小伙伴!??"
}

DPO的數(shù)據(jù)可以搜索huggingface的DPO數(shù)據(jù)集,地址為:https://huggingface.co/datasets?sort=trending&search=dpo 。

比如 https://huggingface.co/datasets/Anthropic/hh-rlhf 的數(shù)據(jù)集如下:

hh-rlhfhh-rlhf

3.2 TRL

引入 TRL 庫(kù),支持 DPO 訓(xùn)練器,訓(xùn)練樣例代碼:

training_args = DPOConfig(
    beta=0.1,
)
dpo_trainer = DPOTrainer(
    model,
    ref_model,
    args=training_args,
    train_dataset=train_dataset,
    tokenizer=tokenizer,  # for visual language models, use tokenizer=processor instead
)
dpo_trainer.train()
dpo_trainer.save_model()

如上訓(xùn)練默認(rèn)是保存 safetensors 格式的模型,如果想保存 pytorch 格式的模型, 可以改為如下代碼:

training_args = DPOConfig(
    beta=0.1,
    save_safetensors=False, // 設(shè)置為False,改為保存為pytorch格式的模型   
)
dpo_trainer = DPOTrainer(
    model,
    ref_model,
    args=training_args,
    train_dataset=train_dataset,
    tokenizer=tokenizer,  # for visual language models, use tokenizer=processor instead
)
dpo_trainer.train()
dpo_trainer.save_model(
    output_dir=f"./out/dpo_sft_xxx.pth"
)

3.3 訓(xùn)練

Transformer的代碼和前面的一樣,可以參考預(yù)訓(xùn)練的代碼,如下就是初始化模型和 DPO 訓(xùn)練的代碼:

def init_model():
    from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig
    AutoConfig.register(MyPretrainConfig.model_type, MyPretrainConfig)
    AutoModelForCausalLM.register(MyPretrainConfig, Transformer)
    my_tokenizer = "./my_tokenizer"
    tokenizer = AutoTokenizer.from_pretrained(my_tokenizer, trust_remote_code=True, use_fast=False)
    ckp = f'./out/full_sft_{lm_config.dim}.pth.{batch_size}'

    print(f"lmconfigs: {lm_config.to_json_string()}")
    with open(ckp_path + "/config.json", 'w') as f:
        f.write(lm_config.to_json_string())

    # 拷貝文件到指定的目錄
    for item in os.listdir(my_tokenizer):
        src_item = os.path.join(my_tokenizer, item)
        if os.path.isfile(src_item):
            dest_item = os.path.join(ckp_path, item)
            shutil.copy2(src_item, dest_item)
    shutil.copy2(ckp, ckp_path + "/pytorch_model.bin")

    model = AutoModelForCausalLM.from_pretrained(ckp_path, trust_remote_code=True).to(device)

    def count_parameters(model):
        return sum(p.numel() for p in model.parameters() if p.requires_grad)
    
    tokenizer.pad_token = tokenizer.eos_token
    print(f'LLM總參數(shù)量:{count_parameters(model) / 1e6:.3f} 百萬')
    model = model.to(device)
    return model, tokenizer

if __name__ == '__main__':
    lm_config = MyPretrainConfig()
    max_seq_len = lm_config.max_seq_len
    out_dir = 'out'
    epochs = 20             # 訓(xùn)練輪數(shù)
    batch_size = 8          # batch_size
    learning_rate = 1e-5    # 學(xué)習(xí)率
    device = 'cuda:0'       # or cpu
    dtype = 'bfloat16'

    ckp_path = f'./my_checkpoint'
    if not os.path.exists(ckp_path):
        os.makedirs(ckp_path)

    model, tokenizer = init_model()
    training_config = DPOConfig(
        output_dir=ckp_path,
        per_device_train_batch_size=1,
        remove_unused_columns=False,
        report_to="none",
        save_steps=2000,
        learning_rate=learning_rate,
        save_safetensors=False,
    )

    # 下載訓(xùn)練圖片:https://huggingface.co/datasets/jingyaogong/minimind_dataset/tree/main/dpo
    dataset_path = f'{basepath}/dpo_train_data.json'
    train_dataset = load_dataset('json', data_files=dataset_path)
    dpo_trainer = DPOTrainer(
        model,
        ref_model=None,
        args=training_config,
        beta=0.1,
        train_dataset=train_dataset['train'],
        tokenizer=tokenizer,
        max_length=512,
        max_prompt_length=512
    )
    dpo_trainer.train()
    dpo_trainer.save_model(
        output_dir=f"./out/dpo_sft_{lm_config.dim}.pth.{batch_size}"
    )
  • init_model 函數(shù)主要是注冊(cè)和加載預(yù)訓(xùn)練的模型,并將 tokeinzer 的一些配置文件都拷貝到 ./my_checkpoint 方便后續(xù)的訓(xùn)練;
  • DPOConfig 主要是配置訓(xùn)練的一些參數(shù),比如保存的模型路徑、學(xué)習(xí)率等;
  • DPOTrainer 是 DPO 訓(xùn)練器,將模型載入后調(diào)用 train 進(jìn)行訓(xùn)練,參數(shù)說明如下:

model: transformers.PreTrainedModel,預(yù)訓(xùn)練模型

ref_model: transformers.PreTrainedModel,參考模型

args: DPOConfig,用于訓(xùn)練的 DPO 配置參數(shù)

train_dataset: datasets.Dataset,訓(xùn)練數(shù)據(jù)集

tokenizer: transformers.PreTrainedTokenizerBase,分詞器

model_init: 用于訓(xùn)練的模型初始化器,如果指定為 None,則將使用默認(rèn)的模型初始化器

optimizer: torch.optim.Optimizer,優(yōu)化器

callbacks: 用于訓(xùn)練的回調(diào)函數(shù)

  • dpo_trainer.save_model 保存模型,傳入 output_dir 參數(shù),指定保存的模型路徑

4、總結(jié)

至此,訓(xùn)練系列按照步驟寫完了,現(xiàn)在總結(jié)訓(xùn)練流程:

模型訓(xùn)練流程模型訓(xùn)練流程

不過驗(yàn)證下來,訓(xùn)練效果不是很好,這個(gè)也是從0開始訓(xùn)練會(huì)遇到的問題,因此接下來會(huì)完成幾個(gè)事項(xiàng):

  • 模型迭代優(yōu)化,解決訓(xùn)練效果不好的問題;
  • 模型嘗試新的模型和解決方案,解決訓(xùn)練速度問題;
  • 加入多模態(tài)訓(xùn)練集,將語言大模型改進(jìn)為多模態(tài)模型;
  • 最后將整個(gè)模型訓(xùn)練完成后,將代碼開源。
責(zé)任編輯:武曉燕 來源: 周末程序猿
相關(guān)推薦

2024-12-26 00:46:25

機(jī)器學(xué)習(xí)LoRA訓(xùn)練

2024-11-04 00:24:56

2025-04-03 15:40:41

機(jī)器學(xué)習(xí)大模型DeepSeek

2024-12-09 00:00:10

2025-01-10 08:38:10

2025-04-03 15:46:53

2020-08-10 15:05:02

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2024-09-09 07:46:16

2022-03-28 09:00:00

SQL數(shù)據(jù)庫(kù)機(jī)器學(xué)習(xí)

2017-03-24 15:58:46

互聯(lián)網(wǎng)

2023-06-24 19:59:40

2017-07-11 10:19:24

淺層模型機(jī)器學(xué)習(xí)優(yōu)化算法

2022-09-06 08:00:00

機(jī)器學(xué)習(xí)金融數(shù)據(jù)科學(xué)

2018-11-07 09:00:00

機(jī)器學(xué)習(xí)模型Amazon Sage

2017-10-09 12:55:29

機(jī)器學(xué)習(xí)KaggleStacking

2024-06-24 08:25:00

2020-10-13 07:00:00

機(jī)器學(xué)習(xí)人工智能

2018-05-16 09:26:41

基線模型機(jī)器學(xué)習(xí)AI

2017-10-23 15:46:37

2018-03-09 09:00:00

前端JavaScript機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

97视频在线看| 国产成人97精品免费看片| 欧美综合在线第二页| 成人av影视| 日韩系列在线| 欧美日韩国产精品一区| 日韩精品另类天天更新| 激情小说亚洲| 日韩精品一区二区在线| 亚洲精品乱码久久久久久自慰| 欧美呦呦网站| 国产一区二区三区在线视频| 永久免费在线观看视频| 中文字幕一区二区三区色视频| 久久日韩精品| 水蜜桃精品av一区二区| 日韩中文字幕网址| www 日韩| 亚洲男女一区二区三区| 青青草原av在线播放| 成人性视频网站| 视频一区二区综合| 欧美日韩免费| 2020国产精品视频| 欧美成人黑人| 一本在线高清不卡dvd| 中文在线视频| 欧美日韩午夜激情| 高清日韩av| 欧美日韩国产影院| 免费在线看污| 玉米视频成人免费看| 欧美日韩免费精品| 欧美国产91| 亚洲国产一区二区在线| 久久电影网电视剧免费观看| 欧日韩免费视频| 亚洲国产精品av| 国产夫妻在线视频| 久久久久久毛片免费看 | 裸模一区二区三区免费| 欧美男男gaytwinkfreevideos| 成人在线免费网站| 久久久久综合网| 成人免费在线观看视频网站| 亚洲欧美二区三区| а√在线中文网新版地址在线| 国产欧美日韩丝袜精品一区| 欧美黄色一区二区| 久久久精品三级| 亚洲国产aⅴ成人精品无吗| 在线播放evaelfie极品| 777亚洲妇女| 午夜影院欧美| 翔田千里一区| 国产精品一区二区三区毛片淫片 | 久久久久久久久久亚洲| 成人午夜免费视频| 青青草手机在线| 国产精品久久久久高潮| 亚洲精品视频一区二区| 99久久免费精品国产72精品九九| 日韩最新中文字幕| 亚洲精品不卡在线| 日韩专区欧美专区| 日本电影在线观看网站| 欧洲精品一区二区三区在线观看| 岛国成人av| 一区二区三区国产免费| 欧美日韩成人在线播放| 美女网站色91| 亚洲成av在线| 国产天堂在线播放| 国产欧美精品在线播放| 日韩欧美国产成人| 欧美中文字幕| 欧美黑人疯狂性受xxxxx野外| 超碰在线免费观看97| 日韩精品在线播放| 久久国内精品自在自线400部| 九九色在线视频| 国产不卡视频| 日本午夜一区二区三区| 欧美精品免费看| 91久久精品一区二区| 国产成人精品www牛牛影视| 99精品美女| 美脚恋feet久草欧美| 一个人免费视频www在线观看| www.日本在线视频| 国产精品免费一区豆花| 91传媒视频在线播放| 不卡的av电影在线观看| 亚洲国产一区二区精品专区| 国产一区二区| 大香伊人久久| 精品剧情v国产在线观看| 手机在线观看国产精品| 国产aaa精品| 欧美一三区三区四区免费在线看 | 日韩在线观看| 日本久久久久久久久久久久| 久久精品男人天堂| 亚洲第一激情av| 亚洲一区国产一区| 四虎4545www国产精品| 国产三级国产精品国产专区50| 国产精品成人品| 7777精品伊人久久久大香线蕉超级流畅| 韩国三级在线一区| 老司机成人在线| 免费在线毛片网站| chinese少妇国语对白| 91免费看国产| 日韩在线观看免费网站| 亚洲少妇中出一区| 久久精品女人| 偷拍自拍一区| 黄页网站在线| 黄色三级在线观看| 久久男人资源站| 91久久精品国产91久久性色tv| 在线91免费看| 欧美激情中文不卡| 国产综合久久久久影院| 亚洲国产成人精品女人| 日本成人在线网站| 69视频在线观看| 女人黄色片免费| 国产精品亚洲二区在线观看| 四虎影视永久免费在线观看一区二区三区| 日韩在线资源网| 欧美mv日韩mv国产网站app| 天天av天天翘天天综合网色鬼国产 | 蜜桃a∨噜噜一区二区三区| 亚洲国产福利| 日韩av毛片| 色多多视频在线观看| 亚洲有码转帖| 深夜视频在线免费| 色网址在线观看| 日韩私人影院| jizz在线观看中文| 国产高清视频免费最新在线| 亚洲а∨精品天堂在线| 水莓100国产免费av在线播放| 日本按摩中出| 玖玖在线免费视频| 国产传媒视频在线观看| 免费观看v片在线观看| 亚洲aⅴ优女av综合久久久| av在线电影观看| 91九色在线观看视频| 久久久久久久9| 黄色影院一级片| 在线看片地址| 春日野结衣av| 黄动漫在线免费观看| 2018国产在线| 亚洲xxxx在线| 678五月天丁香亚洲综合网| 97精品中文字幕| 色是在线视频| 日本高清不卡中文字幕| 国产精品视频一区二区三区四| 国产精品国产自产拍高清av王其| 亚洲三级网址| av一级久久| 日本精品裸体写真集在线观看| 导航福利在线| 久草电影在线| 你懂的视频在线| 国产精品嫩模av在线| 亚洲女同ⅹxx女同tv| 国产精品三级美女白浆呻吟| 国产无遮挡在线视频免费观看| 日韩深夜影院| 国产精品1区2区| 日本中文字幕一区| 免费成人毛片| 91.xxx.高清在线| 能在线观看的av| 欧美在线视频二区| 免费精品视频一区| 成人免费看片网址| 中文字幕欧美日韩精品| 亚洲精品国产欧美| 亚洲夂夂婷婷色拍ww47| 97久久精品人人澡人人爽| 中文字幕精品影院| 日韩美香港a一级毛片| 91高清在线视频| 91在线导航| 蜜臀av在线| 草莓视频一区二区三区| 成人自拍在线| 日日夜夜一区二区| 在线一区二区三区| 永久免费精品影视网站| 欧美插天视频在线播放|