일괄 정규화 및 드롭 아웃 순서?


116

원래 질문은 특히 TensorFlow 구현에 관한 것이 었습니다. 그러나 대답은 일반적인 구현에 대한 것입니다. 이 일반적인 답변은 TensorFlow에 대한 정답이기도합니다.

TensorFlow에서 일괄 정규화 및 드롭 아웃 (특히 contrib.layers 사용)을 사용할 때 순서에 대해 걱정해야합니까?

드롭 아웃을 사용하고 즉시 일괄 정규화를 사용하면 문제가있을 수 있습니다. 예를 들어, 배치 정규화의 이동이 더 큰 규모의 학습 출력으로 학습되지만 동일한 이동이 테스트 중에 드롭 아웃없이 더 작은 (더 많은 출력을 갖는 것에 대한 보상으로 인해) 척도 수에 적용되는 경우 교대가 꺼져있을 수 있습니다. TensorFlow 일괄 정규화 레이어가이를 자동으로 보상합니까? 아니면 내가 놓친 어떤 이유로 이런 일이 발생하지 않습니까?

또한이 두 가지를 함께 사용할 때주의해야 할 다른 함정이 있습니까? 예를 들어 위와 관련하여 올바른 순서로 사용한다고 가정하면 ( 올바른 순서 있다고 가정 ) 여러 연속 레이어에서 일괄 정규화와 드롭 아웃을 모두 사용하는 데 문제가있을 수 있습니까? 즉시 문제가 보이지는 않지만 뭔가 빠졌을 수 있습니다.

감사합니다!

최신 정보:

실험 테스트 순서 중요 하다는 것을 암시하는 것 같습니다 . 배치 표준과 드롭 아웃을 반대로 사용하여 동일한 네트워크를 두 번 실행했습니다. 드롭 아웃이 배치 표준보다 앞선 경우 학습 손실이 감소함에 따라 검증 손실이 증가하는 것 같습니다. 다른 경우에는 둘 다 내려갑니다. 하지만 제 경우에는 움직임이 느리기 때문에 더 많은 훈련 후에 상황이 바뀔 수 있으며 단일 테스트 일뿐입니다. 더 명확하고 정보에 입각 한 답변을 주시면 감사하겠습니다.

답변:


143

에서 Ioffe 및 Szegedy 2015 , 저자는 "우리는 어떤 매개 변수 값, 네트워크가 항상 원하는 배포 활성화를 생산하도록 싶습니다"상태. 따라서 Batch Normalization Layer는 실제로 Conv Layer / Fully Connected Layer 바로 뒤에 삽입되지만 ReLu (또는 다른 종류의) 활성화에 공급되기 전에 삽입됩니다. 자세한 내용 은 약 53 분 에이 비디오 를 참조하십시오.

드롭 아웃에 관해서는 활성화 레이어 이후에 드롭 아웃이 적용된다고 생각합니다. 에서 강하 종이 도 3b, 숨겨진 레이어 (L)에 대한 전압 강하 인자 / 확률 행렬 R (L)이 Y (L)를 활성화 함수 f를 적용 후에 결과 Y (L)에인가된다.

요약하면 일괄 정규화 및 드롭 아웃을 사용하는 순서는 다음과 같습니다.

-> CONV / FC-> BatchNorm-> ReLu (또는 기타 활성화)-> 드롭 아웃-> CONV / FC->


63
Christian Szegedy조차도 ReLU 이후 ( 전이 아닌) 이후 BatchNorm을 수행하는 것을 좋아하는 것 같습니다 . Keras의 저자 인 F. Chollet의 인용 : "저는 원래 논문에서 제안한 내용을 확인하기 위해 돌아 가지 않았지만 Christian이 작성한 최근 코드가 BN 이전에 relu를 적용한다는 것을 보장 할 수 있습니다. 여전히 때때로 주제입니다. 논쟁의 여지가 있습니다. " 소스
pseudomarvin

3
풀링은 어떻습니까? Batchnorm과 활성화 사이에 있습니까?
wordsforthewise

5
또한 활성화 후 BN을 사용하면 정확도가 더 높아질 수 있습니다. github.com/cvjena/cnn-models/issues/3
wordsforthewise

1
어떻게 든 동영상이 삭제됩니다!
blitu12345

10
이 논문 은 분산 이동의 위험을 피하기 위해 일부 조건을 지정하지 않는 한 일반적으로 BN으로 탈락하면 결과가 더 나빠진다는 것을 보여줍니다.
Haramoz

37

댓글에서 언급했듯이 레이어 순서를 읽을 수있는 놀라운 리소스가 여기 있습니다 . 나는 댓글을 봤고 인터넷에서 찾은 주제에 대한 최고의 리소스입니다.

내 2 센트 :

