Maxima's Lab

[Deep Learning (딥러닝)] Normalization (정규화) & Tensorflow 2, Pytorch 코드 구현 본문

Deep Learning

[Deep Learning (딥러닝)] Normalization (정규화) & Tensorflow 2, Pytorch 코드 구현

Minima 2023. 3. 1. 12:07
728x90
SMALL

안녕하세요, 오늘은 딥러닝에서 Normalization (정규화)에 대해서 알아보겠습니다.

 

딥러닝에서 Normalization은 입력 데이터를 조정하여 모델의 학습 성능을 개선하는 방법 중 하나입니다. 여러 종류의 Normalization 기법이 있으며, 가정 널리 사용되는 종류들은 다음과 같습니다.

 

  • Batch Normalization (BN) : 각 미니배치의 입력 데이터를 정규화하여 평균과 분산을 조정하는 방법입니다. 이를 통해 학습 도중 발생하는 Internal Covariate Shift를 줄일 수 있으며, 더욱 안정적인 학습이 가능해집니다.

 

  • Layer Normalization (LN) : BN과 유사하지만, 전체 미니배치 대신 레이어 내에서 평균과 분산을 계산하여 정구화하는 방법입니다. BN에 비해 데이터가 독립적이지 않아도 사용할 수 있지만, Sequence 데이터에 대한 처리에는 제한적입니다.

 

  • Group Normalization (GN) : BN의 대안으로 제안된 방법으로, 미니배치를 여러 그룹으로 나누어 각 그룹에서 평균과 분산을 계산하여 정규화합니다. BN과 마찬가지로 CNN에서 자주 사용되며, 미니배치가 작은 경우 BN보다 성능이 우수합니다. 

 

  • Instance Normalization (IN) : 각 샘플(인스턴스)별로 평균과 분산을 계산하여 정규화하는 방법입니다. 주로 이미지  처리 분야에서 사용되며, 스타일 변환 등에 유용합니다.

 

  • Group Instance Normalization (GIN) : GN과 IN을 합친 방법으로, 미니배치를 그룹으로 나눈 후 각 그룹 내에서 각 샘플별로 평균과 분산을 계산하여 정규화합니다. GN과 IN의 장점을 모두 취할 수 있으며, 주로 이미지 분야에서 사용됩니다.

 


위의 5가지 Noramalization 기법들에 대해서 Tensorflow 2, Pytorch 코드로 구현하는 방법에 대해서 알아보도록 하겠습니다.

 

순서대로, Tensorflow 2(BN, LN, GN, IN) 입니다.

import tensorflow as tf

model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
  tf.keras.layers.BatchNormalization(),
  tf.keras.layers.MaxPooling2D((2,2)),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(10)
])
import tensorflow as tf

model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
  tf.keras.layers.LayerNormalization(),
  tf.keras.layers.MaxPooling2D((2,2)),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(10)
])
import tensorflow as tf

model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
  tf.keras.layers.experimental.GroupNormalization(groups=4),
  tf.keras.layers.MaxPooling2D((2,2)),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(10)
])
import tensorflow as tf

model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
  tf.keras.layers.InstanceNormalization(),
  tf.keras.layers.MaxPooling2D((2,2)),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(10)
])

이어서, Pytorch (BN, LN, GN, IN) 입니다.

 

import torch.nn as nn

model = nn.Sequential(
  nn.Conv2d(3, 32, (3,3)),
  nn.BatchNorm2d(32),
  nn.ReLU(),
  nn.MaxPool2d((2,2)),
  nn.Flatten(),
  nn.Linear(5408, 10)
)
import torch.nn as nn

model = nn.Sequential(
  nn.Conv2d(3, 32, (3,3)),
  nn.LayerNorm((32, 28, 28)),
  nn.ReLU(),
  nn.MaxPool2d((2,2)),
  nn.Flatten(),
  nn.Linear(5408, 10)
)
import torch.nn as nn

model = nn.Sequential(
  nn.Conv2d(3, 32, (3,3)),
  nn.GroupNorm(4, 32),
  nn.ReLU(),
  nn.MaxPool2d((2,2)),
  nn.Flatten(),
  nn.Linear(5408, 10)
)
import torch.nn as nn

model = nn.Sequential(
  nn.Conv2d(3, 32, (3,3)),
  nn.InstanceNorm2d(32),
  nn.ReLU(),
  nn.MaxPool2d((2,2)),
  nn.Flatten(),
  nn.Linear(5408, 10)
)

이상으로, 딥러닝에서 Normalization에 대해서 알아보고 이를 Tensorflow 2, Pytorch로 적용해보는 방법에 대해서 알아보았습니다.

728x90
LIST
Comments