«Размер выборки» вы говорите, называется размером партии , . Параметр размера пакета - это лишь один из гиперпараметров, которые вы будете настраивать при обучении нейронной сети с помощью мини-пакета Stochastic Gradient Descent (SGD), и он зависит от данных. Самый основной метод поиска гиперпараметров - это поиск в сетке по скорости обучения и размеру пакета, чтобы найти пару, которая объединяет сеть.B
Чтобы понять, каким должен быть размер партии, важно увидеть взаимосвязь между градиентным спуском партии, SGD в режиме онлайн и SGD для мини-партии. Вот общая формула для шага обновления веса в мини-партии SGD, которая является обобщением всех трех типов. [ 2 ]
θt+1←θt−ϵ(t)1B∑b=0B−1∂L(θ,mb)∂θ
- Пакетный градиентный спуск,B=|x|
- Стохастический градиентный спуск онлайн:B=1
- Мини-пакетный стохастический градиентный спуск: но,B>1B<|x|
Обратите внимание, что с 1 функция потерь больше не является случайной величиной и не является стохастическим приближением.
SGD сходится быстрее, чем обычный «пакетный» градиентный спуск, потому что он обновляет веса после просмотра случайно выбранного подмножества обучающего набора. Пусть будет нашим обучающим набором и пусть . Размер партии - это просто количество элементов :,xm⊂xBmB=|m|
Пакетный градиентный спуск обновляет веса используя градиенты всего набора данных ; тогда как SGD обновляет веса, используя среднее значение градиентов для мини-партии . (Использование среднего значения в отличие от суммы не позволяет алгоритму предпринимать шаги, которые слишком велики, если набор данных очень большой. В противном случае вам нужно будет скорректировать скорость обучения на основе размера набора данных.) Ожидаемое значение этого Стохастическая аппроксимация градиента, используемого в SGD, равна детерминированному градиенту, используемому при спуске градиента партии. .θxmE[∇LSGD(θ,m)]=∇L(θ,x)
Каждый раз, когда мы берем образец и обновляем наш вес, он называется мини-партией . Каждый раз, когда мы пробегаем весь набор данных, это называется эпохой .
Допустим, у нас есть некоторый вектор данных , вектор начального веса, который параметризует нашу нейронную сеть, и функция потерь который мы пытаемся минимизировать , Если у нас есть обучающих примеров и размер пакета , то мы можем разделить эти обучающие примеры на C мини-партии:x:RDθ0:RSL(θ,x):RS→RD→RSTB
C=⌈T/B⌉
Для простоты мы можем предположить, что T делится на B. Равномерно делится на B. Хотя, когда это не так, как это часто бывает, каждому мини-пакету должен быть назначен правильный вес в зависимости от его размера.
Итерационный алгоритм для SGD с эпохами приведен ниже:M
twhile tθt+1t←0<M←θt−ϵ(t)1B∑b=0B−1∂L(θ,mb)∂θ←t+1
Примечание: в реальной жизни мы читаем эти данные обучающего примера из памяти, и из-за предварительной выборки из кэша и других уловок памяти, выполняемых вашим компьютером, ваш алгоритм будет работать быстрее, если доступ к памяти объединен , т.е. когда вы читаете память в порядке и не прыгать случайно. Таким образом, большинство реализаций SGD перемешивают набор данных, а затем загружают примеры в память в порядке их чтения.
Основные параметры для ванильного (без импульса) SGD, описанные выше:
- Скорость обучения:ϵ
Мне нравится думать о эпсилоне как о функции от количества эпох до уровня обучения. Эта функция называется графиком скорости обучения .
ϵ(t):N→R
Если вы хотите, чтобы скорость обучения была фиксированной, просто определите эпсилон как постоянную функцию.
- Размер партии
Размер партии определяет, сколько примеров вы просматриваете перед обновлением веса. Чем он ниже, тем шумнее будет тренировочный сигнал, чем он выше, тем больше времени потребуется для вычисления градиента для каждого шага.
Цитаты и дальнейшее чтение:
- Введение в градиентное обучение
- Практические рекомендации по градиентному обучению глубоких архитектур
- Эффективное мини-пакетное обучение для стохастической оптимизации