强化学习(三)--Reinforce算法


前两节的Q-learning和DQN算法都是强化学习中的Value-based的方法,它们都是先经过Q值来选择动作,而在强化学习中还有另外一大类算法:Policy-based。而在Policy-based算法中最著名的就是Policy Gradient,而Policy Gradient算法又可以根据更新方式分为两大类:

  • MC更新方法:Reinfoce算法;
  • TD更新方法:Actor-Critic算法;

1. Reinforce算法

详细的算法介绍还是推荐科老师的课程(公开课地址),以及李宏毅老师的Policy Gradient算法课程。

Reinfoce算法是基于MC更新方式的Policy Gradient算法。MC更新方式是指每完成一个episode才进行算法的更新,它是基于策略梯度的一种算法,策略梯度算法是指先找到一个评价指标,然后利用随机梯度上升的方法来更新参数使评价指标不断的上升。随机梯度上升算法公式如下:
在这里插入图片描述
对于式中 q 的不同改进形成了各种算法,而在Reinfoce算法中则是利用未来总收益Gt来代替q值,表示t步骤后回报的总和,因此Reinfoce的算法公式如下:
在这里插入图片描述
其中,如果 Gt 大于零,参数更新的方向会增加它在当前状态的概率。意思就是如果回报是有利的,就增加这个动作出现的概率。并且回报越大,梯度更新的幅度越大,概率增加的也就越大。它的算法伪代码如下:
在这里插入图片描述

2. Reinforce算法的代码实现

这里使用的环境是gym中的 ‘CartPole-v0’,Reinforce算法的整体框架如下图:

  • Net类:神经网络的搭建;
  • RF类:Reinfoce算法的主要更新步骤和动作的选取函数;
  • test_episode函数:测试算法效果时的函数;
  • main函数:主函数。
    在这里插入图片描述

2.1 Main函数的实现

主函数主要实现 run episode的过程,首先定义RF的类,然后进行3000个episode的循环,每个episode最多进行300个step,要注意的是:

  • 每个episode中的每个step与环境进行交互的数据都要进行记录 (s,a,r)
  • 每个episode结束后才进行网络的训练;

每100个episode进行一次测试,也就是运行test_episode函数,代码如下:

def main():
    # 初始化RF类
    agent = RF(env)

    # 进行训练
    for episode in range(EPISODE):
        obs = env.reset()
        for step in range(STEP):
            # 与环境的交互
            action = agent.choose_action(obs)
            next_obs,reward,done,_ = env.step(action)
            # 存储一个episode中每个step的s,a,r
            agent.store_transition(obs,action,reward)
            # 进入下一个状态
            obs = next_obs
            # 每个episode结束再进行训练(MC)
            if done:
                agent.learn()
                break
        # 每100个episode进行测试
        if episode % 100 == 0:
            avg
  • 17
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值