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

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

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

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

Что делает эту функцию потерь или стоимости привлекательной, так это то, что она представляет собой параболу и имеет один глобальный минимум или одно уникальное решение. Для заданных данных значение w, которое делает эту функцию стоимости минимальной, равно w, равному 2, что означает, что z равно 2x, что приведет к линии, которая идеально соответствует точкам. Это очень упрощенный пример, так как в реальных наборах данных целевая переменная z будет зависеть от нескольких переменных, и мы не можем просто построить график функции стоимости и визуально определить наилучшее значение весов. Итак, как определить наилучшее значение w. Наилучшее значение w или w в случае, если вам нужно оптимизировать много весов, определяется с помощью алгоритма, называемого градиентным спуском. Градиентный спуск - это итеративный алгоритм оптимизации для поиска минимума функции. Чтобы найти минимум функции с помощью градиентного спуска, нужно выполнить шаги, пропорциональные отрицательному значению градиента функции в текущей точке. Что это обозначает?

Начнем со случайного начального значения w. Назовем его w0 и скажем, что оно равно 0,2, и мы начнем делать шаги к зеленой точке, которая равна w = 2. Чтобы определить, в каком направлении двигаться, мы вычисляем градиент функции потерь при текущем значении w, что составляет 0,2. Градиент задается наклоном касательной при w = 0,2, а затем величиной шага управляет параметр, называемый скоростью обучения. Чем выше скорость обучения, тем больше шаг, который мы делаем, и чем меньше скорость обучения, тем меньше шаг, который мы делаем. Затем мы делаем шаг и переходим к w1. w1 по существу вычисляется как w0 минус скорость обучения, умноженная на градиент в w0. Это первая итерация алгоритма. В w1 мы повторяем тот же процесс вычисления градиента в w1 и с той же скоростью обучения, чтобы контролировать величину шага в сторону минимума. Мы продолжаем повторять этот шаг снова и снова, пока не достигнем минимума или значения функции стоимости, которое очень близко к минимуму, в пределах очень небольшого предопределенного порога. Теперь при выборе скорости обучения мы должны быть очень осторожны, поскольку большая скорость обучения может привести к большим шагам и, в конечном итоге, к упущению минимума. С другой стороны, небольшая скорость обучения может привести к очень маленьким шагам и, следовательно, заставить алгоритм долго искать точку минимума.

Теперь давайте посмотрим, как каждая итерация со скоростью обучения 0,4 влияет на то, как полученная строка соответствует данным слева.

Мы инициализируем w равным 0, что означает, что z равно 0. Это горизонтальная линия, поэтому стоимость высока, а линия, как вы можете видеть, не подходит. После 1-й итерации w приближается к 2, и поскольку наклон очень крутой при w = 0, новое значение w приводит к большому падению функции потерь. Полученная линия подходит лучше, чем исходная, но еще есть возможности для улучшения.

После второй итерации w продолжает двигаться к w = 2. Поскольку наклон не такой крутой, как раньше, шаг не такой большой, но функция стоимости все еще падает в значении, и результирующая линия приближается к линии идеального наилучшего соответствия. . То же самое наблюдение отмечено для 3-й и 4-й итерации.

После 4 итераций вы можете увидеть, что мы почти у цели при w = 2, и полученная линия почти идеально соответствует диаграмме рассеяния. На каждой итерации вес обновляется пропорционально отрицательному градиенту функции в текущей точке. Следовательно, если вы инициализируете вес значением, которое находится справа от минимума, тогда положительный градиент приведет к перемещению w влево к минимуму.