Интуиция, лежащая в основе градиентного спуска и его типов: пакетный градиентный спуск, стохастический градиентный спуск и мини-пакетный градиентный спуск.

Для любого алгоритма контролируемого обучения мы всегда пытаемся найти функцию (f) предикторов, которая может наилучшим образом определить целевую переменную (y) и дать наименьшую ошибку (E). Функция стоимости (ничего, кроме ошибки) вычисляет ошибку между прогнозами и фактическими значениями. Простейшая функция стоимости, которую мы можем придумать, - это среднеквадратичная ошибка. При возникновении любой проблемы мы всегда хотели бы, чтобы эта функция затрат была минимальной.

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

Производная. Производная - это «скорость изменения» или просто наклон функции. Производные показывают, насколько быстро что-то меняется (так называемая скорость изменения) в любой момент.

Частная производная. Когда функция является многомерной, мы используем частные производные, чтобы получить наклон функции в заданной точке. Итак, для функции, определяемой двумя переменными x, z как f (x, z), частная производная от f по x - производная функции f w.r.t . x, считая z (или любые другие переменные в функции) константой.

Производная по направлению: это векторная форма обычной производной. Производная по направлению функции f w.r.t. вектор признаков x - это скалярное произведение частной производной от f w.r.t. x и нормализованная форма вектора x, тем самым задавая ему направление. Для функции с несколькими функциями каждая функция задает собственное направление функции.

Градиент: градиент - это вектор, указывающий в направлении наиболее крутого подъема. Его элементы - все частные производные f по каждой из переменных-предикторов. Направление градиента (f) - это ориентация, при которой производная по направлению имеет максимальное значение.

Теперь перейдем к алгоритму градиентного спуска:

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

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

Поиск градиентного спуска определяет вектор весов (w), который минимизирует ошибку, E , начиная с некоторого произвольного начального вектора весов и постепенно и многократно изменяя его небольшими шагами. Поскольку градиент определяет направление, обеспечивающее самый крутой подъем в Error, отрицательное значение этого вектора, следовательно, дает направление наиболее крутого спада. На каждом шаге весовой вектор (w) изменяется в направлении, обеспечивающем наиболее крутой спуск вместе с ошибкой. Этот процесс продолжается до тех пор, пока не будет достигнут глобальный минимум ошибки. Чтобы построить практический алгоритм для итеративного обновления весов, нам нужен эффективный способ вычисления градиента на каждом шаге. Градиент, который является вектором частных производных, может быть вычислен путем дифференцирования функции стоимости (E). Правило обучения для градиентного спуска (с MSE в качестве функции стоимости) в конкретной точке может быть задано следующим образом:

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

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

  1. Инициализируйте значения коэффициентов функции. Это может быть 0 или небольшое случайное значение. Итак, делаем коэффициенты = 0
  2. Стоимость функции оценивается путем вставки коэффициентов в функцию, т.е. мы делаем cost = f (коэффициенты)
  3. Вычисляется производная функции стоимости. Нам нужно знать наклон, чтобы знать направление (знак) для перемещения значений коэффициентов, чтобы снизить затраты на следующей итерации. Итак, рассчитываем, изменение = производная (стоимость)
  4. Теперь, когда мы знаем направление спуска по производной, мы можем обновить значения коэффициентов. Укажите скорость обучения, которая определяет, насколько коэффициенты могут изменяться при каждом обновлении. Итак, делаем, коэффициент = коэффициент - (скорость обучения * изменение)
  5. Мы повторяем этот процесс до тех пор, пока стоимость не станет 0 или близка к нулю.

Реализация на Python:

Для функции y = mx + b и функции стоимости = среднеквадратичной ошибки (mse) у нас есть следующие две частные производные, поскольку у нас есть 2 переменные m, b, определяющие целевую переменную y:

Запустив это для некоторых значений x, y, мы имеем:

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

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

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

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

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

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

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

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

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

В алгоритме мини-пакетного градиентного спуска вместо того, чтобы проходить все примеры (весь набор данных) или отдельные точки данных, мы выполняем алгоритм градиентного спуска, взяв несколько мини-пакетов. Таким образом, даже если у нас есть большое количество обучающих примеров, мы разделяем наш набор данных на несколько мини-пакетов, скажем, n, с определенным размером пакета, скажем m. Затем на каждой итерации мы используем обучающие примеры m для вычисления градиента функции стоимости. Таким образом, алгоритм уменьшает дисперсию обновлений параметров, что может привести к более стабильной сходимости. Размер пакета можно настроить, и он часто выбирается как степень 2, например 32, 64 и т. Д., Или в диапазоне от 50 до 256. Это сделано потому, что некоторое оборудование, такое как графические процессоры, обеспечивает лучшее время выполнения с размером пакета как мощность 2.

Завершение заметок…

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

Ссылки:

Искусственные нейронные сети. Получено с https://users.cs.northwestern.edu/~pardo/courses/eecs349/readings/chapter4-ml.pdf

Градиентный спуск для машинного обучения. Получено с https://machinelearningmastery.com/gradient-descent-for-machine-learning/

Мини-пакетный градиентный спуск. Получено с https://kraj3.com.np/blog/2019/06/introduction-to-gradient-descent-algorithm-and-its-variants/