神经网络逼近不连续函数需要什么?

机器算法验证 神经网络
2022-03-09 15:03:50

我编写了一个具有 1 个隐藏层和 1 个数值输出的神经网络。没有偏见。

By appropiate choice of the activation function, I can easily approximate some continuous function.

然而,即使是简单的事情

f(x) = 50 if x >= 100, and 25 otherwise

我无法使用我的神经网络进行近似。我试过改变学习率,以及隐藏笔记的数量,但它根本不会收敛。

为什么它在这个极其简单的功能上表现如此糟糕?我该怎么做才能使它收敛?不仅仅是这个函数,还有另一个类似的非连续函数。

3个回答

维基百科提供了通用逼近定理的概要。

在人工神经网络的数学理论中,通用逼近定理指出,在温和的假设下,具有单个隐藏层包含有限数量的神经元的前馈网络可以逼近的紧凑子集上的连续函数关于激活函数。Rn

该定理是尝试使用神经网络对复杂的非线性现象进行建模的核心理由。尽管它非常灵活,但它并不能涵盖所有内容——在这种情况下,您已经定义了一个不连续函数,而通用逼近定理只扩展到连续函数。

我不知道允许神经网络逼近任意、不连续函数的定理。


也许如果您将目标变量的任一情况视为分类结果并使用交叉熵损失,您将成功地逼近这两种情况之间的决策边界。

在不了解您的具体实现的情况下,我可以说的是,神经网络大体上采用反向传播/梯度下降来调整网络并提高输出对训练数据的拟合。这意味着损失函数是可微的, 大多数情况下。您尝试逼近的函数具有较大的跳跃不连续性,这意味着在神经网络优化步骤中使用的大多数标准损失函数都会在不连续性处失效,具体取决于特定的损失函数和细节使用的优化算法,将以各种方式处理此故障。例如,如果您要在最后应用 sigmoid 层,您可能能够合理地逼近两条远离不连续点的线“足够远”的行为,但输出仍会产生连接两个平面的连续函数线。

其他近似技术也会遇到类似的问题。您可能想查看傅里叶分析中的吉布斯现象 ( https://en.wikipedia.org/wiki/Gibbs_phenomenon ) 和一般信号处理中发生的“振铃伪影”。

一般来说,学习一个不连续的函数是很困难的,因为值跳跃点附近的误差通常很大。

然而,在实践中,有一些方法可以通过使数据不那么突然来解决这个问题。例如,在您的情况下,函数在 x = 100 时跳转。我们可以将其更改为函数:

g(x) = 50, x >= 100

g(x) = 25, x < 0

当 0 <= x < 100 时,我们未定义函数的值。函数 g(x) 也可以看作是 f(x) 的位移:

g(x) = f(x), x >= 100

g(x) = f(x+100), x < 0

学习 g(x) 要容易得多,因为没有突然的跳跃。当 x 在 0 到 100 之间时,神经网络可以自由选择 g(x) 的任何值。很容易看出,一个 sigmoid 函数足以描述来自 g(x) 的采样数据。

学习 g(x) 后,将其转换回 f(x) 很简单。

当已知不连续点数量有限时,这种方法有效。