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

Фон

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

Алгоритмы оптимизации

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

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

Градиентный спуск в одном измерении

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

Идея градиентного спуска заключается в том, что производная каждого веса покажет его направление и влияние на функцию стоимости. На изображении ниже функция стоимости равна f(w) = w², что является параболой. Минимум равен (0,0), а текущий вес равен -5,6. Текущие потери составляют 31,36, а оранжевая линия представляет собой производную или текущую скорость изменения веса, которая составляет -11,2. Это указывает на то, что вес должен двигаться «вниз» — или стать более положительным — чтобы достичь потери 0. Здесь вступает в действие градиентный спуск.

Масштабируя градиент со значением, известным как скорость обучения, и вычитая масштабированный градиент из текущего значения его веса, выходные данные будут минимизированы. Это можно увидеть на изображении ниже. В десяти итерациях (от от w₀ до w₉) скорость обучения 0,1 используется для минимизации функции стоимости.

В приведенных ниже шагах алгоритма вес представлен как w, где jпредставляет его текущее значение, а j+1 представляет его новое значение. Функция стоимости для измерения ошибки представлена ​​как f, а частная производная представляет собой градиент функции стоимости по отношению к параметрам. Скорость обучения представлена ​​как α.

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

  • повторяйте третий шаг, пока не будет достигнуто максимальное количество итераций

При взятии частной производной или градиента функции одновременно может оцениваться только один параметр, а остальные параметры рассматриваются как константы. В приведенном выше примере f(w) = w² есть только один параметр, поэтому производная равна f`(w) = 2w. Формула обновления параметра следующая:

Используя скорость обучения 0,1 и начальный вес -5,6, следуют первые десять итераций:

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

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

Градиентный спуск со среднеквадратичной ошибкой (MSE)

Что такое МСЭ?

Популярной функцией стоимости для машинного обучения является среднеквадратическая ошибка (MSE).

Эта функция находит разницу между прогнозом модели (Ŷ) и ожидаемым результатом (Y). Затем он возводит разницу в квадрат, чтобы гарантировать, что результат всегда будет положительным. Это означает, что Ŷили Y могут стоять первыми при расчете разницы. Это повторяется для набора точек размером n. Если суммировать квадраты разницы всех этих точек и разделить на n, результатом будет среднеквадратическая разница (ошибка). Это простой способ одновременно оценить производительность модели по всем точкам. Простой пример можно увидеть ниже:

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

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

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

Один вес

При использовании градиента MSE только с одним весом производная может быть рассчитана относительно w. X, Y,и nдолжны рассматриваться как константы. Имея это в виду, дробь и сумму можно вынести за пределы производной:

Отсюда можно использовать цепное правило для вычисления производной относительно w:

Теперь это можно упростить:

Два веса

При выборе градиента MSE с двумя весами частные производные должны быть взяты по обоим параметрам, w₀ и w₁ . При взятии частной производной от w₀ следующие переменные рассматриваются как константы: X, Y, n, и w₁. При взятии частной производной w₁ следующие переменные рассматриваются как константы: X, Y, n, и w₀. Те же шаги, что и в предыдущем примере, можно повторить. Во-первых, дробь и сумму можно вынести за пределы производной.

Отсюда можно использовать цепное правило для вычисления производной по каждому весу:

Наконец, их можно упростить.

Обратите внимание, что единственная разница между уравнениями – X.

Три веса

При взятии градиента MSE с тремя весами частные производные должны быть взяты по каждому параметру. При взятии частной производной одного веса X, Y, n, и два других веса будут рассматриваться как константы. Можно повторить те же шаги, что и в предыдущем примере. Во-первых, дробь и сумму можно вынести за пределы производной.

Отсюда можно использовать цепное правило для вычисления производной по каждому весу:

Наконец, их можно упростить.

Как упоминалось ранее, единственная разница между каждой частной производной — это входной признак X. Это можно обобщить для весов k в следующем примере.

Более трех весов

При выборе градиента MSE с весами k частные производные должны быть взяты по каждому параметру. При взятии частной производной одного веса, X, Y, n,и других k-1весов будут рассматриваться как константы. Как видно из предыдущего примера, при наличии более двух весов изменяется только входной признак каждой частной производной.

Вывод матрицы

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

Оставшаяся часть этой статьи будет посвящена использованию матричного исчисления для получения производной MSE. Для начала Ŷи Yследует понимать матрицы размером (n образцы, 1). Обе являются матрицами с 1 столбцом и n строками, или их можно рассматривать как матрицы столбцов, что изменит их запись на нижний регистр:

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

Отсюда ŷможно заменить на Xwдля регрессии. X – это матрица размером (n выборок, число признаков) и w — вектор-столбец с размером (количество объектов, 1).

Следующим шагом является упрощение уравнения перед взятием производной. Обратите внимание, что w и X меняются местами, чтобы убедиться, что их умножение остается действительным: ( 1, функции) x (количество функций, n выборок) = (1, n выборок).

Затем эти расчеты ошибок можно перемножить.

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

Теперь можно взять частную производную MSE по весу.

Это эквивалентно взятию производной каждого члена:

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

Первый член уравнения следует четвертому правилу и становится равным нулю. Второй член следует первому правилу, а третий член следует третьему правилу.

Это уравнение можно использовать при градиентном спуске для одновременного вычисления всех трех частных производных:

Заключение

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

Пожалуйста, не забудьте поставить лайк и подписаться! :)

Рекомендации

  1. Калькулятор частных производных Symbolab
  2. Обмен математическими стеками по выводу нормального уравнения
  3. Матричное исчисление