programing

배치 정규화 및 폐기 순서

goodjava 2022. 10. 31. 21:16

배치 정규화 및 폐기 순서

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

TensorFlow에서 배치 정규화 및 드롭아웃을 사용할 때(특히 plot.layer 사용) 오더를 걱정할 필요가 있습니까?

드롭아웃에 이어 일괄 정규화를 사용하면 문제가 발생할 수 있습니다.예를 들어, 배치 정규화의 전환이 트레이닝 출력의 큰 스케일 수치로 트레이닝되지만, 테스트 중에 드롭아웃하지 않고 (더 많은 출력을 갖는 것에 대한 보상으로) 작은 스케일 수치에도 동일한 시프트가 적용되는 경우, 그 시프트는 꺼질 수 있습니다.TensorFlow 배치 정규화 레이어는 이를 자동으로 보상합니까?아니면 제가 놓친 이유 때문에 이런 일이 일어나지 않나요?

또한 이 두 가지를 함께 사용할 때 주의해야 할 다른 함정이 있습니까?예를 들어 위의 순서로 사용하고 있는 경우(올바른 순서가 있는 경우), 여러 레이어에서 일괄 정규화와 드롭아웃을 모두 사용하는 데 문제가 있을 수 있습니까?당장 문제될 건 없지만 뭔가 놓친 것 같아요.

감사합니다!

갱신:

실험적인 테스트에서는 순서가 중요하다는 것을 알 수 있습니다.배치 노름과 드롭아웃 리버스만 사용하여 같은 네트워크를 두 번 실행했습니다.드롭아웃이 배치 기준 이전일 경우 트레이닝 손실이 감소함에 따라 검증 손실이 증가하는 것으로 보입니다.둘 다 다른 사건에서 죽을 거야하지만 저 같은 경우에는 동작이 느리기 때문에 훈련을 한 번 더 받으면 상황이 달라질 수 있습니다.좀 더 명확하고 정보에 입각한 답변을 주시면 감사하겠습니다.

Ioffe Szegedy 2015에서 저자들은 "모든 매개변수 값에 대해 네트워크가 항상 원하는 분포를 사용하여 활성화되도록 하고 싶다"고 명시하고 있다.따라서 배치 정규화 레이어는 Conv Layer/Fully Connected Layer 직후에 ReLu(또는 다른 종류의) 액티베이션에 투입되기 전에 실제로 삽입됩니다.상세한 것에 대하여는, 53분경에 이 비디오를 봐 주세요.

드롭아웃에 관해서는 액티베이션 레이어 후에 드롭아웃이 적용되는 것으로 알고 있습니다.드롭아웃지 그림 3b에서는 활성화 함수 f를 적용한 후 y(l)를 y(l)로 하여 은닉층 l의 드롭아웃 계수/확률 행렬 r(l)을 적용한다.

즉, 배치 정규화와 드롭아웃을 사용하는 순서는 다음과 같습니다.

-> CONV/FC -> BatchNorm -> ReLu(또는 기타 액티베이션) -> 드롭아웃 -> CONV/FC ->

코멘트에 기재되어 있듯이, 레이어 순서에 대해 읽어낼 수 있는 놀라운 리소스가 여기에 있습니다.댓글을 살펴보니 인터넷에서 찾은 토픽 중 가장 좋은 자료입니다.

나의 2센트:

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

생각해 보면 일반적인 ML 문제에서는 이 때문에 전체 데이터에 대한 평균과 표준 편차를 계산한 다음 이를 열, 테스트 및 검증 세트로 분할하지 않습니다.트레인 세트에 대한 통계를 분할한 후 계산하여 검증 및 테스트 데이터 세트를 표준화 및 중앙 집중화하는 데 사용합니다.

그래서 나는 스킴1을 제안한다(이는 수용된 답변에 대한 의사마빈의 코멘트를 고려한다).

-> CONV/FC -> ReLu (또는 기타 액티베이션) -> 드롭아웃 -> BatchNorm -> CONV/FC

스킴2와는 반대로

-> CONV/FC -> BatchNorm -> ReLu(또는 기타 액티베이션) -> 드롭아웃 -> CONV/FC -> 수락 응답 내

이는 Scheme 2의 네트워크가 Scheme 1의 네트워크와 비교하여 과적합함을 보여야 한다는 것을 의미하지만 OP는 질문에서 언급한 바와 같이 몇 가지 테스트를 수행했으며 이들은 Scheme 2를 지원합니다.

보, 냥, 냥, 둬, the, the, the, the, the, the, 를 드롭Dropout 때)BN

  • 은 「BN」의 합니다.Dropout직감적으로 드롭아웃과 수 .
  • , DenseNet 등을 하지 않는 DenseNet 등의 Dropout

상세한 것에 대하여는, 코멘트에 기재되어 있는 이 문서 「Dropout 와 Batch Normalization by Variance Shift」를 참조해 주세요.

