强化学习——策略梯度之Reinforce

这篇具有很好参考价值的文章主要介绍了强化学习——策略梯度之Reinforce。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、策略梯度介绍

相比与DQN,策略梯度方法的区别主要在于,我们对于在某个状态下所采取的动作,并不由一个神经网络来决定,而是由一个策略函数来给出,而这个策略函数的目的,就是使得最终的奖励的累加和最大,这也是训练目标,所以训练会围绕策略函数的梯度来进行。

2、策略函数

以Reinforce算法为例,

假设我们的目标是最大化累积奖励的期望,即最大化以下形式的目标函数J(θ):

J(θ) = E[∑[t=0 to T] (R_t)]

其中,E表示对所有可能的轨迹(trajectories)进行期望,R_t是在时间步t获得的即时奖励。我们的策略函数可以表示为π(a|s;θ),其中θ表示策略函数的参数。我们希望通过调整θ来最大化J(θ),因此我们需要计算目标函数J(θ)关于参数θ的梯度。

具体地,我们将目标函数J(θ)的梯度表示为:

∇θ J(θ) = E[∑[t=0 to T] (∇θ log π(a_t|s_t;θ) * R_t)]

在这里,∇θ表示关于参数θ的梯度,log π(a_t|s_t;θ)表示策略函数在状态s_t下选择动作a_t的对数概率,R_t表示在时间步t获得的即时奖励。

接下来的关键是将整个目标函数的期望转换为对每个轨迹的期望,并使用蒙特卡洛采样来估计这个期望。我们通过采样多个轨迹,计算每个轨迹的梯度,然后取所有轨迹的梯度的平均值作为对目标函数梯度的估计。

为了做到这一点,我们引入累积回报G_t,表示从时间步t开始的累积奖励。G_t的定义如下:

G_t = R_t + γ * R_{t+1} + γ^2 * R_{t+2} + ... + γ^(T-t) * R_T

其中,γ是折扣因子,用于调整未来奖励的重要性。

补充:蒙特卡洛采样法,当我们要计算这个目标期望时是非常困难的,此时我们通过大量采样的方法估算出期望值,这就是蒙特卡洛采样法。其次,这里的回报G不仅仅与当前得到的reward有关,也和只会可以得到的reward有关。

现在,我们可以将目标函数的梯度重写为:

∇θ J(θ) = E[∑[t=0 to T] (∇θ log π(a_t|s_t;θ) * G_t)]

这样,我们就将目标函数的期望转换为了对每个轨迹的期望,然后通过蒙特卡洛采样来估计这个期望。在实际应用中,我们会使用多个样本轨迹来计算梯度的样本均值,并使用梯度上升法来更新策略函数的参数θ,以优化目标函数J(θ)。

以下是实现该数学公式的代码块:

#每往前一步,都衰减0.02,如何加上当前步的反馈
reward_sum *= 0.98
reward_sum += rewards[i]

#重新计算动作概率
state = torch .FloatTensor(states[i]).reshape(1,4)
prob = model(state)
prob = prob[0,actions[i]]

loss = -prob.log()*reward_sum

loss.backward(retain_graph=True)
注意这里的神经网络返回的是动作的概率分布

3、仍以平衡车为例具体实现代码

import gym
from matplotlib import pyplot as plt
import torch
import random
from IPython import display
import numpy as np

#创建环境
env = gym.make('CartPole-v1')
env.reset()

#打印游戏
def show():
plt.imshow(env.render(mode='rgb_array'))
plt.axis('off')
plt.show()
#show()

#计算动作模型,也就是真正需要使用的模型
model = torch.nn.Sequential(
torch.nn.Linear(4,128),
torch.nn.ReLU(),
torch.nn.Linear(128,2),
torch.nn.Softmax(dim=1),
)


def get_action(state):
state = torch.FloatTensor(state).reshape(1, 4)
prob = model(state)

prob_normalized = prob[0].tolist()
prob_sum = sum(prob_normalized)
prob_normalized = [p / prob_sum for p in prob_normalized]

action = np.random.choice(range(2), p=prob_normalized, size=1)[0]

return action

def get_Date():
states = []
rewards = []
actions = []

state = env.reset()

over = False
while not over:
action = get_action(state)
next_state,reward,over,_ = env.step(action)

states.append(state)
rewards.append(reward)
actions.append(action)

state = next_state

return states,rewards,actions

def test(play):
state = env.reset()

reward_sum = 0

over = False
while not over:
action = get_action(state)

state,reward,over,_ = env.step((action))
reward_sum +=reward

if play and random.random()<0.2:
display.clear_output(wait=True)
show()
plt.close()
return reward_sum

def train():
optimizer = torch.optim.Adam(model.parameters(),lr=1e-3)

#玩N局每局游戏训练一次
for epoch in range(1000):
states,rewards,actions = get_Date()

optimizer.zero_grad()

#反馈和
reward_sum = 0

