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

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

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