Deep Learning/Computer Vision

[Regularization] variety methods of Regularization

언킴 2021. 10. 19. 22:43
반응형

Regularization은 규제화라고 할 수 있을 것이다. 모델에 제약을 걸어 Generalization performance를 좋게 하고 싶은 것이다. 회귀분석에서의 제약 모델에 있어서는 Ridge, Lasso, ElasticNet 등이 있을 것이며, 딥러닝에 있어서는 다음과 같은 Regularization 이 존재한다.

 

  • Early stopping
  • Parameter norm penalty
  • Data augmentation
  • Noise robustness
  • Label smoothing
  • Dropout
  • Batch normalization

 

 

학습을 방해하는 것이 Regularization의 주된 목적이지만 단순히 방해만 하는 것이 아니라 학습 데이터에서만 잘 작동되게 하는 것이 아니라, 테스트 데이터에도 잘 작동하도록 만들어주는 것이다. 위 방법을 적용시킬 때 학습이 잘 안되는 경우도 존재하겠지만 대부분의 경우 학습이 잘된다.

 

Early stopping

Early stopping은 말그대로 일찍 중단하는 것을 말한다. Generalization performance가 작아지다가 커지는 지점이 우리는 overfitting되는 시점이라고 알고 있다. 그렇기 때문에 overfitting이 되기 전에 미리 중단시켜 overfitting을 방지하는 과정이 필요하다. 여기서 주의해야할 점은 알다시피 이 과정에서 test set을 사용하는 것은 cheating이다. 그렇기 때문에 Early stopping을 하기 위해서는 반드시 Validation set을 준비해아한다.

 

 

 

Parameter Norm Penalty

parameter norm penalty는 Neural Network Parameter가 너무 커지지 않게 규제를 하는 것이다. 네트워크 파라미터를 모두 제곱하여 나온 숫자를 같이 줄이는 것이다. 이왕이면 네트워크를 학습하는 과정에서 weight의 숫자들이 작으면 작을수록 좋다라는 의미다.(여기에서 작다라는 의미는 -,+의 의미가 아니고 절댓값, 즉 크기 관점에서의 작다라는 의미) 

 

Neural Network가 만들어내는 함수의 공간 속에서 해당 함수를 최대한 부드러운 함수로 보자는 것이다. 여기에 깔려져있는 가정은 부드러운 함수일수록 Generalization performance 가 높을 것이라는 것이다. $\frac{\alpha}{2}||W||^2_2$ 해당 부분을 Parameter Norm Penalty 라고도 하고 weight decay라고도 한다.

 

total cost = loss($\mathcal{D};\mathcal{W}) + \frac{\alpha}{2}||W||^2_2$

 

 

Data Augmentation

딥러닝 혹은 머신러닝에 있어서 데이터가 많다면 그래도 어느정도 성능은 좋게 나온다. 아래 그림을 보면 데이터가 적을 때 딥러닝 보다는 XGBoost, RandomForest 등 Traditional한 Machine Learning의 성능이 더 좋다고 나온다. 하지만 데이터 셋이 커지게 되면 전통적인 기계학습의 방법론들은 많은 데이터 셋들을 표현할만한 표현력이 없고, 딥러닝은 우리가 가지고 있는 데이터를 다 표현할만한 능력을 가지고 있다.

 

문제는 데이터가 한정적이다는 것이다. 우리가 데이터를 만들어낼 수 없기 때문에 Data Augmentation을 하는 것이다. 현재 우리에게 주어진 데이터를 가지고 위치를 변경시키거나 좌우를 반전시키는 등(이미지의 경우) 현재 가지고 있는 라벨이 바뀌지 않는 한도 내에서 데이터를 증강시켜 데이터 수를 늘리는 것이다. Self-supervised learning으로 가게되면 라벨링이 되어 있지 않는 데이터를 추가해 학습시키는 과정을 진행하는 방식으로도 하지만 이부분은 다음에 다루어보자.

 

