Нейронная сеть сразу переоснащение - PullRequest
0 голосов
/ 01 июля 2018

У меня есть FFNN с 2 скрытыми слоями для задачи регрессии, которая подходит почти сразу (эпоха 2-5, в зависимости от # скрытых единиц). (ReLU, Адам, MSE, одинаковые # скрытые единицы на слой, tf.keras)

32 нейрона:

32 neurons

128 нейронов:

128 neurons

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

На самом деле, лучше иметь слишком большую сеть и попытаться упорядочить ее с помощью L2-reg или dropout, чем уменьшать пропускную способность сети - потому что у более крупной сети будет больше локальных минимумов, но фактическое значение потерь будет лучше.

Есть ли смысл пытаться упорядочить (например, через отсутсвие) сеть, которая перегружается с самого начала?

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

model = Sequential()
model.add(Dense(n_neurons, 'relu'))
model.add(Dense(n_neurons, 'relu'))
model.add(Dense(1, 'linear'))
model.compile('adam', 'mse')

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Позвольте мне попытаться обосновать некоторые идеи здесь, на которые ссылается Ian Goodfellow et. и др. Книга глубокого обучения , которая доступна бесплатно онлайн:

  1. Глава 7: Регуляризация Наиболее важным моментом является data , можно и нужно избегать регуляризации, если они имеют большие объемы данных, которые наилучшим образом приближают распределение. В вашем случае, похоже, что может существовать существенное расхождение между данными обучения и тестирования. Вы должны убедиться, что данные согласованы.
  2. Раздел 7.4: Увеличение данных Что касается данных, Гудфеллоу говорит об увеличении данных и создании регуляризации путем введения шума (наиболее вероятно, гауссовского), который математически имеет тот же эффект. Этот шум хорошо работает с регрессионными задачами, поскольку вы ограничиваете модель от привязки к одной функции до наложения.
  3. Раздел 7.8: Ранний останов полезен, если вы просто хотите модель с наилучшей ошибкой теста. Но опять же, это работает только в том случае, если ваши данные позволяют тренингу вывести данные теста При немедленном увеличении количества ошибок в тестировании обучение немедленно прекращается.
  4. Раздел 7.12: Отсев Простое применение отсева к регрессионной модели не обязательно поможет. Фактически, «когда доступно очень мало помеченных обучающих примеров, отсев менее эффективен». Для классификации выпадение заставляет модель не полагаться на отдельные объекты, но в регрессии могут потребоваться все входные данные для вычисления значения, а не для классификации.
  5. Глава 11: Практические занятия подчеркивает использование базовых моделей , чтобы гарантировать, что учебное задание не является тривиальным. Если простая линейная регрессия может привести к тому же поведению, что у вас даже нет проблем с тренировкой для начала.

Суть в том, что вы не можете просто играть с моделью и надеяться на лучшее. Проверьте данные, поймите, что требуется, а затем примените соответствующие методы. Для более подробной информации читайте книгу, это очень хорошо. Ваша отправная точка должна быть простой регрессионной моделью, 1 слой, очень мало нейронов и посмотреть, что произойдет. Затем пошагово экспериментируйте.

0 голосов
/ 01 июля 2018

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


Возвращаясь к вашему вопросу, у вас высокая проблема с отклонениями (хорошая в обучении, плохая в тестировании).

Есть восемь вещей, которые вы можете сделать по порядку

  1. Убедитесь, что ваш тестовый и обучающий дистрибутив одинаковы.
  2. Убедитесь, что вы перетасовали, а затем разбили данные на два набора (тест и тренировка)
  3. Хороший поезд: тестовый сплит будет 105: 15K
  4. Использование более глубокой сети с регуляризацией Dropout / L2.
  5. Увеличьте размер тренировочного набора.
  6. Попробуйте раннюю остановку
  7. Изменить функцию потери
  8. Изменение архитектуры сети (переключение на ConvNets, LSTM и т. Д.).

В зависимости от вашей вычислительной мощности и времени вы можете установить ограничение на количество скрытых юнитов и скрытых слоев, которые вы можете иметь.


потому что в большой сети будет больше локальных минимумов.

Нет, это не совсем так, в действительности, поскольку количество входных измерений увеличивает вероятность застрять в локальных минимумах, уменьшается. Поэтому мы обычно игнорируем проблему локальных минимумов. Это очень редко. Производные по всем измерениям в рабочем пространстве должны быть нулевыми для локальных / глобальных минимумов. Следовательно, это очень маловероятно в типичной модели.


Еще одна вещь, я заметил, что вы используете линейную единицу для последнего слоя. Я предлагаю вам пойти на ReLu вместо этого. В общем, нам не нужны отрицательные значения в регрессии. Это уменьшит ошибку теста / поезда

Возьми это:

In MSE 1/2 * (y_true - y_prediction)^2

потому что y_prediction может быть отрицательным значением. Весь термин MSE может взорвать большие значения, так как y_prediction становится очень отрицательным или очень положительным.

Использование ReLu для последнего слоя гарантирует, что y_prediction является положительным. Следовательно, ожидается низкая ошибка.

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