我理解具有任意数量隐藏层的神经网络可以近似非线性函数,但是,它可以近似:
f(x) = x^2
Run Code Online (Sandbox Code Playgroud)
我想不出它怎么可能.这似乎是神经网络的一个非常明显的限制,可能会限制它能做什么.例如,由于这种限制,神经网络可能无法正确逼近统计中使用的许多函数,如指数移动平均线,甚至方差.
说到移动平均线,反复神经网络可以恰当地近似吗?我理解前馈神经网络甚至单个线性神经元如何使用滑动窗口技术输出移动平均值,但如果没有X个隐藏层(X是移动平均大小),递归神经网络如何做到呢?
另外,让我们假设我们不知道原始函数f,它恰好得到最后500个输入的平均值,然后如果它高于3则输出1,如果不是则输出0.但是一时间,假装我们不知道,这是一个黑盒子.
复发神经网络如何接近?我们首先需要知道它应该有多少次步,而我们却不知道.也许LSTM网络可以,但即便如此,如果它不是一个简单的移动平均线,那么它是一个指数移动平均线?我不认为即使是LSTM也能做到.
更糟糕的是,如果我们试图学习的f(x,x1)是简单的话
f(x,x1) = x * x1
Run Code Online (Sandbox Code Playgroud)
这似乎非常简单明了.神经网络可以学习它吗?我不知道怎么样.
我在这里遗漏了一些巨大的东西,还是机器学习算法非常有限?除了神经网络之外还有其他学习技术可以实际做到吗?
我正在尝试创建一个简单的基于深度学习的模型来进行预测,y=x**2
但是看起来深度学习无法学习其训练集范围之外的一般功能。
凭直觉,我可以认为神经网络可能无法拟合y = x ** 2,因为输入之间不涉及乘法。
请注意,我并不是在问如何创建适合的模型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
Run Code Online (Sandbox Code Playgroud)
训练守则
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) …Run Code Online (Sandbox Code Playgroud) machine-learning neural-network deep-learning non-linear-regression keras