"Машинное обучение"

Объяснение алгоритма градиентного спуска

С пошаговым математическим выводом

Показатель:

  • Основы градиентного спуска.
  • Основные правила вывода.
  • Градиентный спуск с одной переменной.
  • Градиентный спуск с двумя переменными.
  • Градиентный спуск для функции среднеквадратичной ошибки.

Что такое градиентный спуск?

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

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

  • Начнем с начальных значений.
  • Рассчитайте стоимость.
  • Обновите значения с помощью функции обновления.
  • Возвращает минимизированную стоимость для нашей функции затрат

Зачем нам это нужно?

Обычно мы находим формулу, которая дает нам оптимальные значения для нашего параметра. Но в этом алгоритме он сам находит значение! Интересно, правда?

Формула:

Некоторые основные правила вывода:

(A) Скалярное множественное правило:

(B) Правило суммы:

(C) Правило силы:

(D) Правило цепочки:

Давайте рассмотрим различные примеры, чтобы лучше понять это.

Минимизация градиентного спуска - одна переменная:

Мы собираемся использовать градиентный спуск, чтобы найти θ, который минимизирует затраты. Но давайте на мгновение забудем о функции стоимости среднеквадратичной ошибки (MSE) и взглянем на функцию градиентного спуска в целом.

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

Давайте исследуем это подробнее:

Для начала возьмем очень простую функцию: J (θ) = θ ², и наша цель - найти значение θ, который минимизирует J (θ).

Из нашей функции стоимости мы можем ясно сказать, что она будет минимальной при θ = 0, но сделать такие выводы при работе с некоторыми сложными функциями будет не так просто.

(A) Функция стоимости: мы постараемся минимизировать значение этой функции.

(B) Цель: минимизировать функцию затрат.

(C) Функция обновления: изначально мы берем случайное число для наших параметров, которые не являются оптимальными. Чтобы сделать его оптимальным, мы должны обновлять его на каждой итерации. Эта функция позаботится об этом.

(D) Скорость обучения: скорость спуска.

(E) Обновление параметров:

(F) Создание таблицы:

Здесь мы утверждаем с θ = 5.

имейте в виду, что здесь θ = 0,8 * θ для нашей скорости обучения и функции стоимости.

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

(G) График: мы можем построить график для вышеуказанных точек.

Производная функции затрат:

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

Скорость обучения / АЛЬФА:

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

Схождение / остановка градиентного спуска:

Обратите внимание, что в приведенном выше примере градиентный спуск никогда не будет фактически сходиться к минимуму theta = 0. Методы принятия решения о том, когда остановить наши итерации, выходят за рамки моего уровня знаний. Но я могу вам сказать, что при выполнении заданий мы можем делать фиксированное количество итераций, например 100 или 1000.

Градиентный спуск - несколько переменных:

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

Возьмем эту функцию:

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

(A) Функция затрат:

(B) Цель:

(C) Обновить правила:

(D) Производные:

(E) Обновить значения:

(F) Скорость обучения:

(G) Таблица:

Начиная с θ1 = 1, θ2 = 1. А затем обновите значение с помощью функций обновления.

(H) График:

Здесь мы видим, что по мере увеличения количества итераций наша стоимость снижается.

Обратите внимание, что при реализации программы на Python новые значения не должны обновляться до тех пор, пока мы не найдем новые значения для θ1 и θ2. Мы явно не хотим использовать новое значение θ1 для использования в старом значении θ2.

Градиентный спуск для среднеквадратичной ошибки:

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

Давайте начнем!

(A) Функция гипотезы:

(B) функция стоимости:

(C) Найдите частную производную J (θ0, θ1) по отношению к θ1:

(D) Упростите немного:

(E) Определите переменную u:

(F) Значение u:

(G) Нахождение частной производной:

(H) Переписываем уравнения:

(I) Объедините все рассчитанные данные:

(J) Повторите тот же процесс для вывода J (θ0, θ1) относительно t θ1:

(K) Упрощенные расчеты:

(L) Объедините все рассчитанные данные:

Одна половина среднеквадратичной ошибки:

Мы умножаем нашу функцию стоимости MSE на 1/2, так что, когда мы берем производную, 2s сокращаются. Умножение функции стоимости на скаляр не влияет на расположение минимума, поэтому мы можем избежать этого.

Финал:

(A) Функция стоимости: одна среднеквадратическая ошибка:

(B) Цель:

(C) Правило обновления:

(D) Производные:

Вот и все. Наконец-то мы сделали это!

Заключение:

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

Окончательная формула:

Теперь эта концепция вам понятна? Пожалуйста, дайте мне знать, написав ответы. Если вам понравилась эта статья, нажмите на значок хлопка.

Если у вас возникнут дополнительные затруднения, свяжитесь со мной. [email protected]