Оптимизация в машинном обучении — это итеративный процесс поиска правильных прогнозов с учетом набора входных данных. На каждой итерации цель состоит в том, чтобы уменьшить погрешность между вашими прогнозируемыми значениями и фактическими значениями, также известными как истинные значения. Оптимизация в глубоком обучении имеет несколько реализаций. Хороший метод оптимизации потерь должен по возможности сходиться к глобальному минимуму и избегать таких ловушек, как плато, седла и локальные минимумы (если они есть). Алгоритмы оптимизации необходимы для обновления весов модели после прямого прохода. Градиентный спуск — популярный пример указанной оптимизации. Некоторые реализации Gradient Descent включают Momentum или AdaMax. Некоторые методы градиентного спуска:

Ванильный градиентный спуск

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

Формула:

  • дельта = — скорость обучения * градиент
  • тета += дельта

Импульс

Импульс — это модификация ванильного градиентного спуска, где к шагу функции добавляется некоторый импульс. Этот импульс помогает преодолеть определенные плато и локальные минимумы. Это работает путем добавления движения предыдущего шага к текущему рассчитанному шагу. Эта идея сродни скатыванию миски вниз по миске, и вместо того, чтобы остановиться на дне, она катится мимо центра в зависимости от своего начального импульса и медленно оседает на дне миски. Импульс помогает уменьшить колебания градиентного спуска и сглаживает движение к минимумам. Скорость затухания, умноженная на предыдущие шаги, помогает оценить, сколько предыдущего шага добавить к текущему шагу. Скорость затухания 0 похожа на ванильную сеть с большим трением, в то время как скорость затухания 1 всегда добавляет, что предыдущий шаг — это бесконечное движение без трения. Используется обычное значение скорости затухания от 0,8 до 0,9, которое обычно придает движению некоторое трение и обеспечивает достаточный импульс, чтобы шагать быстрее, но постепенно стабилизироваться.

Формула:

  • сумма_градиента = градиент + предыдущая_сумма_градиента * скорость затухания
  • delta = -learning_rate * sum_of_gradient
  • тета += дельта

Другая версия формулы импульса добавляет (1-decay_rate) для масштабирования градиента:

  • sum_of_gradient =(1-скорость_затухания) * градиент + предыдущая_сумма_градиента * скорость_затухания

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

AdaGrad (адаптивный градиент)

Проблема с импульсом заключается в том, что он может легко преодолевать минимумы или может идти по самому крутому пути, игнорируя другие возможные пути, хотя самый крутой путь не обязательно может быть самым быстрым путем к минимумам. AdaGrad наказывает исследование спуска в том же направлении, вводя сумму квадратов градиентов. Чем больше изучается градиент признаков, тем выше его сумма квадратов и, в конечном счете, тем меньше его шаг. Это отлично подходит для разреженных функций, которые в противном случае могли бы иметь только небольшие шаги в спуске. Каждый параметр функции имеет свою собственную скорость обучения для спуска, и поэтому алгоритм не сильно зависит от гиперпараметра скорости обучения. Недостаток Адаграда в том, что в конечном итоге он замедляется до незначительного спуска из-за быстрого увеличения суммы очков в квадратах.

Формула:

  • сумма_градиента_квадрата = предыдущая_сумма_градиента_квадрата + градиент²
  • дельта = -learning_rate * градиент/ sqrt(sum_of_gradient_squared)
  • тета+= дельта

RMSProp (среднеквадратичное распространение)

RMSProp — это улучшенная версия Adagrad, добавляющая коэффициент затухания к сумме квадратов градиентов. Он отдает приоритет текущему шагу градиента, уменьшая кумулятивный эффект прошлых градиентов. Это помогает ускорить сходимость, поскольку спуск продолжает увеличиваться, в отличие от Адаграда. Например, скорость затухания 0,9 будет применять шкалу (1–0,9) к текущему квадрату градиента, что на 10% больше по сравнению с Adagrad.

Формула;

  • сумма_градиента_квадрата = предыдущая_сумма_градиента_квадрата * скорость_затухания+ градиент² * (1- скорость_затухания)
  • delta=-learning_rate* градиент / sqrt(sum_of_gradient_squared)
  • тета+= дельта

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

Оптимизатор Adam использует лучшие части методов спуска и в настоящее время является самым популярным выбором. Он реализует алгоритмы Momentum (для скорости) и RMSProp (спуск по разреженным признакам). Параметр затухания — бета1 применяется к сумме градиентов (первый момент), обычно устанавливаемой примерно на 0,9. Второй параметр затухания — бета2 — также применяется к сумме квадратов градиентов, обычно равных примерно 0,999.

Формула:

  • сумма_градиента = предыдущая сумма_градиента * бета1 + градиент * (1 — бета1)[Импульс]
  • sum_of_gradient_squared = предыдущая_сумма_gradient_squared * бета2 + градиент² * (1-бета2)[RMSProp]
  • delta = -learning_rate * sum_of_gradient/ sqrt(sum_of_gradient_squared)
  • тета += дельта

Заключение

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