2021. 4. 2. 14:57ㆍDeep Learning/개념
※ batch normalization 논문, 동빈나 유튜브 및 다른 자료를 참조하였습니다.
논문이나, kaggle 등 competition에서 batch normalization을 많이 접하게 된다.
batch normalization (BN)은 어떤 효과를 가져올까?
- lr을 잘못 잡으면 gradient가 explode / vanish하거나 local minimum에 빠지는 경우가 생기던 기존 문제 -> parameter scale때문이라고 정의 -> BN수행시 parameter scale의 영향을 받지 않아 높은 lr설정 가능 -> 빠른 학습
- weight 초기화에 대한 민감도가 낮아진다 ( lr 등의 hyper parameter 설정에 대한 부담을 줄일 수 있다.)
- 모델을 일반화 하는 효과(training data와 특성이 다른 data에도 잘 적용될 수 있게)
- BN의 경우 자체적인 regularization(정규화) 효과 -> 기존에 사용하던 weight regularization term 등을 제외할 수 있게 하며, 나아가 Dropout을 제외할 수 있게 한다 (Dropout의 효과 = Batch Normalization의 효과) Dropout의 경우 효과는 좋지만 학습 속도가 다소 느려진다는 단점이 있는데, 이를 제거함으로서 학습 속도가 향상된다.
BN 논문
에서 말하는 BN의 motivation은
Gradient Vanishing / Gradient Exploding 방지:
이전에는 Activation 함수의 변화 (ReLU 등), Careful Initialization, small learning rate 등으로 해결 -> 이러한 간접적인 방법보다는 training 하는 과정 자체를 전체적으로 안정화하여 학습 속도를 가속시킬 수 있는 근본적인 방법 찾기
이런 불안정함이 Internal Covariant Shift라고 판단했습니다.
즉, 이런 기본적인 MLP로 설명을 하자면, 각 layer / activation을 거져갈 때마다 (각 레이어로 들어가는)input의 distribution이 달라지는 현상 때문이라는 것입니다. 이 현상을 막기 위해 가장 간단하게 수행하는 것이 각 층 input의 distribution을 평균이 0이고 표준편차가 1인 분포로 normalize시키는 whitening입니다.
정리하면, whitening은 들어오는 input features를 uncorrelated(feature 별로 연관성이 없도록) 만들어주고, 각 feature의 variance를 1로 만들어줍니다.
그렇지만 whitening은 covariance matrix도 계산해야하고 그것의 inverse도 공부해야하기 때문에 계산량이 많고, 일부 parameter의 영향이 무시될 수 있는 가능성이 있기 때문에(이에 대해서는 논문 내에 실험적 확인이 존재)
whitening의 단점을 보완해 internal covariance shift를 줄이기 위해
- 각각의 feature들이 이미 uncorrelated 되어있다고 가정하고, 각 feature에 대해서만 scalar 형태로 mean과 variance를 구하고 각각 normalize 한다.
- 단순히 mean과 variance를 0, 1로 고정시키는 것은 오히려 Activation function의 nonlinearity를 없앨 수 있다. 예를 들어 sigmoid activation의 입력이 평균 0, 분산 1이라면 출력 부분은 곡선보다는 직선 형태에 가까울 것.
- feature가 uncorrelated 되어있다는 가정 -> 네트워크가 표현할 수 있는 것이 제한될 수 있다. 이를 보완하기 위해, normalize된 값들에 scale factor (gamma)와 shift factor (beta)를 더해주고 이 변수들을 back-prop 과정에서 같이 train.
- training data 전체에 대해 mean과 variance를 구하는 것이 아니라, mini-batch 단위로 접근하여 계산. 현재 택한 mini-batch 안에서만 mean과 variance를 구해서, 이 값을 이용해서 normalize 한다.
BN Algorithm
input : a mini-batch = {x1, x2, ..., xm} , m=입력데이터개수=한batch내 이미지 개수
MLP라면, layer의 입력 차원이 k이면 학습할 파라미터 γ, β의 차원 또한 k차원을 가지게 됩니다. 다음 그림과 같이 표현할 수 있습니다.
CNN을 사용한다면, input채널 개수만큼 γ, β를 갖는 것이 일반적입니다.
- scale factor (gamma)와 shift factor (beta)
γ: 일종의 scaling효과
β: 값의 위치를 조금 바꿔주는 일종의 translation
이 두가지 parameter가 학습이 더 잘 되도록 만들어줍니다.
normalize 식에서의
이 기호는 연산을 수행할 때, 안정성을 위해 넣어주는 작은 상수입니다.
위의 그림에서 볼 수 있듯이, 특정 BN을 Network에 적용할 떄, Hidden layer에 들어가기 전 BN layer을 더해주어 input modify과정을 먼저 거칩니다.
이 논문에서는 Training시에는 지금까지 말했던 것과 같이 mini-batch 에서의 평균과 표준편차를 구하지만 test data를 사용해 inference시에는 조금 다른 방식을 사용합니다.
- > 지금까지 본 data 전체의 정보를 사용하자 -> training시 현재까지 본 input들의 moving average와 unbiased variance estimate의 moving average을 계산해 저장하고, 이 값으로 normalize를 합니다. 이 후 마지막에 γ, β를 사용해 scale및 shift를 해줍니다.
wikipedia |
|
moving average (이동평균) |
통계학에서 이동평균(롤링평균 또는 이동평균)은 전체 데이터 집합의 여러 하위 집합에 대한 일련의 평균을 만들어 데이터 요소를 분석하는 계산이다. 이동산술평균 (Moving Mean) 또는 롤링산술평균(Rolling Mean)이라고도 하며 유한 임펄스 응답 필터 유형이다. 단순, 누적 또는 가중 유형이 있다. 일련의 연속된 숫자와 고정된 부분 집합 크기가 주어지면, 이동 평균의 첫 번째 요소는 연속된 숫자의 첫 고정 부분 집합의 평균을 취하여 구한다. 그런 다음 "앞으로 이동"하여 하위 집합을 변경한다. 즉, 부분 집합의 첫 번째 숫자를 제외하고 연속된 숫자의 다음 값을 포함시킨다. |
unbiased estimation | 통계에서 estimator의 bias(또는 바이어스 함수)는 이 estimator의 예상 값과 추정되는 parameter의 실제 값 사이의 차이다. bias가 0인 estimator또는 decision rule을 unbiased.라고 합니다. 통계학에서 "bias"은 estimator의 목적적 속성이다. bias은 mean (expected value)이 아닌 median에 대해서도 측정할 수 있는데, 이 경우 median-unbiased가 usual mean-unbiasedness property과 구별된다. bias은 일관성과는 별개의 개념이다. 일관된 estimator는 모수의 실제 값에 대한 확률로 수렴하지만 편향되거나 편중되지 않을 수 있다. ------------------------------------ unbiased variance estimation이라 하면, 모집단(input)의 정확한 variance의 평균을 구하겠다 라고 생각하면 될 것 같습니다. |
<논문의 pseudo code> for MLP
- training시에는 mini-batch의 평균, 분산으로 normalization
- test시에는 미리 계산한 moving average로 normalizatinon
- normalization후에는 γ, β로 새로운 값 만들어 parameter update
- γ, β는 일반 layer가 weights학습하듯 back-prop 에서 학습
BN for CNN
Batch Normalization을 CNN에 적용시키고 싶을 경우
- convolution layer에서 activation function에 값을 넣기 전 보통 Wx+b 형태로 weight를 적용시키는데, Batch Normalization을 사용하면 normalize 할 때 beta 값이 b의 역할을 대체할 수 있기 때문에 b를 없애준다.
- convolution의 성질을 유지시키고 싶기 때문에, 각 channel을 기준으로 각각의 Batch Normalization 변수들을 만든다.
ex) m의 mini-batch-size, n의 channel size 를 가진 Convolution Layer에서 Batch Normalization을 적용
convolution을 적용한 후의 feature map의 사이즈가 p x q 일 경우, 각 채널에 대해 m x p x q 개의 각각의 스칼라 값에 대해 mean과 variance를 구하는 것이다. 최종적으로 gamma와 beta는 각 채널에 대해 한개씩 해서 총 n개의 독립적인 Batch Normalization 변수들이 생기게 된다.
'Deep Learning > 개념' 카테고리의 다른 글
L1, L2 Norm/Regularization (0) | 2021.05.22 |
---|---|
Receptive Field (0) | 2021.05.06 |
여러가지 Convolution연산 (0) | 2021.03.19 |
GoogleNet(Inception V1) (0) | 2020.12.14 |
VGG16 (0) | 2020.12.14 |