我正在读这本书的第四章-深度强化学习在行动(曼宁出版物)。本章解释了将强化学习应用于手推车-极点博弈的代码.只有两个行动可能-左,右。该模型接受作为向量编码的状态,并输出对应于两个动作的概率。该模型(用py手电筒开发)被定义为-
l1 = 4
l2 = 150
l3 = 2
model = torch.nn.Sequential(
torch.nn.Linear(l1, l2),
torch.nn.LeakyReLU(),
torch.nn.Linear(l2, l3),
torch.nn.Softmax(dim=0)
)
最后,在axis=0上应用了软极大值层。我可以理解这是一种在两个动作(左或右)之间创建概率分布的方法。因此,当一个状态给定给这个模型时,它输出一个probabilities.For例子的二维向量- 0.25,0.75,令我费解的是,当一批状态被赋予这个模型时,软件最大值(因为它被应用于axis=0)将被应用于该批的第一个动作集,然后它将应用于该批的第二个动作集,而不是应用于该批的每个动作对,该批的第一个动作之和为1,该批的第二个动作之和为1。模型的输出样本如下-
tensor([[0.0541, 0.0580],
[0.0542, 0.0556],
[0.0542, 0.0579],
[0.0555, 0.0592],
[0.0578, 0.0597],
[0.0556, 0.0590],
[0.0578, 0.0596],
[0.0603, 0.0598],
[0.0616, 0.0595],
[0.0602, 0.0596],
[0.0616, 0.0594],
[0.0600, 0.0594],
[0.0614, 0.0592],
[0.0622, 0.0585],
[0.0611, 0.0589],
[0.0617, 0.0582],
[0.0606, 0.0585]], grad_fn=<SoftmaxBackward>)
第一个动作的和是1,第二个动作的和是一样的。为什么在策略梯度法中应用这样的softmax?
发布于 2022-02-09 14:48:20
你需要在第二维上使用softmax,这样它就能计算出每一步的概率分布。只需将以下行更改为:
torch.nn.Softmax(dim=1)
一般来说,在大多数情况下,您将在策略梯度中应用softmax。我们总是关心对我们在那个州可以采取的行动的不信任。
https://stackoverflow.com/questions/71018893
复制