循环神经网络 (LSTM) 在优化期间未收敛

数据挖掘 神经网络 lstm rnn 优化 收敛
2022-03-15 01:47:11

我正在尝试使用来自维基百科的文本来训练 RNN,但我无法让 RNN 收敛。我尝试增加批量大小,但似乎没有帮助。所有数据在使用之前都是热编码的,我正在使用这样实现的 Adam 优化器。

   for k in M.keys(): ##For k in weights
        M[k] = beta1 * M[k] + (1-beta1)*grad[k]
        R[k] = beta2 *R[k] + (1-beta2)*grad[k]**2
        m_k = M[k] / (1-beta1**n)
        r_k = R[k] / (1-beta2**n)
        model[k] = model[k] - alpha * m_k / np.sqrt(r_k + 1e-8)

Beta1 设置为 0.9,beta2 设置为 0.999,alpha 设置为 0.001。当我用 50,000 训练它时,我得到了非常高的成本波动,而且它似乎从未显着降低(只是有时由于波动(我以最低的成本获得权重))。在勾画出迭代的成本后,我得到了这样的图表:在此处输入图像描述

平均而言,它似乎在增加,但似乎在大幅波动时才减少。我可以改变什么来获得更好的成功并让它趋于一致?

谢谢你的帮助

1个回答

我认为问题在于您对单热向量的文本处理。尝试使用嵌入而不是 one-hot 向量。嵌入也是一个 n 维向量,它允许具有相似含义的单词具有相似的向量表示。One-hot 向量没有这样的信息。对他们来说,有一组说基数 c 的词,那么每个向量都是 cx1 。向量中的 1 仅代表它的位置。从这个意义上说,这就像位操作。所以没有保留语义。例如,在您的语料库中,可能有喜欢和爱之类的词。两者具有相似的含义。但是,爱与崇拜的单一热门向量可能很遥远,这取决于提到爱与崇拜的位置。

但是如果你使用嵌入,具有相似含义的单词将在预定义的向量空间中具有相似的表示。

有了这个,你的 LSTM 将更好地学习依赖关系并开始收敛。

希望这可以帮助 :)