В этой истории я хочу рассказать об известном алгоритме машинного обучения под названием 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) ² мы всегда получаем положительные значения, и график будет выглядеть так (слева) и позволяет построить график ошибок.
Вот как выглядит работа градиентного спуска.
Сделав небольшие шаги вниз для достижения минимального значения (нижняя часть кривой) и изменив значения θ в процессе.
Как он узнает, на сколько он должен упасть ???
Ответ в математике.
- Он рисует линию (касательную) от точки.
- Он находит наклон этой линии.
- Он определяет, сколько изменений требуется, взяв частную производную функции с учетом θ.
- Значение изменения будет умножено на переменную под названием альфа (скорость обучения) мы предоставляем значение альфа, как правило, 0,01
- Он вычитает это значение изменения из предыдущего значения θ, чтобы получить новое значение θ.
Из рисунка выше мы можем определить наши θ0 и θ1.
И альфа здесь - это скорость обучения, обычно мы даем 0,01, но это зависит от того, насколько велик размер шага для достижения минимального значения.
Мы снова знаем нашу J (θ0, θ1), поэтому, если мы применим это к приведенным выше уравнениям для θ0 и θ1, мы получим наши новые θ0 и θ1 значения .
Как рассчитать производные ???
Например, f (x) = x² → df / dx = 2x Как ???
Как рассчитать частные производные ???
это то же самое, что и вычисление производных, но здесь мы вычисляем производную, соответствующую этому значению, другие являются константами (поэтому d / dx (constant) = 0)
То же самое мы можем применить для вычисления частной производной относительно θ0 и θ1.
Как получилось, что нарисованная рамка исчезла на следующем шаге выше? просто подожди и увидишь.
Для вычисления частной производной, соответствующей θ1, то же самое, что и выше, за исключением того, что добавляется одна маленькая часть.
Итак, окончательное изображение
Надеюсь, это не сбивает с толку, и я знаю, что вначале это немного сложно понять, но я уверен, что это будет иметь смысл, когда вы будете проходить через снова и снова.
Вот и все. В следующем рассказе я раскрою еще одну интересную тему машинного обучения, так что до встречи!
Обновление: Код градиентного спуска и линейной регрессии