Градиентный спуск (GD) – самый известный метод оптимизации, используемый для обучения моделей машинного обучения (ML). Любой практикующий ML наверняка сталкивался с GD, когда делал свои первые шаги в ML. В этой статье мы рассмотрим три варианта GD и сравним их результаты с точки зрения точности, стоимости вычислений и изменчивости функции потерь. Вы готовы ? Поехали, семья!

Данные

Мы используем этот набор данных, который содержит информацию о рекламе и продажах. Обзор набора данных показан на рисунке ниже.

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

Во-первых, весьма примечательно, что черты не находятся в одном масштабе. Таким образом, необходимо масштабировать наши данные, чтобы помочь нашему алгоритму градиентного спуска сходиться быстрее. Поэтому мы используем масштабатор MinMax, определенный ниже. Этот масштабатор поддерживает все значения в интервале [0,1].

Существует три варианта градиентного спуска: пакетный градиентный спуск (BGD), мини-пакетный градиентный спуск (MBGD) и стохастический градиентный спуск (SGD).

Обзор трех вариантов GD

В машинном обучении мы обычно используем следующие термины при описании процесса обучения:

1- Итерация: во время одной итерации мы вычисляем функцию стоимости и обновляем веса модели.

2- Эпоха: когда модель обучена на ВСЕХ обучающих примерах, мы говорим, что эпоха закончилась.

Три варианта:

1- BGD:в BGD все обучающие примеры используются для обучения модели во время одной итерации.

Таким образом, при пакетном градиентном спуске 1 эпоха = 1 итерация.

2-MBGD: в MBGD мы делим набор обучающих данных на M мини-пакетов одинакового размера. Затем мы обучаем нашу модель M раз за эпоху, используя разные мини-пакеты на каждой итерации.

В MBGD1 эпоха = M итераций, M ‹ N, где N — количество обучающих примеров.

3-SGD: в SGD мы сначала перемешиваем обучающие данные. Затем мы используем каждое наблюдение отдельно для обучения нашей модели.

в SGD 1 эпоха = N итераций

Шаги ГД:

Предположим, мы начинаем новую эпоху. Обучение в течение этой эпохи осуществляется в два этапа:

1- вычисление функции стоимости: в нашем примере мы решили использовать среднеквадратичную ошибку в качестве функции стоимости. Преимущество этой функции в том, что она дифференцируема.

Значение m(в приведенной выше формуле) зависит от варианта GD, который мы реализуем:

  • если variant = BGD: тогда m = размер обучающих данных
  • если variant = MBGD:тогда m = размер мини-пакета и вычисляется функция потерь: int(N/m) раз за эпоху, если N кратно m, int(N/m) + 1 / эпоха, если нет. (int(x) = целая часть x)
  • если вариант = SGD:тогда m=1 и функция потерь вычисляется N раз/эпоха.

2- Обновление весов: на каждой итерации мы обновляем веса.

где: α — скорость обучения, т. е. размер шага, как показано на рисунке ниже. Размер шага говорит, насколько далеко должен двигаться вес против градиента.

Алгоритм гарантирует, что вес движется против градиента:

  • если функция потерь увеличивается, вес уменьшается.
  • если функция потерь уменьшается, вес увеличивается.

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

Приложение

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

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

Затем мы реализуем градиентный спуск, как описано ранее, используя три метода: BGD, MBGD, SGD.

Функции потерь различных вариантов представлены на графике ниже.

Интерпретация:

Сравнивая результаты трех методов, мы отмечаем, что изменение функции потерь SGD очень велико по сравнению с MBGD и BGD. Функция потерь БГД самая гладкая. Высокая вариабельность функции потерь SGD объясняется случайностью обучающих примеров, в отличие от MBGD и BGD, где вычисление функции потерь выполняется путем усреднения по набору обучающих примеров.

Кроме того, вычисляя время ЦП для каждого метода, мы заметили, что наибольшее время ЦП приходится на BGD (0,68 секунды), за которым следует MBGD (0,08 с), а затем SGD (0,008 с). Это также интуитивно понятно, потому что для BGD на каждой итерации для вычисления функции потерь мы используем все обучающие данные, тогда как в MBGD мы используем только подмножество данных, а в SGD для вычисления функции потерь используется только одно наблюдение.

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

· БГД : 9,63

· 6,85 сингапурских доллара

· МБГД : 6,79

Примечание :

Полученные результаты (кривые и процессорное время) могут различаться в зависимости от опыта из-за случайной инициализации весов.

Заключение

Если мы хотим найти компромисс между процессорным временем и точностью, MBGD — лучший выбор. Вот почему MBGD считается наиболее часто используемым алгоритмом GD, например, в глубоком обучении [1].

Рекомендации

[1]: Нежное введение в мини-пакетный градиентный спуск и настройку размера пакета — MachineLearningMastery.com