Стохастический градиентный спуск (часто сокращенно SGD ) — это итеративный метод оптимизации целевой функции с подходящими свойствами гладкости (например, дифференцируемой или субдифференцируемой ). Его можно рассматривать как стохастическое приближение оптимизации градиентного спуска , поскольку он заменяет фактический градиент (вычисленный по всему набору данных ) его оценкой (вычисленной по случайно выбранному подмножеству данных). Особенно в задачах оптимизации высокой размерности это снижает очень высокую вычислительную нагрузку , достигая более быстрых итераций в обмен на более низкую скорость сходимости . [1]
Основная идея стохастической аппроксимации восходит к алгоритму Роббинса–Монро 1950-х годов. Сегодня стохастический градиентный спуск стал важным методом оптимизации в машинном обучении . [2]
Как статистическая оценка, так и машинное обучение рассматривают задачу минимизации целевой функции , которая имеет форму суммы: где параметр , который минимизируется, должен быть оценен . Каждая функция слагаемого обычно связана с -ым наблюдением в наборе данных (используется для обучения).
В классической статистике задачи минимизации суммы возникают в наименьших квадратах и в оценке максимального правдоподобия (для независимых наблюдений). Общий класс оценщиков, которые возникают как минимизаторы сумм, называются M-оценщиками . Однако в статистике давно признано, что требование даже локальной минимизации является слишком ограничительным для некоторых задач оценки максимального правдоподобия. [3] Поэтому современные статистические теоретики часто рассматривают стационарные точки функции правдоподобия (или нули ее производной, функции оценки и других оценочных уравнений ).
Проблема минимизации суммы также возникает для минимизации эмпирического риска . Там есть значение функции потерь в -ом примере, а есть эмпирический риск.
При использовании для минимизации вышеуказанной функции стандартный (или «пакетный») метод градиентного спуска будет выполнять следующие итерации: Размер шага обозначается (иногда называется скоростью обучения в машинном обучении), а здесь « » обозначает обновление переменной в алгоритме.
Во многих случаях функции слагаемых имеют простую форму, которая позволяет производить недорогие оценки функции суммы и градиента суммы. Например, в статистике однопараметрические экспоненциальные семейства позволяют проводить экономичные оценки функций и градиентов.
Однако в других случаях оценка суммы-градиента может потребовать дорогостоящих оценок градиентов из всех функций слагаемых. Когда обучающий набор огромен и не существует простых формул, оценка сумм градиентов становится очень дорогой, поскольку оценка градиента требует оценки градиентов всех функций слагаемых. Чтобы сэкономить на вычислительных затратах на каждой итерации, стохастический градиентный спуск выбирает подмножество функций слагаемых на каждом шаге. Это очень эффективно в случае крупномасштабных задач машинного обучения. [4]
В стохастическом (или «онлайн») градиентном спуске истинный градиент аппроксимируется градиентом в одной выборке: По мере того, как алгоритм проходит по обучающему набору, он выполняет указанное выше обновление для каждого обучающего образца. Можно сделать несколько проходов по обучающему набору, пока алгоритм не сойдется. Если это сделано, данные можно перемешивать для каждого прохода, чтобы предотвратить циклы. Типичные реализации могут использовать адаптивную скорость обучения , чтобы алгоритм сходился. [5]
В псевдокоде стохастический градиентный спуск можно представить как:
Компромисс между вычислением истинного градиента и градиента на одном образце заключается в вычислении градиента по более чем одному обучающему образцу (называемому «мини-пакетом») на каждом шаге. Это может работать значительно лучше, чем описанный «истинный» стохастический градиентный спуск, поскольку код может использовать библиотеки векторизации, а не вычислять каждый шаг отдельно, как было впервые показано в [6] , где он был назван «алгоритмом обратного распространения в режиме пучка». Это также может привести к более плавной сходимости, поскольку градиент, вычисленный на каждом шаге, усредняется по большему количеству обучающих образцов.
Сходимость стохастического градиентного спуска была проанализирована с использованием теорий выпуклой минимизации и стохастической аппроксимации . Вкратце, когда скорости обучения уменьшаются с соответствующей скоростью и при условии относительно мягких предположений, стохастический градиентный спуск почти наверняка сходится к глобальному минимуму, когда целевая функция выпукла или псевдовыпукла , и в противном случае почти наверняка сходится к локальному минимуму. [2] [7] Это на самом деле является следствием теоремы Роббинса–Зигмунда. [8]
Предположим, мы хотим подогнать прямую линию к обучающему набору с наблюдениями и соответствующими оценочными ответами с использованием наименьших квадратов . Целевая функция, которая должна быть минимизирована, — это Последняя строка в приведенном выше псевдокоде для этой конкретной задачи станет: Обратите внимание, что на каждом шаге итерации или обновления градиент оценивается только на одном . Это ключевое различие между стохастическим градиентным спуском и пакетным градиентным спуском.
В общем случае, если задана задача линейной регрессии , стохастический градиентный спуск ведет себя по-разному при (недопараметризованном) и (перепараметризованном). В случае перепараметризации стохастический градиентный спуск сходится к . То есть SGD сходится к интерполяционному решению с минимальным расстоянием от начального . Это верно даже тогда, когда скорость обучения остается постоянной. В случае недопараметризации SGD не сходится, если скорость обучения остается постоянной. [9]
В 1951 году Герберт Роббинс и Саттон Монро представили самые ранние методы стохастической аппроксимации, предшествовавшие стохастическому градиентному спуску. [10] Основываясь на этой работе год спустя, Джек Кифер и Джейкоб Вулфовиц опубликовали алгоритм оптимизации, очень близкий к стохастическому градиентному спуску, используя центральные разности в качестве аппроксимации градиента. [11] Позже, в 1950-х годах, Фрэнк Розенблатт использовал SGD для оптимизации своей модели персептрона , продемонстрировав первую применимость стохастического градиентного спуска к нейронным сетям. [12]
Обратное распространение было впервые описано в 1986 году, когда стохастический градиентный спуск использовался для эффективной оптимизации параметров в нейронных сетях с несколькими скрытыми слоями . Вскоре после этого было разработано еще одно усовершенствование: мини-пакетный градиентный спуск, где небольшие пакеты данных заменяются отдельными образцами. В 1997 году впервые были исследованы практические преимущества производительности от векторизации, достижимые с такими небольшими пакетами, [13] что проложило путь к эффективной оптимизации в машинном обучении. По состоянию на 2023 год этот мини-пакетный подход остается нормой для обучения нейронных сетей, уравновешивая преимущества стохастического градиентного спуска с градиентным спуском . [14]
К 1980-м годам уже был введен импульс , и был добавлен к методам оптимизации SGD в 1986 году. [15] Однако эти методы оптимизации предполагали постоянные гиперпараметры , т. е. фиксированную скорость обучения и параметр импульса. В 2010-х годах адаптивные подходы к применению SGD с попараметрической скоростью обучения были введены с AdaGrad (для «Адаптивного градиента») в 2011 году [16] и RMSprop (для «Распространения среднеквадратичного значения») в 2012 году. [17] В 2014 году был опубликован Adam (для «Адаптивной оценки момента»), применяющий адаптивные подходы RMSprop к импульсу; затем было разработано много улучшений и ответвлений Adam, таких как Adadelta, Adagrad, AdamW и Adamax. [18] [19]
В рамках машинного обучения подходы к оптимизации в 2023 году будут доминировать на основе оптимизаторов, производных от Adam. TensorFlow и PyTorch, безусловно, самые популярные библиотеки машинного обучения, [20] по состоянию на 2023 год в основном включают только оптимизаторы, производные от Adam, а также предшественников Adam, таких как RMSprop и классический SGD. PyTorch также частично поддерживает метод поиска по строке с ограниченной памятью BFGS , но только для установок с одним устройством без групп параметров. [19] [21]
Стохастический градиентный спуск — популярный алгоритм для обучения широкого спектра моделей в машинном обучении , включая (линейные) опорные векторные машины , логистическую регрессию (см., например, Vowpal Wabbit ) и графические модели . [22] В сочетании с алгоритмом обратного распространения он является фактическим стандартным алгоритмом для обучения искусственных нейронных сетей . [23] Его использование также было отмечено в сообществе геофизиков , в частности, для приложений полной инверсии формы волны (FWI). [24]
Стохастический градиентный спуск конкурирует с алгоритмом L-BFGS , [ требуется ссылка ], который также широко используется. Стохастический градиентный спуск использовался по крайней мере с 1960 года для обучения моделей линейной регрессии , первоначально под названием ADALINE . [25]
Другим алгоритмом стохастического градиентного спуска является адаптивный фильтр наименьших средних квадратов (LMS) .
Было предложено и использовано множество улучшений базового алгоритма стохастического градиентного спуска. В частности, в машинном обучении необходимость установки скорости обучения (размера шага) была признана проблематичной. Установка этого параметра слишком высокой может привести к расхождению алгоритма; установка слишком низкой делает его медленно сходящимся. [26] Концептуально простое расширение стохастического градиентного спуска делает скорость обучения убывающей функцией η t от номера итерации t , давая график скорости обучения , так что первые итерации вызывают большие изменения в параметрах, в то время как последующие выполняют только тонкую настройку. Такие графики известны со времен работы Маккуина по кластеризации k -средних . [27] Практические рекомендации по выбору размера шага в нескольких вариантах SGD даются Споллом. [28]
Как упоминалось ранее, классический стохастический градиентный спуск, как правило, чувствителен к скорости обучения η . Быстрая сходимость требует больших скоростей обучения, но это может вызвать численную нестабильность. Проблема может быть в значительной степени решена [29] путем рассмотрения неявных обновлений , при которых стохастический градиент оценивается на следующей итерации, а не на текущей:
Это уравнение неявное, поскольку появляется на обеих сторонах уравнения. Это стохастическая форма метода проксимального градиента , поскольку обновление также можно записать как:
В качестве примера рассмотрим наименьшие квадраты с признаками и наблюдениями . Мы хотим решить: где указывает на внутренний продукт. Обратите внимание, что может иметь "1" в качестве первого элемента, включающего отсекаемый элемент. Классический стохастический градиентный спуск выполняется следующим образом:
где равномерно выбирается между 1 и . Хотя теоретическая сходимость этой процедуры происходит при относительно мягких предположениях, на практике процедура может быть довольно нестабильной. В частности, когда неправильно указано, так что имеет большие абсолютные собственные значения с высокой вероятностью, процедура может численно расходиться в течение нескольких итераций. Напротив, неявный стохастический градиентный спуск (сокращенно ISGD) может быть решен в замкнутой форме как:
Эта процедура останется численно стабильной практически для всех, поскольку скорость обучения теперь нормализована. Такое сравнение между классическим и неявным стохастическим градиентным спуском в задаче наименьших квадратов очень похоже на сравнение между наименьшими средними квадратами (LMS) и нормализованным фильтром наименьших средних квадратов (NLMS) .
Несмотря на то, что решение в замкнутой форме для ISGD возможно только в наименьших квадратах, процедура может быть эффективно реализована в широком диапазоне моделей. В частности, предположим, что зависит от только через линейную комбинацию с признаками , так что мы можем записать , где может зависеть от также, но не от, за исключением того, что через . Наименьшие квадраты подчиняются этому правилу, как и логистическая регрессия , и большинство обобщенных линейных моделей . Например, в наименьших квадратах , и в логистической регрессии , где — логистическая функция . В регрессии Пуассона , , и так далее.
В таких настройках ISGD просто реализуется следующим образом. Пусть , где — скаляр. Тогда ISGD эквивалентен:
Коэффициент масштабирования можно найти с помощью метода деления пополам , поскольку в большинстве регулярных моделей, таких как вышеупомянутые обобщенные линейные модели, функция убывает, и, таким образом, границы поиска для равны .
Другие предложения включают метод импульса или метод тяжелого шара , который в контексте МО появился в статье Румельхарта , Хинтона и Уильямса об обучении методом обратного распространения [30] и заимствовал идею из статьи советского математика Бориса Поляка 1964 года о решении функциональных уравнений. [31] Стохастический градиентный спуск с импульсом запоминает обновление Δ w на каждой итерации и определяет следующее обновление как линейную комбинацию градиента и предыдущего обновления: [32] [33] что приводит к:
где параметр , который минимизирует , подлежит оценке , представляет собой размер шага (иногда называемый скоростью обучения в машинном обучении) и является экспоненциальным коэффициентом затухания между 0 и 1, который определяет относительный вклад текущего градиента и более ранних градиентов в изменение веса.
Название импульс происходит от аналогии с импульсом в физике: вектор веса , рассматриваемый как частица, движущаяся через пространство параметров, [30] подвергается ускорению из-за градиента потерь (« силы »). В отличие от классического стохастического градиентного спуска, он имеет тенденцию продолжать движение в том же направлении, предотвращая колебания. Импульс успешно использовался компьютерными учеными при обучении искусственных нейронных сетей в течение нескольких десятилетий. [34] Метод импульса тесно связан с недодемпфированной динамикой Ланжевена и может быть объединен с имитацией отжига . [35]
В середине 1980-х годов метод был модифицирован Юрием Нестеровым для использования градиента, предсказанного в следующей точке, и полученный так называемый ускоренный градиент Нестерова иногда использовался в МО в 2010-х годах. [36]
Усредненный стохастический градиентный спуск , изобретенный независимо Руппертом и Поляк в конце 1980-х годов, является обычным стохастическим градиентным спуском, который записывает среднее значение своего вектора параметров с течением времени. То есть обновление такое же, как и для обычного стохастического градиентного спуска, но алгоритм также отслеживает [37]
После завершения оптимизации этот усредненный вектор параметров занимает место w .
AdaGrad (адаптивный градиентный алгоритм) — это модифицированный алгоритм стохастического градиентного спуска с попараметрической скоростью обучения , впервые опубликованный в 2011 году. [38] Неформально, это увеличивает скорость обучения для более разреженных параметров [ необходимо разъяснение ] и уменьшает скорость обучения для менее разреженных. Эта стратегия часто улучшает производительность сходимости по сравнению со стандартным стохастическим градиентным спуском в условиях, когда данные разрежены, а разреженные параметры более информативны. Примерами таких приложений являются обработка естественного языка и распознавание изображений. [38]
Он по-прежнему имеет базовую скорость обучения η , но она умножается на элементы вектора { G j , j }, который является диагональю внешней матрицы произведения .
где , градиент, на итерации τ . Диагональ задается как
Этот вектор по сути хранит историческую сумму квадратов градиента по измерению и обновляется после каждой итерации. Формула для обновления теперь [a] или, записанная как обновления по параметрам, Каждый { G ( i , i ) } дает масштабирующий коэффициент для скорости обучения, которая применяется к одному параметру w i . Поскольку знаменатель в этом коэффициенте является ℓ 2 нормой предыдущих производных, экстремальные обновления параметров затухают, в то время как параметры, которые получают мало или небольшие обновления, получают более высокие скорости обучения. [34]
Хотя AdaGrad был разработан для решения выпуклых задач , он успешно применялся и для невыпуклой оптимизации. [39]
RMSProp (для Root Mean Square Propagation) — метод, изобретенный в 2012 году Джеймсом Мартенсом и Ильей Суцкевером , в то время аспирантами в группе Джеффри Хинтона, в котором скорость обучения , как и в Adagrad, адаптируется для каждого из параметров. Идея состоит в том, чтобы разделить скорость обучения для веса на скользящее среднее значений недавних градиентов для этого веса. [40] Необычно то, что он не был опубликован в статье, а просто описан в лекции на Coursera . [ необходима цитата ]
Итак, сначала скользящее среднее рассчитывается в терминах среднего квадрата,
где, — фактор забывания. Концепция хранения исторического градиента как суммы квадратов заимствована из Adagrad, но «забывание» введено для решения проблемы убывающих скоростей обучения Adagrad в невыпуклых задачах путем постепенного уменьшения влияния старых данных. [ необходима цитата ]
И параметры обновляются как,
RMSProp показал хорошую адаптацию скорости обучения в различных приложениях. RMSProp можно рассматривать как обобщение Rprop , и он способен работать с мини-пакетами, а не только с полными пакетами. [40]
Adam [41] (сокращение от Adaptive Moment Estimation) — это обновление оптимизатора RMSProp 2014 года , объединяющее его с основной функцией метода Momentum . [42] В этом алгоритме оптимизации используются бегущие средние с экспоненциальным забыванием как градиентов, так и вторых моментов градиентов. При заданных параметрах и функции потерь , где индексирует текущую итерацию обучения (индексированную в ), обновление параметров Адама задается следующим образом:
где — небольшой скаляр (например, ), используемый для предотвращения деления на 0, а (например, 0,9) и (например, 0,999) — коэффициенты забывания для градиентов и вторых моментов градиентов соответственно. Возведение в квадрат и извлечение квадратного корня выполняется поэлементно.
Первоначальное доказательство, устанавливающее сходимость Адама, было неполным, и последующий анализ показал, что Адам не сходится для всех выпуклых целей. [43] [44] Несмотря на это, Адам продолжает использоваться на практике из-за его высокой производительности на практике. [45]
Популярность Адама вдохновила на множество вариантов и усовершенствований. Вот некоторые примеры:
Несмотря на то, что оптимизация на основе знаков восходит к вышеупомянутому Rprop , в 2018 году исследователи попытались упростить Адама, исключив из рассмотрения величину стохастического градиента и рассматривая только его знак. [54] [55]
Поиск с возвратом по линии — это еще один вариант градиентного спуска. Все нижеприведенное взято из указанной ссылки. Он основан на условии, известном как условие Армихо–Голдштейна. Оба метода позволяют изменять скорость обучения на каждой итерации; однако способ изменения отличается. Поиск с возвратом по линии использует оценки функций для проверки условия Армихо, и в принципе цикл в алгоритме определения скорости обучения может быть длинным и заранее неизвестным. Адаптивному SGD не нужен цикл при определении скорости обучения. С другой стороны, адаптивный SGD не гарантирует «свойство спуска» — которым обладает поиск с возвратом по линии — которое является таковым для всех n. Если градиент функции стоимости глобально непрерывен по Липшицу с константой Липшица L, а скорость обучения выбрана порядка 1/L, то стандартная версия SGD является особым случаем поиска с возвратом по линии.
Стохастический аналог стандартного (детерминированного) алгоритма Ньютона-Рафсона (метод «второго порядка») обеспечивает асимптотически оптимальную или близкую к оптимальной форму итеративной оптимизации в условиях стохастического приближения [ требуется ссылка ] . Метод, который использует прямые измерения матриц Гессе слагаемых в эмпирической функции риска, был разработан Бердом, Хансеном, Нокедалем и Сингером. [56] Однако прямое определение требуемых матриц Гессе для оптимизации может быть невозможно на практике. Практические и теоретически обоснованные методы для версий SGD второго порядка, которые не требуют прямой информации Гессе, приведены Споллом и другими. [57] [58] [59] (Менее эффективный метод, основанный на конечных разностях вместо одновременных возмущений, приведен Руппертом. [60] ) Другой подход к аппроксимационной матрице Гессе заключается в ее замене информационной матрицей Фишера, которая преобразует обычный градиент в естественный. [61] Эти методы, не требующие прямой информации Гессе, основаны либо на значениях слагаемых в указанной выше эмпирической функции риска, либо на значениях градиентов слагаемых (т. е. входных данных SGD). В частности, оптимальность второго порядка асимптотически достижима без прямого вычисления матриц Гессе слагаемых в эмпирической функции риска. Когда целью является нелинейная потеря наименьших квадратов , где — предиктивная модель (например, глубокая нейронная сеть ), структура цели может быть использована для оценки информации второго порядка с использованием только градиентов. Полученные методы просты и часто эффективны [62]
При малой скорости обучения стохастический градиентный спуск можно рассматривать как дискретизацию ОДУ градиентного потока.
с учетом дополнительного стохастического шума. Это приближение справедливо только на конечном временном горизонте в следующем смысле: предположим, что все коэффициенты достаточно гладкие. Пусть и будут достаточно гладкой тестовой функцией. Тогда существует константа такая, что для всех
где обозначает взятие математического ожидания относительно случайного выбора индексов в схеме стохастического градиентного спуска.
Поскольку это приближение не охватывает случайные колебания вокруг среднего поведения стохастического градиентного спуска, решения стохастических дифференциальных уравнений (СДУ) были предложены в качестве ограничивающих объектов. [63] Точнее, решение СДУ
для , где обозначает интеграл Ито относительно броуновского движения, является более точным приближением в том смысле, что существует константа такая, что
Однако это SDE только аппроксимирует одноточечное движение стохастического градиентного спуска. Для аппроксимации стохастического потока необходимо рассмотреть SDE с бесконечномерным шумом. [64]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite book}}
: CS1 maint: multiple names: authors list (link){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )