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

Прежде чем мы перейдем к градиентному спуску в качестве стратегии оптимизации, нам нужно рассмотреть, что такое градиент.

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

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

Теперь мы можем определить градиентный спуск. Этот алгоритм оптимизации находит значения параметров функции, которые минимизируют функцию стоимости. Функция стоимости — это просто метод оценки, выбранный для сообщения о производительности алгоритма. Подробнее о функциях стоимости читайте в этой статье.

Градиентный спуск находит эти оптимальные параметры, определяя локальный минимум дифференцируемой функции посредством итеративного процесса. Следующее уравнение описывает градиентный спуск:

В этом уравнении:

  1. b описывает следующую итерацию
  2. a описывает текущую итерацию: градиентный спуск начинается со случайных значений a и b, а затем продолжает обновлять эти значения на основе частных производных первого порядка.
  3. знак минус описывает аспект минимизации градиентного спуска.
  4. 𝛾 описывает скорость обучения, которая будет более подробно обсуждаться далее в статье.
  5. член градиента описывает направление наискорейшего спуска

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

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

Вы можете проверить, хорошо ли работает ваша скорость обучения, отложив количество итераций по оси x и значение вашей функции стоимости по оси y по мере выполнения оптимизации:

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

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

Существует три различных типа градиентного спуска:

  1. Пакетный градиентный спуск. Это классический градиентный спуск, также называемый «ванильным» градиентным спуском. Этот метод вычисляет ошибку каждого примера в наборе обучающих данных, но обновляет модель только после оценки всех обучающих выборок. Весь этот процесс составляет один цикл (эпоху обучения). Хотя этот процесс эффективен в вычислительном отношении (он обеспечивает стабильную сходимость и стабильный градиент ошибки), эта эффективность иногда приводит к состоянию сходимости, которое не является абсолютным лучшим результатом, на который способна модель.
  2. Стохастический градиентный спуск (SGD): этот метод градиентного спуска вычисляет ошибку каждого тренировочного наблюдения отдельно. SGD использует каждое наблюдение для оценки градиента, а затем делает шаг в этом направлении. Хотя каждое отдельное наблюдение дает плохую оценку истинного градиента, при достаточной случайности параметры будут сходиться к адекватной глобальной оценке. SGD также очень хорошо работает с большими наборами данных: поскольку он учитывает только одно наблюдение за раз, он может обрабатывать очень большие наборы данных, которые не помещаются в памяти.
  3. Мини-пакетный градиентный спуск: этот метод градиентного спуска является лучшим из обоих миров. Он разбивает набор обучающих данных на небольшие пакеты и обновляет градиентный спуск для каждого из этих пакетов. Это создает баланс между эффективностью пакетного градиентного спуска и мощностью SGD. Это основной алгоритм при обучении нейронной сети, а также наиболее распространенный тип градиентного спуска, связанный с глубоким обучением.

Так что у нас это! Градиентный спуск, объяснение. Следите за статьей (от меня) о том, как реализовать градиентный спуск, а пока ознакомьтесь с этими замечательными ресурсами:

Реализация градиентного спуска в Python

Реализация оптимизации градиентного спуска с нуля

Линейная регрессия с использованием градиентного спуска

Пошаговая реализация градиентного спуска и обратного распространения ошибки