Normalization & Standardization & Regularization
데이터과학, 머신러닝 등을 공부하다 보면 정규화라는 단어를 자주 접할 수 있는데, Normalization, Standardization, Regularization 세 가지 영어표현을 모두 정규화라고 하는 것은 문제가 있다. Normalization의 종류에 대해 알아보기 전에 세 가지 method의 차이에 대해 짚고 넘어간다.
1. Normalization & Standardization
- 둘 다 데이터의 분산을 줄이기 위해 값의 범위를 축소하는 rescaling 과정이다.
- scale의 범위가 크다면 노이즈 데이터가 생성될 가능성이 커지고, Overfitting이 될 가능성이 높아지고, 활성화 함수의 의미가 희미해진다.
- 일반적으로 가중치 초기화를 위해 정규분포로부터 값을 생성하게 되는데, 정규분포의 값은 (-2.58, 2.58)에 99%의 값이 존재한다. 따라서 scale이 커진다는 것은 분포 범위가 넓어져 초깃값을 정하기 힘들게 한다.
- 세 method 모두 overfitting을 방지하는 효과가 있다.
여기서 Normalization은 다양한 방식이 있고 값의 범위를 0~1 사이의 값으로 바꾸는 것을 의미한다. Standardization은 정규분포를 표준정규분포로 변환하는 방법으로 값의 범위를 평균 0, 분산 1이 되게 한다. 따라서 Standardization은 '표준화'라고 부르는 것이 맞을 것 같다.
이 두 method는 머신러닝에서는 scale이 큰 Feature의 영향이 지나치게 커지는 것을 방지하고, 딥러닝에서는 Local minimal에 빠질 위험을 줄여 큰 학습률을 가능하게 해 학습 속도를 향상시키는 효과가 있다.
2. Regularization
- Regularization은 '일반화'라고 하는 것이 이해하기 쉽다.
- 보통 Regularization은 가중치 조정에 제약을 걸어 overfitting을 방지하고 일반화 성능을 높이는데 도움을 준다.
- 머신러닝에서 학습은 가중치의 조정을 단순히 cost function이 작아지는 방향으로 진행되는데, 이 때 특정 가중치 값들이 커지면서 오히려 결과를 나쁘게 하는 경우가 있다.
- Regularization은 특정 가중치 값만 더해주거나 빼주어서 모델의 복잡도를 조정함(증가)으로써 학습 데이터에 딱 맞게 되는 것을 어느 정도 예방할 수 있습니다.
- ex) L1 Regularization, L2 Regularization, Dropout, Early Stopping
Normalization
Normalize는 Loss function의 smoothness를 증가시키는 것이 학습이 잘 되는 주된 이유로 설명되고 있다.
위 그림은 처음에 뭐지.. 싶었는데 H, W를 한 차원에 몰아넣은 것이었다. 아마 배치 차원까지 4차원을 시각화하기 어려워서 그런 듯 하다.
1. Batch Normalization
신경망 학습 시 Gradient 기반의 parameter들은 작은 변화가 출력값에 얼마나 영향을 미칠 것인가를 기반으로 학습하게 된다. 만약 parameter 값의 변화가 신경망 결과값에 작은 변화를 미치게 되면 효과적으로 학습시킬 수가 없다. Gradient는 결국 Loss로부터 계산된 미분값=변화량을 의미하는데 이 변화량이 매우 작아지거나(Vanishing) 커진다면(Exploding) 신경망을 효과적으로 학습시키지 못하고 Error rate가 수렴해버리는 문제가 발생한다.
이 문제를 보완하기 위해 Sigmoid나 tanh 같은 활성화 함수를 사용했는데, 이는 매우 큰 범위의 입력 값들을 매우 작은 출력 값으로 변환시켜 학습이 악화될 수 있다. 즉 첫 layer의 입력 값에 대해 매우 큰 변화가 있더라도 결과값의 변화는 극소가 되는 문제가 발생하는 것이다.
이러한 기울기 소실/폭발 문제를 보완하기 위해서는 Batch Normalization을 사용하는 것이 좋다.
배치 정규화는 간단히 말해 feature map의 각 channel 별로 각 미니배치 단위의 평균과 분산을 이용해 정규화 하고, scale 및 shift를 γ와 β를 통해 진행하는 것이다. 이 때 감마와 베타 값은 학습 가능한 변수이다.
여기서 scale&shift는 weight&bias로도 이해가능한데, pytorch에서는 .weight와 .bias로 출력가능하다. 헌데 초깃값에 대한 입력 파라미터가 따로 없는 것 같아 찾아보니 γ는 0, β는 1로 초깃값이 설정된다고 한다.
BN의 장점
- 일반화를 개선하고 overfiting을 감소시킨다.
- 학습의 수렴속도를 높이고 가중치 초기화에 대해 강건해진다.
- 학습의 안정성을 높이고 기술기 소실 문제를 완화환다.
- feed forwad network에 성능과 안정성 개선에 뛰어나다.
BN의 단점
- 미니배치 크기에 의존한다.
- RNN계열의 모델에 적용하기 힘든다. - Layer norm.
2. Layer Normalization
각 인스턴스(HxWxC)에서 나온 feature를 모든 channel에 걸쳐 한 번에 정규화하는 방법. CV에서 오랫동안 BN이 표준으로 사용되었다면 NLP에서는 입력길이의 가변성, NLP task에서 미니배치 분포의 심한 변동성, 재귀적 구조인 RNN모델에서 BN의 모호성 때문에 LN을 표준으로 사용해왔다고 한다. 단, NLP에서는 단어 단위로 feature(representation)을 뽑기 때문에 문장이 아닌 단어 단위로 모든 채널에 걸쳐 정규화하는 것을 LN이라고 한다. Transformer 구조에서도 병렬 처리되는 각 단어별로 정규화를 적용하는 LN이 적용된다.
LN의 장점
- BN과 달리 작은 batch size에서도 효과적이다.
- sequence에 따른 고정 길이 정규화로 BN에 비해 RNN에 더 효과적이다.
- 일반화 성능 향상이 가능하다.
LN의 단점
- 추가 연산 및 메모리 오버헤디가 발생할 수 있다.
- BN과 반대로 feedf orward network에 BN만큼 잘 동작하지 않을 수 있다.
- 학습률, 가중치 초기화 같은 하이퍼파라미터의 조정에 민감할 수 있다.
3. Instance Normalizatoin
각 인스턴스의 feature channel(1xHxW)들을 각각 정규화한다. 주로 이미지의 style을 조작할 때 자주 쓰인다. 미니배치의 모든 feature를 한 번에 정규화하는 BN은 이미지 인스턴스 고유의 정보를 많이 손실시킨다. 따라서 각 인스턴스의 개별 특징을 보존해야 하는 경우 IN을 사용한다. 여기서 AdaIN이 파생되었다. 또한 IN은 real-time generation에 효과적이라고 한다.
4. Group Normalization
Group normalization은 channel을 그룹으로 묶어 정규화를 진행한다. group 수 G에 대해 G=1이면 LN과 동일하고 G=C이면 IN과 동일하다. Group Norm은 Batch Norm을 하고 싶은데 segmentation task나 video를 다루는 task와 같이 메모리 소비때문에 어쩔 수 없이 batch size가 제약될 때 대체하기 위한 방법이라고 한다.
performance
위 그림은 각 정규화 방법의 성능 차이를 비교한 것인데 BN의 성능이 가장 좋다.
위 그림은 batch size에 따른 BN과 GN의 성능 차이인데, BN은 batch size에 의존하는 반면 GN은 거의 그렇지 않다.
'DL > modules' 카테고리의 다른 글
FLOPs (1) | 2024.01.25 |
---|---|
BPE(Byte Pair Encoding), WordPiece Tokenization (2) | 2024.01.25 |
Loss function (1) | 2024.01.22 |