我正在尝试创建一个简单的基于深度学习的模型来预测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
_________________________________________________________________
随机测试集的评估
此示例中的深度学习不擅长预测简单的非线性函数。但擅长预测训练数据样本空间中的值。
最佳答案
- Is my analysis correct?
鉴于我在评论中指出您的网络肯定不深,让我们接受您的分析确实是正确的(毕竟,您的模型似乎在其内部做得很好培训范围),以便回答你的第二个问题,这是一个有趣的问题。
- If the answer to 1 is yes, then isn't the prediction scope of deep learning very limited?
嗯,这种问题并不完全适合SO,因为“非常有限”的确切含义可以说不清楚......
那么,让我们尝试重新表述一下:我们是否应该期望深度学习模型能够在它们所训练的数值域之外预测此类数值函数?
来自不同领域的例子可能会有所启发:假设我们已经建立了一个模型,能够以非常高的准确度检测和识别照片中的动物(这不是假设;这样的模型确实存在);当同一个模型无法检测和识别这些相同照片中的飞机(或树木、冰箱等 - 你能想到的)时,我们应该提示吗?
这样说,答案是明确且明显的不 - 我们不应该提示,事实上,我们首先对这种行为并不感到惊讶。
我们人类很容易认为这样的模型应该能够推断,尤其是在数值领域,因为这是我们自己非常“容易”做的事情;但是 ML 模型虽然非常擅长插值,但在外推任务(例如您在此处介绍的任务)中却惨遭失败。
试图使其更直观,认为此类模型的整个“世界”都限制在其训练集的域中:我上面的示例模型将能够概括和识别动物只要这些动物位于训练期间看到的照片“之间”(注意引号),就可以看到未见过的照片;以类似的方式,您的模型可以很好地预测用于训练的样本之间的参数函数值。但在这两种情况下,这些模型都不会超出其训练领域(即推断)。对于我的示例模型来说,除了动物之外,没有“世界”,同样,对于您的模型来说,除了 [-500, 500] 之外,也没有“世界”...
为了证实这一点,请考虑最近的论文 Neural Arithmetic Logic Units ,作者:DeepMind;引用摘要:
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?
现在应该很清楚,这是当前研究的一个(热门)领域;对于初学者,请参阅上面的论文...
<小时/>那么,深度学习模型有限制吗?当然——在可预见的 future ,忘掉有关 AGI 的可怕故事吧。正如您所说,它们是否非常有限?好吧,我不知道...但是,考虑到它们在推断方面的局限性,它们有用吗?
这可以说是真正令人感兴趣的问题,答案显然是 - 是的,是的!
关于machine-learning - 深度学习是否不擅长在训练范围之外拟合简单的非线性函数(外推)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795142/