使用 ReLU 激活的神经网络预测是否可以在训练数据范围之外是非线性的(即遵循模式)?

人工智能 神经网络 喀拉斯 回归
2021-11-08 17:27:13

二次函数训练

x = np.linspace(-10, 10, num=1000)
np.random.shuffle(x)
y = x**2

将预测 之间的预期二次曲线-10 < x < 10

在界

不幸的是,我的模型的预测在训练数据集之外变成了线性的。

-100 < x < 100下文:

越界

这是我定义模型的方式:

model = keras.Sequential([
      layers.Dense(64, activation='relu'),
      layers.Dense(64, activation='relu'),
      layers.Dense(1)
  ])

model.compile(loss='mean_absolute_error', optimizer=tf.keras.optimizers.Adam(0.1))

history = model.fit(
    x, y,
    validation_split=0.2,
    verbose=0, epochs=100)

这是 google colab 的链接以获取更多上下文。

2个回答

看到这样的行为并不奇怪,因为您正在使用ReLU激活。

这是一个简单的结果,它解释了单层神经网络的现象。我没有太多时间,所以我没有检查这是否会合理地扩展到多层;我相信它可能会。

命题在单层神经网络中n隐藏神经元使用ReLU激活,具有一个输入和输出节点,输出在区域外是线性的[A,B]对于一些A<BR. 换句话说,如果x>B,f(x)=αx+β对于一些常数αβ, 而如果x<A,f(x)=γx+δ对于一些常数γδ.

证明。我可以把神经网络写成一个函数f:RR, 被定义为

f(x)=i=1n[σimax(0,wix+bi)]+c.
请注意,每个神经元从0线性函数,反之亦然,当wix+bi=0. 定义ri=biwi. 然后,我可以设置B=maxiriA=miniri. 如果x>B,每个神经元要么是0或线性的,所以f只是线性函数的总和,即具有恒定梯度的线性函数。如果x<A.

因此,f是具有恒定梯度的线性函数,如果x<A或者x>B.

如果结果不明确,下面是这个想法的说明: ReLU 和的图

这是一个3-神经元网络,我已经标记了我表示的点ri由黑色箭头。在第一个箭头之前和最后一个箭头之后,函数只是一条具有恒定梯度的线:这就是您所看到的,也是命题所证明的。

简短的回答:是的。

考虑对该数据集进行非线性回归。使用二次模型,它会完全适合您的完美数据的二次方。但我想你是在问神经网络。您可以设置与这种回归完全等效的神经网络,因此即使使用神经网络,您也可以获得这种非线性外推。当然,正如您可能意识到的那样,在真正相信任何外推预测之前,您必须提前知道在这种外推中您期望什么样的行为。