규칙 - 액티베이션 - 드롭아웃 - BatchNorm - 풀 --> Test_loss : 0.04261355847120285

규칙 - 액티베이션 - 드롭아웃 - 풀 - BatchNorm --> Test_loss : 0.050065308809280396

Conv - Activation - BatchNorm - 풀 - DropOut --> Test_loss : 0.04911309853196

Conv - Activation - BatchNorm - DropOut - Pool --> Test_loss : 0.06809622049331665

규칙 - BatchNorm - 액티베이션 - 드롭아웃 - 풀 --> Test_loss : 0.038886815309524536

규칙 - BatchNorm - 액티베이션 - 풀 - 드롭아웃 --> Test_loss : 0.04126095026731491

Conv - BatchNorm - DropOut - 액티베이션 - 풀 --> Test_loss : 0.05142546817660332

규칙 - 드롭아웃 - 액티베이션 - BatchNorm - 풀 --> Test_loss : 0.04827788099646568

Conv - DropOut - Activation - 풀 - BatchNorm --> Test_loss : 0.047220360487651

Conv - DropOut - BatchNorm - 액티베이션 - 풀 --> Test_loss : 0.03238215297460556


2개의 컨볼루션모듈을 사용한 MNIST 데이터 세트(20에폭)에 관한 트레이닝(아래 참조)을 실시해, 그 후,

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,각각 다음과 같다.

편집: 일부 답변에서 권장하는 바와 같이 드롭아웃을 삭제했을 때 컨버지는 빨라졌지만 BatchNorm 및 드롭아웃을 사용할 때보다 일반화 기능이 저하되었습니다.

드롭아웃과 BN(Batch Norm)의 부조화를 설명하는 논문을 찾았습니다.핵심 아이디어는 소위 말하는 "바리안스 시프트"입니다.이것은, 트레이닝 단계와 테스트 단계간의 동작이 다르기 때문에, BN이 학습하는 입력 통계 정보가 바뀝니다.주요 아이디어는 이 문서에서 가져온 그림에서 찾을 수 있습니다.여기에 이미지 설명 입력

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

https://stackoverflow.com/a/40295999/8625228의 답변과 코멘트에서 추천하는 논문을 읽었습니다.

Ioffe와 Szegedy(2015)의 관점에서 네트워크 구조에는 BN만 사용합니다.Li 외 연구진(2018)은 실무자들이 BN 전에 Dropout을 사용할 때 분산 이동이 있다는 통계 및 실험 분석을 제공한다.따라서 Li 등(2018)은 모든 BN 레이어 뒤에 Dropout을 적용할 것을 권고한다.

Ioffe와 Szegedy(2015)의 관점에서 BN은 활성화 기능 내부/전에 위치한다.단, Chen 등(2019)은 드롭아웃과 BN을 결합한 IC층을 사용하고 Chen 등(2019)은 ReLU 이후 BN을 사용할 것을 권장한다.

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

첸, 광용, 펑페이첸, 시위쥔, 셰창위, 벤벤랴오, 장선규."심층 뉴럴 네트워크 훈련에서의 배치 정규화 및 드롭아웃 사용 재검토"CoRR 복근/1905.05928http://arxiv.org/abs/1905.05928 를 참조해 주세요.

아이오페, 세르게이, 크리스티안 스제게디, 2015년."배치 정규화:내부 공변량 이동을 줄임으로써 심층 네트워크 훈련을 가속화합니다."CoRR abs/1502.03167.http://arxiv.org/abs/1502.03167

Li, Xiang, Shuo Chen, Shiaolin Hu, Jian Yang. 2018년."분산 시프트에 의한 드롭아웃과 배치 정규화 사이의 부조화를 이해한다."CoRR abs/1801.05134.http://arxiv.org/abs/1801.05134 를 참조해 주세요.

퍼포먼스 향상을 위한 조사서에 근거해, 드롭 아웃을 적용하기 전에 BN을 사용할 필요가 있습니다.

ConV/FC - BN - Sigmoid/tanh - 드롭아웃.액티베이션 펑크가 Relu 또는 기타일 경우 정규화와 드롭아웃 순서는 작업에 따라 달라집니다.

여러 답을 읽고 몇 가지 테스트를 수행한 후, 이것이 나의 가설이다.

a) 항상 BN -> AC, (전혀 없음)
b) BN -> Dropout -> BN 위의 Dropout -> BN 단, 둘 다 시도해 보십시오.[새로운 연구, 1등 발견]
c) BN에 의해 드롭아웃이 불필요해지고 드롭아웃을 사용할 필요가 없어집니다.
d) 마지막에 수영장.
e) 드롭아웃BN은 데이터 유출입니다.
은 모든 조합을 것입니다.f) 、 장 、 f 、 f 、 f 、 f 、 f 、 f f f f f f 。


이른바 베스트 메서드 -

레이어 -> BN -> AC -> 드롭아웃 -> -> 레이어

언급URL : https://stackoverflow.com/questions/39691902/ordering-of-batch-normalization-and-dropout