最近一段時間,由 OpenAI 開發的 AI 聊天機器人程式 ChatGPT 橫掃各大 AI 社區,大家對它的熱情只增不減,不斷挖掘其潛力。
有些研究者坐不住了,開始琢磨怎樣才能開發個等同於 ChatGPT 的開源軟體。還沒有行動的小夥伴這次參考範例來了,以下我們要介紹的這個專案(PaLM RLHF)就實現了這樣的功能。
專案位址:https://github.com/lucidrains/PaLM-rlhf-pytorch
該專案是在PaLM 架構之上實作RLHF(人類回饋強化學習)。基本上等同於 ChatGPT,差異是使用了 PaLM。 PaLM 是在Google的通用 AI 架構「Pathways」上訓練的具有 5,400 億參數的大型語言模型。而RLHF,是ChatGPT 在GPT 3.5 系列模型的基礎上,引入「人工標註資料強化學習」(RLHF)來不斷微調預訓練語言模型,旨在讓大型語言模型(LLM)學會理解人類的命令,並學會根據給定的prompt 給出最優的答案。
想要了解RLHF 更多內容,可以參考:https://huggingface.co/blog/rlhf
正如網友所說的:「在AI 領域中,每有一次專案突破,開發者很快就會復現出一個開源版本。」
不過該專案目前只包含訓練架構和程式碼,沒有預先訓練好的權重。在使用說明上,文件也顯示必須先訓練 PaLM。
對此也有網友表示擔心,表示:這不是一個開箱即用的項目,還只是一個架構,就像shell 一樣,需要昂貴的開銷才能訓練完成,沒有機構能夠像Google一樣訓練PaLM。
還有網友表示:「沒有預訓練權重是非常糟糕的,官方至少需要釋放50% 的稀疏權重,剩下的讓開發者自己訓練,才是最好的選擇。」
不過也有網友表示自己會去嘗試:
下面我們來看看這個項目是如何運作的。
$ pip install palm-rlhf-pytorch
首先訓練 PaLM,就像任何其他自回歸 transformer 一樣。
import torch from palm_rlhf_pytorch import PaLM palm = PaLM( num_tokens = 20000, dim = 512, depth = 12 ).cuda() seq = torch.randint(0, 20000, (1, 2048)).cuda() loss = palm(seq, return_loss = True)loss.backward() # after much training, you can now generate sequences generated = palm.generate(2048) # (1, 2048)
接著使用精選的人類回饋來訓練獎勵模式。在原始論文中,在沒有出現過擬合的情況下,無法從預訓練 transformer 中獲得微調的獎勵模型。專案作者則提供了使用 LoRA 微調的選項。
import torch from palm_rlhf_pytorch import PaLM, RewardModel palm = PaLM( num_tokens = 20000, dim = 512, depth = 12, causal = False ) reward_model = RewardModel( palm, num_binned_output = 5 # say rating from 1 to 5 ).cuda() # mock data seq = torch.randint(0, 20000, (1, 1024)).cuda()prompt_mask = torch.zeros(1, 1024).bool().cuda() # which part of the sequence is prompt, which part is response labels = torch.randint(0, 5, (1,)).cuda() # train loss = reward_model(seq, prompt_mask = prompt_mask, labels = labels)loss.backward() # after much training reward = reward_model(seq, prompt_mask = prompt_mask)
最後將 transformer 和獎勵模型傳遞給 RLHFTrainer。
import torch from palm_rlhf_pytorch import PaLM, RewardModel, RLHFTrainer # load your pretrained palm palm = PaLM( num_tokens = 20000, dim = 512, depth = 12 ).cuda() palm.load('./path/to/pretrained/palm.pt') # load your pretrained reward model reward_model = RewardModel( palm, num_binned_output = 5 ).cuda() reward_model.load('./path/to/pretrained/reward_model.pt') # ready your list of prompts for reinforcement learning prompts = torch.randint(0, 256, (50000, 512)).cuda() # 50k prompts # pass it all to the trainer and train trainer = RLHFTrainer( palm = palm, reward_model = reward_model, prompt_token_ids = prompts ) trainer.train(num_episodes = 50000) # then, if it succeeded... # generate say 10 samples and use the reward model to return the best one answer = trainer.generate(2048, prompt = prompts[0], num_samples = 10) # (<= 2048,)
以上是夠快!爆紅的ChatGPT等價開源專案來了,網友:我擔心跑不起來的詳細內容。更多資訊請關注PHP中文網其他相關文章!