进阶篇---PPO代码逐行分析

进阶篇—PPO代码逐行分析

一、TRPO、PPO、DPPO

PG (Policy gradient)
最常用的策略梯度估计其表达形式如下
在这里插入图片描述
TRPO(Trust Region Policy Optimization)
这是一种具有单调递增性质的PG算法,构造了一个带有约束的目标函数
在这里插入图片描述
使用一个惩罚项来替代TRPO的约束项,从而把约束优化问题转换为无约束优化问题
在这里插入图片描述
PPO(Proximal Policy Optimization)
PPO有两种版本,一是使用Clipped Surrogate Objective
在这里插入图片描述
在这里插入图片描述
另一种是Adaptive KL Penalty Coefficient
在这里插入图片描述
值得注意的是这里的超参数初始值并不重要,因为其会很快的自适应调整。
DPPO(Distributed Proximal Policy Optimization)
DPPO是一种同步并行PPO算法。DPPO把网络参数存在到一个服务器上,并且会在每一个gradient step后同步地更新workers的参数。

二、算法流程

首先是一个类似AC中的多任务损失函数
在这里插入图片描述
S S S为交叉熵损失,用来提高策略探索能力, L t V F L_t^{VF} LtVF ( V θ ( s t ) − V t t a r g ) 2 (V_ \theta(s_t)-V_t^{targ})^2 (Vθ(st)Vttarg)2
A3C在每一次迭代中,都要采集T个samples(T远远小于回合长度),计算T个n-step return,然后使用这T个数据更新评价网络:
在这里插入图片描述
PPO也使用了相同的思路,但是使用GAE实现
在这里插入图片描述
最后,整个算法流程如下
在这里插入图片描述

三、代码

逐行分析写在注释上了,有需要的自取我的GitHub

  • 8
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyTorch PPO(Proximal Policy Optimization)是一种常用的强化学习算法,用于训练策略模型。下面是一个简单的PyTorch PPO代码示例: ```python import torch import torch.nn as nn import torch.optim as optim import gym # 定义策略网络 class Policy(nn.Module): def __init__(self, input_dim, output_dim): super(Policy, self).__init__() self.fc = nn.Linear(input_dim, 64) self.actor = nn.Linear(64, output_dim) self.critic = nn.Linear(64, 1) def forward(self, x): x = torch.relu(self.fc(x)) action_probs = torch.softmax(self.actor(x), dim=-1) state_value = self.critic(x) return action_probs, state_value # 定义PPO算法 class PPO: def __init__(self, input_dim, output_dim): self.policy = Policy(input_dim, output_dim) self.optimizer = optim.Adam(self.policy.parameters(), lr=0.001) def select_action(self, state): state = torch.FloatTensor(state) action_probs, _ = self.policy(state) action_dist = torch.distributions.Categorical(action_probs) action = action_dist.sample() return action.item() def update(self, states, actions, log_probs, returns, advantages): states = torch.FloatTensor(states) actions = torch.LongTensor(actions) log_probs = torch.FloatTensor(log_probs) returns = torch.FloatTensor(returns) advantages = torch.FloatTensor(advantages) # 计算策略损失和价值损失 action_probs, state_values = self.policy(states) dist = torch.distributions.Categorical(action_probs) new_log_probs = dist.log_prob(actions) ratio = torch.exp(new_log_probs - log_probs) surr1 = ratio * advantages surr2 = torch.clamp(ratio, 1-0.2, 1+0.2) * advantages policy_loss = -torch.min(surr1, surr2).mean() value_loss = nn.MSELoss()(state_values, returns.unsqueeze(1)) # 更新策略网络 self.optimizer.zero_grad() loss = policy_loss + 0.5 * value_loss loss.backward() self.optimizer.step() # 创建环境和PPO对象 env = gym.make('CartPole-v1') input_dim = env.observation_space.shape output_dim = env.action_space.n ppo = PPO(input_dim, output_dim) # 训练PPO模型 max_episodes = 1000 max_steps = 200 for episode in range(max_episodes): state = env.reset() states, actions, log_probs, rewards = [], [], [], [] for step in range(max_steps): action = ppo.select_action(state) next_state, reward, done, _ = env.step(action) states.append(state) actions.append(action) log_probs.append(torch.log(ppo.policy(torch.FloatTensor(state))[action])) rewards.append(reward) state = next_state if done: break # 计算回报和优势值 returns = [] advantages = [] G = 0 for r in reversed(rewards): G = r + 0.99 * G returns.insert(0, G) returns = torch.tensor(returns) returns = (returns -9) for t in range(len(rewards)): advantages.append(returns[t] - ppo.policy(torch.FloatTensor(states[t]))) advantages = torch.tensor(advantages) # 更新策略网络 ppo.update(states, actions, log_probs, returns, advantages) # 使用训练好的模型进行测试 state = env.reset() total_reward = 0 while True: env.render() action = ppo.select_action(state) state, reward, done, _ = env.step(action) total_reward += reward if done: break print("Total reward:", total_reward) ``` 这个示例代码使用PyTorch实现了一个简单的PPO算法,用于在CartPole-v1环境中训练一个策略模型。代码中包含了策略网络的定义、PPO算法的实现以及训练和测试的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值