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

Частные производные и градиент

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

Рассмотрим функцию многих переменных f (x, y) = xy² + x³. Мы можем найти частные производные функции, которая является производной функции по каждой переменной x и y (немного знаний по математике, необходимых для вычисления частных производных).

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

Частная производная производной функции f по переменной y равна:

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

Градиент функции f (x, y) представлен следующим образом:

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

Наклон измеряет как направление, так и крутизну линии.

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

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

Давайте объясним эту концепцию в контексте линейной регрессии.

В целом, нам необходимо обучить регрессионную модель на исторических данных, чтобы она могла предсказать Y с высокой точностью. Линейная регрессия работает путем нахождения коэффициентов линии, которые наилучшим образом соответствуют историческим данным для прогнозирования y. Мы можем представить линию с уравнением Y = mX + b, где m и b - коэффициенты или переменные функции. Наша задача - использовать подход градиентного спуска для оптимизации коэффициентов регрессионной модели таким образом, чтобы в ней было меньше ошибок прогноза.

Шаги для градиентного спуска

Приведенный ниже псевдокод является измененной версией источника: [4]

1. Инициализируйте коэффициенты m и b случайными значениями.

Например, m = 1 и b = 2, то есть линейное уравнение y = mx + b, тогда y = 1 * x + 2. Это может дать линию, которая не наилучшим образом соответствует историческим данным, как показано ниже.

2. Вычислите градиент.

Мы используем сумму квадратов ошибок (SSE) в качестве функции потерь / стоимости, чтобы минимизировать ошибку прогнозирования. В этом случае градиент SSE является частной производной SSE по t m и частной производной SSE по t b.

Уравнение SSE выглядит следующим образом:

Частная производная SSE w.r.t m равна:

Частная производная SSE w.r.t b:

Наконец, градиент состоит из всех частных производных, то есть обеих частных производных SSE, как показано ниже:

Как мы уже обсуждали, градиенты задают направление движения m и b относительно SSE.

На первом этапе мы инициализируем m и b случайными значениями. Для последующего итеративного процесса значения m и b обновляются с использованием шага 3. На этом шаге мы вычисляем частную производную SSE по m и частную производную по b, используя приведенное выше уравнение для каждой точки данных в X. Наконец, вычисляем сумму всех частных производных f по m и всех частных производных f по b. Другими словами, мы вычисляем градиент SSE для данных X.

3. Обновите коэффициенты в сторону оптимальных m и b.

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

Правило обновления коэффициента m:

Правило обновления коэффициента b:

Здесь r - скорость обучения.

4. Используйте новые m и b для прогнозов.

Мы используем данные X с новыми m и b, вычисленными на предыдущем шаге, чтобы нарисовать линию, которая соответствует данным. Мы вычисляем SSE каждой точки данных в X, чтобы узнать общую SSE, которая представляет собой сумму квадратов ошибок точек данных, разделенных на 2. Суммарная SSE указывает частоту ошибок прогнозирования модели.

5. Повторите шаги 2, 3 и 4.

Нам нужно повторять шаги 2, 3 и 4 до тех пор, пока не будут найдены оптимальные значения для коэффициентов m и b, которые уменьшают SSE до минимального значения. Оптимальные значения m и b позволяют модели предсказать Y с максимальной точностью.

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

Если вам нравится моя статья, подпишитесь на меня в профилях Github, Linkedin и / или Medium.

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

  1. Https://ml-cheatsheet.readthedocs.io/en/latest/gradient_descent.html
  2. Https://www.youtube.com/watch?v=AXH9Xm6Rbfc
  3. Https://hackernoon.com/gradient-descent-aynk-7cbe95a778da
  4. Https://www.kdnuggets.com/2017/04/simple-understand-gradient-descent-algorithm.html
  5. Https://medium.com/@faisalshahbaz/best-optimization-gradient-descent-algorithm-4ca5a3be3776
  6. Https://kraj3.com.np/blog/2019/06/introduction-to-gradient-descent-algorithm-and-its-variants/
  7. Https://www.mathsisfun.com/calculus/derivatives-introduction.html