首页 > 解决方案 > 为什么神经网络在正弦波回归上如此困难

问题描述

我一直在尝试使用不同类型的人工神经网络来对基本的和越来越复杂的函数进行回归。对我来说,似乎我无法让我的网络学习像正弦波这样的循环函数。我在网上和这个论坛上读到,通常 ANN 不擅长这项工作,但我似乎无法理解为什么。学习其领域内的任何功能不都是一样的吗?

为了澄清起见,我尝试使用以下设置拟合从 x=0 到 x=100 的正弦波

def create_model():
  model = tf.keras.models.Sequential([
      keras.layers.Dense(units=1, activation=None,input_dim=1,kernel_initializer='random_normal'),
      keras.layers.Dense(units=64,activation='linear',use_bias=True),   
      keras.layers.Dense(units=32,activation="relu",use_bias=True),
      keras.layers.Dense(units=64,activation="relu"),
      keras.layers.Dense(units=64,activation='linear',use_bias=True),   
      keras.layers.Dense(units=32,activation='relu'),   
      keras.layers.Dense(units=1, activation='sigmoid'),
  ])

  model.compile(optimizer='adam',
            loss='mean_squared_logarithmic_error',
            metrics=['mean_squared_error'])



 return model

# Create a basic model instance
model = create_model()
# Display the model's architecture
model.summary()`

我已将我的数据规范化以适合 [x,y]=[0,1]^2 空间并将其输入网络。我给了网络 1000 分,并让它训练了很多个 epoch(~100,000),这些是我得到的结果:

过拟合 预测

我可以理解这是标准的过拟合行为,但我不明白为什么会这样。在 Goodfellow 的深度学习(我正在阅读)中,他解释说机器学习算法的最佳行为介于过拟合和欠拟合区域之间。看来我创建的模型在未来不会收敛到解决方案,并且预计会表现更差!

这是否意味着它不能插入到正弦函数?另外,为什么这个函数的计算要求比其他函数要高得多(我尝试过的最简单的函数在 <1000 个时期内收敛)?这是否意味着它需要更多的层或者每层可能需要更多的单元?我理解这个问题是一个经典的回归问题,我认为顺序模型很好。

最后但并非最不重要的一点是,我知道 ANN 不是用于周期函数的方法,但我试图理解为什么它们在作为回归方法中挣扎。

标签: pythontensorflowmachine-learningneural-networknon-linear-regression

解决方案


推荐阅读