Во время мини-пакетного обучения нейронной сети я слышал, что важной практикой является перетасовывание данных обучения перед каждой эпохой. Может кто-нибудь объяснить, почему тасование в каждую эпоху помогает?
Из поиска Google, я нашел следующие ответы:
- это помогает тренировке сходиться быстро
- предотвращает смещение во время тренировки
- это мешает модели узнать порядок обучения
Но мне трудно понять, почему любой из этих эффектов вызван случайной перетасовкой. Кто-нибудь может дать интуитивное объяснение?
источник
С очень упрощенно точки зрения, данные подаются в последовательно, что свидетельствует о том , что , по крайней мере, это возможно для того , чтобы данные имеют эффект на выходе. Если порядок не имеет значения, рандомизация определенно не повредит. Если порядок имеет значение, рандомизация поможет сгладить эти случайные эффекты, чтобы они не стали систематическим смещением. Короче говоря, рандомизация дешева и никогда не причиняет вреда, и часто сводит к минимуму эффекты упорядочения данных.
источник
Примечание: в этом ответе я имею в виду минимизацию потерь при обучении и не обсуждаю критерии остановки, такие как потеря при валидации. Выбор критериев остановки не влияет на процесс / концепции, описанные ниже.
Процесс обучения нейронной сети состоит в том, чтобы найти минимальное значение функции потерь , где представляет матрицу (или несколько матриц) весов между нейронами, а представляет обучающий набор данных. Я использую нижний индекс для чтобы указать, что наша минимизация происходит только по весам (то есть мы ищем такой, что минимизируется), пока фиксирован.WXX ℒ WW ℒ XLX(W) W X X L W W L X
Теперь, если мы предположим, что у нас есть элементов в (то есть, есть весов в сети), - поверхность в -мерном пространстве. Чтобы дать визуальный аналог, представьте, что у нас есть только два веса нейронов ( ). Тогда имеет простую геометрическую интерпретацию: это поверхность в трехмерном пространстве. Это вытекает из того факта, что для любых заданных матриц весов функция потерь может быть оценена по и это значение становится высотой поверхности.W P ℒ P + 1 P = 2 ℒ W XP W P L P+1 P=2 L W X
Но есть проблема невыпуклости; Поверхность, которую я описал, будет иметь множество локальных минимумов, и поэтому алгоритмы градиентного спуска могут застрять в этих минимумах, в то время как более глубокое / меньшее / лучшее решение может находиться поблизости. Это может произойти, если остается неизменным на протяжении всех обучающих итераций, потому что поверхность фиксирована для данного ; все его характеристики статичны, включая различные минимумы.XX X
Решением этой проблемы является мини-пакетное обучение в сочетании с перетасовкой. Перетасовывая строки и обучая только их подмножеству во время данной итерации, изменяется с каждой итерацией, и на самом деле вполне возможно, что никакие две итерации по всей последовательности обучающих итераций и эпох не будут выполняться для одного и того же , В результате решатель может легко «отскочить» от локального минимума. Представьте, что решатель застрял в локальном минимуме на итерации с обучающей мини-партией . Этот локальный минимум соответствует оцененному при определенном значении весов; мы назовем этоX i X i ℒ ℒ X i ( W i ) X i + 1 ℒ X i + 1 ( W i ) ℒ X i ( W i ) ℒ X i + 1 ℒ X i ℒ X W WX X i Xi L LXi(Wi) , На следующей итерации форма нашей поверхности потерь фактически изменится, потому что мы используем , то есть может принимать значение, от и вполне возможно, что он не соответствует локальному минимуму! Теперь мы можем вычислить обновление градиента и продолжить обучение. Для ясности: форма будет - в общем случае - отличаться от формы . Обратите внимание, что здесь я имею в виду функцию потерь на тренировочном наборе ; это полная поверхность, определенная по всем возможным значениямXi+1 LXi+1(Wi) LXi(Wi) LXi+1 LXi L X W , А не оценки этой потери (который является только скаляром) для определенного значения . Также обратите внимание, что если мини-пакеты используются без перестановки, все еще есть степень «диверсификации» поверхностей потерь, но будет определенное (и относительно небольшое) число уникальных поверхностей ошибок, видимых решающим устройством (в частности, он будет видеть один и тот же точный набор мини-партий - и, следовательно, поверхностей потерь - в каждую эпоху).W
Одной вещи, которую я сознательно избегал, было обсуждение размеров мини-пакетов, потому что существует миллион мнений по этому вопросу, и это имеет значительные практические последствия (большая параллелизация может быть достигнута при больших партиях). Однако я считаю, что стоит упомянуть следующее. Поскольку оценивается путем вычисления значения для каждой строки (и суммирования или взятия среднего значения, т. Коммутативного оператора) для заданного набора весовых матриц , расположение строк имеет никакого эффекта при использовании полной градиентный спуск (то есть, когда каждый пакет представляет собой полный , а итерации и эпохи - это одно и то же). X W X XL X W X X
источник
Представьте, что ваши последние несколько ярлыков мини-партий действительно имеют больше шума. Тогда эти партии будут тянуть окончательные изученные веса в неправильном направлении. Если вы будете перетасовывать каждый раз, вероятность того, что последние несколько партий будут непропорционально шумными, снизится.
источник
Когда вы тренируете свою сеть, используя фиксированный набор данных, то есть данные, которые вы никогда не перетасовываете во время обучения. Вы очень вероятно получите веса, которые очень высоки и очень низки, такие как 40,70, -101,200 ... и т. Д. Это просто означает, что ваша сеть не изучила данные обучения, но она узнала шум ваших данных обучения. Классический чехол нарядной модели. С такой сетью вы получите точные прогнозы для данных, которые вы использовали для обучения. Если вы используете какие-либо другие входные данные для проверки, ваша модель развалится. Теперь, когда вы перетасовываете тренировочные данные после каждой эпохи (итерации общего набора), вы просто вводите разные входные данные для нейронов в каждой эпохе, и это просто регулирует веса, что означает, что вы с большей вероятностью получите «более низкие» веса, которые ближе к нулю , и это означает, что ваша сеть может сделать лучшие обобщения.
Я надеюсь, что это было ясно.
источник
Вот более интуитивное объяснение:
При использовании градиентного спуска мы хотим уменьшить потери в направлении градиента. Градиент рассчитывается по данным из одной мини-партии для каждого раунда обновления веса. То, чего мы хотим добиться, это то, что этот мини-пакетный градиент примерно равен градиенту популяции, поскольку ожидается, что это приведет к более быстрой конвергенции. (Представьте, что если вы подаете в сеть 100 данных class1 в одном мини-пакете и 100 данных class2 в другом, сеть будет зависать. Лучше всего подавать в нее 50 class1 + 50 class2 в каждой мини-партии.)
Как этого добиться, поскольку мы не можем использовать данные о населении в мини-серии? Искусство статистики говорит нам: перетасуйте население, и первые фрагменты данных batch_size могут представлять население. Вот почему мы должны перетасовать население.
Я должен сказать, что перетасовка не нужна, если у вас есть другой метод для выборки данных из совокупности и обеспечения того, чтобы выборки могли дать разумный градиент.
Это моё понимание. Надеюсь, это поможет.
источник