mnist의 경우 숫자를 다루기 때문에 약간의 각도의 조정을 통해서는 라벨이 변화하지 않아서 가능하지만 좌우, 상하반전을 해버리면 6이라는 숫자가 9로 변하는 등의 라벨이 변환되어 버리기 때문에 이 경우에는 반전을 취하는 행위는 하면 안된다. 하지만 cifar-10의 경우에는 개구리, 트럭 등 이미지를 반전한다고 해서 라벨이 바뀌지 않기 때문에 좀더 Data augmentation의 제약이 덜하다. 

 

 

Noise Robustness

이 부분은 지금까지도 왜 잘 되는가에 대한 의문을 품고 있는 Regularization 이다. 입력데이터에 노이즈를 집어넣는 것을 말한다. 데이터를 집어넣는거에 있어서 Data augmentation과 유사하다고 볼 수 있지만 Ata augmentation과의 차이를 두자면 단순히 이 노이즈를 입력값에만 집어 넣는 것이 아니라, weight에도 집어넣게 된다. weight를 학습시킬 때 neural network의 weight를 계속 흔들어주면 성능이 더 잘 나온다는 실험적인 결과가 있다. 

 

 

 

Label Smoothing

Label smoothing 역시 Data augmentation과 유사하지만 Label smoothing은 학습데이터의 데이터 두개를 가지고와 두 데이터를 섞어 주는 것이다. 분류 문제를 풀 때 class가 두개라고 가정해보자. 이때 우리는 두가지 class 사이의 decision boundary를 찾아 분류를 하려고 한다. Label Smoothing은 이 decision boundary를 부드럽게 만들어주는 효과가 있다고 한다. Mixup은 두가지 사진을 섞어버리고 라벨도 0.5, 0.5로 넣어버린다.

 

아래의 이미지를 보면 강아지도, 고양이도 아닌 것이 되어버리고 라벨역시 마찬가지다. Cutout은 이미지 하나가 주어지면 일정부분을 짤라버리는 것이고, CutMix는 Mixup와 유사하지만 Mixup처럼 블랜딩하게 이미지를 섞어주는 것이 아니라 이미지의 특정영역에는 고양이, 강아지를 각각 집어넣는 방식이다. Mixup의 경우 주로 사용되며 이 경우 성능이 많이 다이나믹하게 증가한다고 한다. (실험적으로 검증된..)

 

 

 

Dropout

dropout은 CS231N 강의에서도 한 번 다루었지만 또 한 번 다루어보자. Dropout을 할 경우 Neural Network의 의 뉴런들이 조금더 로버스트한( 이상치에 덜 민감한) feature를 가질 수 있다라고 해석을 한다. 수학적으로 엄밀하게 증명된 부분은 아니다. 일반적으로 dropout을 쓰면 성능이 많이 올라가는 효과를 보여준다.  

 

 

 

Batch Normalization

앞에서도 다루었지만 Batch normalization은 Reducing internal Covariate Shift라는 것(내부의 feature들의 shifting을 줄인다는 주장)이 이후 나온 논문들에서 아니라는 주장을 하고 있다. BN의 기본 아이디어는 layer의 값들을 mean과 sd를 통해 정규화 해주어서 0과 1사이 값으로 만들어주는 것이다. 이후 논문들에서 잘못되었다고 주장하지만 왜 계속 사용하고 있을까? 실험을 해본 결과 BN을 사용할 때 성능이 많이 좋아지기 때문이다..

 

그 이후 BN과 비슷한 모델들이 나왔다. Layer Norm은 각각의 Layer의 정보를 줄이는 것이고, instance Norm은 이미지 한 장별로 정규화 시키는 것도 있고, 그 중간에 있는 group Norm도 존재한다. [논문]을 읽어보면 배치 사이즈가 작을 때에는 group norm의 효과가 뛰어나고 배치 사이즈가 커질수록 batch norm의 성능이 더 좋은 것을 실험적으로 확인할 수 있다. (여기서 해당 논문을 간략하게 정리했다. )