自动编码器无法学习有意义的特征

机器算法验证 机器学习 神经网络 特征工程 受限玻尔兹曼机 自动编码器
2022-01-31 15:09:16

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

数据示例 数据示例2

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

问题是,这些自动编码器似乎没有学习任何特征。我试过RBM,结果是一样的。

MNIST 数据集提供了很好的功能,但我的数据似乎没有产生任何效果。我附上以下示例:

在 MNIST 上创建的过滤器:

mnist 过滤器

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

从我的数据中过滤

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

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

编辑:

对于任何有类似问题的人。解决方案非常简单,原因非常愚蠢。我只是忘记将像素值从 RGB 编码重新调整为在 0 - 1 范围内浮动。

重新调整值解决了这个问题。

2个回答

调试神经网络通常涉及调整超参数、可视化学习的过滤器和绘制重要指标。你能分享一下你一直在使用的超参数吗?

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

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

这是一个用于人类性别分类的自动编码器的示例,该自动编码器正在发散,在 1500 个 epoch 后停止,调整了超参数(在本例中是学习率的降低),并以发散并最终收敛的相同权重重新启动。

这是一个正在收敛的:(我们想要这个)

Vanilla“不受约束”可能会遇到一个问题,他们只需学习恒等映射。这就是社区创建去噪、稀疏和收缩风格的原因之一。

你能在这里发布一小部分数据吗?我非常愿意向您展示我的一个自动编码器的结果。

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

[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 个 epoch 后停止了预训练,因为过滤器足够好,可以在这里发布。如果我是你,我会先训练一个具有 1000x1000x1000 架构的完整 3 层堆叠去噪自动编码器。

以下是微调步骤的结果:

validation error 24.15 percent
test error 24.15 percent

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

我没有足够的代表发表评论,所以我会回答这个问题。但是,我不知道确切的原因:

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

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