Название: Что такое алгоритм градиентного спуска и как он работает.

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

Краткое введение

Градиентный спуск - один из самых популярных алгоритмов оптимизации и, безусловно, самый распространенный способ оптимизации нейронных сетей. В то же время каждая современная библиотека глубокого обучения содержит реализации различных алгоритмов для оптимизации градиентного спуска (например, документация lasagne, caffe и keras).

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

Градиентный спуск - это способ минимизировать целевую функцию, параметризованную параметрами модели, путем обновления параметров в направлении, противоположном градиенту целевой функции w.r.t. параметрам. Скорость обучения $ alpha $ определяет размер шагов, которые мы предпринимаем, чтобы достичь (локального) минимума. Другими словами, мы следим за направлением уклона поверхности, созданного целевой функцией, вниз по склону, пока не достигнем впадины.

Теперь, когда вы получили общее представление об алгоритме, давайте углубимся в него в этом посте. Мы определим и рассмотрим некоторые важные аспекты, такие как его работа, рабочие примеры, типы и окончательный вывод, чтобы сформировать все это.

Что такое градиентный спуск?

Ответьте на вопрос, поставленный заголовком этого сообщения непосредственно под этим заголовком. Это увеличит ваши шансы на попадание в избранный фрагмент в Google по этой фразе и даст читателям немедленный ответ. Сохраните длину этого определения - по крайней мере, в этом самом простом введении - между 50 и 60 словами.

После краткого определения углубитесь в концепцию и при необходимости добавьте контекст и пояснения.

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

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

Градиентный спуск - это итерационный оптимизационный алгоритм первого порядка для нахождения локального минимума дифференцируемой функции. Чтобы найти локальный минимум функции с помощью градиентного спуска, мы предпринимаем шаги, пропорциональные отрицательному значению градиента (или приблизительного градиента) функции в текущей точке. Но если мы вместо этого предпримем шаги, пропорциональные положительному значению градиента, мы приблизимся к локальному максимуму этой функции; эта процедура известна как подъем по градиенту. Градиентный спуск был первоначально предложен Коши в 1847 году.

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

Хорошо, но почему это важно?

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

Включите хотя бы один из следующих трех разделов

Варианты градиентного спуска

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

  1. Пакетный градиентный спуск: это тип градиентного спуска, при котором обрабатываются все обучающие примеры для каждой итерации градиентного спуска. Но если количество обучающих примеров велико, то пакетный градиентный спуск требует больших вычислительных затрат. Следовательно, если количество обучающих примеров велико, то пакетный градиентный спуск не является предпочтительным. Вместо этого мы предпочитаем использовать стохастический градиентный спуск или мини-пакетный градиентный спуск.
  2. Стохастический градиентный спуск: это тип градиентного спуска, при котором обрабатывается 1 обучающий пример за итерацию. Следовательно, параметры обновляются даже после одной итерации, в которой был обработан только один пример. Следовательно, это намного быстрее, чем пакетный градиентный спуск. Но опять же, когда количество обучающих примеров велико, даже тогда он обрабатывает только один пример, что может быть дополнительными накладными расходами для системы, поскольку количество итераций будет довольно большим.
  3. Мини-пакетный градиентный спуск. Это тип градиентного спуска, который работает быстрее, чем пакетный градиентный спуск и стохастический градиентный спуск. Здесь b примеры, где b ‹m обрабатываются за итерацию. Таким образом, даже если количество обучающих примеров велико, они обрабатываются пакетами b обучающих примеров за один раз. Таким образом, он работает для более крупных обучающих примеров, а также для меньшего количества итераций.

Процедура градиентного спуска

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

коэффициент = 0,0

Стоимость коэффициентов оценивается путем подключения их к функции и расчета стоимости.

стоимость = f (коэффициент)

or

стоимость = оценить (f (коэффициент))

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

дельта = производная (стоимость)

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

коэффициент = коэффициент - (альфа * дельта)

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

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

Математика за этим

Предположим, у нас есть следующее:

Гипотеза: hθ (x) = θ ^ Tx = θ0x0 + θ1x1 + …………… + θnxn

Параметры: θ0, θ1, θ2, …… .., θn

Функция затрат: J (θ) = J (θ0, θ1, θ2, …… .., θn)

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

