个人笔记-强化学习中On-policy和Off-policy的区别

概念理解

On-policy(在线策略、同策略):当前策略与环境交互,收集到一些数据。更新网络参数时只用这部分数据(因此无法使用经验回放)

 Off-policy(离线策略,异策略):更新网络参数时,可以用到任何经验数据,如储存的过去策略得到的数据,此处“异”即表示 获得数据时所使用的策略 和 目标得到的策略 不同(因此可以用经验回放)

参考强化学习里的 on-policy 和 off-policy 的区别

  • 关键区别

这二者之间的区别,不在于选择action的方式,而在于更新网络参数的数据的收集方式。参考Reddit上的这个讨论。
理论上来说,on-policy的算法只能使用当前正在优化的policy生成的数据来进行训练,当你使用一条(state, action, reward, new_state)的数据对policy网络的参数进行了更新之后,这个“正在优化”的policy立即就变了,于是,你就要用它来生成新的一条数据,再继续进行后面的训练,并且你刚才用于训练的那条数据已经“过时”了,不能再使用,需要丢弃掉。
有人会说这种做法是不是太低效了?于是在实践中,经常是每收集了N条数据才会去更新一次,这N条数据是一个batch,并且这N条数据是用同一个policy生成的。
有人还会说,这好像不对啊?!理论上,用当前的policy生成了一条数据,就应该更新一次policy网络的参数,然后policy网络就变了,此时才能再生成第2条数据,依此类推,当生成到第N条数据的时候,policy网络都不知道变成什么鬼样子了,而如果我们用同一个policy连续生成N条数据才去更新一次policy网络的参数,这时的policy网络能跟一条条更新方式相比吗?确实,这两种方式表面上看起来policy相差会很大,但是,有其他的一些技术可以从数学上保证、并且也从实际效果上证明了:每N条数据才更新一次policy网络的方式,和每一条数据就更新一次policy网络的方式,没有多大区别,可行!
正因为这二者没有多大区别,我们仍然可以把每N条数据才更新一次policy网络、看似用“已经过时”的数据来更新policy网络的方法,叫做on-policy的方法——尽管它在实践操作的时候,看上去非常像off-policy的方法。

代码实现

占个坑待补 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值