太原网站建设搜q479185700,解决wordpress打开慢,wordpress中文模板下载地址,西安住房建设局网站大家好#xff0c;今天和各位分享一下基于策略的深度强化学习方法#xff0c;策略梯度法是对策略进行建模#xff0c;然后通过梯度上升更新策略网络的参数。我们使用了 OpenAI 的 gym 库#xff0c;基于策略梯度法完成了一个小游戏。完整代码可以从我的 GitHub 中获得…大家好今天和各位分享一下基于策略的深度强化学习方法策略梯度法是对策略进行建模然后通过梯度上升更新策略网络的参数。我们使用了 OpenAI 的 gym 库基于策略梯度法完成了一个小游戏。完整代码可以从我的 GitHub 中获得
https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model 1. 基于策略的深度强化学习
针对智能体在大规模离散动作下无法建模的难题在基于值函数的深度强化学习中利用神经网络对 Q 值函数近似估计使深度学习与强化学习得到完美融合。
但是基于值函数的深度强化学习有一定的不足之处
(1) 无法处理连续动作的任务。DQN 系列的算法可以较好地解决强化学习中大规模离散动作空间的任务但在连续动作的任务中难以实现利用深度神经网络对所有状态-动作的 Q 值函数近似表达。
(2) 无法处理环境中状态受到限制的问题。在基于值函数深度强化学习更新网络参数时损失函数会依赖当前状态和下一个状态的值函数当智能体在环境中观察的状态有限或建模受到限制时就会导致实际环境中两个不同的状态有相同的价值函数进而导致损失函数为零出现梯度消失的问题。
(3) 智能体在环境中的探索性能较低。基于值函数的深度强化学习方法中目标值都是从动作空间中选取一个最大价值的动作导致智能体训练后的策略具有确定性而面对一些需要随机策略进行探索的问题时该方法就无法较好地解决。
由于基于值函数的深度强化学习存在上述的一些局限性需要新的方法来解决这些问题于是基于策略的深度强化学习被提出。该方法中将智能体当前的策略参数化并且使用梯度的方法进行更新。 2. 策略梯度法
强化学习中策略梯度算法是对策略进行建模然后通过梯度上升更新策略网络的参数。Policy Gradients 中无法使用策略的误差来构建损失函数因为参数更新的目标是最大化累积奖励的期望值所以策略更新的依据是某一动作对累积奖励的影响即增加使累积回报变大的动作的概率减弱使累积回报变小的动作的概率。
下图代表智能体在当前策略下完成一个回合后构成的状态、动作序列 其中Actor 是策略网络。每个回合结束后的累计回报为每个状态下采取的动作的奖励之和 智能体在环境中执行策略 后状态转移概率 回合累计回报的期望 通过微分公式可以得到累计回报的梯度为 利用累计回报的梯度更新策略网络的参数 其中 为梯度系数。通过上式的策略迭代可得如果智能体在某个状态下采取的动作使累积回报增加网络参数就会呈梯度上升趋势该动作的概率就会增加反之梯度为下降趋势减小该动作的概率。为了防止环境中所有的奖励都是正值实现对于一些不好动作有一个负反馈可以在总回报处减去一个基线。 3. 代码实现
策略函数 是一个概率密度函数用于控制智能体的运动。输入状态 s输出每个动作 a 的概率分布。策略网络是指通过训练一个神经网络来近似策略函数。策略网络的参数 可通过策略梯度算法进行更新从而实现对策略网络 的训练。
伪代码如下 模型构建部分代码如下
# 基于策略的学习方法用于数值连续的问题
import numpy as np
import torch
from torch import nn
from torch.nn import functional as F# ----------------------------------------------------- #
#1构建训练网络
# ----------------------------------------------------- #
class Net(nn.Module):def __init__(self, n_states, n_hiddens, n_actions):super(Net, self).__init__()# 只有一层隐含层的网络self.fc1 nn.Linear(n_states, n_hiddens)self.fc2 nn.Linear(n_hiddens, n_actions)# 前向传播def forward(self, x):x self.fc1(x) # [b, states][b, n_hiddens]x F.relu(x)x self.fc2(x) # [b, n_hiddens][b, n_actions]# 对batch中的每一行样本计算softmaxq值越大概率越大x F.softmax(x, dim1) # [b, n_actions][b, n_actions]return x# ----------------------------------------------------- #
#2强化学习模型
# ----------------------------------------------------- #
class PolicyGradient:def __init__(self, n_states, n_hiddens, n_actions, learning_rate, gamma):# 属性分配self.n_states n_states # 状态数self.n_hiddens n_hiddensself.n_actions n_actions # 动作数self.learning_rate learning_rate # 衰减self.gamma gamma # 折扣因子self._build_net() # 构建网络模型# 网络构建def _build_net(self):# 网络实例化self.policy_net Net(self.n_states, self.n_hiddens, self.n_actions)# 优化器self.optimizer torch.optim.Adam(self.policy_net.parameters(), lrself.learning_rate)# 动作选择根据概率分布随机采样def take_action(self, state): # 传入某个人的状态# numpy[n_states]--[1,n_states]--tensorstate torch.Tensor(state[np.newaxis, :])# 获取每个人的各动作对应的概率[1,n_states]--[1,n_actions]probs self.policy_net(state)# 创建以probs为标准类型的数据分布action_dist torch.distributions.Categorical(probs)# 以该概率分布随机抽样 [1,n_actions]--[1] 每个状态取一组动作action action_dist.sample()# 将tensor数据变成一个数 intaction action.item()return action# 获取每个状态最大的state_valuedef max_q_value(self, state):# 维度变换[n_states]--[1,n_states]state torch.tensor(state, dtypetorch.float).view(1,-1)# 获取状态对应的每个动作的reward的最大值 [1,n_states]--[1,n_actions]--[1]--floatmax_q self.policy_net(state).max().item()return max_q# 训练模型def learn(self, transitions_dict): # 输入batch组状态[b,n_states]# 取出该回合中所有的链信息state_list transitions_dict[states]action_list transitions_dict[actions]reward_list transitions_dict[rewards]G 0 # 记录该条链的returnself.optimizer.zero_grad() # 优化器清0# 梯度上升最大化目标函数for i in reversed(range(len(reward_list))):# 获取每一步的reward, floatreward reward_list[i]# 获取每一步的状态 [n_states]--[1,n_states]state torch.tensor(state_list[i], dtypetorch.float).view(1,-1)# 获取每一步的动作 [1]--[1,1]action torch.tensor(action_list[i]).view(1,-1)# 当前状态下的各个动作价值函数 [1,2]q_value self.policy_net(state)# 获取已action对应的概率 [1,1]log_prob torch.log(q_value.gather(1, action))# 计算当前状态的state_value 及时奖励 下一时刻的state_valueG reward self.gamma * G# 计算每一步的损失函数loss -log_prob * G# 反向传播loss.backward()# 梯度下降self.optimizer.step() 4. 实例演示
下面基于OpenAI 中的 gym 库完成一个移动小车使得杆子竖直的游戏。状态states共包含 4 个动作action有2个向左和向右移动小车。迭代50回合绘制每回合的 return 以及平均最大动作价值 q_max 代码如下
import gym
import numpy as np
import matplotlib.pyplot as plt
from RL_brain import PolicyGradient# ------------------------------- #
# 模型参数设置
# ------------------------------- #n_hiddens 16 # 隐含层个数
learning_rate 2e-3 # 学习率
gamma 0.9 # 折扣因子
return_list [] # 保存每回合的reward
max_q_value 0 # 初始的动作价值函数
max_q_value_list [] # 保存每一step的动作价值函数# ------------------------------- #
#1加载环境
# ------------------------------- ## 连续性动作
env gym.make(CartPole-v1, render_modehuman)
n_states env.observation_space.shape[0] # 状态数 4
n_actions env.action_space.n # 动作数 2# ------------------------------- #
#2模型实例化
# ------------------------------- #agent PolicyGradient(n_statesn_states, # 4n_hiddensn_hiddens, # 16n_actionsn_actions, # 2learning_ratelearning_rate, # 学习率gammagamma) # 折扣因子# ------------------------------- #
#3训练
# ------------------------------- #for i in range(100): # 训练10回合# 记录每个回合的returnepisode_return 0# 存放状态transition_dict {states: [],actions: [],next_states: [],rewards: [],dones: [],}# 获取初始状态state env.reset()[0]# 结束的标记done False# 开始迭代while not done:# 动作选择action agent.take_action(state) # 对某一状态采取动作# 动作价值函数曲线平滑max_q_value agent.max_q_value(state) * 0.005 max_q_value * 0.995# 保存每一step的动作价值函数max_q_value_list.append(max_q_value)# 环境更新next_state, reward, done, _, _ env.step(action)# 保存每个回合的所有信息transition_dict[states].append(state)transition_dict[actions].append(action)transition_dict[next_states].append(next_state)transition_dict[rewards].append(reward)transition_dict[dones].append(done)# 状态更新state next_state# 记录每个回合的returnepisode_return reward# 保存每个回合的returnreturn_list.append(episode_return)# 一整个回合走完了再训练模型agent.learn(transition_dict)# 打印回合信息print(fiter:{i}, return:{np.mean(return_list[-10:])})# 关闭动画
env.close()# -------------------------------------- #
# 绘图
# -------------------------------------- #plt.subplot(121)
plt.plot(return_list)
plt.title(return)
plt.subplot(122)
plt.plot(max_q_value_list)
plt.title(max_q_value)
plt.show()
左图代表每回合的return右图为平均最大动作价值
文章转载自: http://www.morning.fldsb.cn.gov.cn.fldsb.cn http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn http://www.morning.hrzhg.cn.gov.cn.hrzhg.cn http://www.morning.hxpsp.cn.gov.cn.hxpsp.cn http://www.morning.zpkfb.cn.gov.cn.zpkfb.cn http://www.morning.pbmkh.cn.gov.cn.pbmkh.cn http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn http://www.morning.zlnf.cn.gov.cn.zlnf.cn http://www.morning.kpxky.cn.gov.cn.kpxky.cn http://www.morning.knsmh.cn.gov.cn.knsmh.cn http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.jgnst.cn.gov.cn.jgnst.cn http://www.morning.wlstn.cn.gov.cn.wlstn.cn http://www.morning.mkbc.cn.gov.cn.mkbc.cn http://www.morning.hpkgm.cn.gov.cn.hpkgm.cn http://www.morning.lhztj.cn.gov.cn.lhztj.cn http://www.morning.bylzr.cn.gov.cn.bylzr.cn http://www.morning.bpmtg.cn.gov.cn.bpmtg.cn http://www.morning.gnghp.cn.gov.cn.gnghp.cn http://www.morning.hlnys.cn.gov.cn.hlnys.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.bhpjc.cn.gov.cn.bhpjc.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.ttfh.cn.gov.cn.ttfh.cn http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn http://www.morning.phjny.cn.gov.cn.phjny.cn http://www.morning.pjtw.cn.gov.cn.pjtw.cn http://www.morning.bxhch.cn.gov.cn.bxhch.cn http://www.morning.fkflc.cn.gov.cn.fkflc.cn http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn http://www.morning.pnfwd.cn.gov.cn.pnfwd.cn http://www.morning.flncd.cn.gov.cn.flncd.cn http://www.morning.xkzr.cn.gov.cn.xkzr.cn http://www.morning.tqhpt.cn.gov.cn.tqhpt.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.wwjft.cn.gov.cn.wwjft.cn http://www.morning.rbnj.cn.gov.cn.rbnj.cn http://www.morning.hqykb.cn.gov.cn.hqykb.cn http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn http://www.morning.jpjpb.cn.gov.cn.jpjpb.cn http://www.morning.qghjc.cn.gov.cn.qghjc.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.ngpdk.cn.gov.cn.ngpdk.cn http://www.morning.htpjl.cn.gov.cn.htpjl.cn http://www.morning.wmrgp.cn.gov.cn.wmrgp.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.kqqk.cn.gov.cn.kqqk.cn http://www.morning.cgthq.cn.gov.cn.cgthq.cn http://www.morning.jtfsd.cn.gov.cn.jtfsd.cn http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.kqqk.cn.gov.cn.kqqk.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.fsfz.cn.gov.cn.fsfz.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.2d1bl5.cn.gov.cn.2d1bl5.cn http://www.morning.zxhpx.cn.gov.cn.zxhpx.cn http://www.morning.trtdg.cn.gov.cn.trtdg.cn http://www.morning.yprnp.cn.gov.cn.yprnp.cn http://www.morning.gccrn.cn.gov.cn.gccrn.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.litao4.cn.gov.cn.litao4.cn http://www.morning.btlmb.cn.gov.cn.btlmb.cn http://www.morning.rpjyl.cn.gov.cn.rpjyl.cn http://www.morning.fbdtd.cn.gov.cn.fbdtd.cn http://www.morning.fqklt.cn.gov.cn.fqklt.cn http://www.morning.nwllb.cn.gov.cn.nwllb.cn http://www.morning.krrjb.cn.gov.cn.krrjb.cn http://www.morning.btrfm.cn.gov.cn.btrfm.cn http://www.morning.jsphr.cn.gov.cn.jsphr.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.fylqz.cn.gov.cn.fylqz.cn http://www.morning.kfhm.cn.gov.cn.kfhm.cn http://www.morning.ljtwp.cn.gov.cn.ljtwp.cn http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn http://www.morning.lzsxp.cn.gov.cn.lzsxp.cn http://www.morning.llqky.cn.gov.cn.llqky.cn http://www.morning.xgjhy.cn.gov.cn.xgjhy.cn http://www.morning.ktblf.cn.gov.cn.ktblf.cn