MinibatchSize BrainScript в CNTK
Примечание. Для пользователей BrainScript параметр для размера мини-пакета — minibatchSize
для Python пользователей.minibatch_size_in_samples
Сведения о Python пользователей см. здесь.
CNTK имеет очень конкретное определение minibatchSize
параметра: оно обозначает количество выборок между обновлениями модели.
Пример определяется как один вектор или тензор, который проходит через систему.
Например, в задаче распознавания изображений один образ является одним примером.
Размер минибатча для каждой эпохи, заданный в примерах (тензоры вдоль динамической оси). Значение по умолчанию — 256
. Вы можете использовать разные значения для разных эпох, 128*2:1024
например (в BrainScript) или 128*2 + 1024
(в Python) означает использование мини-пакета размером 128 для первых двух эпох, а затем 1024 для остальных.
Обратите внимание, что "Размер мини-пакета" в CNTK означает количество выборок, обработанных между обновлениями модели. Это определение также содержится при параллелизации между рабочими ролей (например, для K
рабочих ролей число выборок, которые будут обрабатываться minibatchSize/K
).
В случае входных данных переменной длины указывает на количество элементов в этих последовательностях, minibatchSize
а не количество последовательностей.
СЛУЖБА УПРАВЛЕНИЯ будет пытаться поместиться до максимально возможного количества последовательностей в мини-батче, который не превышает minibatchSize
общих выборок.
Если задано несколько входных данных, тензоры добавляются в текущую мини-батку, пока один из входных данных не превысит minibatchSize.
Важно отметить, что для последовательных данных пример является отдельным элементом последовательности.
Таким образом, CNTK minibatchSize
не относится к числу последовательностей в мини-батче, но совокупное число элементов и маркеров последовательности в последовательностях, составляющих мини-батч.
CNTK имеет встроенную поддержку последовательностей переменной длины, т. е. она может размещать последовательности очень разных длин в одном мини-пакете без необходимости обходных путей, таких как сегментирование.
Вместе с понятием CNTK о указании скорости обучения на выборку (вместо среднего мини-батча), каждый элемент последовательностей любой длины способствует тому же градиенту, что приводит к согласованной конвергенции.
(Многие другие наборы средств определяют размер мини-пакета для последовательных данных в качестве количества последовательностей в мини-пакете. Это проблематично, особенно если градиенты также определяются как средние значения минибатча, а не суммы мини-батов CNTK, так как вклад в градиент из каждого токена или шага последовательности будет обратно пропорциональна длине последовательности. CNTK подход избегает этого.)
Если используется несколько Input{}
s, возможно, не все входные данные имеют одинаковую длину последовательности.
Например, в классификации последовательностей метка каждой последовательности является одним маркером.
В этом случае входные данные с наибольшим количеством выборок управляют размером мини-пакета. (Это поведение можно изменить, указав definesMbSize=True
для некоторых входных данных, размер мини-пакета будет подсчитываться на основе последовательностей из этого конкретного входного значения. Если задано несколько входных данных, только один из них может иметь definesMbSize
значение True
.)
Несмотря на четкое определение minibatchSize
количества выборок между обновлениями модели, существует два случая, когда необходимо расслабить определение:
- последовательные данные: последовательности переменной длины обычно не суммировать до запрошенного размера мини-пакета. В этом случае как можно больше последовательностей упаковываются в мини-пакет без превышения запрошенного размера мини-пакета (за одним исключением: если следующая последовательность в случайном корпусе превышает длину мини-пакета, размер мини-пакета будет состоять из этой последовательности).
- Параллелизм данных: здесь размер мини-пакета приблизительный, так как наш алгоритм случайной выборки на основе фрагментов не может гарантировать, что каждый работник получает точно такое же количество выборок.
Все описанные выше рекомендации также относятся к epochSize
, но epochSize
имеют некоторые различия, см. здесь.