Простая нейронная сеть отказывается переобучать - PullRequest
0 голосов
/ 18 июня 2020

Я написал этот очень простой фрагмент кода

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.

Итак, эта система однозначно разрешимо. Я ожидал увидеть нулевой убыток или очень близкий к нулю убыток, но не увидел. Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...