В чем разница между градиентным спуском и стохастическим градиентным спуском?
Я не очень знаком с ними, можете ли вы описать разницу с помощью короткого примера?
В чем разница между градиентным спуском и стохастическим градиентным спуском?
Я не очень знаком с ними, можете ли вы описать разницу с помощью короткого примера?
Ответы:
Для быстрого простого объяснения:
Как в градиентном спуске (GD), так и в стохастическом градиентном спуске (SGD) вы обновляете набор параметров итеративным образом, чтобы минимизировать функцию ошибок.
Находясь в GD, вы должны пройти ВСЕ образцы в вашем обучающем наборе, чтобы выполнить одно обновление для параметра в определенной итерации, а в SGD, с другой стороны, вы используете ТОЛЬКО ОДИН или ВСПОМОГАТЕЛЬНЫЙ обучающий образец из своего обучающего набора сделать обновление для параметра в конкретной итерации. Если вы используете SUBSET, он называется Minibatch Stochastic Gracent Descent.
Таким образом, если количество обучающих выборок велико, а на самом деле очень велико, то использование градиентного спуска может занять слишком много времени, потому что на каждой итерации, когда вы обновляете значения параметров, вы проходите полный обучающий набор. С другой стороны, использование SGD будет быстрее, потому что вы используете только один обучающий образец, и он начинает улучшаться сразу же после первого образца.
SGD часто сходится намного быстрее по сравнению с GD, но функция ошибок не так минимизирована, как в случае GD. Часто в большинстве случаев близкого приближения, которое вы получаете в SGD для значений параметров, достаточно, потому что они достигают оптимальных значений и продолжают колебаться там.
Если вам нужен пример этого с практическим кейсом, посмотрите примечания Эндрю Н.Г., где он ясно показывает вам шаги, вовлеченные в оба случая. cs229 струны
Источник: Quora Thread
Включение слова стохастик просто означает, что случайные выборки из обучающих данных выбираются в каждом прогоне для обновления параметра во время оптимизации в рамках градиентного спуска .
Это позволяет не только вычислять ошибки и обновлять веса в более быстрых итерациях (поскольку мы обрабатываем только небольшую выборку за один раз), но также часто помогает быстрее достичь оптимального значения. Вы найдете ответы здесь , для получения дополнительной информации о том, почему использовании стохастических minibatches для обучения имеет свои преимущества.
Одним из возможных недостатков является то, что путь к оптимуму (при условии, что он всегда будет одним и тем же оптимумом) может быть намного шумнее. Таким образом, вместо хорошей плавной кривой потерь, показывающей, как ошибка уменьшается в каждой итерации градиентного спуска, вы можете увидеть что-то вроде этого:
Мы ясно видим, что потери со временем уменьшаются, однако существуют большие различия от эпохи к эпохе (тренировочная партия к тренировочной партии), поэтому кривая является шумной.
Это просто потому, что мы вычисляем среднюю ошибку по нашему стохастически / случайно выбранному подмножеству из всего набора данных в каждой итерации. Некоторые сэмплы будут давать высокую ошибку, а некоторые - низкую Таким образом, среднее значение может варьироваться в зависимости от того, какие образцы мы случайно использовали для одной итерации градиентного спуска.
В градиентном спуске или пакетном градиентном спуске мы используем полные тренировочные данные за эпоху, тогда как в стохастическом градиентном спуске мы используем только один тренировочный пример на эпоху, а мини-пакетный градиентный спуск лежит между этими двумя крайностями, в которых мы можем использовать мини-партия (небольшая часть) обучающих данных за эпоху, правило большого пальца для выбора размера мини-партии имеет степень 2, например 32, 64, 128 и т. д.
Для получения более подробной информации: cs231n лекционные заметки