深度学习是否在拟合训练范围之外的简单非线性函数(外推)方面表现不佳?

9
我正在尝试创建一个简单的基于深度学习的模型来预测 y=x**2。但是,看起来深度学习无法学习其训练集范围之外的一般函数。
直觉上,我认为神经网络可能无法拟合 y=x**2,因为输入之间没有乘法运算。
请注意,我不是在询问如何创建适合 x**2 的模型。我已经完成了这个任务。我想知道以下问题的答案:
  1. 我的分析是否正确?
  2. 如果问题1的答案是肯定的,那么深度学习的预测范围难道不是非常有限吗?
  3. 是否有更好的算法可以预测像 y=x**2 这样的函数,包括训练数据范围内和范围外的预测?
完整笔记路径:https://github.com/krishansubudhi/MyPracticeProjects/blob/master/KerasBasic-nonlinear.ipynb 训练输入:
x = np.random.random((10000,1))*1000-500
y = x**2
x_train= x

输入数据

训练代码

def getSequentialModel():
    model = Sequential()
    model.add(layers.Dense(8, kernel_regularizer=regularizers.l2(0.001), activation='relu', input_shape = (1,)))
    model.add(layers.Dense(1))
    print(model.summary())
    return model

def runmodel(model):
    model.compile(optimizer=optimizers.rmsprop(lr=0.01),loss='mse')
    from keras.callbacks import EarlyStopping
    early_stopping_monitor = EarlyStopping(patience=5)
    h = model.fit(x_train,y,validation_split=0.2,
             epochs= 300,
             batch_size=32,
             verbose=False,
             callbacks=[early_stopping_monitor])


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_18 (Dense)             (None, 8)                 16        
_________________________________________________________________
dense_19 (Dense)             (None, 1)                 9         
=================================================================
Total params: 25
Trainable params: 25
Non-trainable params: 0
_________________________________________________________________

随机测试集上的评估

enter image description here

在这个例子中,深度学习对于预测简单的非线性函数效果不好。但是对于训练数据样本空间中的数值预测表现良好。


4
一个过于简单的两层网络不足以被认为是“深度学习”模型;即使在80年代,最基本的神经网络也要考虑一个三层的网络。 - desertnaut
@desertnaut 我尝试添加了一些层,但预测结果变得更糟了。我已经阅读和观察到,问题越简单,层数就应该越少。但这是一个神经网络,我想即使它很基础,它仍然可以被称为深度学习。如果您能使用更深的网络提出预测,请分享模型。 - Krishan Subudhi
4
“神经网络”和“深度学习”这两个术语不是同义词。正如我已经说过的,一个具有两层的网络在定义上是浅层的(即深层),甚至可以争论它是否是一个真正的神经网络(至少需要一个隐藏层,在输入和输出层之上)。关于函数逼近的例子,请参见我的回答此处此处 - desertnaut
2
可能是神经网络预测第n个平方数的重复问题。 - Agnius Vasiliauskas
1个回答

8
  1. 我的分析正确吗?

考虑到您在评论中提到您的网络显然不是“深度”的,让我们接受您的分析确实是正确的(毕竟,在其训练范围内,您的模型似乎做得很好),为了回答您的第二个问题,这才是有趣的问题。

  1. 如果第一个问题的答案是肯定的,那么深度学习的预测范围难道不是非常有限吗?

好吧,这种问题并不完全适合在SO上讨论,因为“非常有限”的确切含义可以说是不清楚的......

所以,让我们试着重新表述一下:我们应该期望DL模型在其训练时的数字域之外预测这样的数值函数吗?

来自不同领域的一个例子可能会更有启发性:假设我们已经建立了一个能够以非常高的准确性检测和识别照片中动物的模型(这并非虚构;这样的模型确实存在);当这个模型不能在相同的照片中检测和识别飞机(或树木、冰箱等)时,我们应该抱怨吗?

这样说来,答案是明确而显然的——我们不应该抱怨,事实上,对于这样的行为,我们甚至一开始就不会感到惊讶。

对于我们人类来说,很容易认为这样的模型应该能够在数字领域进行“外推”,因为这是我们自己做得非常“容易”的事情;但是机器学习模型虽然在“内插”方面表现异常出色,在“外推”任务(如您在此处提出的任务)方面却失败得很惨。

试图使其更加直观,可以将这些模型的整个“世界”限制在它们的训练集的“范围”之内:上面的例子模型在训练过程中看到的动物之间(请注意引号)的未知照片中能够推广和识别动物;同样地,您的模型可以很好地预测训练样本之间的参数的函数值。但是,在这两种情况下,这些模型都不应该超越它们的训练域(即“外推”)。我的例子模型没有动物以外的“世界”,同样的,您的模型也没有超出[-500, 500]之外的“世界”...

为了证实,考虑DeepMind最近的论文神经算术逻辑单元;引用摘要:

神经网络可以学习表示和操作数字信息,但它们很少能够在训练期间遇到的数字值范围之外进行有效的推广。

还可以参考一位知名从业者的相关推文:

enter image description here

接下来是第三个问题:

  1. 是否有更好的算法来预测像 y = x**2 这样的函数,无论是在训练数据范围内还是外部?

现在应该很清楚了,这是当前研究的一个(热门)领域;首先可以参考上面提到的论文...


那么,深度学习模型有限制吗?肯定的 - 在可预见的未来,忘记关于人工通用智能的可怕故事。正如你所说,它们非常有限吗?嗯,我不知道...但是,考虑到它们在推断方面的局限性,它们是否有用呢?

这可能是真正感兴趣的问题,答案显然是 - 当然有用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接