Заказ пакетной нормализации и отсева?

Первоначальный вопрос касался конкретно реализаций TensorFlow. Однако ответы относятся к реализациям в целом. Этот общий ответ также является правильным ответом для TensorFlow.

При использовании пакетной нормализации и выпадения в TensorFlow (в частности, с использованием contrib.layers) нужно ли мне беспокоиться об упорядочивании?

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

Кроме того, есть ли другие подводные камни, на которые следует обратить внимание при использовании этих двух вместе? Например, предполагая, что я использую их в правильном порядке относительно вышеизложенного (при условии, что есть правильный порядок), могут ли возникнуть проблемы с использованием как пакетной нормализации, так и исключения на нескольких последовательных слоях? Я не сразу вижу в этом проблему, но, возможно, я что-то упускаю.

Спасибо много!

ОБНОВЛЕНИЕ:

Экспериментальный тест кажется предполагает, что порядок имеет значение. Я дважды запускал одну и ту же сеть только с нормой партии и обратным отсечением. Когда выпадение превышает норму партии, потери валидации, кажется, растут, поскольку потери в обучении уменьшаются. В другом случае они оба падают. Но в моем случае движения медленные, поэтому все может измениться после дополнительных тренировок, и это всего лишь один тест. Будем признательны за более точный и осознанный ответ.


person golmschenk    schedule 25.09.2016    source источник


Ответы (9)


В Иоффе и Сегеди 2015 авторы заявляют, что «мы хотели бы гарантировать, что для любого параметра значения, сеть всегда производит активации с желаемым распределением ». Таким образом, слой пакетной нормализации фактически вставляется сразу после слоя Conv / Fully Connected Layer, но перед подачей в ReLu (или любые другие виды) активации. Подробнее см. это видео примерно за 53 мин. .

Что касается отсева, я считаю, что отсев применяется после слоя активации. На рисунке 3b выпадающего документа коэффициент отсева / матрица вероятности r (l) для скрытого слоя l применяется к нему на y (l), где y (l) - результат после применения функции активации f.

Таким образом, порядок использования пакетной нормализации и исключения следующий:

-> CONV / FC -> BatchNorm -> ReLu (или другая активация) -> Dropout -> CONV / FC ->

person Zhongyu Kuang    schedule 27.10.2016
comment
Похоже, что даже Кристиан Сегеди теперь любит выполнять BatchNorm после ReLU (не до него). Цитата Ф. Шолле, автора Keras: Я не возвращался, чтобы проверить, что они предлагают в своей исходной статье, но я могу гарантировать, что последний код, написанный Кристианом, применяет relu до BN. Тем не менее, это все еще время от времени является предметом дискуссий. источник - person pseudomarvin; 13.08.2017
comment
А как насчет объединения, это будет происходить между батчнормом и активацией? - person wordsforthewise; 25.09.2017
comment
Кроме того, похоже, что точность может быть выше с BN после активации: github.com/cvjena/cnn -models / issues / 3 - person wordsforthewise; 25.09.2017
comment
видео удалено как-то! - person blitu12345; 23.01.2018
comment
В этой статье показано, что обычно прекращение приема BN приводит к худшим результатам, если не провести некоторое кондиционирование, чтобы избежать риск изменения дисперсии. - person Haramoz; 02.09.2018
comment
Сообщается, что Caffenet работает лучше с пакетной нормализацией после ReLU - person dopexxx; 06.11.2018
comment
Я снова прочитал Dropout и уверен, что в главе 4. Описание модели параметр y уже используется функцией активации. Хорошее обсуждение, я прочитаю эти статьи. - person Jiaxiang; 07.07.2020

Как отмечалось в комментариях, замечательный ресурс для ознакомления с порядком слоев - это здесь. Я просмотрел комментарии, и это лучший ресурс по теме, который я нашел в Интернете.

Мои 2 цента:

Dropout предназначен для полной блокировки информации от определенных нейронов, чтобы нейроны не коадаптировались. Итак, пакетная нормализация должна быть после выпадения, иначе вы передаете информацию через статистику нормализации.

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

поэтому я предлагаю схему 1 (здесь учитывается комментарий псевдомарвина к принятому ответу)

-> CONV / FC -> ReLu (или другая активация) -> Dropout -> BatchNorm -> CONV / FC

в отличие от схемы 2

-> CONV / FC -> BatchNorm -> ReLu (или другая активация) -> Dropout -> CONV / FC -> в принятом ответе

Обратите внимание, что это означает, что сеть по схеме 2 должна показывать переоснащение по сравнению с сетью по схеме 1, но OP выполнил некоторые тесты, упомянутые в вопросе, и они поддерживают схему 2.

