Часть 1: Алгоритмы оптимизации в глубоком обучении. (Алгоритмы обучения)

Часть 2: Алгоритмы оптимизации в глубоком обучении. (функции активации)

Часть 3: Алгоритмы оптимизации в глубоком обучении. (Методы инициализации)

Часть 4: Алгоритмы оптимизации в глубоком обучении. (Методы регуляризации)

Алгоритмы обучения

Глубокое обучение — одна из таких областей, которая постоянно развивается благодаря доступности большего количества данных, большего количества вычислений и большей демократизации. Одним из таких примеров являются недавние разработки в ChatGPT. Часто, говоря об обучении сетей глубокого обучения, очевидным методом является метод градиентного спуска.

Поскольку эволюция продолжается и из-за наличия большего количества данных, является ли градиентный спуск лучшим подходом или могут быть какие-либо улучшения или места для инноваций для нового алгоритма? Для оптимизации DL может быть несколько областей, которые могут стать ключевыми для обсуждения: лучшие алгоритмы обучения, лучшие методы инициализации, лучшие функции активации и лучшие методы регуляризации. Но в этой статье мы коснемся некоторых из лучших алгоритмов оптимизации, которые используются для обучения/обучения алгоритмов глубокого обучения.

Градиентный спуск:

Давайте сначала начнем с понимания алгоритма GD (градиентного спуска) и того, что у этого алгоритма есть проблема, поэтому есть место для импровизации.

Для иллюстраций все изображения, используемые в статье, будь то 2D или 3D, будут представлять собой поверхность с 3 областями: красной, белой и синей.

красная область: более высокие значения потерь

белая область: потери не высокие и не низкие.

синяя область: потери низкие

В идеале потери будут минимальными в темно-синей области. Функция потерь будет стремиться достичь этой области.

На приведенном выше изображении градиент медленно двигался в красной области, и ему потребовалось много эпох, чтобы перейти от светло-красной к синей области, и как только он достиг долины (начиная с синего), градиент внезапно сделал большой скачок. Между тем, когда градиент достигает синей области, он снова возвращается к медленному движению. Это очевидно, если заметить, что градиенты, если поверхность плоская, GD занимает много эпох, чтобы добиться прогресса, в то же время для крутых градиентов поверхности они движутся довольно быстро.

давайте разберемся, почему такое поведение наблюдается с разными поверхностями.

На приведенном выше изображении изменения производной не одинаковы для одного и того же изменения x, если область крутая, изменение производной огромно, а для пологих областей изменения малы. эта интуиция объясняет причины медлительности GD на поверхности ошибок. Поскольку GD ненадежен и иногда требует больших затрат времени и вычислений, это является одной из причин, побуждающих выйти за рамки GD и найти лучшие подходы.

GD на основе импульса:

GD на основе импульса импровизирован, чтобы исправить проблемы, обнаруженные с помощью GD.

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

Приведенное выше уравнение V(t) используется для накопления истории на основе предыдущих историй V(t-1). Поскольку V(t-1) умножается на гамму гиперпараметра, это означает, что более высокий вес придается недавней истории, а вес экспоненциально уменьшается по мере того, как история уходит в прошлое. Это ясно из приведенного ниже вывода.

Из приведенного выше изображения видно, что GD на основе импульса быстрее сходится по сравнению с GD, но проблема заключается в том, что даже на пологих склонах он делает большие шаги. Градиент вокруг минимумов потерь делает много шагов с разворотами, чтобы достичь фактических минимумов из-за переносимого импульса.

Это приводит к обсуждению того, что быстрое движение всегда помогает, и во многих случаях это может привести к превышению цели. Для решения этой проблемы был изобретен Нестеровский ускоренный ГД (НАГ).

Нестеров Ускоренный ГД:

NAG обновляет уравнения почти так же, как Momentum GD, с той лишь разницей, что NAG сначала движется по истории V(t-1) и берет производную по w(temp), чтобы двигаться дальше в этом направлении w(temp). NAG обновляет градиенты по w(temp) вместо w(t-1), как в Momentum GD.

