200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 策略梯度:REINFORCE算法代码详解

策略梯度:REINFORCE算法代码详解

时间:2019-03-05 04:13:52

相关推荐

策略梯度:REINFORCE算法代码详解

算法实现细节解析:

# 计算每一个step的utdef get_ut(self,reward_list, gamma=1.0):for i in range(len(reward_list) - 2, -1, -1):reward_list[i] += gamma * reward_list[i + 1] return np.array(reward_list)

get_ut函数是为了计算 从当前step开始到这个轨迹结束所得到得奖励。并不是用整个轨迹得奖励来代表其中某一步得好坏。

range(len(reward_list) - 2, -1, -1) 是 指 从len(reward_list) - 2开始,到最后一个为止,每次走一步。

def learn(self, transition_dict):obs=paddle.to_tensor(transition_dict['states'],dtype='float32')act=paddle.to_tensor(transition_dict['actions'],dtype='int64')reward=paddle.to_tensor(self.get_ut(transition_dict['rewards'],self.gamma),dtype='float32')act_prob = self.policy_net(obs) # 获取输出动作概率# 采用梯度上升,因此要乘以-1log_prob = paddle.sum(-1.0 * paddle.log(act_prob) * paddle.nn.functional.one_hot(act, act_prob.shape[1]),axis=-1)loss = log_prob * rewardloss = paddle.mean(loss)loss.backward()self.optimizer.step()self.optimizer.clear_grad()

log_prob里面说因为采用梯度上升,所以要乘以-1,是因为 通常都是求最小化,而在这个地方求得是最大化,为了反一下,所以乘以了-1.

参考连接

OpenAI Gym 经典控制环境介绍——CartPole(倒立摆)

【强化学习】REINFORCE算法

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。