Почему размер мини-партии лучше, чем одна «партия» со всеми данными обучения?

40

Я часто читаю, что в случае моделей глубокого обучения обычная практика - применять мини-партии (как правило, маленькие, 32/64) в течение нескольких тренировочных эпох. Я не могу понять причину этого.

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

Хендрик
источник

Ответы:

46

Основное преимущество использования мини-пакета по сравнению с полным набором данных восходит к фундаментальной идее стохастического градиентного спуска 1 .

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

В чистом SGD, с другой стороны, вы обновляете свои параметры, добавляя (знак минус) градиент, рассчитанный для одного экземпляра набора данных. Поскольку он основан на одной случайной точке данных, он очень шумный и может отклоняться в направлении, далеко от градиента партии. Тем не менее, шумность - это именно то, что вам нужно при невыпуклой оптимизации, поскольку она помогает вам избежать седловых точек или локальных минимумов (теорема 6 в [2]). Недостаток в том, что он ужасно неэффективен, и вам нужно многократно перебирать весь набор данных, чтобы найти хорошее решение.

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

1 Ботту Л. (2010). Масштабное машинное обучение со стохастическим градиентным спуском. В Слушаниях COMPSTAT'2010 (стр. 177-186). Физика-Верлаг HD.

[2] Ge, R., Huang, F., Jin, C. & Yuan, Y. (2015, июнь). Escape From Saddle Points-Online Стохастический градиент для тензорного разложения. В COLT (стр. 797-842).

РЕДАКТИРОВАТЬ :

Я только что увидел этот комментарий на фейсбуке Яна ЛеКуна, который дает свежий взгляд на этот вопрос (извините, не знаю, как связаться с fb.)

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

Он процитировал этот документ, который был только что опубликован на arXiv несколько дней назад (апрель 2018), который стоит прочитать,

Доминик Мастерс, Карло Луши, Пересмотр тренинга для малых групп по глубоким нейронным сетям , arXiv: 1804.07612v1

Из аннотации

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

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

horaceT
источник
2
Почему у мини-пакетного градиентного спуска больше шансов избежать плохих локальных минимумов, чем у пакетного градиентного спуска? У вас есть что-нибудь, чтобы поддержать это требование?
Мартин Тома
@MartinThoma См. Теорему 6 в [2], недавней работе по JMLR.
horaceT
2
φ(вес,Икс)
2
@MartinThoma Учитывая, что для данного набора данных есть один глобальный минимум, точный путь к этим глобальным минимумам зависит от разных вещей для каждого метода GD. Для партии единственным стохастическим аспектом являются веса при инициализации. Траектория градиента будет такой же, если вы снова обучите NN с теми же начальными весами и набором данных. Для мини-пакета и SGD путь будет иметь некоторые стохастические аспекты между каждым шагом от стохастической выборки точек данных для обучения на каждом шаге. Это позволяет мини-пакетам и SGD избежать локальных оптимумов, если они находятся в пути.
Уэсли
8

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

Причины, по которым SGD используется так широко:

1) Эффективность. Как правило, особенно в начале обучения, градиенты параметров для разных подмножеств данных будут иметь тенденцию указывать в одном и том же направлении. Таким образом, градиенты, оцениваемые на 1/100 данных, будут указывать примерно в том же общем направлении, что и для полного набора данных, но требуют только 1/100 вычисления. Поскольку для конвергенции в глубоко нелинейной глубокой сети обычно требуются тысячи или миллионы итераций, независимо от того, насколько хороши ваши градиенты, имеет смысл делать много обновлений, основанных на дешевых оценках градиента, а не несколько обновлений, основанных на хороших.

2) Оптимизация: Шумные обновления могут позволить вам отскочить от плохой локальной оптимы (хотя у меня нет источника, который показывает, что это имеет значение на практике).

3) Обобщение. Кажется (см. Чжан и др.: Теория глубокого обучения III: Свойства обобщения SGD ), что SGD действительно помогает обобщению, находя «плоские» минимумы в обучающем наборе, которые, скорее всего, также являются минимумами в тестовом наборе. Интуитивно понятно, что мы можем рассматривать SGD как своего рода пакетирование - вычисляя наши параметры на основе множества мини-пакетов данных, мы усиливаем правила, которые обобщают все мини-пакеты, и отменяем правила, которые этого не делают, тем самым делая нас менее склонными к подгонке к Обучающий набор.

Питер
источник
3

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

Правильно (хотя я бы назвал это «шагом обновления веса»)

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

Правильный

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

Ну, в значительной степени это. У вас обычно не хватает памяти. Допустим, речь идет о классификации изображений. ImageNet является чрезвычайно популярным набором данных. Долгое время VGG-16D был одним из самых популярных моделей. Требуется вычислить 15 245 800 поплавков (на картах объектов) для одного изображения 224x224. Это означает около 61 МБ на изображение. Это лишь приблизительная нижняя граница того, сколько памяти вам нужно во время тренировки для каждого изображения. ImageNet содержит несколько тысяч (я думаю, около 1,2 миллиона?) Изображений. Хотя у вас может быть так много основной памяти, у вас, конечно, не так много памяти GPU. Я видел, как GPU ускоряет процесс до 21x. Так что вы определенно хотите использовать графический процессор.

Также: время для одной мини-партии намного меньше. Итак, вопрос: вы бы предпочли сделать n шагов обновления с мини-пакетами в час на GPU или m шагов обновления с пакетами без GPU, где n >> m.

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

Помимо других ответов, я думаю, что стоит отметить, что есть две величины, которые различны, но часто связаны:

  1. Количество входов, используемых для вычисления градиента параметров на каждом шаге.

Как уже отмечали другие, градиент по отношению к мини-пакету является приближением к истинному градиенту. Чем больше мини-пакет, тем лучше приближение.

  1. Количество входов, собранных в массив и вычисленных «одновременно»

Компромисс здесь - это просто производительность (память / циклы).

Эти количества обычно одинаковы, то есть размер мини-партии, но в принципе они могут быть разделены.

Зенна
источник