#从最后一步算起
for i in reversed(range(len(states))):

#每往前一步,都衰减0.02,如何加上当前步的反馈
reward_sum *= 0.98
reward_sum += rewards[i]

#重新计算动作概率
state = torch .FloatTensor(states[i]).reshape(1,4)
prob = model(state)
prob = prob[0,actions[i]]

loss = -prob.log()*reward_sum

loss.backward(retain_graph=True)

optimizer.step()

if epoch%100==0:
test_result = sum([test(play=False) for _ in range(10)])/10
print(epoch,test_result)



train()
test(play=True)文章来源地址https://www.toymoban.com/news/detail-623609.html

到了这里,关于强化学习——策略梯度之Reinforce的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习深度确定性策略梯度(DDPG)笔记

    深度确定性策略梯度(Deep Deterministic Policy Gradient,DDPG)是一种用于解决连续动作空间的强化学习算法。它结合了确定性策略梯度方法和深度神经网络。 DDPG算法的基本思想是通过两个神经网络来近似值函数和策略函数。其中,值函数网络(critic)用于估计当前状态-动作对的

    2024年02月16日
    浏览(36)
  • 【强化学习入门】二.强化学习的基本概念:状态、动作、智能体、策略、奖励、状态转移、轨迹、回报、价值函数

    超级玛丽游戏中,观测到的这一帧画面就是一个 状态(State) 。 玛丽做的动作:向左、向右、向上即为 动作(Action) 。 动作是由谁做的,谁就是 智能体(Agent) 。自动驾驶中,汽车就是智能体;机器人控制中,机器人就是智能体;超级玛丽游戏中,玛丽就是智能体。 策略

    2024年02月03日
    浏览(48)
  • 【操作系统和强化学习】1.内存管理策略

    CPU的调度可以提高CPU的利用率和计算机的响应用户的速度。为了改进性能,应该将多个进程保存在内存中。也就是说必须共享内存。 本文讨论的是如管理内存。 内存是现代计算机运行的核心,由一个很大的字节数组来组成,每个字节都有各自的地址。 CPU根据程序计数器的值

    2024年02月02日
    浏览(78)
  • (9-5)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):深度强化学习算法模型

    本项目的深度强化学习算法的是基于Stable Baselines实现的,Stable Baselines是OpenAI Baselines的一个分支,经过了重大的结构重构和代码清理工作。另外,在库FinRL中包含了经过调优的标准深度强化学习算法,如DQN、DDPG、多智能体DDPG、PPO、SAC、A2C和TD3,并且允许用户通过调整这些深度

    2024年01月25日
    浏览(52)
  • ChatGPT强化学习大杀器——近端策略优化(PPO)

    近端策略优化 ( P roximal P olicy O ptimization)来自 Proximal Policy Optimization Algorithms (Schulman et. al., 2017)这篇论文,是当前最先进的强化学习 (RL) 算法。这种优雅的算法可以用于各种任务,并且已经在很多项目中得到了应用,最近火爆的ChatGPT就采用了该算法。 网上讲解ChatGPT算法

    2024年01月21日
    浏览(50)
  • 深度强化学习的变道策略:Harmonious Lane Changing via Deep Reinforcement Learning

    偏理论,假设情况不易发生 多智能体强化学习的换道策略,不同的智能体在每一轮学习后交换策略,达到零和博弈。 和谐驾驶仅依赖于单个车辆有限的感知结果来平衡整体和个体效率,奖励机制结合个人效率和整体效率的和谐。 自动驾驶不能过分要求速度性能, 考虑单个车

    2024年01月17日
    浏览(42)
  • 强化学习介绍

    监督学习 :让系统在 有标签训练集 上按照 每个样本对应的标签 推断出 相应的反馈机制 ,进而 在未知标签上能够计算一个尽可能正常的结果 。 无监督学习 :让系统在 无标签训练集 上发现隐藏的结构,自动对输入资料进行分类或分群。 强化学习 :是除监督学习和无监督

    2024年02月17日
    浏览(29)
  • 强化学习分类与汇总介绍

    强化学习把学习看作试探评价过程,Agent选择一个动作用于环境,环境接受该动作后状态发生变化,同时产生一个强化信号(奖或惩)反馈给Agent,Agent根据强化信号和环境当前状态再选择下一个动作,选择的原则是使受到正强化(奖)的概率增大。选择的动作不仅影响立即强化值,

    2023年04月09日
    浏览(27)
  • 强化学习从基础到进阶-案例与实践[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代

    【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍 :【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项

    2024年02月15日
    浏览(135)
  • (9-3)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):数据预处理

    1.1.6  数据预处理 数据预处理是训练高质量机器学习模型的关键步骤,在这一步需要检查缺失数据并进行特征工程,以将数据转换为适合模型训练的状态。本项目的数据预处理江湾城以下工作: 添加技术指标:在实际交易中,需要考虑各种信息,例如历史股价、当前持仓股票

    2024年01月25日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包