深度学习是否不擅长在训练范围之外拟合简单的非线性函数(外推)?
Is deep learning bad at fitting simple non linear functions outside training scope (extrapolating)?
我正在尝试创建一个简单的基于深度学习的模型来预测 y=x**2
但看起来深度学习无法学习其训练集范围之外的一般功能。
凭直觉,我认为神经网络可能无法拟合 y=x**2,因为输入之间不涉及乘法。
请注意,我不是在问如何创建适合 x**2
的模型。我已经做到了。我想知道以下问题的答案:
- 我的分析正确吗?
- 如果1的答案是肯定的,那么深度学习的预测范围是不是很有限?
- 是否有更好的算法来预测训练数据范围内外的函数,如 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
_________________________________________________________________
在随机测试集上的评估
本例中的深度学习并不擅长预测简单的非线性函数。但擅长预测训练数据样本 space 中的值。
- Is my analysis correct?
鉴于我在评论中的评论,你的网络肯定不深,让我们接受你的分析确实是正确的(毕竟,你的模型似乎做得很好在其培训范围内),以便回答您的第二个问题,这是一个有趣的问题。
- If the answer to 1 is yes, then isn't the prediction scope of deep learning very limited?
嗯,这种问题不完全适合 SO,因为 "very limited" 的确切含义可能不清楚...
那么,让我们尝试重新表述一下:我们是否应该期望 DL 模型预测此类数值函数在它们训练的数值域之外?
一个来自不同领域的例子在这里可能很有启发性:假设我们已经建立了一个模型,能够以非常高的准确度检测和识别照片中的动物(这不是假设;这样的模型确实存在);当相同的模型无法检测和识别这些相同照片中的飞机(或树木、冰箱等 - 你能想到的)时,我们应该抱怨吗?
这样说,答案很明确 没有 - 我们不应该抱怨,事实上我们一开始就不会对这种行为感到惊讶.
我们人类很容易认为这样的模型应该能够外推,尤其是在数字领域,因为这是我们非常"easily"做的事情我们自己;但是 ML 模型虽然非常擅长 插值 ,但它们在外推任务中惨遭失败,例如您在此处展示的任务。
试图让它更直观,认为整个 "world" 此类模型都被限制在其训练集的 域 中:我上面的示例模型是能够概括和识别看不见的照片中的动物,只要这些动物是 "between"(注意引号)它在训练期间看到的动物;以类似的方式,您的模型可以很好地预测参数 between 您用于训练的样本的函数值。但在这两种情况下,这些模型都不应超出其训练范围(即外推)。对于我的动物以外的示例模型,没有 "world",同样对于 [-500, 500] 之外的模型...
为了证实,请考虑 DeepMind 最近发表的论文 Neural Arithmetic Logic Units;摘自摘要:
Neural networks can learn to represent and manipulate numerical information, but they seldom generalize well outside of the range of numerical values encountered during training.
另请参阅 relevant tweet 一位杰出的从业者:
关于你的第三个问题:
- Is there a better algorithm for predicting functions like
y = x**2
both inside and outside the scope of training data?
现在应该清楚了,这是当前研究的(热门)领域;初学者请参阅上面的论文...
那么,深度学习模型有限制吗?绝对 - 在可预见的未来忘记关于 AGI 的可怕故事。正如您所说,它们 非常 有限吗?好吧,我不知道...但是,考虑到他们在推断方面的局限性,他们有用吗?
这可以说是真正有趣的问题,答案显然是 - 见鬼,是的!
我正在尝试创建一个简单的基于深度学习的模型来预测 y=x**2
但看起来深度学习无法学习其训练集范围之外的一般功能。
凭直觉,我认为神经网络可能无法拟合 y=x**2,因为输入之间不涉及乘法。
请注意,我不是在问如何创建适合 x**2
的模型。我已经做到了。我想知道以下问题的答案:
- 我的分析正确吗?
- 如果1的答案是肯定的,那么深度学习的预测范围是不是很有限?
- 是否有更好的算法来预测训练数据范围内外的函数,如 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
_________________________________________________________________
在随机测试集上的评估
本例中的深度学习并不擅长预测简单的非线性函数。但擅长预测训练数据样本 space 中的值。
- Is my analysis correct?
鉴于我在评论中的评论,你的网络肯定不深,让我们接受你的分析确实是正确的(毕竟,你的模型似乎做得很好在其培训范围内),以便回答您的第二个问题,这是一个有趣的问题。
- If the answer to 1 is yes, then isn't the prediction scope of deep learning very limited?
嗯,这种问题不完全适合 SO,因为 "very limited" 的确切含义可能不清楚...
那么,让我们尝试重新表述一下:我们是否应该期望 DL 模型预测此类数值函数在它们训练的数值域之外?
一个来自不同领域的例子在这里可能很有启发性:假设我们已经建立了一个模型,能够以非常高的准确度检测和识别照片中的动物(这不是假设;这样的模型确实存在);当相同的模型无法检测和识别这些相同照片中的飞机(或树木、冰箱等 - 你能想到的)时,我们应该抱怨吗?
这样说,答案很明确 没有 - 我们不应该抱怨,事实上我们一开始就不会对这种行为感到惊讶.
我们人类很容易认为这样的模型应该能够外推,尤其是在数字领域,因为这是我们非常"easily"做的事情我们自己;但是 ML 模型虽然非常擅长 插值 ,但它们在外推任务中惨遭失败,例如您在此处展示的任务。
试图让它更直观,认为整个 "world" 此类模型都被限制在其训练集的 域 中:我上面的示例模型是能够概括和识别看不见的照片中的动物,只要这些动物是 "between"(注意引号)它在训练期间看到的动物;以类似的方式,您的模型可以很好地预测参数 between 您用于训练的样本的函数值。但在这两种情况下,这些模型都不应超出其训练范围(即外推)。对于我的动物以外的示例模型,没有 "world",同样对于 [-500, 500] 之外的模型...
为了证实,请考虑 DeepMind 最近发表的论文 Neural Arithmetic Logic Units;摘自摘要:
Neural networks can learn to represent and manipulate numerical information, but they seldom generalize well outside of the range of numerical values encountered during training.
另请参阅 relevant tweet 一位杰出的从业者:
关于你的第三个问题:
- Is there a better algorithm for predicting functions like
y = x**2
both inside and outside the scope of training data?
现在应该清楚了,这是当前研究的(热门)领域;初学者请参阅上面的论文...
那么,深度学习模型有限制吗?绝对 - 在可预见的未来忘记关于 AGI 的可怕故事。正如您所说,它们 非常 有限吗?好吧,我不知道...但是,考虑到他们在推断方面的局限性,他们有用吗?
这可以说是真正有趣的问题,答案显然是 - 见鬼,是的!