본문 바로가기

Deep Learning

Overfitting (과적합)을 막는 방법- Regularization(정규화)

Overfitting ( 과적합) 을 방지하기 위해서 여러가지 기법들이 사용되고 있습니다. 이것을 통상적으로 정규화한다 하고 Regularization 이라고 합니다. 

 

우선 Overfitting( 과적합) 에 대해 간단히 말씀드리겠습니다. 데이터가 주어지고  학습모델을 그 데이터에 너무 딱 맞게 학습한것을 Overfitting (과적합) 이라 합니다. 모델이 Overfitting 이 되면 새로운 데이터가 들어오면 예측결과가 달라질수 있습니다.  그래서 모델을 학습할때 어느정도 일반화 된 모델을 설계해야합니다. 

그러면 Overfittimg 을 피하기 위하여 사용되는 정규화기법에는 무엇이 있을까요?  정말 많은 정규화 방법이 있는데 이중 Dropout , Weight Decay 에 대해서 살펴 보도록 하겠습니다. 

 

Dropout

신경망 레이어 중간에 Noise를 주어 학습데이터를 조금씩 다른 모델로 학습하자는 컨셉입니다. 

그러면 Noise를 어떻게 줄수 있을까요? Dropout 은  Layer의  Node를 random 하게 빼고 이 random 확률을 Parameter로 지정하여 내가 임의로 설정할수 있게 하였습니다. (여기서  Node는 신경망의 Hidden Layer를 말합니다.)

 

 

학습(Training)을 할때에는 확률 p 에 따라 node를 turn on / off 할수 있지만 , 

추론(Testing) 을 할때에는 모든 Node를 사용하고, 그렇게 되면 입력이 학습때 보다 1/P 배 많이 들어오게 됩니다. 그래서 p를 W에 곱해서 이를 상쇄시킵니다.

즉 다시 말씀드리면 dropout은 학습(Training)에서만 사용됩니다.

그렇다면 dropout 에 사용되는 확률 p는 어떤값을 사용하면 좋을까요?

위의 그림은 논문(Dropout: A Simple Way to Prevent Neural Networks from Overfitting)에 나와있는 p값을 조정하면서 실험한 내용이고 , 요약하자면 0.5를 써라고 합니다. 그냥 0.5 쓰시면 됩니다 ^^

Weight Decay

 신경망의  노드와 노드의 관계의 강도는 W 클수록 커지는데 ,  Weight Decay는 노드 간관계의 총량을 제한하여 쓸데없는 관계를 맺을수 없게 만듭니다. 

 

위에서 말한 노드와 노드의 관계의 강도라는 말은  Loss funtion 이 작아지도록 W를 구하다 보면 특정 가중치 값들이 커지면서 Overfitting 이 발생할수 있다는것을 말합니다. 즉 너무 Loss funtion 을 작게한다고 노력하지말고 어느정도 느슨하게 만들어 일반화 된 모델을 구하자는 노력의 일환이라고 보면 됩니다.

 

즉 학습된 모델의 복잡도를 줄이기 위해 weight  커지는 것을 막을수 있습니다. 이것을 어떻게 할까요? 일반적으로 Loss function 에 weight가 커질 경우에 대해 패널티 항목을  집어 넣어 weight가 커지는 것을 막을 수 있습니다. 

대표적으로 사용되는 기법은 L1-norm , L2-norm 이 있습니다.

 

우선 L1-norm과 L2-norm 의 공식을 보면  Loss funtion  term 과 페널티 term이 있습니다. 즉 목적은 Loss function term이 작아질 수록 페널티 term이 커지게 하는 컨셉입니다. 그래서 적절한 람다값(페널티 term 값의 계수)을 찾아 두 term 사이에 균형을 잘 조절해주어야합니다.

Source —  http://laid.delanover.com/difference-between-l1-and-l2-regularization-implementation-and-visualization-in-tensorflow/

 

L1 -norm 은 L2-norm 보다 outlier 에 대해 강건하다고 말할수 있습니다.  왜냐면 L2는 제곱항을 가지고 있어 outlier가 들어오면 값이 급격히 증가하지만 , L1의 경우 절대값을 더해주기때문에 outlier에 대해 선형적인 증가만 하게 됩니다.