Введение:

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

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

Почти большинству из нас нравится ходить в походы с друзьями и близкими. Единственное, что вы можете почувствовать, если заблудитесь в одном из таких походов в горах во время сильного тумана, — это склон под ногами. Спуск в направлении самого крутого склона — отличный способ быстро добраться до подножия горы. Градиентный спуск выполняет именно это. Он движется в направлении уменьшающегося наклона и вычисляет локальный наклон функции ошибки только относительно вектора параметров θ. Когда наклон равен нулю, вы достигли минимума!

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

Функциональные требования:

Алгоритм градиентного спуска имеет следующие особые требования.

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

2- Выпуклость функции стоимости: — Функция стоимости должна иметь один глобальный минимум, а форма функции стоимости должна быть выпуклой. Градиентный спуск может достичь локального минимума, что может быть не лучшим возможным результатом, если функция стоимости не является выпуклой.

3- Скорость обучения: - Для градиентного спуска требуется скорость обучения, которая является гиперпараметром, определяющим размер шага для каждой итерации.

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

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

Изображение графика с большим шагом

4- Обучающие данные: — Чтобы определить идеальные параметры модели с помощью градиентного спуска, должно быть достаточно обучающих данных. Недостаток данных может привести к переоснащению или недообучению.

Давайте рассмотрим шаги для реализации алгоритма градиентного спуска:

1- Случайная инициализация параметров: — Во-первых, начальные параметры модели выбираются случайным образом или в соответствии с заранее определенными значениями.

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

3- Рассчитайте градиент: — По каждому параметру рассчитывается градиент функции стоимости. Самый резкий рост функции обозначается вектором, называемым градиентом.

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

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

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

В следующем примере мы берем числа в виде векторов и сохраняем их в x и y. Цель состоит в том, чтобы найти наиболее подходящую линию или уравнение, используя «m» и «b». где «m» — наклон, а «b» — точка пересечения. Первоначально мы устанавливаем значения «m» и «b» равными нулю. Случайное значение для итераций присваивается переменной, и позже она будет настроена в соответствии с требованиями. Затем мы запустили цикл for для итераций и на каждом шаге вычисляли предсказанное значение y. После чего мы устанавливаем значение скорости обучения на уровне 0,001 и будем постепенно улучшать его по мере необходимости. Затем мы вычисляем значения для «производной m и производной b» с помощью заранее определенных формул. Чтобы лучше понять модель, мы также напечатаем значения функции стоимости.

ВЫВОД

Как мы видим на выходе, значение функции стоимости уменьшается с каждым шагом с 45,43 до 0,885. что ясно, что модель работает хорошо.

Примечание. — Обычно нам нужно постоянно обновлять значения для разных переменных, например, в этом случае скорость обучения и итерации, чтобы получить желаемые результаты.

Типы градиентного спуска: -

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

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

Более того, такой подход запрещает нам обновлять нашу модель онлайн.

Преимущество: — поскольку он использует полный набор данных для вычисления градиента на каждом шаге, пакетный градиентный спуск устойчив к градиенту и сходимости. Это может повысить вероятность достижения глобального минимума функции.

Недостаток: — Из-за одновременной обработки всех выборок в обучающем наборе данных для пакетного градиентного спуска требуется избыточный объем памяти для больших наборов данных.

Стохастический градиентный спуск: — Для каждой обучающей выборки в наборе данных стохастический градиентный спуск вычисляет градиент функции стоимости относительно параметров. Затем параметры изменяются путем выполнения шага по пути графа. Хотя он может не сходиться к глобальному минимуму функции стоимости и может варьироваться в зависимости от него, этот тип градиентного спуска значительно быстрее, чем пакетный градиентный спуск.

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

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

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

Этот тип градиентного спуска сочетает в себе преимущества обоих методов: он быстрее, чем пакетный градиентный спуск, и более надежен, чем стохастический градиентный спуск.

Преимущество: — поскольку мини-пакетный градиентный спуск использует больше данных, он более надежен, чем стохастический градиентный спуск.

Недостаток: — Выбор размера мини-пакета может повлиять на градиентный спуск мини-пакета. Например, слишком маленький размер мини-пакета может снизить скорость сходимости, в то время как слишком большой размер пакета может сделать алгоритм более похожим на пакетный градиентный спуск. Размер партии является важным гиперпараметром для оптимизации мини-пакетного градиентного спуска.

Проблемы градиентного спуска: -

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

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

Использованная литература: -