【问题标题】:autoencoder only provides linear output自编码器只提供线性输出
【发布时间】:2025-12-30 10:25:11
【问题描述】:

大家好,

我现在正在研究自动编码器,将一些简单的 2D 数据减少到 1D。架构为 2 - 10 - 1 - 10 - 2 个神经元/层。作为激活函数,我在除了输出层之外的每一层都使用 sigmoid,在这里我使用标识。 我正在使用 Accord.NET Framework 来构建它。

我正在使用 RBM 和 CD 算法对自动编码器进行预训练,我可以在其中更改初始权重、学习率、动量和权重衰减。

微调是通过反向传播完成的,我可以在其中配置学习率和动量。

数据是一些人为创建的形状,图中标为绿色:

data + reconstruction

自动编码器的重建是黄线。这导致了我的问题。不知何故,编码器无法创建非线性形状作为输出。 尽管我进行了很多测试并更改了十几次值,但我并没有得到更好的结果。也许这里有人知道我如何找到问题。

谢谢!

【问题讨论】:

    标签: deep-learning autoencoder accord.net


    【解决方案1】:

    一般来说,任何神经网络都是基于你的特征与输出的线性表示,所以网络实际上在做什么(考虑两个特征)是 [w1*x1 + w2*x2 = output]。

    要实现非线性表示,您需要做的是使用额外特征,它是旧特征的非线性表示。例如,假设使用 x1^2 作为额外功能或 x2^2 或两者兼而有之。因此,网络将给出这个全局方程 [w1*x1 + w2*x2 + w3*x1^2 = output],它本质上是一个非线性方程,然后你可以有一个非线性表示。

    额外的特征方程主要取决于您的数据。我在示例中使用了二次方程,但这并不总是正确的做法。参考 Your data 我认为你需要使用 cos(x) 或 sin(x) 表示。

    【讨论】:

    • 他正在使用他在问题中提到的非线性激活函数(sigmoid)。所以,我认为你的答案可能不是 OP 所要求的。