в NAG с уменьшенным -n*Δw(t) движения истории малы. История v(t) в этом случае по-прежнему будет влиять на общее обучение, но меньше.

На приведенном выше изображении видны уменьшенные развороты в минимумах.

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

Адаптивное обучение:

Вышеупомянутые алгоритмы работают хорошо, но часто глубокое обучение в реальности ставит другую задачу. Если набор данных имеет плотные или разреженные данные в этих условиях, GD или NAG на основе Momentum не будут работать должным образом. в идеале обновления должны происходить только для плотных объектов, а градиент перемещается только в одном направлении, а для разреженных объектов может быть не так много обновлений. В этом случае DL необходимо адаптивное обучение, которое работает на основе частоты происходящих обновлений. Чтобы решить эту проблему, вводится новый алгоритм под названием Adagrad.

Адаград:

Интуиция для Adagrad заключается в уменьшении скорости обучения параметров пропорционально их истории обновления (меньше обновлений, меньшее затухание).

Из уравнения Адаграда история делится для обновления весов w (t + 1), интуиция, стоящая за этим, для плотных функций с мини-пакетом для интуиции, Δw будет суммироваться для всех входных данных в функции ( всегда включен, так как это плотная функция) результирующее число будет большим, и такое же число будет добавлено к истории v (t-1), поэтому v (t) будет ненулевым и высоким. v(t) используется при делении, и, следовательно, wt+1 приведет к небольшому числу, это именно то, что мы хотели для плотного признака.

Для разреженных функций: с тем же мини-пакетом большая часть входных данных будет равна 0, история очень мала (v-1), и, следовательно, результирующий вес будет маленьким, а внутренний vt будет небольшим значением и обновленным значением + 1 будет на более высокой стороне.

В Adgrad и w, и b с самого начала движутся к минимуму, хотя функция, связанная с W, разрежена. В отличие от NAG/импульса GD для многих эпох w будет равно 0 и не будет сильно перемещаться, поскольку оно разрежено, но b прогрессирует.

Но одним из основных недостатков алгоритма адаптивной скорости обучения Adagrad является агрессивное затухание по мере роста знаменателя, и скорость обучения может почти стать 0 и полностью убить обучение (не очень хорошо для параметров, соответствующих плотным признакам), к концу многих эпох может даже не обновляться. для решения этой проблемы на помощь приходит RMSProp.

RMSProp:

Мы видели проблему с Adagrad, интуитивно нам нужно найти новый алгоритм обучения, который не затухает в знаменателе и предотвращает его быстрый рост.

В RMSProp обновление w(t+1) остается таким же, как в Adagrad, но способ создания истории изменился. Сумма экспоненциального затухания берется в опоре RMS, хотя в этом берется история, значение не взорвется из-за гиперпараметра бета.

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

Адам:

В истории GD, основанной на импульсе, к которой привыкли, кумулятивная история движется быстро на быстрой поверхности, не застревает и не занимает более длительные эпохи. В основном набирает обороты. В RMSProp история использовалась для настройки скорости обучения, подходящей для обучения.

И GD, и NAG, и RMSProp на основе импульса имеют свои преимущества. Можем ли мы разработать алгоритм обучения, сочетающий в себе лучшее из обоих миров? Именно тогда Адам приходит нам на помощь. В идеале Адам представляет собой комбинацию алгоритмов обучения, основанных на импульсе и истории.

Он поддерживает 2 истории, одну для поддержания импульса, а другую для контроля скорости обучения. Помимо этих двух, Адам делает то, что называется предвзятостью.

На изображении выше показан бегущий Адам и то, как он сходится.

На практике для многих задач глубокого обучения Адам с мини-пакетом — лучшая комбинация.

Использованная литература:

Все изображения и обучение взяты с Padhai: https://padhai.onefourthlabs.in/courses/dl-feb-2019