Улучшение снижения потерь в модели нейронной сети - PullRequest
0 голосов
/ 16 июня 2019

Следующий код предназначен для обучения модели нейронной сети данного набора данных (50 000 выборок, 64 dim).

from keras import Sequential
from keras.layers import Dense
from keras.optimizers import Adam


X, y = process_dataset()
model = Sequential([
    Dense(16, input_dim=X.shape[1], activation='relu'),
    Dense(16, activation='relu'),
    Dense(1, activation='sigmoid')
])

'''
    Compile the Model
'''
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.01), metrics=['accuracy'])

'''
    Fit the Model
'''
model.fit(X, y, shuffle=True, epochs=1000, batch_size=200, validation_split=0.2, verbose=2)

Вначале вы можете видеть ниже, что val_loss уменьшается отодна эпоха к другой очень хорошо.

Epoch 82/1000
 - 0s - loss: 0.2036 - acc: 0.9144 - val_loss: 0.2400 - val_acc: 0.8885
Epoch 83/1000
 - 0s - loss: 0.2036 - acc: 0.9146 - val_loss: 0.2375 - val_acc: 0.8901

Когда модель занимает много эпох, изменение потерь становится таким маленьким, особенно когда количество эпох увеличивается.

Epoch 455/1000
 - 0s - loss: 0.0903 - acc: 0.9630 - val_loss: 0.1317 - val_acc: 0.9417
Epoch 456/1000
 - 0s - loss: 0.0913 - acc: 0.9628 - val_loss: 0.1329 - val_acc: 0.9443

Пожалуйста, у меня два вопроса:

  1. Что означает это явление?т. е. потери начинают очень хорошо уменьшаться в начале, но не сильно уменьшаются к тому времени, когда тренировочные эпохи занимают много итераций.
  2. Какое возможное решение для этого?

Спасибо,

1 Ответ

0 голосов
/ 16 июня 2019

Это связано с тем, что градиенты весов сходятся к локальному (или, возможно, глобальному) минимуму.Это может произойти по следующим причинам:

  • a) Слишком малая скорость обучения
  • b) Модель не может успешно классифицировать ваши данные дальше, чем она уже есть,Это означает, что данные могут быть неверными и требуют дальнейшей предварительной обработки

Вот более подробное объяснение: Сходимость весов нейронной сети

Некоторые решения могутпопробовать поиск по сетке по вашим гиперпараметрам, таким как скорость обучения, количество нейронов в каждом слое, количество слоев и т. д.

...