θj := θj − α ∂/∂θj (J(θ))

(Это обновление выполняется одновременно для всех значений j = 0,…, n.) Здесь α называется скоростью обучения. Это очень естественный алгоритм, который неоднократно делает шаг в направлении наискорейшего уменьшения J.

Мы вывели правило LMS для случая, когда был только один обучающий пример. Есть два способа изменить этот метод для обучающей выборки из более чем одного примера. Первый - заменить его следующим алгоритмом:

Читатель может легко убедиться, что величина в суммировании в приведенном выше правиле обновления равна ∂J (θ) / ∂θj (для исходного определения J). Итак, это просто градиентный спуск по исходной функции стоимости J. Этот метод просматривает каждый пример во всем обучающем наборе на каждом шаге и называется пакетным градиентным спуском. Обратите внимание, что хотя градиентный спуск может быть подвержен локальным минимумам в целом, задача оптимизации, которую мы здесь поставили для линейной регрессии, имеет только один глобальный и никаких других локальных оптимумов; таким образом, градиентный спуск всегда сходится (при условии, что скорость обучения α не слишком велика) к глобальному минимуму. В самом деле, J - выпуклая квадратичная функция.

Как рассчитать градиентный спуск

Примечание. Этот раздел относится только к сообщениям о математике и уравнениях.

Предоставьте пошаговое объяснение и пример того, как рассчитать скорость, балл или число, для которых вы даете определение.

** Используемые переменные: ** Пусть m - количество обучающих примеров. Пусть n - количество функций.

Примечание. если b == m, то мини-пакетный градиентный спуск будет вести себя так же, как пакетный градиентный спуск.

** Алгоритм пакетного градиентного спуска: ** Пусть hθ (x) будет гипотезой линейной регрессии. Тогда функция стоимости определяется следующим образом: Пусть Σ представляет собой сумму всех обучающих примеров от i = 1 до m.

Jtrain(θ) = (1/2m) Σ( hθ(x(i))  - y(i))2
Repeat {
 θj = θj – (learning rate/m) * Σ( hθ(x(i))  - y(i))xj(i)
    For every j =0 …n 
}

Где xj (i) Представляет j-ю функцию i-го обучающего примера. Поэтому, если m очень велико (например, 5 миллионов обучающих выборок), то для схождения к глобальному минимуму требуются часы или даже дни. Вот почему для больших наборов данных не рекомендуется использовать пакетный градиентный спуск. поскольку это замедляет обучение.

Алгоритм стохастического градиентного спуска:

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

  1. Произвольно перемешайте набор данных, чтобы параметры могли быть обучены равномерно для каждого типа данных. 2) Как упоминалось выше, он принимает во внимание один пример на итерацию.
Hence,
Let (x(i),y(i)) be the training example
Cost(θ, (x(i),y(i))) = (1/2) Σ( hθ(x(i))  - y(i))2
Jtrain(θ) = (1/m) Σ Cost(θ, (x(i),y(i)))
Repeat {
For i=1 to m{
         θj = θj – (learning rate) * Σ( hθ(x(i))  - y(i))xj(i)
        For every j =0 …n
                } 
}

** Алгоритм для мини-пакетного градиентного спуска: ** Скажем, b - количество примеров в одном пакете, где b ‹m. Предположим, что b = 10, m = 100;

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

Repeat {
 For i=1,11, 21,…..,91
    Let Σ be the summation from i to i+9 represented by k. 
    θj = θj – (learning rate/size of (b) ) * Σ( hθ(x(k))  - y(k))xj(k)
        For every j =0 …n
}

Выбор лучшего α

  • При достаточно малом α J (θ) должен уменьшаться на каждой итерации.
  • Но если α слишком мало, градиентный спуск может медленно сходиться.
  • Если α слишком велико, J (θ) может не уменьшаться на каждой итерации, может не сходиться.

Чтобы выбрать α, попробуйте… .., 0.001,0.01,0.1,1, ……. и т.п.

Пакетный против алгоритма стохастического градиента

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

