18

Я построил структуру CLDNN (сверток, LSTM, глубокую нейронную сеть) для задачи классификации необработанных сигналов.Оптимизация гиперпараметров для глубоких обучающих структур с использованием байесовской оптимизации

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

Я изучал различные способы оптимизации гиперпараметров (например, случайных или поиск по сетке) и узнал о Байесовской оптимизации.

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

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

  1. Как настроить байесовский оптимизации с относительно глубокой сети? (Что такое функция затрат мы пытаемся оптимизировать?)
  2. Что такое функция Я пытаюсь оптимизировать? Это стоимость проверки, установленной после N эпох?
  3. Является ли мясная мята хорошей отправной точкой для выполнения этой задачи? Любые другие предложения по этой задаче?

Я был бы очень признателен за понимание этой проблемы.

+0

Если вы открыты для любого инструмента для оптимизации гиперпараметра, вы проверили TPOT http://www.randalolson.com/2016/05/08/tpot-a-python-tool-for-automating-data-science / –

ответ

12

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

Прежде всего, позвольте мне вкратце объяснить эту часть. Байесовские методы оптимизации нацелены на сделку по разведке и разработке в multi-armed bandit problem. В этой задаче есть неизвестная функция, которую мы можем оценить в любой точке, но каждая оценка затрат (прямая штрафная или альтернативная стоимость), и цель состоит в том, чтобы найти ее максимум, используя как можно меньше испытаний. В принципе, компромисс таков: вы знаете функцию в конечном наборе точек (некоторые из которых хороши, а некоторые - плохие), поэтому вы можете попробовать область вокруг текущего локального максимума, надеясь улучшить ее (эксплуатацию), или вы можете попробовать совершенно новую область пространства, которая потенциально может быть намного лучше или хуже (разведка) или где-то посередине.

Байесовские методы оптимизации (например, PI, EI, UCB), постройте модель целевой функции с использованием Gaussian Process (GP) и на каждом шаге выберите наиболее «перспективную» точку на основе их модели GP (обратите внимание, что «перспективные «могут быть определены по-разному различными методами»).

Вот пример:

sin(x)*x

Истинная функция f(x) = x * sin(x) (черная кривая) на интервале [-10, 10]. Красные точки представляют собой каждое испытание, красная кривая - это GP среднее значение, синяя кривая - среднее плюс или минус стандартное отклонение. Как вы можете видеть, модель GP не всегда соответствует истинной функции, но оптимизатор довольно быстро идентифицировал «горячую» область вокруг -8 и начал ее использовать.

Как настроить байесовскую оптимизацию в отношении глубокой сети ?

В этом случае пространство определяется (возможно, преобразованными) гиперпараметрами, обычно многомерным единичным гиперкубом.

Например, предположим, что у вас есть три гиперпараметры: скорость обучения α in [0.001, 0.01], Регуляризатор λ in [0.1, 1] (как непрерывный) и скрытый размер слоя N in [50..100] (целое число). Пространством для оптимизации является трехмерный куб [0, 1]*[0, 1]*[0, 1]. Каждая точка (p0, p1, p2) в этом кубе соответствует троице (α, λ, N) следующего преобразования:

p0 -> α = 10**(p0-3) 
p1 -> λ = 10**(p1-1) 
p2 -> N = int(p2*50 + 50) 

Что такая функция Я пытаюсь оптимизировать? Это стоимость проверки после N эпох?

Исправить, целевая функция - точность проверки нейронной сети. Очевидно, что каждая оценка стоит дорого, потому что для обучения требуется как минимум несколько эпох.

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

Является ли мясная мята хорошей отправной точкой для выполнения этой задачи? Любые другие предложения для этой задачи?

spearmint - хорошая библиотека, вы можете определенно работать с этим. Я также могу рекомендовать hyperopt.

В моем собственном исследовании я закончил тем, что написал свою небольшую библиотеку, в основном по двум причинам: я хотел закодировать точный байесовский метод для использования (в частности, я нашел portfolio strategy UCB и PI быстрее, чем что-либо еще, в моем случае); плюс есть еще один способ, который может сэкономить до 50% времени обучения под названием learning curve prediction (идея состоит в том, чтобы пропустить полный цикл обучения, когда оптимизатор уверен, что модель не учится так же быстро, как в других областях). Я не знаю ни одной библиотеки, которая ее реализует, поэтому я сама ее закодировала, и в итоге она окупилась. Если вам интересно, код on GitHub.

 Смежные вопросы

  • Нет связанных вопросов^_^