Часть 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