为什么ChatGPT等AI应用使用强化学习而不是监督学习

news/2024/11/21 2:36:32/

我也是无意中入了强化学习的领域,因为我原本研究云计算的任务调度,我发现近几年的工作都是基于强化学习的。所以感觉强化学习一定是大趋势,恰好现在ChatGPT这些人工智能产品出现,更是助推了强化学习的风。那么为什么ChatGPT使用强化学习而非监督学习,其实监督学习在图像识别等等人工智能应用中已经非常成熟了。

我的理解是:监督学习只会墨守成规,而强化学习会创新,如乔布斯总是说“用户不知道自己想要什么,我们要为其创造出来,引导其使用”,这一点从乔布斯引导用户使用鼠标到全触屏手机得到了明显的体现。如果让强化学习智能体按着监督学习的方式去学习,那么将人工智能限定于人类固有的思维当中,在现有的基础上搜索答案,不会产生什么创造性的结果。

而且,人类的答案也并非总是对的,有时候我们也不知道自己想要的是什么,强化学习智能体可以帮我们探索,给出我们意想不到的答案,这就是强化学习的魅力。

继续代码规划之模型存储和重复加载

我们学习的时候要注意一点,要在懂和速度之间进行平衡,有许多东西是工具,不是我们的目标本身,我们会用即可,不要深究,你要是深究就会编程一个DAG的深度遍历,永远到不了头,而且严重偏离目标。比如我们不必了解pytorch内部是如何工作的,只要会用即可,我们不必知道为什么模型要存储成.pkl文件,你只要会存会取即可

import torch
import matplotlib.pyplot as pltx=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
y=x.pow(2)+0.2*torch.rand(x.size())def save():#定义网络net1=torch.nn.Sequential(torch.nn.Linear(1,10),torch.nn.ReLU(),torch.nn.Linear(10,1))#优化器optimizer=torch.optim.SGD(net1.parameters(),lr=0.1)#定义损失函数loss_f=torch.nn.MSELoss()#开训for i in range(100):prediction=net1(x)loss=loss_f(prediction,y)optimizer.zero_grad()loss.backward()optimizer.step()#OK了#打印结果,绘图plt.figure(1,figsize=(10,3))plt.subplot(131)plt.title('Title')plt.scatter(x.data.numpy(),y.data.numpy())plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)#存储学习好的网络torch.save(net1,'net.pkl')torch.save(net1.state_dict(),'net_params.pkl')#重新加载网络函数
def restore_net():net2=torch.load('net.pkl')prediction=net2(x)#绘制结果plt.subplot(132)plt.title('net2')plt.scatter(x.data.numpy(),y.data.numpy())#绘制散点图plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)#重新加载模型的参数
def restore_netparams():#如果加载模型参数,就得先建立一个神经网络模型,再赋值net3=torch.nn.Sequential(torch.nn.Linear(1,10),torch.nn.ReLU(),torch.nn.Linear(10,1))#建参数复制net3.load_state_dict(torch.load('net_params.pkl'))prediction=net3(x)#绘制结果plt.subplot(133)plt.title('nets3')plt.scatter(x.data.numpy(),y.data.numpy())plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)plt.show()save()restore_net()restore_netparams()

注意,要多次运行才会有效果,因为我没有设置内部循环
在这里插入图片描述

然后再来试试批量训练的效果

import torch
import torch.utils.data as Datatorch.manual_seed(1)batch_sizes=5
#通过torch.linspace函数创建了两个大小为10的张量x和y,分别代表输入特征和目标值。
x=torch.linspace(1,10,10)
y=torch.linspace(10,1,10)#组成数据集
torch_dataset=Data.TensorDataset(x,y)
#批量加载数据
loader=Data.DataLoader(dataset=torch_dataset,batch_size=batch_sizes,shuffle=True,num_workers=2)#这怎么有点类似spark等大数据引擎的计算机制def show_batch():for i in range(3):for step,(batch_x,batch_y) in enumerate(loader):print('Epoch: ', i, '| Step: ', step, '| batch x: ',batch_x.numpy(), '| batch y: ', batch_y.numpy())if __name__ == '__main__':show_batch()

然后是不同优化器的效果

