Преимущества Адама
Многие глубинные сети сейчас рекомендуют использовать Адам в качестве алгоритма оптимизации, и я им постоянно пользуюсь, но мало что знаю о его параметрах, а о его характеристиках мало что слышал. нашел время, чтобы прочитать газеты и онлайн-материалы. Устроен следующим образом.
Адам является производным от двух алгоритмов: AdaGrad и RMSProp. Он сочетает в себе основные преимущества двух алгоритмов, а также вносит некоторые собственные инновации. У него есть несколько преимуществ:
- Он эффективен в вычислительном отношении, прост в реализации и использует очень мало памяти.
- Размер шага обновления не имеет ничего общего с размером градиента, только альфа, бета_1, бета_2. И они определяют теоретический верхний предел размера шага.
- Для целевой функции нет стационарного требования, то есть функция потерь может изменяться во времени.
- Может лучше справляться с шумными образцами и имеет естественный эффект отжига
- Может лучше обрабатывать разреженные градиенты, то есть градиент равен 0 на многих шагах.
Алгоритм Адама
Псевдокод Адама на самом деле очень прост для понимания, текстура такова: оторигинальный
Глядя вниз из цикла while, первая строка — это шаг обновления,
Вторая строка предназначена для расчета градиента,
Третья строка вычисляет оценку первого момента, среднего
Четвертая строка вычисляет оценку расстояния второго порядка, то есть дисперсию, которая аналогична дисперсии и является разновидностью расстояния второго порядка.
Пятая и шестая строки корректируют среднее и переменную, поскольку начальные значения средних и переменных равны 0, они будут смещены к 0, что уменьшит влияние этого смещения после обработки.
Седьмая строка — градиентный спуск. Обратите внимание на пост-альфаградиентоценивается с помощью расстояний первого и второго порядка.
Принцип конструкции АДАМ
Почему он разработан таким образом? Эндрю Нг дал свое объяснение в своем публичном классе, он думает, что Адама на самом деле можно рассматривать как комбинацию алгоритмов Momentum и RMSProp.
Алгоритм импульса
Среди них V_dw и V_db соответствуют вышеуказанному mt, а Ng любит писать w и b отдельно, по сути, все они являются параметрами.
Как показано Ng выше, Momentum оценивает среднее значение градиента, так что градиентПоложительные и отрицательные шаги в вертикальном направлении постепенно отменяются, а шаги в горизонтальном направлении постепенно накапливаются., тем самым уменьшая колебания и ускоряя скорость обучения.
Можно считать:Для этой оценки среднего эффективный сигнал фактически извлекается из шума, поскольку направление сигнала не меняется в течение определенного периода времени. В то же время шум, такой как белый шум, имеет среднее значение 0. После накопления нескольких белых шумов они компенсируют друг друга.
Конечно, реальный шум может быть очень сложным, если размер шага слишком велик или затухание слишком мало, все равно будут осцилляции или даже расходимость.
Алгоритм RMSProp
Задача, которую должен решить RMSProp, аналогична задаче Momentum, но начинается с расстояния второго порядка.
S_dw на приведенном выше рисунке соответствует vt в Адаме. Его идея заключается в том, что для градиента с относительно большой флуктуацией его дисперсия должна быть очень большой, поэтому он использует градиент для удаления квадратного корня из расстояния второго порядка в качестве градиента градиентного спуска, что также делает его на по вертикальной оси, размер шага уменьшается, а размер шага по горизонтальной оси относительно увеличивается.
Это также источник дизайна mt и vt. В то же время, поскольку mt и vt включают в себя всю историческую информацию о градиенте, они могут лучше справляться с ситуацией разреженного градиента.
Улучшения Адама
Улучшение Адама в основном отражено в двух местах, а именно в коррекции смещения в пятой и шестой строках псевдокода и вычислении градиента в седьмой строке.
Строки 5 и 6 можно легко понять следующим образом: поскольку m0 и v0 изначально равны 0, полученные в начале m и v должны быть смещены в сторону 0, поэтому мне нужно увеличить их абсолютные значения. Если предположить, что бета1 = 0,5, t = 1, то после корректировки m = m / 0,5 = 2m, что возвращает m обратно от 0. Конечно, под этим есть теоретическая база: заинтересованные студенты могут пойти посмотреть статью, и ее вывод не представляет сложности.
На самом деле, наиболее важной является строка 7. Во-первых, в отсутствие шума m/sqrt(v) приблизительно равно +/- 1, поэтому верхний предел размера шага в основном определяется альфой. Когда t относительно мало, бета1 и бета2 также будут иметь некоторое влияние, потому что в это время m и v все еще смещены, а бета1 и бета2 необходимо скорректировать в строках 5 и 6. В исходном тексте говорится:
Пусть размер шага ∆ t =α ⋅m ^ t / v ^ t − − √
Когда 1 - бета1 > sqrt(1 - бета2),
∆ t ≤α ⋅(1−β 1 )/ 1 −β 2 − −− −− √
в других случаях,
Δt ≤α
Итак, именно из-за формы m/sqrt(v) исключается величина самого градиента.Предположим, вы умножаете k на целевую функцию, тогда это k появится в числителе и знаменателе одновременно, который будет использоваться при обновлении градиента.
По замыслу автора оригинала, в машинном обучении мы часто можем легко узнать диапазон оптимальных параметров, чтобы соответствующим образом установить значение альфы, поэтому эта функция Адама может облегчить вам установку альфы. Кроме того, m/sqrt(v) можно рассматривать как оценку градиента «отношение сигнал-шум» (SNR), где m — количество сигнала, а v — количество шума, согласно нашему описанию в Momentum. и RMSProp. Когда шум большой, размер шага маленький, когда шум маленький, размер шага большой. Это именно то, что нам нужно, чтобы Адам мог хорошо обрабатывать зашумленные сэмплы.Кроме того, по мере приближения к оптимальной точке шум обычно становится очень большим, либо реальный сигнал становится очень слабым, а отношение сигнал/шум обычно будет близок к 0, поэтому размер шага станет меньше, что, естественно, имеет эффект отжига (отжига)