强化学习学习笔记2-PPO

本文介绍了强化学习中的ProximalPolicyOptimization(PPO)算法,包括其核心思想,如何通过克隆体收集数据并训练母体,以及利用重要性采样、KL散度和Clip限制来控制策略更新。作者通过观看视频学习后,发现PPO在解决onpolicy方法效率低下的问题上颇为有效。
摘要由CSDN通过智能技术生成

强化学习学习笔记2-PPO

摘要

看来还是看大师的讲解最有效,自己看了一大堆网文也没搞懂ppo。看李宏毅的视频一下就懂了。。

PPO大致思路

在PG方法中,构建了一个智能体pi_theta和环境互动,收集到了一大堆trajectory或者说一大堆(S_t,a_t)后,即可通过最大化pi_theta的收益来优化模型。
而PG是一种on policy方法,跑的很慢,因为收集了一大堆资料后,只能训练模型一轮然后就得重新收集资料(模型参数已经变了,梯度就得重新算了)。
所以PPO就考虑每次收集资料的时候,用一个克隆体pi_theta’来收集训练资料,而用克隆体收集到的资料来训练母体。
为了完成这个目标,就需要用到很多的策略,如用重要性采样来抹平克隆体和母体之间的差异;在优化目标中加入KL散度信息来减小克隆体和母体之间的差异,或者直接对差异进行clip限制。
同时,为了尽速训练。PPO还使用了一个神经网络critic用来计算收益值。

整体流程

advantage = f# 一个用于计算当前回报的函数,可以是critic或者别的
PI = NN()
env
buffer # 用于存储数据
S = env.reset()
for i in range(NUM_EPOSIDES):
	# 收集数据
	PI_ = PI.clone()
	logits_ = PI_(S)
	a = argmax(logits_)
	r,S_ = env.setp(S)
	buffer.append([S,a,r,S_])
	
	# 进行训练
	for j in range(NUM_steps):
		S,a,r,S_ = buffer.sample() # 这里取出来是一个batch的数据
		logits_ = PI_(S)
		logits = PI(S)
		
		#### 2. 重要性采样,用克隆体的数据训母体 ####
		J = ( (logits[a]/logits_[a])*advantage(a) ) # 未经修正的目标函数
		
		#### 3. 目标使得PI和PI_之间差距不要太大 ####
		# J = J - beta * KL(PI,PI_) # 第一种方案,用PI行为间的KL散度进行约束
		J = min( J, clip(J, 1-epi, 1+ epi) )# 第二种方案,直接使得J不要太小,不要太大。这里对advantage正负进行分情况讨论就能理解了
		#### 目标使得PI和PI_之间差距不要太大 ####		

		loss = -J
		loss.backward()
	# ... 再做一些辅助的工作
	
	
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值