import torch
import torch.utils.data as Data
import torch.nn.functional as F
import matplotlib.pyplot as pltLR = 0.01
BATCH_SIZE = 32
EPOCH = 12x=torch.unsqueeze(torch.linspace(-1,1,1000),dim=1)
y=x.pow(2)+0.1*torch.normal(torch.zeros(*x.size()))plt.scatter(x.data.numpy(),y.data.numpy())
plt.show()#加载数据
torch_dataset=Data.TensorDataset(x,y)
loader=Data.DataLoader(dataset=torch_dataset,batch_size=BATCH_SIZE,shuffle=True,num_workers=2)#定义神经网络
class Net(torch.nn.Module):def __init__(self):super(Net, self).__init__()self.hidden=torch.nn.Linear(1,20)self.output=torch.nn.Linear(20,1)def forward(self,x):x=F.relu(self.hidden(x))x=self.predict(x)return xif __name__ == '__main__':# different netsnet_SGD = Net()net_Momentum = Net()net_RMSprop = Net()net_Adam = Net()nets = [net_SGD, net_Momentum, net_RMSprop, net_Adam]# different optimizersopt_SGD = torch.optim.SGD(net_SGD.parameters(), lr=LR)opt_Momentum = torch.optim.SGD(net_Momentum.parameters(), lr=LR, momentum=0.8)opt_RMSprop = torch.optim.RMSprop(net_RMSprop.parameters(), lr=LR, alpha=0.9)opt_Adam = torch.optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9, 0.99))optimizers=[opt_SGD,opt_Momentum,opt_RMSprop,opt_Adam]loss_f=torch.nn.MSELoss()loss_his=[[],[],[],[]]#训练for i in range(EPOCH):print("epoch:",i)for step,(b_x,b_y) in enumerate(loader):for net ,opt,l_his in zip(nets,optimizers,loss_his):predict=net(b_x)loss=loss_f(predict,b_y)opt.zero_grad()loss.backward()opt.step()l_his.append(loss.data.numpy())#绘制不同优化器的损失函数值labels=['SGD', 'Momentum', 'RMSprop', 'Adam']for i,l_his in enumerate(loss_his):plt.plot(l_his,label=labels[i])plt.legend(loc='best')plt.xlabel('xsteps')plt.ylabel('loss')plt.ylim(0,0.2)plt.show()

在这里插入图片描述


http://www.ppmy.cn/news/958788.html

相关文章

RLHF | 想训练ChatGPT?先来看看强化学习+语言模型吧(附源码)

每天给你送来NLP技术干货! 作者简介 作者:何枝 原文:https://zhuanlan.zhihu.com/p/595116794 排版:关于NLP那些你不知道的事 随着最近 ChatGPT 的大火,越来越多人开始关注其中用到的 RLHF(Reinforcement L…

模型训练核心:ChatGPT 中的 RLHF 人工反馈强化学习模式

目录 ChatGPT 的强化学习原理 Step0:预训练一个大规模语言模型 Step1:训练监督模型 SFT

如何利用强化学习算法提高ChatGPT的智能程度和学习效率?

Chatgpt | Chat | Gpt | 小智Ai | Chat小智 | Gpt小智 | ChatGPT小智Ai | GPT小智 | GPT小智Ai | Chat小智Ai 丨 近年来,随着深度学习的发展和应用,对话系统在语音识别、自然语言理解、对话生成等方面取得了重要进展。然而,对话系统的智能程…

如何利用ChatGPT-4完成一篇爆款引流文章

ChatGPT4已经来了,今天小编就带大家学习学习,如何利用ChatGPT4完成一篇爆款引流的文章;本文将详细介绍如何使用先进的人工智能语言模型ChatGPT-4来撰写一篇爆款流量文章。我们将探讨选择合适的主题、关键词和结构,以及如何运用Cha…

python-chatgpt自动化批量改写文章-基于gpt-3-5-turbo模型

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、ChatGPT官方文档介绍: ChatGPT API—0.002美元,1000个token。比之前的GPT-3.0,成本直接降低了9…

chat_wordpress:基于 ChatGPT 一个关键词批量自动生成内容,批量自动发布到 WordPress。

chat_wordpress 基于 ChatGPT 一个关键词批量自动生成内容,批量自动发布到 WordPress 。 原理 “道生一,一生二,二生三,三生万物”出自老子的《道德经》第四十二章,是老子的宇宙生成论。 1.根据给定关键词&#xf…

ChatGPT自动生成发布原创文章seo营销系统开发

ChatGPT自动生成发布原创文章seo营销系统开发 注:此系统性质为,依据你设置关键词类(你要推广的行业关键词,如我们的关键词可为“小程序开发”),然后系统自动生成发布海量原创文章,以达到搜索引擎收录seo目…

chatgpt如何自动发布原创文章(火影智能AI文章伪原创)

ChatGPT作为一个基于 GPT-3.5 接口的AI机器人,并不能自动发布原创文章,它只能在创建和生成文章的过程中提供帮助。 要自动发布原创文章,需要编写脚本或使用可编程自动化工具,将ChatGPT生成的文章与发布平台进行连接。以下是一个简…