Pull to refresh

Comments 9

Будьте так добры, расскажите поподробнее, поточнее и конкретнее про «овраги», «седловые» точки и прочие локальные минимумы.
Ведь все оптимизаторы суть выпуклые функции и возникает недопонимание.
Вообще, направление довольно интересное. Имхо, его можно свести к другой задаче: нарисовать модель ландшафта за минимальное число шагов (а потом уже по этой модели вычислять минимум). Каждый шаг — это замер реального ландшафта в определенной точке.

И я бы решал эту задачу совсем по-другому. Я бы решал путем нанесения «сеток» со все уменьшающимся шагом. Таким образом после каждой новой серии замеров — появляется все более уточненная карта. Да, это намного более ресурсоемкий метод, но от него можно ожидать намного бОльшей точности в итоге — он все еще может пропустить впадины, но резкие (сильно меньше шага его последней сетки). А чем резче перепад на коротком промежутке — тем выше шанс, что это банальный мусор в данных и попытки его учесть дальше бессмысленные — т.е. эмпирически где-то есть граница, точнее которой нет смысла снижать шаг.
Я бы соотнес этот алгоритм с существующими так:
1) уменьшение шага сетки. Это идея постепенного увеличения точности. Сейчас в статье ближе всего: «Динамическая корректировка количества обновлений» (уменьшение learning_rate со временем).
2) само использование сетки. У меня происходит из идеи SGD. Ведь почему он оказывается лучше простого градиента — потому что у него из-за вероятностной природы появляется шанс вылезти из локального минимума. И чем больше эта вероятностная составляющая — тем больше шанс.

Все текущие алгоритмы, как мне кажется — они слишком оптимистичны по своей архитектуре — они все подразумевают, что двигаются в правильном направлении на основе замеров Х последних точек (где-то всего за 1 последний замер, где-то побольше). А такая методика плохо подходит для реальных сложных зависимостей.

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


Сетку тоже большую не сделаешь. У каждой ячейки такой сетки будет несколько миллионов соседей.


Пока строится ландшафт, градиентные методы уже сойдутся к какому-то локальному методу.


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


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


Все текущие алгоритмы, как мне кажется — они слишком оптимистичны по своей архитектуре — они все подразумевают, что двигаются в правильном направлении на основе замеров Х последних точек (где-то всего за 1 последний замер, где-то побольше).

Методов оптимизации намного больше, чем описано в этой статье и они часто очень изощрённые. Методы оптимизации развиваются сотни лет.


В градиентных методах измеряется, кстати, измеряется не ландшафт, а градиент (а то и гессиан), это не просто информация о значении в точке, но и сведения о форме в бесконечно малой окрестности.

UFO just landed and posted this here

Как базовое решение используйте Adam. Он хорошо себя зарекомендовал. Несмотря на то, что постоянно публикуют новые методы, часто оказывается, что особого улучшения сходимости они не дают. И даже Adam часто можно заменить на SGD + momentum, только нужно учить дольше.


А вот когда базовое решение получено и хочется его улучшить, тогда уже всё очень сильно зависит от задачи, от стратегии изменения learning rate, от гиперпараметров, от используемых трюков (weight averaging, label smoothing и т.д.)


Со взрывом градиентов можно бороться по-разному. Тут тоже всё зависит от задачи. Есть масса методов: от регуляризаций до клиппинга.

Очень интересно и познавательно все написано. Оптимизм на первом месте.

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

Спасибо за статью! Скажите пожалуйста, а применяются ли методы второго порядка в задачах обучения? Например метод множителей Лагранжа и его производные типа SQP

Для обучения нейронных сетей методы множителей Лагранжа и SQP обычно не применяются, так как эта задача не относится к оптимизации с ограничениями.


Методы второго порядка применяют для совсем маленьких моделей или когда нужно оптимизировать, например, вход. Тогда ещё можно встретить ньютоновские или квазиньютоновские методы (например, L-BFGS). Для полноразмерных же моделей методы второго порядка слишком ресурсозатратны. Есть, конечно, методы вроде K-FAC, но с ними много проблем, а выигрыша по сравнению с методами первого порядка почти нет.


В общем, Adam — наше всё. :)

Sign up to leave a comment.