我正在阅读 openai 基线中的 gail 实现代码。他们将伯努利熵计算为对手网络损失函数中的损失之一。
在他们的代码中,他们实现了伯努利熵:
def logsigmoid(a):
'''Equivalent to tf.log(tf.sigmoid(a))'''
return -tf.nn.softplus(-a)
def logit_bernoulli_entropy(logits):
ent = (1.-tf.nn.sigmoid(logits))*logits - logsigmoid(logits)
return ent
还有另一个 openai 实现的参考,它是相同的代码,但我看不到任何解释。
我检查了计算伯努利熵的方程是:
我认为后一个方程是计算伯努利熵的正确方法,但第一个方程也应该是正确的,因为它是在 openai 的实现中编写的。我看不出有什么相似之处,这两个表达之间有什么关系吗?