我写了这段超级简单的代码
model = Sequential()
model.add(Dense(1, input_dim=d, activation='linear'))
model.compile(loss='mse', optimizer='adam')
model.fit(X_train, y_train, epochs=10000, batch_size=n)
test_mse = model.evaluate(X_test, y_test)
print('test mse is {}'.format(test_mse))
X_train是一个n by d
numpy矩阵,而y是n by 1
numpy矩阵。
这基本上是您可以想到的最简单的线性神经网络。一层,输入维是d,我们输出一个数字。
它只是拒绝过拟合。即使运行了疯狂的迭代次数(您可以看到10k),训练损失仍约为0.17。
我希望损失为零。我为什么要这样?因为就我而言,d远大于n。我有更多的自由度。作为进一步的证据,当我实际使用numpy.linalg.lstsq解决X_train @ w = y_train
时,X_train @ w - y
的最大值约为-14的10。
因此,该系统绝对是可解决的。我期望看到零损失或非常接近零损失,但我没有。为什么?