4

我正在尝试用我自己的 Java实现一个自动编码器。从理论上,我了解到自动编码器基本上是一个对称网络。

那么,如果我选择总共有 5 层,我必须在训练(反向传播)阶段使用 9 层还是 5 层就足够了?

我一直在阅读理论,但它们太抽象了,而且充满了数学公式,我无法通过谷歌获得任何实现细节。

这样做的通常方法是什么?

在此处输入图像描述

一个自动编码器,在训练阶段,使用反向传播,试图获得与输入相似的输出,目标是最小化错误。如上所示。上图中的层数为 7,而实际训练后的层数为 4。那么,在训练时我可以只用 4 个实现反向传播吗?如果是这样,我该怎么做?

4

1 回答 1

3

简单的反向传播不适用于这么多层。由于所谓的梯度消失现象,具有两个以上隐藏层的网络不会学到任何合理的东西。事实上,最好的结果是通过一个隐藏层获得的。所以在自动编码器的情况下,你应该有 INPUT 层、HIDDEN 层和 OUTPUT 层。不需要更多,通用近似定理清楚地表明,这对任何问题都足够了。

从 OOP 的角度来看,这取决于您是否打算将这段代码用于不同类型的神经元,而神经元类型是指比不同的激活函数更深层次的东西——不同的行为(随机神经元?);不同的拓扑(非完全连接的网络)。如果不是 - 将每个神经元建模为一个单独的对象是完全多余的。

于 2013-12-28T20:06:56.447 回答