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