Расшифровка градиентного спуска пошагово

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

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

Давайте подумаем об этом так, представьте себе чашу. Любая точка на этой чаше - это текущая стоимость, и наша цель - достичь дна чаши, называемого «глобальным оптимумом». Именно этого и пытается достичь градиентный спуск. Он выбирает параметры, оценивает стоимость и затем регулирует эти параметры, чтобы получить более низкую стоимость, чем предыдущая, и, следовательно, постепенно приближаясь к минимуму. Как только мы достигнем глобального минимума или интуитивно дна чаши, у нас будут лучшие параметры для нашей функции гипотезы и, следовательно, мы сможем делать точные прогнозы.

Как это работает

Хорошо, теперь у нас есть общее представление о том, что такое градиентный спуск, поэтому давайте посмотрим, как он работает.

Начнем с инициализации наших параметров. Эта инициализация может иметь нулевое значение или небольшое случайное значение.

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

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

Скорость обучения

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

Из названия также совершенно ясно, что на самом деле это скорость, с которой ваша модель, как можно интуитивно предположить, обучается.

Мы уже видели основное уравнение градиентного спуска:

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

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

Теперь, когда у нас есть базовое представление о том, что такое градиентный спуск и как он работает, давайте взглянем на различные типы градиентного спуска:

1. Пакетный градиентный спуск

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

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

2. Стохастический градиентный спуск.

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

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

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

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

3. Мини-пакетный градиентный спуск.

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

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

Обычный диапазон размеров мини-партий составляет от 50 до 250, но обычно это зависит от области применения. Также интересно отметить, что пакетный градиентный спуск и SGD на самом деле являются двумя крайностями мини-пакетного градиентного спуска.

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

Вот и все!

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

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

  1. Https://www.holehouse.org
  2. Https://machinelearningmastery.com/gradient-descent-for-machine-learning/
  3. Https://ruder.io/optimizing-gradient-descent/
  4. Https://www.coursera.org/learn/machine-learning/home/