배치 정규화(Batch Normalization)
GitHub - ndb796/Deep-Learning-Paper-Review-and-Practice: 꼼꼼한 딥러닝 논문 리뷰와 코드 실습
꼼꼼한 딥러닝 논문 리뷰와 코드 실습. Contribute to ndb796/Deep-Learning-Paper-Review-and-Practice development by creating an account on GitHub.
github.com
https://www.youtube.com/watch?v=58fuWVu5DVU
출처
https://arxiv.org/abs/1502.03167
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
Training Deep Neural Networks is complicated by the fact that the distribution of each layer's inputs changes during training, as the parameters of the previous layers change. This slows down the training by requiring lower learning rates and careful param
arxiv.org
배치 정규화 원본 논문(PMLR 2015)
- 딥러닝 아키텍쳐에서 배치 정규화를 통해 좋은 성능을 내도록 도와준다.
- 배치 정규화의 장점
- 학습 속도를 빠르게 할 수 있다: 성능은 그대로, 속도는 빠르게 - 10~20배 가까이 차이 남
- 가중치 초기화에 대한 민감도를 감소시킨다: 하이퍼 파라미터 세팅이 덜 정교하더라도 잘 수렴하도록 도와줌
- 모델의 일반화 효과가 있다: test time 때 정확도가 상승하여 일반화 효과가 있다.
- 입력 데이터가 많은 이미지에서 많이 쓰임
- 그림과 같이 Dimension이 3개인 경우 각 값을 컨트롤 할 수 있도록 한다.
- 입력 정규화: ex. 이미지 한 픽셀당 0-255값을 -1부터 1사이의 값으로 정규화해서 사용한다.
- 이를 통해 학습 속도가 빨라질 수 있다.
- 정규화 전: input data 가로 축은 variance가 큰 반면 세로 축은 상대적으로 작다.
- 세로 축은 feature이 오밀조밀하므로 값의 변화 폭이 크지만, 가로 축은 variance가 크므로 그 반대이다.
- 따라서 정규화를 통해 더 큰 learning rate 사용을 가능하게 해서 속도를 향상시킨다.
- 입력 정규화: 목적이 하나의 데이터가 각각의 feature, 차원, 축이 비슷한 값을 가지게 하는 것
- 입력 표준화: 하나의 축에 대하여 데이터가 표준 정규분포를 가질 수 있도록 하는 것
- 값 - 평균값 / 표준편차 (표준편차: 분산에 루트)
- 코드: x1: 값 큼 / x2: 값 작음
- 화이트닝: 서로 다른 feature이 연관이 없게 하도록(decorrelated) 하는 전처리 기법
- <초기 입력 레이어가 아닌 히든 레이어의 입력 정규화는?>
- 이때의 입력값들: 이전 layer에서 나온 activation 값들임
- batch size만큼 데이터 개수를 가지는 데이터 묶음으로 입력 받으므로 배치 사이즈가 m이라고 가정
- m: 입력 데이터의 개수임 ex. 하나의 배치에 이미지 128개 들어옴 => m=128
- 실제 학습 진행은 감마와 베타
- x는 히든 레이어 중 한 개의 dimension에 대해서만 설명하는 것임. 각각 다 공식들을 적용함.
- 레이어의 입력 차원이 k = 학습할 두 개의 파라미터 캄마와 베타 또한 k차원을 가짐
- multi layered perceptron: 차원 수만큼 수행
- convolutional neural network: 채널 수만큼 수행
- 이때의 BN은 일종의 Whitening transformation을 수행하는 것이다.
- 특정 hidden layer는 x의 평균을 구하고, 분산을 구하고, 정규화를 한다. 이때 입실론은 연산 안정성을 위한 작은 크기의 상수이다.
- 입력데이터 정규화와 달리 BN은 네트워크 성능이 향상되도록 알아서 추가적으로 감마와 베타 파라미터를 스스로 학습하도록 아키텍쳐가 구성이 되어있다. 이때 감마는 일종의 스케일링 수행, 베타는 값의 위치를 조금 바꿔주는 일종의 translation 수행
- 실제 학습이 진행되는 것은 감마와 베타이다.
- 이를 통해 모델은 자동으로 loss를 최소화해주는 감마와 베타를 찾는 방향으로 값을 업데이트한다.
- 감마와 베타를 사용하는 이유: 각 레이어를 단순히 표준정규분포로 정규화하면 시그모이드와 같은 비선형 활성화 함수의 영향력이 감소하는 문제가 발생할 수 있다.
- 특히 입력값이 -2와 2 사이의 값일 때 표준정규분포로 정규화되면 선형적으로 동작한다.
- 따라서 정규화 이후에 사용하는 감마와 베타는 비선형성을 유지할 수 있도록 해준다.
- 배치 norm을 쓰면 더 빠르고, 정확하게 수렴할 수 있다.
- 훨씬 큰 학습률을 설정해도 더 빠르게, 더 정확하게 할 수 있다.
- 또한 일반적인 네트워크에서는 잘못된 하이퍼 파라미터를 설정하면 학습 자체가 진행되지 않는다.
<공변량 변화 (Covariate Shift)>
- 학습 시기와는 다르게 테스트 시기에 입력 데이터의 분포가 변경되는 현상
- 입력으로 들어오는 데이터도 분포가 존재한다.
- 왼쪽 분포는 학습 시기 때 사용했던 입력데이터 x에 대한 분포다.
- 학습시킨 후 나중에 테스트를 진행할때는 x에 대해 다른 데이터가 들어오면 예기치 못 한 성능 하락이 발생할 수 있다.
- ex. 고양이 / 강아지 분류 모델 - 학습 진행할 때 줄무늬 없는 고양이 / 테스트 시 줄무늬 있는 고양이 => 문제 발생가능
- 이것이 네트워크에서 발생할 가능성도 고려하게 됨
<Internal Covariate Shift (ICS) 가설>
- 공변량 변화가 네트워크 내부에서 발생
- 배치 정규화의 성능 향상은 ICS의 감소로부터 기인한 것일까?
- 후속 연구에 의하면 배치 정규화의 효과와 ICS의 감소는 큰 상관이 없다!
How Does Batch Normalization Help Optimization? (NIPS 2018)
- 강제로 랜덤 노이즈를 삽입하여 ICS를 강제로 발생시켰을 때에도 여전히 일반적인 네트워크보다 성능이 우수했다.
- 정말 BN이 ICS를 감소시키는지 불명확