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

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

Функция стоимости

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

hθ (x) = θ0 + θ1x, где θ0 - точка пересечения, а θ1 - градиент или наклон.

Наша цель здесь - минимизировать ошибку между выходом y и прогнозируемым выходом hθ (x). т.е. минимизировать (hθ (x) - y) ** 2. Это также называется суммой квадратичной ошибки. Математически эту функцию стоимости можно записать как

Наша цель здесь - определить значения θ, которые сделают гипотезу максимально точной. Другими словами, максимально уменьшите J (θ0, θ1).

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

Градиентный спуск

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

Проще говоря, наша цель - перейти от красной области к синей, как показано на картинке выше. Первоначально мы начинаем с любых случайных значений θ0 и θ1 (скажем, 0,0). На каждом этапе мы продолжаем обновлять значения θ0 и θ1 на небольшое количество, чтобы попытаться уменьшить J (θ0, θ1). Нам нужно постоянно обновлять эти значения, пока мы не достигнем локального минимума.

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

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

Скорость обучения

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

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

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

Заключение

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

Это мой первый пост на Medium. Пожалуйста, поделитесь и аплодируйте, если вам это нравится !!