自动编码器无法学习有意义的功能


24

我有50,000张图片,例如这两张图片:

资料范例 数据示例2

它们描绘了数据图。我想从这些图像中提取特征,因此我使用了Theano(deeplearning.net)提供的自动编码器代码。

问题是,这些自动编码器似乎没有学习任何功能。我已经尝试过RBM,它是相同的。

MNIST数据集提供了不错的功能,但我的数据似乎没有任何结果。我在下面附上示例:

在MNIST上创建的过滤器:

滤网

通过对数据进行训练而创建的过滤器:

从我的数据过滤

我使用了隐藏层大小和训练时期的许多不同排列方式,但结果始终相同。

为什么不起作用?为什么自动编码器不能从这些图像中提取特征?

编辑:

对于有类似问题的任何人。解决方法非常简单,原因也很愚蠢。我只是忘了重新调整RGB编码的像素值以使其浮动在0-1的范围内。

重新调整值可以解决问题。

Answers:


15

调试神经网络通常涉及调整超参数,可视化学习到的过滤器以及绘制重要指标。您能否分享您一直在使用的超参数?

  • 您的批量大小是多少?
  • 您的学习率是多少?
  • 您正在使用哪种类型的自动编码器?
  • 您是否尝试过使用降噪自动编码器?(您尝试过哪些腐败值?)
  • 多少个隐藏层和什么大小?
  • 输入图像的尺寸是多少?

分析训练日志也很有用。绘制您的重建损失(Y轴)与历时(X轴)的函数关系图。您的重建损失是收敛的还是发散的?

这是一个用于人类性别分类的自动编码器的示例,该编码器存在差异,在1500个周期后停止,已调整超参数(在这种情况下,学习率降低了),然后以相同的权重重新开始并最终收敛。

这是一个正在融合的:(我们想要这个)

香草“不受约束”可能会遇到一个问题,即他们只是学习身份映射。这就是社区创建降噪,稀疏和收缩风味的原因之一。

您可以在此处发布一小部分数据吗?我非常愿意向您展示我的一种自动编码器的结果。

附带说明:您可能想问自己,为什么首先使用图形图像,而这些图形很容易表示为数据向量。即

[0, 13, 15, 11, 2, 9, 6, 5]

如果您能够像上面那样重新解决问题,那么实际上可以简化自动编码器的使用寿命。在尝试学习生成分布之前,它不需要先学习如何查看图像。

跟进答案(根据数据)。

以下是来自1000个隐藏单元的单层降噪自动编码器的过滤器。请注意,某些过滤器似乎是随机的。那是因为我这么早就停止了培训,而且网络没有时间去学习那些过滤器。

这是我用来训练的超参数:

batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2

在第58个纪元后,我停止了预训练,因为过滤条件足够好,可以在此处发布。如果您是我,我将训练具有1000x1000x1000架构的完整3层堆叠降噪自动编码器。

这是微调步骤的结果:

validation error 24.15 percent
test error 24.15 percent

因此,乍一看,这似乎比偶然性要好,但是,当我们查看两个标签之间的数据细分时,我们看到它具有完全相同的百分比(可盈利的75.85%和不可盈利的24.15%)。因此,这意味着网络已经学会了简单地响应“有利可图”,而不管信号如何。我可能会用更大的网络训练更长的时间,看看会发生什么。同样,该数据看起来是从某种基础金融数据集中生成的。我建议您在将问题重新构建为向量后,再研究递归神经网络。RNN可以帮助捕获像这样的时间序列数据中发现的一些时间相关性。希望这可以帮助。


我的批量大小为20。学习率设置为0.1。我尝试过压缩和去噪自动编码器无济于事。我使用一个隐藏层。我已经尝试了从50到1000个神经元的所有功能。我将图像重新缩放为25x25-因此它们甚至比mnist小。出于价值考虑,我将所有数据都包含在该存档中:您能告诉我自动编码器的结果和这些数据吗?
b93dh44


好的,我已经用这些数据训练了网络。参见答案中的编辑。
sabalaba 2015年

看起来真的很有趣。您可以发布您的代码吗?我真的很感激。我认为我的代码中可能存在一些错误,阻止了网络的训练。我注意到您处于微调阶段?我认为我的自动编码器只进行预训练而没有任何微调。如果您不介意,可以告诉我您的解决方案吗?
b93dh44'1

无法发布我的代码,因为这是我公司的代码,但是我可以将您指向本教程,其中包含用于制作Denoising Autoencoder的示例代码:deeplearning.net/tutorial/dA.html。所有超参数建议均适用于该代码。
sabalaba 2015年

3

我没有足够的代表对此发表评论,所以我将其作为答复。我不知道确切原因,但是:

  1. 仔细检查后,左下区域的图案与您的第二个示例相似,右下角的图案与您的第一个示例非常相似。问题是,您的源数据有多少种?如果所有5万张图像都是相同模式的变体,那么我们看到的这3个有意义的特征图足以使自动编码器解释和重建所有数据。

  2. 其次,您可能需要查看重建误差和实际重建的图像。效果如何?如果重建误差很低,则可能由于以下所述的共振而导致过拟合(或者这三种模式的组合足以描述所有感兴趣的数据)。否则,自动编码器将无法学习如何重建数据,而您需要更大的自动编码器或更好的训练算法。


1.我认为这些数据种类繁多。这50,000个图表中的每个图表都略有不同。我认为自动编码器不可能仅基于3个滤波器来重建它们。2.估计重建误差的任何技巧?我正在使用的代码提供了错误,但是这个数字很大,告诉我的并不多。我应该将重建误差与输入大小或隐藏层数进行比较吗?
b93dh44
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.