LinkedIn: www.linkedin.com/in/ashwin-singh- 403116173

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

Зачем нужны продвинутые оптимизаторы?

Мы использовали алгоритмы пакетного градиентного спуска, пакетного стохастического градиентного спуска и простые алгоритмы градиентного спуска для решения задач оптимизации. Для функции потерь L (w) у нас могут быть следующие возможности:

Наклон в максимумах, минимумах и седловой точке равен 0. Функция потерь логистической регрессии, линейной регрессии и SVM содержит только минимумы или максимумы, но не седловые точки, потому что функция выпуклая. Седловые точки присутствуют в функции потерь нейронных сетей, потому что функция сложная. Поэтому нам нужны более совершенные алгоритмы решения задач оптимизации.

Используя SGD, если мы застряли в локальных минимумах или седловых точках, мы не выберемся из этого, потому что член градиента становится равным нулю. Таким образом, w_new становится равным w_old. Все зависит от того, как мы инициализируем w. Мы получим разные минимумы для разных инициализаций.

Если мы инициализируем спуск с холма в 3D, мы получим контуры. В основном мы получаем номер для каждого контура. Если число увеличивается от внешнего контура к внутреннему, мы говорим, что это локальный максимум, а если число уменьшается от внешнего контура к внутреннему, мы говорим, что это локальный минимум.

Нормальный SGD и его недостатки

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

Шумное обновление происходит не из-за зашумленных точек данных. Это потому, что мы не берем градиент каждой точки данных, а затем обновляем вес. Вместо этого мы берем среднее значение градиента по размеру пакета. Вот почему мы получаем шумные обновления. Используя SGD, градиент выстреливает в разные стороны. Это похоже на игру в пинг-понг, где, если у вас есть только 2 клюшки, вашему мячу потребуется много времени, чтобы добраться до верхней лунки, потому что у вас очень мало точек для управления траекторией мяча. Но если у вас есть несколько клюшек на нескольких этапах, у вас будет больше возможностей для управления мячом из разных положений, и ваш мяч не будет перемещаться по всему столу.

Пакетный SGD с Momentum

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

Этот метод также помогает в шумоподавлении. Новые обновления, сформированные с использованием импульса, удаляются. По сути, используя импульс, мы толкаем мяч с холма. Мяч накапливает импульс по мере того, как катится вниз, становясь все быстрее и быстрее по пути (пока он не достигнет своей конечной скорости, если есть сопротивление воздуха, то есть γ ‹1). То же самое происходит с нашими обновлениями параметров: член импульса увеличивается для измерений, градиенты которых указывают в тех же направлениях, и уменьшает обновления для измерений, градиенты которых меняют направление. В результате мы получаем более быструю сходимость и меньшие колебания.

Ускоренный градиент Нестерова (НАГ)

В этом обновлении мы не обновляем веса (w_old), используя импульс и градиент в w_old в текущей итерации одновременно, но мы сначала обновляем текущие веса (w_old), используя импульс, чтобы получить промежуточное местоположение (w '), теперь мы обновляем эти текущие промежуточные веса с использованием градиентов, рассчитанных на этих промежуточных весах, чтобы получить окончательные обновленные веса (w_new).

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

Когда мы приближаемся к минимуму w, мы можем выйти за фактический минимум из-за экспоненциально взвешенной суммы + градиента предыдущей точки.

  1. SGD с ускоренным градиентом Нестерова: теперь мы пересекли минимум после движения в направлении импульса; Итак, найдя градиент в этой точке (наклон положительный), нам нужно двигаться в противоположном направлении, чтобы ускорить сходимость, найдя градиент по импульсу (мы достигнем импульса раньше, чем SGD + импульс).
  2. SGD с импульсом: мы переместимся на большее расстояние, чем NAG, который будет совершать колебания, что приводит к медленной сходимости (в конечном итоге мы дойдем до решения, но может потребоваться больше итераций).

АдаГрад

В SGD и SGD + momentum у нас была одинаковая скорость обучения для каждого веса. Но некоторые функции в наборе данных разреженные (BoW), а некоторые - плотные (w2v). Когда наши данные имеют редкие характеристики, сохранение или единая скорость обучения для всех наших весов не очень хорошо для нашей оптимизации. Итак, в AdaGrad у нас будет адаптивная скорость обучения, то есть один вес для каждого параметра.

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

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

Ададелта и RMSProp

Adadelta - это расширение Adagrad, которое стремится снизить его агрессивную, монотонно снижающуюся скорость обучения. Вместо неэффективного хранения w предыдущих квадратов градиентов, сумма градиентов рекурсивно определяется как убывающее среднее всех прошлых квадратов градиентов.

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

RMSProp = Это просто Adadelta со значением γ по умолчанию, равным 0,95. В остальном все остается прежним. Это значение предварительно задано в keras.

Адам (Адаптивная оценка момента)

Адам - ​​еще один алгоритм, который использует адаптивную скорость обучения для обновления весов. Это один из самых известных оптимизаторов 2018 года.

m_t и v_t - это оценки первого момента (среднего) и второго момента (нецентрированная дисперсия) градиентов соответственно, отсюда и название метода. Поскольку m_t и v_t инициализируются как векторы нулей, авторы Адама замечают, что они смещены в сторону нуля, особенно на начальных временных шагах, и особенно когда скорости затухания невелики (т.е. β1 и β2 близки к 1).

Использование eda в g_t было обсуждено как выгодное, когда мы обсуждали SGD с импульсом. Таким образом, мы можем рассматривать Адама как кульминацию идей, в которых мы используем eda как g_t, так и g_t в квадрате, чтобы ускорить сходимость.

Оптимизаторы в керасе

Было достаточно теории и математики, так что теперь давайте перейдем к коду. Мы будем иметь дело с набором данных MNIST. Вы можете скачать набор данных здесь. Набор данных MNIST - это простой набор данных компьютерного зрения. Он состоит из изображений рукописных цифр размером 28 х 28 пикселей. Набор данных имеет 784 измерения. Имеется 10 меток классов от 0 до 9.

Теперь мы определим нашу архитектуру слоя. Мы будем использовать простой Deep MLP, чтобы построить нашу архитектуру с 3 скрытыми слоями и слоем softmax.

Сначала мы будем использовать SGD в качестве оптимизатора.

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

Теперь мы будем использовать оптимизатор AdaGrad.

Теперь мы будем использовать оптимизатор Adadelta.

Теперь мы будем использовать оптимизатор RMSProp.

Теперь воспользуемся оптимизатором Adam.

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

Какой оптимизатор выбрать когда?

Выбор SGD, SGD + Momentum и NAG в качестве оптимизаторов не поможет нам при работе с разреженными данными. И этим оптимизаторам требуется большее количество эпох, следовательно, больше времени на обучение, и если у нас есть большой набор данных, нам, возможно, придется ждать огромное количество времени, чтобы обучить только наши модели. SGD - это простой оптимизатор, который хорошо работает для выпуклых функций, но не одинаково хорошо работает для сложных функций, таких как Deep NN, потому что в сложных функциях мы можем застрять в седловых точках и локальных минимумах, а SGD не способен принимать нам из этого.

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

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

Www.appliedaicourse.com



Https://blog.paperspace.com/content/images/2018/05/challenges-1.png