강의

멘토링

커뮤니티

Inflearn Community Q&A

aquarid22's profile image
aquarid22

asked

A Complete Guide to Deep Learning CNN - TensorFlow Keras Version

Understanding and Applying Batch Normalization - 02

Batch Normalization Layer 의 Training parameter 이해 관련 질문

Resolved

Written on

·

1.5K

0

안녕하세요? 머신러닝 완벽가이드 수강하고 CNN 으로 넘어왔네요~ 요 강의 마치고 컴퓨터 vision 쪽 강의도 수강하려고 미리미리 구매해 놓았습니다. ㅎㅎ 항상 좋은 강의 감사드립니다!

Batch normalization 강의를 듣고 실습을 해 보다가 세 가지 궁금한 점이 생겨서 질문 드립니다. (아래 내용 중에서 제가 잘못이해하고 있는 부분 지적해 주시면 감사드리겠습니다. ^^;;)

아래 그림과 같이 Batch Normalization 을 포함시켜서 Model  Creation 했을 때 Model Summary 를 보면 Batch Normalization layer 에도 Training paramter 가 할당되는 것을 볼 수 있는데요, 

 

1) Batch normalization  layer 의 training paramter 의 갯수는 어떤 수식(?) 에 의해서 결정되는지.. 궁금합니다. 수식을 알 수 있다면 layer 에 대한 이해를 조금 더 높일 수 있을 듯 해서 질문드리고 있습니다.

 

2)  BN 방법이 Batch 별로 Z = (X - Xbar)/S 수식을 적용해서 얻은 평균이 0이고 표준편차가 1로 scaling 이 된 데이터들을 activation function 에 input 하는  방식인 것으로 이해가 되는데요,  각 node 나 feature point 들 중 신호가 약한 부위를 끄거나 (off), 신호가 분명한 부위를 켜는 (on) 역할을 데이터 평준화를 통해 좀 더 일관성 있게 해 주는 거라고 이해하면 될지요? (강의 중 설명에서는 오히려 noise 개념으로 어려운 학습을 하게 해서 overfit을 줄이는 역할을 한다고 해서.... 사실 일반적인 ML 에서의 표준화 개념과는 상충되는 듯 해서 이해하기 쉽지 않습니다.)

요약 드리면 Batch normalization layer 가 전 후 layer 들에게 영향 주는 물리적인 역할이 무엇인지.. 에 대한 질문입니다. Conv 와 Activation 사이에 위치한다면 Conv layer 에는 영향을 주지 않을 것이고, Activation 을 통과하는 결과에만 영향을 줄 것 같아서요.

 

 3. '표준화' 라는 개념으로 BN layer 를 이해해 보면 왠지... 각  배치별 평균 벡터와  표준편차 벡터값 (혹은 분산-공분산 행렬) 들을 저장해 놓았다가, test data 예측시 활용할 것도 같은데요.. (마치 sklearn 의 preprocessing 모듈의 StandardScaler 클래스의 fit 메소드 처럼)

다만 매 batch 별로 표본 평균 벡터와 표본 분산공분산 행렬이 계속 달라질 것일텐데, batch 가 진행되면서 해당 통계량들을 업데이트 했다가 최종적으로 업데이트 된 통계량을 test data 예측할 때 사용하게 되는 것인지요..? 요 개념이 맞다면 대략 어떤 방식으로 weight 들을 업데이트하며 학습하게 되는지.. 개념적으로라도 이해하고 싶습니다.

다른 weight 들과 마찬가지로 결국 loss 를 줄이는 방향으로 최적화 되는 weight 들인 것인지도 궁금하구요~~ (아니면 BN 의 training parameter 들은 일종의 noise 처럼 임시로 저장은 하지만 예측 시 활용이 안되는 weight 들인 것인지요? )

 

감사합니다!

BatchNormalizationkerastraining딥러닝parameter머신러닝 배워볼래요? kaggletensorflowcnn

Answer 2

2