Некоторые примеры из реальной жизни и интуиция

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

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

  • Думайте о большой миске, как о том, из чего вы бы ели хлопья или хранили фрукты. Эта миска представляет собой график функции затрат (f). Случайная позиция на поверхности чаши - это стоимость текущих значений коэффициентов (стоимость). Внизу чаши стоит лучший набор коэффициентов, минимум функции. Цель состоит в том, чтобы продолжать пробовать разные значения коэффициентов, оценивать их стоимость и выбирать новые коэффициенты, которые имеют немного лучшую (более низкую) стоимость. Повторение этого процесса достаточное количество раз приведет к дну чаши, и вы узнаете значения коэффициентов, которые приводят к минимальным затратам.
  • Основная интуиция градиентного спуска может быть проиллюстрирована гипотетическим сценарием. Человек застрял в горах и пытается спуститься (т.е. пытается найти глобальный минимум). Сильный туман, поэтому видимость крайне низкая. Следовательно, путь вниз с горы не виден, поэтому они должны использовать местную информацию, чтобы найти минимум. Они могут использовать метод градиентного спуска, который включает в себя рассмотрение крутизны холма в их текущем положении, а затем движение в направлении самого крутого спуска (т. Е. Под гору). Если бы они пытались найти вершину горы (т. Е. Максимум), то они бы продолжили движение в направлении наиболее крутого подъема (т. Е. В гору). Используя этот метод, они в конечном итоге спустятся с горы или, возможно, застрянут в какой-нибудь дыре (то есть в локальном минимуме или седловой точке), например, в горном озере. Однако предположим также, что крутизна холма не сразу очевидна при простом наблюдении, а скорее требует сложного инструмента для измерения, который у человека есть в данный момент. Чтобы измерить крутизну холма с помощью прибора, требуется некоторое время, поэтому им следует свести к минимуму использование прибора, если они хотят спуститься с горы до захода солнца. Тогда трудность состоит в том, чтобы выбрать частоту, с которой они должны измерять крутизну холма, чтобы не сбиться с пути. В этой аналогии человек представляет алгоритм, а путь вниз по горе представляет собой последовательность настроек параметров, которые алгоритм будет исследовать. Крутизна холма представляет собой наклон поверхности ошибки в этой точке. Инструмент, используемый для измерения крутизны, - это дифференциация (наклон поверхности ошибки можно вычислить, взяв производную квадрата функции ошибки в этой точке). Направление, в котором они движутся, совпадает с градиентом поверхности ошибки в этой точке. Время, которое они проходят до следующего измерения, - это скорость обучения алгоритма.

Советы и напоминания перед тем, как практиковать

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

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

  • График зависимости стоимости от времени: соберите и нанесите на график значения стоимости, рассчитываемые алгоритмом на каждой итерации. Ожидание от хорошо работающего градиентного спуска - снижение стоимости каждой итерации. Если он не уменьшается, попробуйте снизить скорость обучения.
  • Скорость обучения. Скорость обучения представляет собой небольшое реальное значение, например 0,1, 0,001 или 0,0001. Попробуйте разные значения для своей проблемы и посмотрите, какое из них работает лучше всего.
  • Изменить масштаб входных данных: алгоритм достигнет минимальной стоимости быстрее, если форма функции стоимости не будет искажена и искажена. Вы можете добиться этого, изменив масштаб всех входных переменных (X) в один и тот же диапазон, например [0, 1] или [-1, 1].
  • Несколько проходов: для стохастического градиентного спуска часто не требуется более 1–10 проходов через набор обучающих данных, чтобы сойтись на хороших или достаточно хороших коэффициентах.
  • График средней стоимости: обновления для каждого экземпляра набора обучающих данных могут привести к появлению зашумленного графика зависимости затрат от времени при использовании стохастического градиентного спуска. Если взять среднее значение за 10, 100 или 1000 обновлений, вы сможете лучше понять тенденцию обучения алгоритму.

Тенденции конвергенции в различных вариантах градиентных спусков:

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

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

Заключение и окончательный вывод

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

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

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

У вас есть вопросы о градиентном спуске для машинного обучения или об этой публикации? Оставьте комментарий и задайте свой вопрос, и я постараюсь на него ответить.

Источники для указанной статьи / призыв к действию

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

Введение в алгоритм градиентного спуска (вместе с вариантами) в машинном обучении

Градиентный спуск для машинного обучения - мастерство машинного обучения