Я написал этот очень простой фрагмент кода
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. У меня гораздо больше степеней свободы. И в качестве дополнительного свидетельства, когда я действительно решаю X_train @ w = y_train
с помощью numpy .linalg.lstsq, максимальное значение X_train @ w - y
составляет примерно от 10 до -14.
Итак, эта система однозначно разрешимо. Я ожидал увидеть нулевой убыток или очень близкий к нулю убыток, но не увидел. Почему?