当前位置: 首页 > 科技观察

够快!爆款ChatGPT等价开源项目来了,网友:担心跑不起来

时间:2023-03-14 12:34:15 科技观察

最近OpenAI开发的AI聊天机器人程序ChatGPT风靡各大AI社区,大家对它的热情有增无减。释放它的潜力。一些研究人员坐不住了,开始琢磨如何开发一款相当于ChatGPT的开源软件。对于那些还没有采取行动的人,这里有一个参考示例。我们下面要介绍的项目(PaLM+RLHF)就是实现了这样的功能。项目地址:https://github.com/lucidrains/PaLM-rlhf-pytorch该项目在PaLM架构之上实现了RLHF(ReinforcedLearningwithHumanFeedback)。基本等同于ChatGPT,区别在于使用了PaLM。PaLM是一个拥有5400亿个参数的大规模语言模型,在Google的通用AI架构“Pathways”上进行训练。RLHF基于ChatGPT的GPT3.5系列模型,引入“人工标注数据+强化学习”(RLHF)不断微调预训练语言模型,旨在让大语言模型(LLM)学会理解人类的命令,并学会根据给定的提示给出最优答案。了解更多RLHF可以参考:https://huggingface.co/blog/rlhf正如网友所说:“在AI领域,每次有特别的突破,开发者很快就会重新出现。一个开源的版本。”然而,该项目目前只包含训练架构和代码,没有预训练的权重。在使用说明中,文档中也说明了必须先训练PaLM。也有网友对此表示担忧,称:这不是一个开箱即用的项目,只是一个架构。与shell一样,它需要昂贵的培训才能完成。没有任何组织可以像Google那样培训PaLM。有网友表示:“没有预训练权重是非常糟糕的,官方至少需要放出50%的稀疏权重,剩下的是开发者自己训练的最佳选择。”不过也有网友表示要试试:让我们看看这个项目是如何运作的。安装$pipinstallpalm-rlhf-pytorch用法首先像任何其他自回归变压器一样训练PaLM。importtorchfrompalm_rlhf_pytorchimportPaLMpalm=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()#经过多次训练,您现在可以生成序列generated=palm.generate(2048)#(1,2048)然后使用精选的人类反馈来训练奖励模型。在原始论文中,不可能在没有过度拟合的情况下从预训练的transformer获得微调的奖励模型。项目作者提供了使用LoRA进行微调的选项。importtorchfrompalm_rlhf_pytorchimportPaLM,RewardModelpalm=PaLM(num_tokens=20000,dim=512,depth=12,causal=False)reward_model=RewardModel(palm,num_binned_output=5#sayratingfrom1to5).cuda()#模拟数据序列=torch.randint(0,20000,(1,1024)).cuda()prompt_mask=torch.zeros(1,1024).bool().cuda()#sequence哪部分是prompt,哪部分是responselabels=torch.randint(0,5,(1,)).cuda()#trainloss=reward_model(seq,prompt_mask=prompt_mask,labels=labels)loss.backward()#经过多次训练reward=reward_model(seq,prompt_mask=prompt_mask)最后将transformer和奖励模型传给RLHFTrainer。importtorchfrompalm_rlhf_pytorchimportPaLM,RewardModel,RLHFTrainer#加载你的预训练palmpalm=PaLM(num_tokens=20000,dim=512,depth=12).cuda()palm.load('./path/to/pretrained/palm.pt')#loadyourpretrainedrewardmodelreward_model=RewardModel(palm,num_binned_output=5).cuda()reward_model.load('./path/to/pretrained/reward_model.pt')#准备好你的强化学习提示列表prompts=torch.randint(0,256,(50000,512)).cuda()#50k提示#将其全部传递给训练器和traintrainer=RLHFTrainer(palm=palm,reward_model=reward_model,prompt_token_ids=prompts)trainer.train(num_episodes=50000)#然后,如果成功...#生成10个样本并使用奖励模型返回最好的oneanswer=trainer.generate(2048,prompt=prompts[0],num_samples=10)#(<=2048,)