dooleyz3525님의 프로필 이미지
dooleyz3525
Instructor

안녕하십니까, 

1. batch normalization의 스케일링 파라미터와 쉬프트 파라미터는 동적으로 딥러닝 모델에서 계산되는데, 이때 weight가 적용됩니다. 정확한 수식은 저도 모릅니다만, 아마도 선형식이 그대로 적용되는 걸로 알고 있습니다.  따라서 위 모델에서는 스케일링 시에 32개의 w와 32개의 bias, 쉬프트 시에 32개의 w와 32개의 bias가 적용되어서 128이 되는 것 같습니다.

2.     각 node 나 feature point 들 중 신호가 약한 부위를 끄거나 (off), 신호가 분명한 부위를 켜는 (on) 역할을 데이터 평준화를 통해 좀 더 일관성 있게 해 주는 거라고 이해하면 될지요?

=> 그것 보다는 초기의 입력 데이터 분포도가 딥러닝 모델 Layer를 통과 시킬 때마다 계속 데이터 분포도가 달라지므로, 이를 어느정도 일관성있는 데이터 분포도를 유지하기 위해서 적용하는 방식으로 이해하시면 좋을 것 같습니다. 

그리고

요약 드리면 Batch normalization layer 가 전 후 layer 들에게 영향 주는 물리적인 역할이 무엇인지.. 에 대한 질문입니다. Conv 와 Activation 사이에 위치한다면 Conv layer 에는 영향을 주지 않을 것이고, Activation 을 통과하는 결과에만 영향을 줄 것 같아서요.

=> 질문을 제대로 이해했는지 모르겠지만 당연히 BN을 Conv 다음에 적용하기 때문에 conv에 영향을 미치지 않고, activation을 통과하는 결과에만 영향을 미칩니다. 어쩧든 Layer들을 통과 시마다 입력/출력 데이터의 데이터 분포도가 크게 달라지는 현상을 완화 시켜 줍니다. 원하시는 답변이 아니면 다시 말씀해 주십시요. 

3. '표준화' 라는 개념으로 BN layer 를 이해해 보면 왠지... 각  배치별 평균 벡터와  표준편차 벡터값 (혹은 분산-공분산 행렬) 들을 저장해 놓았다가, test data 예측시 활용할 것도 같은데요.. (마치 sklearn 의 preprocessing 모듈의 StandardScaler 클래스의 fit 메소드 처럼)

=> 네 맞습니다. 테스트 데이터에서는 다시 BN을 적용하지 않고, 학습 데이터에서 사용된 BN을 테스트 데이터에 적용합니다. 

테스트 시, 즉 Inference 시에는 학습시에 layer별로 만들어진 개별 평균과 표준 편차를 기반으로 지수 가중 이동 평균을 일괄적으로 적용해서 평균과 표준 편차를 구해서 적용하며, 스케일링과 쉬프트 파라미터는 학습시에 최적으로 결정된 값을 이용합니다. 

0

aquarid22님의 프로필 이미지
aquarid22
Questioner

많은 질문을 한꺼번에 드렸는데 각 질문별로 상세하고 명확한 답변 감사드립니다.  이해하는데 도움이 많이 되었습니다!

 

1번 질문 관련해서 추가적으로 규칙성을 찾으려 노력해 보니,  BN layer 의 경우 # of training paramter = feature map (직전 conv layer 의 filter 개수)  * 4 개  의 수식을 가지는 것도 같습니다. 구글링을 좀더 해보니 gamma (표준편차의 개념), Beta (평균의 기대값 개념) 과 같은 두 개의 learnable paramter 와,  말씀 주신 바와 같은 평균/분산의 이동평균값인 두 개의 non-learnable parapeter 합쳐서 총 4개의 training paramter 로 구성되는 것도 같습니다. 

 

dooleyz3525님의 프로필 이미지
dooleyz3525
Instructor

좋은 정보 감사합니다. 

aquarid22's profile image
aquarid22

asked

Ask a question