【强化学习】关于PPO收敛问题

文章目录


前言

写了好几个版本的PPO,很容易出现的问题。


1.注意两处维度须一致

  • 1.注意两处维度须一致

    markdown 复制代码
    1.surr1 = ratio * adv
    2.returns = adv + value
    又由于ratio = torch.exp(new_log_probs - old_log_probs)得到
    所以须保证log_prob 与 adv的维度一致;adv与value的维度一致
    即:log_prob与adv与value的维度一致
    
    而elegentRL 有此代码,推荐其代码库
    即: assert logprobs.shape == advantages.shape == reward_sums.shape == (buffer_size,)
     
     不然会出现 bx1 + b = bxb 的结构 ,这样就不对了 

2.梯度问题

  • 2.梯度问题

    即:其实就是求导问题:一般来说,目标值不需要梯度 例子,目标值为5, x-5求导为1 ,否则 对x - y 求导 就会报错。

    这里就是old_log,adv, return 不需要梯度。

    与adv 计算相关的value值 也可以有梯度,只要最终adv没有梯度就行。

    特别的torch.tensor(advantage_list, dtype=torch.float) (--- hand-on RL) 这种也是去掉梯度的方式,所以一般buffer里的数据都是无梯度的。

3.提高收敛因素

  • 3.提高收敛因素

    1.horizon 即每次更新的步数设置为2048时极大提高收敛效率

    2.state 归一到 -1~1

    3.action只有在环境需要限制大小的值时才要clip,在训练时的action 不要clip 保证与训练时计算的分布相同

其他

  • 其他

    torch.cat([values, last_value.unsqueeze(0)]) 不会起移除梯度,加梯度作用

    主要作用是 with torch.no_grad():

    markdown 复制代码
    with torch.no_grad():
         values = self.value(batch_states).squeeze(-1)
    
    print(values.requires_grad,1)
    values = torch.cat([values, last_value.unsqueeze(0)]) 
    print(values.requires_grad)
    
    False 1
    True
    markdown 复制代码
    with torch.no_grad():
         values = self.value(batch_states).squeeze(-1)
    
         print(values.requires_grad,1)
         values = torch.cat([values, last_value.unsqueeze(0)]) 
         print(values.requires_grad)
    
    False 1
    False
相关推荐
小陈工1 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
A__tao5 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢5 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
迷藏4946 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
明日清晨6 小时前
python扫码登录dy
开发语言·python
bazhange6 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
jinanwuhuaguo6 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
人工干智能6 小时前
科普:python中你写的模块找不到了——`ModuleNotFoundError`
服务器·python
AI人工智能+7 小时前
一种以深度学习与计算机视觉技术为核心的表格识别系统,实现了结构化、半结构化表格的精准文字提取、布局解析与版面完整还原
深度学习·计算机视觉·ocr·表格识别
unicrom_深圳市由你创科技7 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#