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

Для начала давайте сначала посмотрим на функцию:

При построении графика получаем:

Если бы мы теперь посмотрели вниз по оси y этой функции:

мы получаем проекцию прямой линии, и когда мы смотрим вниз по оси x:

мы получаем восходящую параболу для положительного y и нисходящую параболу для отрицательного y вдоль обеих осей.

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

Что такое градиент

Дана многомерная скалярная функция f(x), где x равно [x_1,x_2,…,x_n], градиент обозначается как векторное поле ∇f,, значения которого являются частными производными от f в некоторой точке.

Другой способ думать о градиенте состоит в том, что он укажет вам направление максимального увеличения. Примером этого является следующее изображение, на котором градиент (синие линии) указывает на положение максимального увеличения (темная область):

Что касается нашего примера проблемы, показанного в начале, вы должны представить его градиент как:

Градиентный спуск

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

Предпосылки

Чтобы мы могли применить градиентный спуск к функции, нам сначала нужно убедиться, что наша функция подходит, а именно:

  • Непрерывный
  • дифференцируемый
  • Выпуклый
  • следует непрерывности Липшица

и если все вышеперечисленное применимо, можно начинать.

Глубокое погружение в математику

Учитывая задачу поиска локального минимума многомерной функции f(x), мы можем выполнить это с помощью градиентного спуска:

где мы сначала делаем начальное приближение в x_0, затем используем приведенное выше уравнение для вычитания x_0 по его градиенту ∇f(x_0) и обучению скорость η (поясняется позже), что дает нам новое приближение x_1. Это новое приближение направляет нас в направлении, противоположном градиенту предыдущей точки x_0 и в результате приближает нас к локальному минимуму. Мы можем подключить это новое приближение и повторять следующий процесс, пока не будет найдено достаточное приближение.

Скорость обучения (размер шага)

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

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

Выбор скорости обучения

При выборе этой скорости обучения необходимо учитывать два наиболее важных фактора:

  • Затухание, которое позволяет установить скорость обучения на постоянном уровне и избежать колебаний.
  • Импульс, который позволяет нам увеличить скорость обучения, когда градиент стоимости ошибки движется в одном и том же направлении в течение длительного периода времени, также помогает избежать локальных минимумов с возможностью «перекатывать» небольшие шишки

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

Постоянная. Как упоминалось ранее, существуют различные причины, по которым вы можете оставить скорость обучения постоянной.

где a — некоторая константа.

На основе времени — изменяет скорость обучения в зависимости от скорости обучения предыдущей временной итерации:

где d обозначает параметр затухания, а n — шаг итерации.

На основе шагов. Изменяет скорость обучения на основе некоторых предопределенных шагов:

где η_0 — первая скорость обучения, d — параметр затухания, говорящий нам, насколько скорость обучения должна изменяться при каждом падении, а r обозначает частоту отбрасывания (r=10 означает отбрасывание каждые 10 итераций). Функция Floor используется для сброса входного значения до 0 для всех значений, меньших 1.

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

где d - (еще раз) параметр затухания.

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

Преимущества градиентного спуска

Применение градиентного спуска дает следующие преимущества:

  • Параметрический (может применять оптимизацию гиперпараметров)
  • Меньше ограничений с точки зрения дифференцируемости функции
  • Возможность обработки стационарных точек

Недостатки градиентного спуска

Однако со всеми вещами есть несколько недостатков, за которыми стоит следить, некоторые из них:

  • Он находит только локальные минимумы, а не глобальный минимум (это можно улучшить с помощью настройки гиперпараметров, однако все же важно следить за этим).
  • Если скорость обучения слишком велика, мы можем никогда не сойтись к локальному минимуму, потому что каждый раз промахиваемся. И наоборот, если скорость обучения слишком мала, у нас будет больше шансов сойтись, но мы предпримем гораздо больше шагов, чем необходимо.

Заключение

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

Источники:

https://en.wikipedia.org/wiki/Gradient_descent

https://www.coursera.org/learn/multivariate-calculus-machine-learning?specialization=mathematics-machine-learning

https://www.baeldung.com/cs/gradient-descent-vs-newtons-gradient-descent

https://fr.wikipedia.org/wiki/Градиент

https://www.mygreatlearning.com/blog/understanding-learning-rate-in-machine-learning/

https://en.wikipedia.org/wiki/Learning_rate

https://calculus.subwiki.org/wiki/Gradient_descent