【强化学习】关于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
相关推荐
lili-felicity5 小时前
CANN批处理优化技巧:从动态批处理到流水线并行
人工智能·python
一个有梦有戏的人5 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python
dazzle5 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习
摘星编程5 小时前
解析CANN ops-nn中的Transpose算子:张量维度变换的高效实现
python
Liekkas Kono5 小时前
RapidOCR Python 贡献指南
开发语言·python·rapidocr
island13145 小时前
CANN ops-nn 算子库深度解析:神经网络核心计算的硬件映射、Tiling 策略与算子融合机制
人工智能·深度学习·神经网络
心疼你的一切5 小时前
数字智人:CANN加速的实时数字人生成与交互
数据仓库·深度学习·aigc·交互·cann
chaser&upper5 小时前
击穿长文本极限:在 AtomGit 破译 CANN ops-nn 的注意力加速密码
人工智能·深度学习·神经网络
玄同7655 小时前
Python 后端三剑客:FastAPI/Flask/Django 对比与 LLM 开发选型指南
人工智能·python·机器学习·自然语言处理·django·flask·fastapi
慢半拍iii5 小时前
ops-nn算子库深度解析:昇腾神经网络计算的基础
人工智能·深度学习·神经网络·ai·cann