person MiloMinderbinder    schedule 05.06.2018
comment
Соответствующее обсуждение Reddit по размещению BatchNorm: reddit.com/r/MachineLearning/ 67gonq / - person saetch_g; 27.07.2018
comment
Но разве это не испортит вашу статистику BN, поскольку вы будете рассчитывать ее после того, как будет применен отсев, чего не будет во время тестирования? - person ZakJ; 01.04.2019
comment
@ZakJ Думаю, что нет. Поскольку мы рассчитываем BN на единицу (для каждой внутренней функции), и, кроме того, он масштабируется, чтобы компенсировать выпадение. - person zeal; 29.05.2019
comment
@ZakJ правильный. См. Ответ Мохаммеда Аделя и этот документ здесь: arxiv.org/pdf/1801.05134.pdf. По сути, слои пакетной нормализации учатся противодействовать ковариантному сдвигу в данных, который больше не существует, когда Dropout отключен во время тестирования. - person skeller88; 12.02.2020
comment
@ skeller88 Я не читал газету. В верхней части моей головы я думаю, что если у вас есть BN до того, как вы выпадете, это существенно портит намерение уровня BN, поскольку функция BN заключается в предоставлении стандартизированных данных для следующего уровня. - person MiloMinderbinder; 13.02.2020
comment
@MiloMinderbinder Почему бы не переместить и dropout, и batchnorm до ReLU? - person Janosch; 03.12.2020

Обычно просто опускайте Dropout (когда у вас BN):

  • «BN устраняет необходимость в Dropout в некоторых случаях, потому что BN интуитивно обеспечивает те же преимущества регуляризации, что и Dropout»
  • "Такие архитектуры, как ResNet, DenseNet и т. Д., Не используют Dropout

Для получения дополнительных сведений см. Этот документ [Понимание дисгармонии между выпадением и нормализацией пакета с помощью сдвига отклонения] как уже упоминал @Haramoz в комментариях.

person xtluo    schedule 21.12.2018
comment
насчет MLP, полезно ли их комбинировать. - person DINA TAKLIT; 14.03.2019
comment
@DINATAKLIT Когда у вас действительно недостаточно данных для обучения, на мой взгляд, ДА. - person xtluo; 14.03.2019
comment
@xtulo, ты имеешь в виду эту работу, когда они будут маленькими? как если бы я читал, что пакетная нормализация лучше работает с большими наборами данных! Я немного запутался :! - person DINA TAKLIT; 14.03.2019
comment
@DINATAKLIT В своем предыдущем комментарии what about MLPs is it useful to combine them вы имели в виду это Is it useful to combine Dropout and BN when using MLPs? Я считаю, что это в основном зависит от размера вашей модели и количества имеющихся у вас обучающих данных. - person xtluo; 14.03.2019
comment
@xtulo да, я имею в виду, полезно ли комбинировать Droupout и BN, да, я согласен с вашим последним ответом. - person DINA TAKLIT; 14.03.2019
comment
Вы все равно можете использовать выпадение, даже если есть BN. Зависит от дизайна. Это постоянное исследование. Вы можете посмотреть этот документ: arxiv.org/abs/1506.02142 - person salehinejad; 06.03.2020
comment
применяется только тогда, когда у вас достаточно данных. просто подумайте о крайнем случае, когда у вас есть только набор данных из 10 образцов. BN не может спасти тебя здесь - person York Yang; 11.07.2020

Конв - Активация - DropOut - BatchNorm - Пул - ›Test_loss: 0.04261355847120285

Конв - Активация - DropOut - Пул - BatchNorm - ›Test_loss: 0.050065308809280396

Конв - Активация - BatchNorm - Пул - DropOut - ›Test_loss: 0.04911309853196144

Конв - Активация - BatchNorm - DropOut - Пул - ›Test_loss: 0.06809622049331665

Conv - BatchNorm - Activation - DropOut - Pool - ›Test_loss: 0,038886815309524536

Conv - BatchNorm - Activation - Pool - DropOut - ›Test_loss: 0.04126095026731491

Конв - BatchNorm - DropOut - Активация - Пул - ›Test_loss: 0.05142546817660332

Конв - DropOut - Активация - BatchNorm - Пул - ›Test_loss: 0.04827788099646568

Conv - DropOut - Activation - Pool - BatchNorm - ›Test_loss: 0.04722036048769951

Конв - DropOut - BatchNorm - Активация - Пул - ›Test_loss: 0.03238215297460556


