我使用Adam训练了LSTM-MDN模型,训练损失首先减少,但是在服务器数百个历元之后,训练损失增加了并且高于初始值。然后我从损失最低的位置重新训练,并将学习率降低了10倍(从1e-3降低到1e-4)。
首先,培训损失减少了,后来又增加了。我最初以为代码中存在一些错误,但没有发现任何错误。然后我用SGD(momentum = 0)代替了亚当,训练损失没有增加,但是收敛到一个相对较大的值,该值高于亚当的损失,所以我认为亚当有问题。
我从未找到原因,希望有人能帮助我找到原因。 损失(adam)
损失功能
def mdn_loss_function(out_pi, out_sigma, out_mu, y):
y = y.view(-1, SEQUENCE, 1, LATENT_VEC)
result = Normal(loc=out_mu, scale=out_sigma)
result = torch.exp(result.log_prob(y))
result = torch.sum(result * out_pi, dim=2)
result = -torch.log(EPSILON + result)
return torch.mean(result)