0

我正在尝试使用 ADADELTA 算法在 MNIST 数据集上训练 2 个隐藏层 tanh 神经网络。

这是我的设置的参数:

  • Tanh 激活函数
  • 2个隐藏层,784个单元(与输入单元数相同)
  • 我在输出层使用带有交叉熵损失的 softmax
  • 我随机初始化权重,扇形约为 15,标准差为 1/sqrt(15) 的高斯分布权重
  • 我正在使用 10 的 minibatch 大小和 50% 的 dropout。
  • 我正在使用 ADADELTA 的默认参数 (rho=0.95, epsilon=1e-6)
  • 我检查了我的导数与自动微分

如果我运行 ADADELTA,起初它会在错误中有所收获,并且我可以看到第一层正在学习识别数字的形状。它在对数字进行分类方面做得不错。但是,当我长时间运行 ADADELTA(30,000 次迭代)时,很明显出现了问题。虽然目标函数在几百次迭代后停止改进(并且内部 ADADELTA 变量停止变化),但第一层权重仍然具有与它们初始化时相同的稀疏噪声(尽管在该噪声之上学习了真实特征)。

为了说明我的意思,这里是网络可视化的示例输出。 内部状态的可视化

请注意第一层权重中的像素噪声,尽管它们具有结构。这与初始化它们的噪声相同。

没有一个训练示例具有像这种噪声这样的不连续值,但由于某种原因,ADADELTA 算法从未将这些异常值权重降低到与它们的邻居一致。

到底是怎么回事?

4

0 回答 0