묻고 답해요
140만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨딥러닝 CNN 완벽 가이드 - Fundamental 편
Batch Normalization Layer 의 Training parameter 이해 관련 질문
안녕하세요? 머신러닝 완벽가이드 수강하고 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 들인 것인지요? ) 감사합니다!
-
해결됨딥러닝 CNN 완벽 가이드 - Fundamental 편
안녕하세요.
안녕하세요. 강의 내용에 따라 CIFAR10 데이터셋을 사용하여 동일한 모델에 이리저리 바꿔가며 성능 테스트를 하고 있는 중에 궁금한 사항이 생겨 질문드립니다. 우선, 동일한 모델 (= 강의 예제 모델, lr=0.001, epochs=30, He Normal) 에 BN 적용 여부로 나눠서 train, val acc & loss 그래프를 그려봤습니다. [ BN 미적용 ] [ BN 적용 ] 결과는 보시는바와 같이 BN 미적용한 모델이 적용한 모델보다 loss 수렴이 안정적입니다. 하지만 Test 결과는 BN 적용한 모델이 평균적으로 (3회 기준) 약 0.05 ~ 0.06 (5 ~ 6%) 정도 accuracy 값이 높게 나왔습니다. 그렇다고 한다면 train과 validation의 loss 값이 안정적으로 수렴한다고해서 무조건적으로 모델 성능이 높게 나오는건 아니라는 건가요 ? 그리고 위 BN 적용 그래프에서 loss 값이 수렴하지 않고 변동성이 심한 경우는 lr 값이 너무 커서 minima 를 찾지 못해 제대로 학습이 안되는 경우에도 비슷한 결과를 얻었습니다. 그럼 BN 적용하게 된다면 기본적으로 lr 값을 기존 값 대비 낮추는게 모델 성능 향상에 일반적으로 도움이 되나요 ?