我正在尝试编写一个神经网络来下棋,但我遇到了输出问题。我正在使用 python-chess 库,并内置了奖励。网络有 4 个输出和三个全连接层。4 个输出应映射在 0 和 7 之间,前两个和后两个输出将每个映射映射到正方形的行列和文件。为了压缩输出,我对每个输出进行 sigmoid 运算并乘以 7。问题是,在几个学习时期之后,学习就碰壁了。无论初始种子如何,网络都会输出相同的输出,例如 3443 或 4333,并且 sigmoid 之前的输出都非常接近于零。我认为这是事实,失败动作的负奖励和 sigmoid 导数将输出移动到 0,因此输出 3s 和 4s。我需要这个网络通过强化学习来学习,
代码:
def forward(self, x):
x = F.relu(self.action_head2(F.relu(self.action_head(F.relu(self.affine1(x))))))
action_scores = self.action_head3(x)
state_values = self.value_head(x)
print(action_scores)
return F.sigmoid(action_scores)*7, state_values