如何训练和微调完全无监督的深度神经网络?

How to train and fine-tune fully unsupervised deep neural networks?

在场景 1 中,我有一个多层稀疏自动编码器试图重现我的输入,所以我的所有层都与随机启动的权重一起训练。没有监督层,在我的数据上它没有学到任何相关信息(代码工作正常,因为我已经在许多其他深度神经网络问题中使用过它)

在场景2中,我简单地在类似于深度学习的贪心分层训练中训练多个自动编码器(但最后没有监督步骤),每一层在隐藏层的输出上以前的自动编码器。他们现在将分别学习一些模式(正如我从可视化权重中看到的那样),但并不像我期望从单层 AE 中学习的那样很棒。

所以我决定尝试一下,现在连接到 1 个多层 AE 中的预训练层是否可以比随机初始化版本表现得更好。如您所见,这与深度神经网络中微调步骤的想法相同。

但是在我的微调过程中,所有层的神经元似乎都迅速收敛到一个完全相同的模式,而不是改进,最终什么也没学到。

问题:训练完全无监督的多层重建神经网络的最佳配置是什么?首先分层,然后进行某种微调?为什么我的配置不起作用?

经过一些测试后,我想出了一个似乎可以提供非常好的结果的方法,正如您对 'fine-tuning' 所期望的那样,它提高了所有层的性能:

就像通常一样,在贪婪的分层学习阶段,每个新的自动编码器都会尝试重建前一个自动编码器隐藏层的激活。然而,最后一个自动编码器(在微调期间将是我们的多层自动编码器的最后一层)不同,这个自动编码器将使用前一层的激活并尝试重建 'global' 输入(即馈送到第一层的原始输入)。

这样当我连接所有层并一起训练时,多层自动编码器将真正重建最终输出中的原始图像。即使没有监督步骤,我发现所学特征有了巨大改进。

我不知道这是否应该以某种方式与标准实现相对应,但我之前在任何地方都没有发现这个技巧。