莫烦强化学习笔记整理(六) Policy Gradients

实现代码链接: 7_Policy_gradient_softmax.

1、Policy Gradients基本算法

(1)与Value-based 方法的区别

Policy Gradients区别于Value-based 方法(Q-learning和Sarsa等)最大的不同是:输出的不是 action 的 value, 而是具体的 action。

Policy Gradients最大的一个优势是: 输出的这个 action 是一个连续的值, 可以在一个连续分布上选取 action。

Policy Gradients的核心思想:
假设现在状态为state,可选行为有A,B两种,通过现有的神经网络分析,选择了A行为,直接进行反向传递增加下次A行为被选的几率,此时reward反馈A行为不好,那么动作可能性增加的幅度随之被减低;同理如果选择了B行为,直接进行反向传递增加下次B行为被选的几率,此时reward反馈B行为很好,那么动作可能性增加的幅度随之被提高。

(2)REINFORCE 基本算法

REINFORCE是一种基于整条回合数据的更新
在这里插入图片描述
delta(log(Policy(s,a))*V) 表示在 状态 s 对所选动作 a 的吃惊度, Policy(s,a) 概率越小, 反向的 log(Policy(s,a)) (即 -log(p)) 越大. 如果 Policy(s,a) 很小的情况下, V很大, 那 -delta(log(Policy(s, a))*V) 就更大, 表示更吃惊。

Policy(s,a) 概率小表示选了一个不常选的动作, V大指的是得到了一个好的 reward, 此时需要对参数进行大幅修改。

(3)主要更新循环代码

Policy Gradients是计算机跑完一整个回合才更新一次, 之前的 Qleanring 等是在回合中每一步都可以更新参数。

for i_episode in range(3000):

    observation = env.reset()

    while True:
        if RENDER: env.render()

        action = RL.choose_action(observation)

        observation_, reward, done, info = env.step(action)

        RL.store_transition(observation, action, reward)    # 存储这一回合的 transition

        if done:
            ep_rs_sum = sum(RL.ep_rs)

            if 'running_reward' not in globals():
                running_reward = ep_rs_sum
            else:
                running_reward = running_reward * 0.99 + ep_rs_sum * 0.01
            if running_reward > DISPLAY_REWARD_THRESHOLD: RENDER = True     # 判断是否显示模拟
            print("episode:", i_episode, "  reward:", int(running_reward))

            vt = RL.learn() # 学习, 输出 vt

            if i_episode == 0:
                plt.plot(vt)    # plot 这个回合的 vt
                plt.xlabel('episode steps')
                plt.ylabel('normalized state-action value')
                plt.show()
            break

        observation = observation_

2、思维决策

(1)Policy Gradients代码主结构

class PolicyGradient:
    # 初始化 (有改变)
    def __init__(self, n_actions, n_features, learning_rate=0.01, reward_decay=0.95, output_graph=False):

    # 建立 policy gradient 神经网络 (有改变)
    def _build_net(self):

    # 选行为 (有改变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值