友快網

導航選單

爆火的ChatGPT等價開源專案來了,網友:我擔心跑不起來

機器之心報道

編輯:杜偉、陳萍

感興趣的小夥伴不妨一試。

最近一段時間,由 OpenAI 開發的 AI 聊天機器人程式 ChatGPT 橫掃各大 AI 社群,大家對它的熱情只增不減,不斷挖掘其潛力。

有些研究者坐不住了,開始琢磨怎樣才能開發個等同於 ChatGPT 的開源軟體。還沒有行動的小夥伴這次參考示例來了,下面我們將要介紹的這個專案(PaLM + RLHF)就實現了這樣的功能。

專案地址:https://github。com/lucidrains/PaLM-rlhf-pytorch

該專案是在 PaLM 架構之上實施 RLHF(人類反饋強化學習)。基本上等同於 ChatGPT,區別是使用了 PaLM。PaLM 是在谷歌的通用 AI 架構「Pathways」上訓練而成的具有 5400 億引數的大型語言模型。而 RLHF,是 ChatGPT 在 GPT 3。5 系列模型的基礎上,引入「人工標註資料 + 強化學習」(RLHF)來不斷微調預訓練語言模型,旨在讓大型語言模型(LLM)學會理解人類的命令,並學會根據給定的 prompt 給出最優的答案。

想要了解 RLHF 更多內容,可以參考:https://huggingface。co/blog/rlhf

正如網友所說的:「在 AI 領域中,每有一次專項突破,開發者們很快就會復現出一個開源版本。」

不過該專案目前只包含訓練架構和程式碼,沒有預先訓練好的權重。在使用說明上,文件也顯示必須先要訓練 PaLM。

對此也有網友表示擔心,表示:這不是一個開箱即用的專案,還只是一個架構,就像 shell 一樣,需要昂貴的開銷才能訓練完成,沒有機構能夠像谷歌那樣訓練 PaLM。

還有網友表示:「沒有預訓練權重是非常糟糕的,官方至少需要釋放 50% 的稀疏權重,剩下的讓開發者自己訓練,才是最好的選擇。」

不過也有網友表示自己會去嘗試:

下面我們來看看這個專案是如何執行的。

安裝

$ pip install palm-rlhf-pytorch

用法

首先訓練 PaLM,就像任何其他自迴歸 transformer 一樣。

import torchfrom palm_rlhf_pytorch import PaLMpalm = 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 sequencesgenerated = palm。generate(2048) # (1, 2048)

接著使用精選的人類反饋來訓練獎勵模型。在原始論文中,在沒有出現過擬合的情況下,無法從預訓練 transformer 中獲得微調的獎勵模型。專案作者則提供了使用 LoRA 進行微調的選項。

import torchfrom palm_rlhf_pytorch import PaLM, RewardModelpalm = 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 dataseq = 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 responselabels = torch。randint(0, 5, (1,))。cuda()# trainloss = reward_model(seq, prompt_mask = prompt_mask, labels = labels)loss。backward()# after much trainingreward = reward_model(seq, prompt_mask = prompt_mask)

最後將 transformer 和獎勵模型傳遞給 RLHFTrainer。

import torchfrom palm_rlhf_pytorch import PaLM, RewardModel, RLHFTrainer# load your pretrained palmpalm = PaLM( num_tokens = 20000, dim = 512, depth = 12)。cuda()palm。load(‘。/path/to/pretrained/palm。pt’)# load your pretrained reward modelreward_model = RewardModel( palm, num_binned_output = 5)。cuda()reward_model。load(‘。/path/to/pretrained/reward_model。pt’)# ready your list of prompts for reinforcement learningprompts = torch。randint(0, 256, (50000, 512))。cuda() # 50k prompts# pass it all to the trainer and traintrainer = 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 oneanswer = trainer。generate(2048, prompt = prompts[0], num_samples = 10) # (

更多細節內容請參閱原專案。

參考連結:https://twitter。com/rasbt/status/1608133663937495041

開啟App看更多精彩內容

上一篇:每天做好8件事,管住體重和細節,是新版糖尿病診療標準的重點
下一篇:華裔女雙1-3無緣半決賽,前2號種子會師混雙決賽