Оптимизация гиперпараметров для глубокой сети

В настоящее время я пытаюсь придумать новую структуру для CLDNN (сверточная, LSTM, глубокая нейронная сеть)

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

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

  1. Если я запускаю моделирование сети с временным набором гиперпараметров, как я могу измерить «доброту» гиперпараметров? Я думал о том, чтобы записать стоимость и точность обучения после N эпох для каждой симуляции.

  2. Поскольку каждая симуляция занимает относительно много времени (для моей сети требуется около 70 секунд для тренировки в течение одной эпохи), есть ли более быстрый способ проверить «качество» гиперпараметров без фактического выполнения полного обучения?

  3. Есть ли общий совет по оптимизации гиперпараметров?


person unknown_jy    schedule 24.01.2017    source источник


Ответы (1)


  1. Итак, в основном - чтобы измерить производительность по разным гиперпараметрам - лучше всего смоделировать процесс обучения вашего окончательного классификатора на обучающих данных для каждой настройки параметров, а затем сравнить различные результаты в отношении показателей, которые вы хотите гипероптимизировать.
  2. Если вы измените процесс обучения (например, установив фиксированную частоту эпох во время фазы гипероптимизации, а затем установив другую в финальном обучении), вы не должны ожидать, что результат, полученный на нескольких этапах тестирования, будет обобщенным. На мой взгляд, это может нанести вред вашему процессу оптимизации, особенно потому, что некоторым настройкам гиперпараметров требуется больше времени для получения хороших результатов (например, когда вы устанавливаете действительно высокий коэффициент отсева), а сокращение времени обучения при выборе наилучшего значения может иметь тенденцию создавать настройки гиперпараметров, которые дают лучший результат на более ранней стадии обучения более благоприятен.
  3. Good practices?:
    • choose random search, not grid search. Usually your training network is less sensitive with respect to some parameters, so making a full grid search is a lost of time,
    • если вы хотите попробовать более сложные методы, вы можете попробовать более сложные методы, например. байесовская гипероптимизация,
    • используйте перекрестную проверку или несколько раз запустите свою сеть с заданной настройкой гиперпараметров. Это связано с тем, что нейронные сети могут быть чувствительны к начальным весам, поэтому данные оценки могут плохо обобщаться,
    • распараллеливайте свой тренировочный процесс. Попробуйте запустить тренировочный процесс, например. на разных машинах, а потом просто объедините результаты.
person Marcin Możejko    schedule 25.01.2017
comment
Спасибо за развернутый ответ! Я предполагаю, что гипероптимизации нет ярлыка? Возможно, мне придется запустить оптимизацию целую неделю .. - person unknown_jy; 25.01.2017