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

Из главы 1 мы знаем, что нам нужно обновить значения m и b, мы называем их весами в машинном обучении. Позволяет использовать псевдонимы b и m как - θ0 и θ1 (theta 0 и theta 1) соответственно.

В первый раз мы берем случайные значения для θ0 и θ1 и вычисляем y

y = θ0 + θ1 * X
В машинном обучении мы говорим гипотезу, так что h (X) = θ0 + θ1 * X

h (X) = y, но это y не является фактическим значением в нашем наборе данных, это предсказано y из нашей гипотезы.

Например, предположим, что наш набор данных выглядит примерно так, как показано ниже, и мы берем случайные значения, которые составляют 1 и 0,5 для θ0 и θ1. соответственно.

Исходя из этого, мы вычисляем ошибку, которая равна

error = (h(x)-y)² --> (Predicted - Actual)²   
error = (6-5)² = 1
² is to get rid of negative values (what if Actual y=6 and Py=5)

мы только что вычислили ошибку для одной точки данных в нашем наборе данных, нам нужно повторить это для всех точек данных в нашем наборе данных и суммировать все ошибки до одной ошибки, которая называется Функция стоимости 'J ( θ) ' в машинном обучении.

Наша цель - минимизировать функцию стоимости (ошибку) мы хотим, чтобы наша ошибка была близка к нулевому периоду.

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

для функции (h (x) -y) ² мы всегда получаем положительные значения, и график будет выглядеть так (слева) и позволяет построить график ошибок.

Вот как выглядит работа градиентного спуска.

Сделав небольшие шаги вниз для достижения минимального значения (нижняя часть кривой) и изменив значения θ в процессе.

Как он узнает, на сколько он должен упасть ???

Ответ в математике.

  1. Он рисует линию (касательную) от точки.
  2. Он находит наклон этой линии.
  3. Он определяет, сколько изменений требуется, взяв частную производную функции с учетом θ.
  4. Значение изменения будет умножено на переменную под названием альфа (скорость обучения) мы предоставляем значение альфа, как правило, 0,01
  5. Он вычитает это значение изменения из предыдущего значения θ, чтобы получить новое значение θ.

Из рисунка выше мы можем определить наши θ0 и θ1.

И альфа здесь - это скорость обучения, обычно мы даем 0,01, но это зависит от того, насколько велик размер шага для достижения минимального значения.

Мы снова знаем нашу J (θ0, θ1), поэтому, если мы применим это к приведенным выше уравнениям для θ0 и θ1, мы получим наши новые θ0 и θ1 значения .

Как рассчитать производные ???

Например, f (x) = x² → df / dx = 2x Как ???

Как рассчитать частные производные ???

это то же самое, что и вычисление производных, но здесь мы вычисляем производную, соответствующую этому значению, другие являются константами (поэтому d / dx (constant) = 0)

То же самое мы можем применить для вычисления частной производной относительно θ0 и θ1.

Как получилось, что нарисованная рамка исчезла на следующем шаге выше? просто подожди и увидишь.

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

Итак, окончательное изображение

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

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

Обновление: Код градиентного спуска и линейной регрессии