드롭 아웃은 특정 뉴런의 정보를 완전히 차단하여 뉴런이 공동 적응하지 않도록합니다. 따라서 일괄 정규화는 드롭 아웃 이후 여야합니다. 그렇지 않으면 정규화 통계를 통해 정보를 전달합니다.

생각해 보면 일반적인 ML 문제에서 이것이 전체 데이터에 대한 평균 및 표준 편차를 계산하지 않고 학습, 테스트 및 검증 세트로 분할하지 않는 이유입니다. 훈련 세트에 대한 통계를 분할 한 다음 계산하고이를 사용하여 검증 및 테스트 데이터 세트를 정규화하고 중앙에 배치합니다.

그래서 나는 Scheme 1을 제안합니다 (이것은 수용 된 답변에 대한 pseudomarvin의 의견을 고려합니다)

-> CONV / FC-> ReLu (또는 기타 활성화)-> Dropout-> BatchNorm-> CONV / FC

도식 2와 반대로

-> CONV / FC-> BatchNorm-> ReLu (또는 기타 활성화)-> 드롭 아웃-> CONV / FC-> 수락 된 답변에서

이는 Scheme 2의 네트워크가 Scheme 1의 네트워크에 비해 과적 합을 보여야하지만 OP는 문제에서 언급 한대로 몇 가지 테스트를 실행했으며 Scheme 2를 지원함을 의미합니다.


BatchNorm 배치에 대한 관련 레딧 토론 : reddit.com/r/MachineLearning/comments/67gonq/…
saetch_g

3
그러나 드롭 아웃이 적용된 후 계산할 것이기 때문에 BN 통계가 망가지지 않을까요? 테스트 시간에는 그렇지 않을까요?
ZakJ

@ZakJ 나는 아닌 것 같아요. 단위당 (각 내부 기능에 대해) BN을 계산하기 때문에 드롭 아웃을 보상하기 위해 확장됩니다.
열성

@ZakJ가 정확합니다. mohammed adel의 답변과이 문서를 참조하십시오 : arxiv.org/pdf/1801.05134.pdf . 실제로 Batch Normalization 계층은 테스트 시간에 Dropout이 꺼져있을 때 더 이상 존재하지 않는 데이터의 공변량 이동에 대응하는 방법을 배웁니다.
skeller88

@ skeller88 나는 신문을 읽지 않았습니다. 내 머리 꼭대기에 BN이 드롭 아웃 전에 있다면 BN의 기능이 다음 레이어에 표준화 된 데이터를 제공하는 것이기 때문에 본질적으로 BN 레이어의 의도를 망친다 고 생각합니다.
MiloMinderbinder

12

일반적으로 Dropout(있는 경우 BN) :

  • "BN Dropout은 어떤 경우에 BN이 Dropout과 유사한 정규화 이점을 직관적으로 제공 할 필요가 없습니다. "
  • "ResNet, DenseNet 등과 같은 아키텍처는 Dropout

자세한 내용 은 @Haramoz 가 주석에서 이미 언급 한대로 [ Dropout과 Batch Normalization by Variance Shift 간의 불일치 이해] 문서를 참조하십시오 .


MLP는 그것들을 결합하는 것이 유용합니다.
DINA TAKLIT

1
@DINATAKLIT 교육 데이터가 충분하지 않을 때 제 생각에는 그렇습니다.
xtluo

@xtulo가 작은 날짜가되면이 작업을 의미합니까? 일괄 정규화가 대규모 데이터 세트에서 더 잘 작동한다는 것을 읽은 경우처럼! 나는 약간 헷갈 린다 :!
DINA TAKLIT

1
@DINATAKLIT 이전 의견 what about MLPs is it useful to combine them에서 그 말씀을 Is it useful to combine Dropout and BN when using MLPs하셨나요? 이것에 대한 내 느낌은 주로 모델의 크기와 보유한 훈련 데이터의 양에 달려 있다는 것입니다.
xtluo

@xtulo 예 저는 Droupout과 BN을 결합하는 것이 유용하다는 것을 의미합니다. 예, 마지막 답변에 동의합니다.
DINA TAKLIT

6

Dropout과 Batch Norm (BN)의 부조화를 설명하는 논문을 찾았습니다. 핵심 아이디어는 "분산 이동" 이라고 부르는 것 입니다. 이는 탈락이 훈련 단계와 테스트 단계 사이에 다른 동작을 가지기 때문에 BN이 학습하는 입력 통계를 이동시키기 때문입니다. 주요 아이디어는이 문서 에서 가져온이 그림에서 찾을 수 있습니다 . 여기에 이미지 설명 입력

이 효과에 대한 작은 데모는이 노트북 에서 찾을 수 있습니다 .


3
이것은 질문에 어떻게 대답합니까?
nbubis

