RL小白 2022-10-22 19:02 采纳率: 0%
浏览 54
已结题

PPO 掩蔽动作实现问题

问题遇到的现象和发生背景

发生背景:我在研究关于PPO的掩蔽动作问题和实现
在写代码过程中,我根据《A Closer Look at Invalid Action Masking in Policy Gradient Algorithms》这篇文章在PPO上加个掩蔽无效动作功能。主要是通过负无穷值,经过softmax后使得无效动作概率为0,最重要的是把这掩蔽行为写入神经网络模型中。actor网络搭建,有两个输入层,Input1是输入状态state二维数组,Input2是输入当前动作掩蔽二维数组,Input1经过两层后得到与Input2维度相同的张量,然后将该张量与Input2元素相加,最后经过softmax输出各动作概率。网络模型输出的结果大相径庭。比如说:当前只有第一个动作为有效动作,经模型训练后,输出的最终动作概率确是其他动作概率为1,而不是第一个动作概率为1。

先是输出相加结果
    # 建立Actor网络
    def _build_anet(self, trainable=True):
        tfs_a = Input(shape=(S_DIM))
        l1 = Dense(68, 'relu', trainable=trainable)(tfs_a)
        l2 = Dense(A_DIM, 'softmax', trainable=trainable)(l1)
        mask_a = Input(shape=(A_DIM))
        l4 = Add()([l2, mask_a])
        # a_prob = Dense(A_DIM, 'softmax', trainable=trainable)(l4)
        model_a = keras.models.Model(inputs=[tfs_a, mask_a], outputs=l4)
        model_a.summary()
        return model_a

结果如下图:

img

    def _build_anet(self, trainable=True):
        tfs_a = Input(shape=(S_DIM))
        l1 = Dense(68, 'relu', trainable=trainable)(tfs_a)
        l2 = Dense(A_DIM, 'softmax', trainable=trainable)(l1)
        mask_a = Input(shape=(A_DIM))
        l4 = Add()([l2, mask_a])
        a_prob = Dense(A_DIM, 'softmax', trainable=trainable)(l4)
        model_a = keras.models.Model(inputs=[tfs_a, mask_a], outputs=a_prob)
        model_a.summary()
        return model_a

结果如下图:

img

很显然, 这前后不对啊。 目前不很懂啥子原因,有没有哪位资深学者能指导指导呀~

  • 写回答

1条回答 默认 最新

  • Jackyin0720 2022-11-01 15:04
    关注

    提供参考链接【深度强化学习笔记之PPO实现细节2】,期望对你有所帮助:https://blog.csdn.net/Azahaxia/article/details/117329002
    【该博主在深度强化学习上有较深的体悟,其次在PPO实现上也有自己的理解,你可相互关注,讨论学习】

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月2日
  • 赞助了问题酬金15元 10月26日
  • 修改了问题 10月22日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 求解答一下是否可以修改一个软件运行时生成的文件内部内置的文件创建时间?
  • ¥15 求在R环境下用corrplot画一个相关图
  • ¥20 WIN10蓝屏问题!
  • ¥15 Mac经常自动关机,再次打开后提示“电脑因出现问题而重新启动”
  • ¥60 使用ovito软件怎么得到金属玻璃的自由体积
  • ¥15 急!如何实现根据汇编指令推测硬件功能?
  • ¥20 excel处理10000万条数据方法
  • ¥15 hc32串口接收数据
  • ¥15 阻抗控制阻尼参数过小报错
  • ¥15 在Unity开发环境中用NPOI插件输出Word文档可以,当我打包到Windows系统软件的时候输出Word文档就出现文件损坏