我目前正在使用简单的Autoencoders运行一些测试 . 我自己完全在Tensorflow中编写了一个Autoencoder,另外复制并粘贴了这个keras博客条目中的代码:https://blog.keras.io/building-autoencoders-in-keras.html(只是为了拥有不同的Autoencoder实现) .

当我测试不同的架构时,我开始在这一层中使用单层和几个隐藏单元 . 我注意到,当我将隐藏单元的数量减少到只有一个(!)隐藏单元时,我仍然可以获得与更大架构(多达几千个隐藏单元)相同的训练和测试损失 . 在我的数据中,最差的损失是0.5 . 我试过的任何架构都达到了0.15 .

出于好奇,我将唯一存在的隐藏层中隐藏单元的数量减少到零(我知道这没有任何意义) . 但是,我仍然得到0.15的训练和测试损失 . 我认为这种奇怪的行为可能是由于解码层中的偏差(当我重建输入时) . 最初,我将偏差变量(在TF中)设置为trainable = True . 所以现在我想即使没有任何隐藏单位,模型仍然可以学习解码层中的偏差,这可能导致我的损失从0.5减少到0.15 .

在下一步中,我将解码层中的偏差设置为trainable = False . 现在模型(没有隐藏单位)没有学到任何东西,就像我预期的那样(损失= 0.5) . 然而,有一个隐藏的单位,我再次得到约0.15的测试和训练损失 .

按照这种思路,我将编码层中的偏差设置为trainable = False,因为我想避免我的架构只能学习偏差 . 所以现在,只有我的自动编码器的权重是可训练的 . 这仍适用于单个隐藏单元(当然只有一个隐藏层) . 令人惊讶的是,这仅适用于单层网络 . 一旦我增加了层数(独立于隐藏单元的数量),网络就不会学到任何东西(如果只有权重得到更新) .

我报告的所有内容都适用于训练损失和测试损失(在机器永远不会看到的完全独立的数据集中) . 这让我更加好奇 .

我的问题是:如何从一个节点“网络”中学到更多,从一个更大的网络(用于培训和测试)中学到什么?第二,怎么可能更大的网似乎永远不会过度拟合(训练和测试错误略有变化,但总是可比的) . 任何建议都会非常有帮助!非常感谢!尼尔斯