диагностика процесса обучения нейронной сети

Я тренирую автоэнкодер DNN для ответа на вопрос о регрессии. Нужны предложения, как улучшить тренировочный процесс.

Общее количество обучающей выборки ~ 100000. Я использую Keras под модель, выставив validation_split = 0.1. После тренировки нарисовал изменение функции потерь и получил следующую картину. Как видно здесь, потеря валидации нестабильна, а средние значения очень близки к потере обучения.

У меня вопрос: исходя из этого, каким следующим шагом я должен попытаться улучшить тренировочный процесс?

[Редактировать от 26.01.2019] Детали сетевой архитектуры таковы: он имеет 1 скрытый слой из 50 узлов. Входной и выходной слой имеют 1000 узлов соответственно. Активация скрытого слоя - ReLU. Функция потерь - MSE. В качестве оптимизатора я использую Adadelta с настройками параметров по умолчанию. Я также пытался установить lr = 0,5, но получил очень похожие результаты. Различные характеристики данных имеют масштаб от -10 до 10 со средним значением 0.

введите описание изображения здесь


person George    schedule 24.01.2019    source источник


Ответы (1)


Наблюдая за представленным графиком, сеть не смогла аппроксимировать функцию, которая устанавливает связь между входом и выходом.

Если ваши особенности слишком разнообразны. Если у одного из них большое значение, а у других очень маленькое значение, вам следует нормализовать вектор признаков. Дополнительную информацию можно найти здесь.

Для лучшего результата обучения и тестирования вы можете следовать этим советам:

  1. Используйте небольшую сеть. Достаточно сети с одним скрытым слоем.
  2. Выполняйте активации как на входе, так и на скрытых слоях. Выходной слой должен иметь линейную функцию. Воспользуйтесь функцией активации ReLU.
  3. Предпочитайте небольшую скорость обучения, например 0,001. Используйте оптимизатор RMSProp. Он отлично работает с большинством задач регрессии.
  4. Если вы не используете функцию среднеквадратичной ошибки, используйте ее.
  5. Попробуйте учиться медленно и неуклонно, а не быстро.
person Shubham Panchal    schedule 26.01.2019
comment
Я на самом деле тренирую автоэнкодер. Имеет 1 скрытый слой из 50 узлов. Слой ввода и вывода состоит из 1000 узлов. Активация скрытого слоя - ReLU. В качестве оптимизатора я использую Adadelta с настройками параметров по умолчанию. Я также пытался установить lr = 0,5, но получил очень похожие результаты. Различные характеристики данных имеют масштаб от -10 до 10 со средним значением 0. Ваши комментарии на основе этой архитектуры приветствуются. К вопросу я добавляю детали сетевой архитектуры. - person George; 27.01.2019
comment
Попробуйте снизить скорость обучения до 0,001. А также нормализовать функции (от 0 до 1). - person Shubham Panchal; 27.01.2019