Применимость пакетного или стохастического градиентного спуска действительно зависит от ожидаемого многообразия ошибок.
Пакетный градиентный спуск вычисляет градиент, используя весь набор данных. Это отлично подходит для выпуклых или относительно гладких коллекторов ошибок. В этом случае мы движемся несколько напрямую к оптимальному решению, локальному или глобальному. Кроме того, пакетный градиентный спуск, учитывая отожженную скорость обучения, в конечном итоге найдет минимум, расположенный в его бассейне притяжения.
Стохастический градиентный спуск (SGD) вычисляет градиент, используя одну выборку. В большинстве приложений SGD фактически используется мини-пакет из нескольких образцов, по причинам, которые будут объяснены чуть позже. SGD работает хорошо (я полагаю, не очень хорошо, но лучше, чем пакетный градиентный спуск) для коллекторов ошибок, которые имеют много локальных максимумов / минимумов. В этом случае несколько более шумный градиент, рассчитанный с использованием уменьшенного числа выборок, стремится вывести модель из локальных минимумов в область, которая, как мы надеемся, является более оптимальной. Отдельные сэмплы очень шумные, в то время как мини-партии имеют тенденцию выделять немного шума. Таким образом, количество рывков уменьшается при использовании мини-пакетов. Хороший баланс достигается, когда размер мини-пакета достаточно мал, чтобы избежать некоторых плохих локальных минимумов, но достаточно велик, чтобы он не Избегайте глобальных минимумов или более эффективных локальных минимумов. (Между прочим, это предполагает, что лучшие минимумы имеют большую и более глубокую зону притяжения, и поэтому в них легче попасть.)
Одним из преимуществ SGD является то, что он в вычислительном отношении намного быстрее. Большие наборы данных часто не могут храниться в оперативной памяти, что делает векторизацию гораздо менее эффективной. Скорее, каждый образец или партия образцов должны быть загружены, обработаны, сохранены результаты и так далее. Мини-пакет SGD, с другой стороны, обычно намеренно делается достаточно маленьким, чтобы его можно было вычислить в вычислительном отношении.
Обычно это вычислительное преимущество достигается за счет выполнения гораздо большего числа итераций SGD, что делает намного больше шагов, чем при обычном пакетном градиентном спуске. Это обычно приводит к модели, которая очень близка к той, которая будет найдена с помощью пакетного градиентного спуска или лучше.
Мне нравится думать о том, как работает SGD, и представить, что у меня есть одна точка, которая представляет мое входное распределение. Моя модель пытается изучить это входное распределение. Входное распределение окружено заштрихованной областью, которая представляет входные распределения всех возможных мини-пакетов, которые я мог отобрать. Обычно справедливо допустить, что входные распределения мини-пакетов близки к истинному входному распределению. Пакетный градиентный спуск на всех этапах идет по самому крутому маршруту, чтобы достичь истинного входного распределения. SGD, с другой стороны, выбирает случайную точку в затененной области и выбирает самый крутой маршрут к этой точке. Однако на каждой итерации выбирается новая точка. Среднее значение всех этих шагов будет приближаться к истинному входному распределению, обычно довольно хорошо.
Как следует из другого ответа, основной причиной использования SGD является снижение затрат на вычисление градиента при сохранении в значительной степени направления градиента при усреднении по многим мини-пакетам или выборкам, что, несомненно, поможет вам перейти к локальным минимумам.
Во-первых, из-за того, что мини-пакет технически не может быть решен, из-за снижения вычислительных требований при меньшем размере пакета некоторые проблемы обучения становятся технически нерешаемыми.
Во-вторых, уменьшение размера партии не обязательно означает снижение точности градиента. Многие тренировочные образцы имеют много шумов, выбросов или уклонов. Мини-пакет со случайной выборкой может лучше (или не хуже) отражать истинное распределение, генерирующее данные, чем исходный полный пакет. Если некоторые итерации обновлений градиента мини-пакета дают вам лучшую оценку, в целом усредненный результат за одну эпоху может быть лучше, чем градиент, вычисленный из полного пакета.
В-третьих, минибатчи не только помогают справиться с неприятными выборками данных, но также помогают справиться с неприятной функцией стоимости, которая имеет много локальных минимумов. Как упоминает Jason_L_Bens, иногда для коллекторов ошибок проще поймать регулярный градиент в локальные минимумы, а сложнее отловить временно случайный градиент, вычисленный с помощью мини-пакета.
Наконец, с градиентным спуском вы не достигаете глобальных минимумов за один шаг, а выполняете итерацию на множестве ошибок. Градиент в значительной степени дает вам только направление для итерации. С помощью мини-пакета вы можете выполнять итерации намного быстрее. Во многих случаях, чем больше итераций, тем лучше вы можете достичь. Вы не очень заботитесь о любой погоде, точка оптимальна в глобальном или даже местном масштабе. Вы просто хотите найти разумную модель, которая принесет вам приемлемую ошибку обобщения. Мини-пакет делает это проще.
Вы можете найти книгу «Глубокое обучение» Яна Гудфеллоу и др., В которой есть довольно хорошие дискуссии на эту тему, если вы внимательно ее прочитаете.
источник
источник