가장 흔히 사용하는 Batch Normalization 외에도,
Layer Normalization, Instance Normalization, Group Normalization이 있다.
Batch Normalzation과 비교해 각각 간단히, 직관적으로 정리해 보았다.
우선 Batch Norm은 하나의 batch 내 모든 이미지를 channel별로 normalize 하는 것이다.
아래 그림에는 한 배치당 2개 이미지가 있고, 각 채널 개수는 3이다.
그런데 이 BN에 작은 단점이 있다.
batch 내에 엄청 튀는 data가 있으면 그에 편향된 평균과 표준편차로 normalize 된다는 것이다.
물론 batch size를 키우면 대부분 해결이 된다.
하지만 그게 어려울 경우, batch와 관계없이 normalization 하기 위한 방법들이 제안되었다.
우선 Layer Normalization은 아래 그림처럼 이미지 1장당 normalization을 수행하는 것이다.
당연히 computer vision task에 사용하는 것은 효과적이지 않고, sequence model에 주로 사용된다.
Instance Normalization은 각 이미지와 각 채널당 normalize를 수행한다.
BN과 LN의 장점을 살려 개별 이미지와 채널의 고유성을 모두 살릴 수 있다.
때문에 이미지 style 조작 시에 자주 사용된다.
그러나 input size에 따라 normalization이 좌우되기 때문에 computer vision task 중 recognition에는 부적합하다.
(input size가 커야 안정적으로 normalization 가능)
마지막으로 Group Normalization은 LN과 IN의 장점을 살려,
각 이미지별, 특정 개수의 채널별 normalize를 수행한다.
위 기법들은 모두 PyTorch에서 쉽게 적용해볼 수 있다.
import torch
batch_norm = torch.nn.BatchNorm2d(num_features)
layer_norm = torch.nn.LayerNorm(normalized_shape)
instance_norm = torch.nn.InstanceNorm2d(num_features)
group_norm = torch.nn.GroupNorm(num_groups, num_channels)
번외) network 내에서 Normalization Layer의 위치
일반적으로 Convolution layer 다음 normalization, 그리고 나서 activation layer 순으로 구성한다.
하지만 사실 가장 먼저 normalization, 그리고 convolution, activation layer 순으로 구성해도 문제가 없다.
오히려 전자의 경우, convolution layer의 bias term이 불필요하게 되며, normalization에서 affine parameters를 반드시 학습해야 하는 이유가 된다.
반대로 후자의 경우에는 normalization에서 affine parameter 학습이 불필요하고, convolution layer의 bias term은 그대로 둬도 된다.
두 방법은 모델 성능에도 유의미한 차이가 없다고 하니까, 사실 그냥 편한대로 하면 될 것 같다.
'공부하며 성장하기 > 인공지능 AI' 카테고리의 다른 글
Object Detection에서 mAP_0.5와 mAP_0.5:0.95의 의미 (0) | 2023.12.14 |
---|---|
DeeplabV3+ 모델 전이 학습(transfer learning) 쉽게 구현하기 (0) | 2023.06.15 |
AMP(Automatic Mixed Precision) 쉽게 적용하기 (0) | 2023.06.14 |
K-means Clustering (0) | 2023.05.21 |
Lasso regression (0) | 2023.05.21 |