我很难理解如何在演员评论设置中获取数据来计算优势。
我知道model.transform(dataset).show()
// +----------------+----------+
// | items|prediction|
// +----------------+----------+
// |[aaa, bbbb, eee]| []|
// |[bbbb, ccc, eee]| [aaa]|
// | [aaa, bbbb]| [eee]|
// +----------------+----------+
。获得状态值估计A(s,a) = Q(s,a) - V(s)
似乎很简单,但是如果策略只输出概率,我们如何估计V(s)
?
谢谢!
答案 0 :(得分:1)
Q函数取决于每个未来状态的奖励值的可用性。 Q(s,a)是采取行动a
并评估新状态V(s')
的结果s'
的价值。因此,净优势将是a
P(a) * V(s'(a))
的所有操作的总和,其中s'(a)
是通过从a
采取行动s
达到的状态。
请记住,这只是一个值估计值;这是培训迭代证明其价值的地方。你继续迭代,直到值收敛到稳定的马尔可夫模型。
答案 1 :(得分:0)
您应该使用评论而不是演员来估算 Q(s,a)。
请记住,在 actor-critic (行为者批评)设置(例如A2C)中,参与者会在状态{{1}下,输出所有行动的概率分布}。从此分发中,您将对要在环境中执行的操作s
进行采样。然后,环境将给您奖励a
和下一个状态r
。
经过s'
步骤之后,您将使用 critic (批判者)来估算状态值 N
,并计算出优势< / strong>指出您的操作比平均水平要好多少。借助这一优势,您将更新策略( actor ),以提高/降低在状态V(s)
采取行动a
的可能性。
因此,要在此框架中使用 advantage函数,您可以使用注释器来估算s
,这是每对动作状态的值。然后,您可以通过以下方式估算Q(s,a)
:
您可以看看这个answer和这个post来获得更好的主意。请注意,要估算V(s)
,您的评论家网络应具有Q(s,a)
输出单位,而不是|A|
情况下的输出单位。您还可以尝试其他选项作为优势功能。
请记住,优势函数的唯一目的是告诉您的模型在状态V(s)
下采取/采取行动a
的概率以多少增加/减少。如果比平均水平好,则增加;否则,减少。
此paper是很好的参考。