Обучен на наборе данных MNIST (20 эпох) с 2 сверточными модулями (см. Ниже), каждый раз следуя

model.add(Flatten())
model.add(layers.Dense(512, activation="elu"))
model.add(layers.Dense(10, activation="softmax"))

Сверточные слои имеют размер ядра (3,3), заполнение по умолчанию, активация elu. Объединение - это максимальное объединение бассейна (2,2). Потеря categorical_crossentropy, оптимизатор adam.

Соответствующая вероятность отсева составляет 0.2 или 0.3 соответственно. Количество карт функций составляет 32 или 64 соответственно.

Изменить: когда я отбросил Dropout, как рекомендовано в некоторых ответах, он сходился быстрее, но имел худшую способность к обобщению, чем когда я использую BatchNorm и Dropout.

person Lukas Niessen    schedule 12.05.2020
comment
Из-за стохастичности нейронных сетей недостаточно просто поиграть с одной тренировкой. Когда вы проведете около 100 тренировок и возьмете среднее значение - результаты будут более точными. - person GensaGames; 02.08.2020
comment
Это мера инициализации веса как угодно. - person Union find; 06.11.2020
comment
Пожалуйста, установите случайное начальное число и запустите как минимум 10+ раз, в противном случае результаты однократного обучения будут ненадежными. - person Nico; 28.07.2021

Я нашел статью, в которой объясняется несоответствие между Dropout и Batch Norm (BN). Ключевой идеей является то, что они называют сдвигом дисперсии. Это связано с тем, что отсев ведет разное поведение между этапами обучения и тестирования, что меняет входную статистику, которую изучает BN. Основную идею можно найти на этом рисунке, взятом из этой статьи. введите описание изображения здесь

Небольшую демонстрацию этого эффекта можно найти в этом блокноте.

person Mo_    schedule 22.11.2019
comment
Как это отвечает на вопрос? - person nbubis; 10.12.2019
comment
В документе представлены 2 возможные стратегии: - Применить Dropout (только) после всех слоев BN - Изменить Dropout на более устойчивую к дисперсии форму - person user3641187; 14.07.2020
comment
@nbubis Я думаю, что это косвенный ответ. Кажется, предлагается вообще не использовать их вместе (объясняет дисгармонию между Dropout и Batch Norm (BN)). - person NelsonGon; 23.07.2020

Основываясь на исследовательском документе, для повышения производительности мы должны использовать BN перед применением отсева.

person Renu    schedule 06.02.2019
comment
Ответ не относится к полному стеку, заданному в вопросе. - person salehinejad; 06.03.2020

Я прочитал рекомендуемые статьи в ответе и комментарии из https://stackoverflow.com/a/40295999/8625228

С точки зрения Иоффе и Сегеди (2015), используйте только BN в сетевой структуре. Ли и др. (2018) дают статистический и экспериментальный анализ, что существует сдвиг дисперсии, когда практикующие используют Dropout до BN. Таким образом, Li et al. (2018) рекомендуют применять Dropout после всех слоев BN.

С точки зрения Иоффе и Сегеди (2015), BN находится внутри / перед функцией активации. Однако Chen et al. (2019) используют слой IC, который объединяет выпадение и BN, а Chen et al. (2019) рекомендует использовать BN после ReLU.

В целях безопасности использую Dropout или BN только в сети.

Чен, Гуанъюн, Пэнфэй Чен, Юйцзюнь Ши, Чан-Ю Се, Бенбен Ляо и Шэнъюй Чжан. 2019. «Переосмысление использования пакетной нормализации и отсева при обучении глубоких нейронных сетей». CoRR abs / 1905.05928. http://arxiv.org/abs/1905.05928.

Иоффе, Сергей и Кристиан Сегеди. 2015. «Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариантного сдвига». CoRR abs / 1502.03167. http://arxiv.org/abs/1502.03167.

Ли, Сян, Шо Чен, Сяолинь Ху и Цзянь Ян. 2018. «Понимание дисгармонии между отсеиванием и нормализацией партии с помощью сдвига дисперсии». CoRR abs / 1801.05134. http://arxiv.org/abs/1801.05134.

person Jiaxiang    schedule 09.07.2020

Правильный порядок: Conv> Normalization> Activation> Dropout> Pooling.

person salehinejad    schedule 20.02.2019
comment
Есть ли источники, подтверждающие это утверждение? - person tjysdsg; 13.07.2021

ConV / FC - BN - сигмовидная / tanh - выпадение. Если функция активации - Relu или иное, порядок нормализации и отключения зависит от вашей задачи.

person Cro Chan    schedule 23.07.2020