1
이 문서는 두 가지 잠재적 전략을 제공합니다.-모든 BN 레이어 후에 드롭 아웃을 적용합니다 (만).-보다 분산이 안정적인 형식으로 드롭 아웃을 변경합니다.
user3641187

@nbubis 간접적으로 대답한다고 생각합니다. 함께 사용하지 않는 것이 좋습니다 ( "Dropout과 Batch Norm (BN) 사이의 부조화를 설명합니다").
NelsonGon

3

더 나은 성능을위한 연구 논문 을 기반으로 Dropout을 적용하기 전에 BN을 사용해야합니다.


대답은 질문에서 묻는 전체 스택을 다루지 않습니다.
salehinejad

2

올바른 순서는 전환> 정규화> 활성화> 드롭 아웃> 풀링입니다.


2

전환-활성화-중퇴-BatchNorm-풀-> 테스트 손실 : 0.04261355847120285

전환-활성화-중퇴-풀-BatchNorm-> 테스트 손실 : 0.050065308809280396

전환-활성화-BatchNorm-풀-드롭 아웃-> 테스트 손실 : 0.04911309853196144

전환-활성화-BatchNorm-탈락-풀-> 테스트 손실 : 0.06809622049331665

전환-BatchNorm-활성화-탈락-풀-> 테스트 손실 : 0.038886815309524536

전환-BatchNorm-활성화-풀-드롭 아웃-> 테스트 손실 : 0.04126095026731491

전환-BatchNorm-드롭 아웃-활성화-풀-> 테스트 손실 : 0.05142546817660332

전환-탈락-활성화-BatchNorm-풀-> 테스트 손실 : 0.04827788099646568

전환-탈락-활성화-풀-BatchNorm-> 테스트 손실 : 0.04722036048769951

전환-탈락-BatchNorm-활성화-풀-> 테스트 손실 : 0.03238215297460556


2 개의 컨볼 루션 모듈 (아래 참조)을 사용하여 MNIST 데이터 세트 (20 epochs)에서 훈련되었으며, 매번

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

컨벌루션 계층의 커널 크기는 (3,3)기본 패딩이며 활성화는 elu입니다. 풀링은 풀 사이드의 MaxPooling입니다 (2,2). 손실은 categorical_crossentropy이고 최적화 프로그램은 adam입니다.

해당하는 탈락 확률은 각각 0.2또는 0.3입니다. 기능 맵의 양은 32또는64 각각 입니다.

편집 : 일부 답변에서 권장하는대로 Dropout을 떨어 뜨렸을 때 BatchNorm Dropout을 사용할 때보 다 더 빨리 수렴되었지만 일반화 능력이 떨어졌습니다 .


NN의 확률 적 특성 때문에 한 번의 훈련만으로는 충분하지 않습니다. 약 100 번의 훈련을하고 평균을 내면 결과가 더 정확 해집니다.
GensaGames

0

ConV / FC-BN-Sigmoid / tanh-드롭 아웃. 활성화 함수가 Relu이거나 그렇지 않은 경우 정규화 및 드롭 아웃 순서는 작업에 따라 다릅니다.


0

https://stackoverflow.com/a/40295999/8625228 의 답변과 의견에서 권장 문서를 읽었습니다.

Ioffe와 Szegedy (2015)의 관점에서 네트워크 구조에서는 BN 만 사용합니다. Li et al. (2018) 실무자가 BN 전에 Dropout을 사용할 때 분산 이동이 있다는 통계 및 실험 분석을 제공합니다. 따라서 Li et al. (2018) 모든 BN 레이어 다음에 드롭 아웃을 적용 할 것을 권장합니다.

Ioffe와 Szegedy (2015)의 관점에서 BN은 활성화 기능 내부 / 앞에 위치 합니다. 그러나 Chen et al. (2019) 드롭 아웃과 BN을 결합한 IC 레이어를 사용하고 Chen et al. (2019)는 ReLU 이후 BN 사용을 권장합니다.

안전 배경에서는 네트워크에서만 Dropout 또는 BN을 사용합니다.

Chen, Guangyong, Pengfei Chen, Yujun Shi, Chang-Yu Hsieh, Benben Liao 및 Shengyu Zhang. 2019. "심층 신경망 훈련에서 배치 정규화 및 드롭 아웃의 사용에 대한 재고". CoRR abs / 1905.05928. http://arxiv.org/abs/1905.05928 .

Ioffe, Sergey 및 Christian Szegedy. 2015. "일괄 정규화 : 내부 공변량 이동을 줄여 심층 네트워크 훈련 가속화." CoRR abs / 1502.03167. http://arxiv.org/abs/1502.03167 .

Li, Xiang, Shuo Chen, Xiaolin Hu 및 Jian Yang. 2018. "분산 이동에 의한 드롭 아웃과 배치 정규화 간의 불일치 이해." CoRR abs / 1801.05134. http://arxiv.org/abs/1801.05134 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.