Линейная регрессия и градиентный спуск

Как достичь минимума функции стоимости

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

Как объяснялось, линейная регрессия - это процесс построения прямой линии через облако точек данных. Его можно использовать (например) для прогнозирования цены на подержанные автомобили (ypred) на основе возраста этих автомобилей (x). Соответствующая прямая линия определяется следующим уравнением:

Идея линейной регрессии состоит в том, чтобы найти оптимальные параметры a и b. Если a и b оптимизированы, мы получим наиболее подходящую линию. Но чтобы его найти, нам нужна методика оценки. Собственно, градиентный спуск!

Как это работает? Обычно мы начинаем со случайного выбора a и b. Затем мы рассчитываем прогнозы (например, цену автомобиля) для каждого x (например, возраста автомобиля). Если у нас есть все предсказанные значения, мы можем сравнить их с тем, что мы наблюдали на самом деле. Разница между наблюдениями и прогнозами называется ошибкой. А ошибка, в свою очередь, является мерой так называемой функции стоимости. И, как указано в заголовке, мы собираемся минимизировать функцию затрат. Позже об этом подробнее.

Конечно, мы не смотрим на значение абсолютной ошибки для каждой отдельной точки данных, но мы вычисляем меру, которая может кое-что сказать нам о средней ошибке. Поэтому обычно используются две меры: среднеквадратическая ошибка (RMSE) и средняя абсолютная ошибка (MAE).

MAE - это просто среднее значение абсолютной ошибки между наблюдениями и прогнозами.

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

В линейной регрессии функция стоимости (которая сообщает нам, какова ошибка для каждой комбинации a и b) может быть визуализирована как выпуклая (чашеобразная) функция. Следовательно, найти минимум чаши легко, потому что есть только одно место, где производная функции равна нулю. Однако более сложные функции затрат (представьте себе чашу странной формы), обычно более сложные модели, чем линейная модель, могут иметь локальные минимумы (т. Е. Это минимум, но не самый глубокий в чаше), и в этом случае нахождение глобальный минимум (т.е. самая глубокая точка чаши) становится немного сложнее. Но не беспокойтесь, это решаемо!

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

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

Теперь, если вы хотите найти минимум, вам следует пойти вниз, верно?

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

Размер шага называется скоростью обучения и обозначается буквой альфа.

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

Итак, теперь вы понимаете, почему это называется градиентный спуск. Давайте закончим краткой заметкой о более сложном градиентном спуске, который необходим, когда у вас есть более сложная функция стоимости. В этом случае вы можете использовать оптимизатор Adam или стохастический градиентный спуск. Оптимизатор Адама как бы дает вам импульс (или скорость) при спуске с горы, таким образом вы можете использовать свой импульс, чтобы преодолеть локальные минимумы, вместо того, чтобы застревать в них. Стохастический градиентный спуск использует разные образцы вашего набора данных на каждом этапе. Это означает, что функция стоимости различается для каждого шага, и поэтому вероятность застревания в локальном минимуме ниже, потому что в некоторых примерах локальный минимум может быть виден, а в следующем - нет.

Понятно? 😅