Data Science/ML | DL

Training Technique: Data Pre-processing, Weight Initialization, Feature Normalization

402번째 거북이 2023. 3. 5. 16:26

Training Technique들에 대해서 포스팅할 예정이다.

그 중에서 data pre-processing과 weight initialization, Feature Normalization을 그 종류와 적용이유 위주로 정리하였다.

 

😶 Data Preprocessing

training을 더 쉽게 하기 위해 input data를 조정하는 것이다.

 

✔️ Preprocessing의 종류

종류에는 아래와 같은 것들이 있다.

# Mean Substraction

원점(origin)주위로 데이터를 centering하는 처리다.

 

# Normalization✨✨✨

데이터의 dimension을 비슷한 scale로 조정하는 방법.

다른 scale의 dimension을 가진 데이터들이 결과에 영향을 미치는 정도가 다르기 때문에 처리한다.

gradient update에 있어서 지그재그 방식의 업데이트를 방지한다.

즉, 최적화에 있어 수렴을 빠르게 할 수 있게 한다.

 

# Decorrelation

zero-centered data를 covariance matrix로 변환하는 방법.

PCA, SVD 등이 있겠다.

 

# Whitening

Normalization과 Decorrelation이 합쳐진 것이다.

 

✔️ Validation Set과 Test Set에의 preprocessing

Training Set에 Preprocessing을 적용한다면 당연히 Validation Set과 Test Set에도 Preprocessing을 적용해야 한다.

너무 당연한 말이지만, preprocessed training set으로 학습된 모델은 validation/test set에 대해서도 training set과 동일한 데이터 분포를 기대하기 때문이다.

단, validation/test set을 preprocessing할 때 기준이 되는 statistics은 training set에 기반한 것을 사용해야 한다.

(training set을 통해 test/validatoion set의 경향, 패턴을 예측하는 것이기 때문)

 


😶 Weight Initialization

파라미터가 잘 최적화되기 위해서는 초기 파라미터를 어떻게 설정하느냐도 중요할 것이다.

 

시도 1) Zero Initialization

파라미터를 0으로 초기화해서는 안된다.

output, gradient, 업데이트되는 파라미터가 모두 동일할 것이기 때문이다.

 

시도 2) Small Random Numbers

그냥 초기값을 0에 가까운 적당히 작은 랜덤한 숫자로 두면 어떨까.

작은 네트워크에는 동작할 수 있다.

하지만 네트워크가 깊어지는 경우, vanishing gradient problem이 발생할 수 있다.

또한 랜덤한 수로 weight를 초기화할 경우, input 데이터의 개수가 많아질수록 output 분포의 variance가 커지는 문제가 있다.

n에 비례해 variance가 커지는 것을 확인할 수 있다.

 

시도 3) Scaling w by sqrt(n)

시도 2의 문제점을 해결하는 방식은 w를 n의 크기를 고려하여 scaling해주는 것이다.

$$w←{w \over \sqrt n}$$

이렇게 하면 w에 대한 Variance는 1/n로 줄일 수 있게 된다.


😶 Feature Normalization

Weight Initialization을 하는 대신에, 그냥 activation function을 지나기 전에 데이터를 normalize해주는 것도 방법이다.

나에게는 좀 더 익숙한 방법.

정규화를 하는 시기는 FC/Convolutional Layer를 통과한 후, Activation Function을 통과하기 이전이다.

매 Layer에 대해 적용해준다.

✔️ 정규화 대상 차원에 따른 Normalization

N = 데이터, C = Channel, HW = 데이터 개별을 이루는 Height, Weight

# Batch Normalization

batch와 spatial dimension을 따라 정규화하는 방법이다.

주로 CNN 계열 모델에서 사용하는 정규화 방법.

위 그림에서 배치를 구성하는 모든 데이터를 채널별로 정규화하고 있음을 확인 가능하다.

특징은 training과 testing phase에서 동작을 다르게 한다는 것이 있다.

- training phase: 통계량이 각 배치에 대해, sequential하게 계산된다. (Running Average)

- testing phase: 마지막 training phase의 Running Average Statistics가 사용된다.

 

# Layer Normalization

전체 layer의 hidden unit에 따라 정규화하는 방법이다.

위 그림에서 Batch를 구성하는 각 데이터의 모든 feature에 대해 Normalize하고 있음을 확인 가능하다.

주로 RNN 계열 모델에서 사용하는 정규화 방법.

 

# Group Normalization

배치 사이즈가 너무 작거나 클 때 Batch Normalization 대신에 사용하는 방법이다.

(배치 사이즈가 너무 작으면 배치 안의 통계량을 신뢰하기 어렵고, 너무 크면 GPU가 배치를 다루는 것이 어렵기 때문이다.)

channel의 부분, spatial dimension의 부분을 따라 정규화하고 있음을 알 수 있다.

 

# Instance Normalization

Spatial Dimension을 따라 정규화하는 방식이다. (Batch로부터 독립적이다!)

 

FC는 H,W가 1이기 때문에 Instance Normalization을 사용하지 않는다.

Style Transfer 등 데이터 개별의 특성을 살려야 할 때 사용한다.

 

 

✔️ Feature Normalization의 장단점

장점

  1. deep nn의 학습이 더 쉽도록 한다.
  2. gradient flow를 개선하는 효과가 있다.
  3. 최적화에 있어서 더 빠른 수렴이 가능하게 한다.
  4. Learning Rate를 크게 하여도 안정적이다.(빠른 수렴과 연결)
  5. Weight Initialization에 Robust하게 하는 효과가 있다.

 

단점

feature 정규화를 하게 될 경우 그 결과는 항상 평균이 0, 분산이 unit의 분포를 따르게 된다.

데이터에 따라서 이러한 제한은 데이터 특성을 사라지게 만들 수 있고, 이는 Underfitting으로 이어질 수 있다.

 

+) Affine Transformation

Normalization으로 인해 데이터의 특성이 사라지는 현상을 개선하는 방식이다.

정규화된 feature에 감마, 베타를 곱하고 더해주어 특성이 사라지지 않게 한다.