본문 바로가기

🤖AI/딥러닝

[딥러닝] Overfitting을 완화시키는 방법(1) - Regularization

Regularization이란?

Weight가 너무 큰 값들을 가지지 않도록 하는 것이다.

Weight가 너무 큰 값을 가지게 되면 아래 이미지와 같이 과하게 구불구불한 형태의 함수가 만들어진다.

즉, Regularization은 모델의 복잡도를 낮추기 위한 방법이다.

Regularization하는 방법

단순하게 cost function이 작아지는 쪽으로 학습하면 특정 가중치 값들이 커지면서 결과를 나쁘게 만들기 때문에 cost function을 바꾼다.

L1 Regularization

기존의 cost function값에 weight parameter의 평균을 더해준다.

cost function을 작게 만드는 방향, 각각의 weight parameter를 작게 만드는 방향으로 학습을 하게 된다.

sgn함수를 통해 부호를 판단해서 특정 값만큼 weight parameter에 빼주거나 더해준다.

weight parameter의 변화율로만 계산해주는 것이 아니라 상수값을 빼줘서 weight parameter가 급진적으로 변화되는 것을 막아준다.

 

weight들이 0과 가깝다면 특정 weight들은 0으로 수렴하고 몇 개의 중요한 weight들만 남는다.

weight가 높은 것들은 학습을 하는데 매우 중요한 weight들이다.

따라서 sparse model에 적합하다. 즉, 중요한 것들에 대해서만 학습을 시키겠다는 것이다.

단, 미분 불가능한 부분이 있어서 주의가 필요하다.

cost function에 절댓값이 있어서 weight parameter가 0인 구간에서는 미분이 불가능하다.

L2 Regularization

기존의 cost function값에 weight parameter의 제곱의 평균을 더해준다. 

 

가 1보다 작은 값이여서 weight parameter와 cost function이 작아지는 방향으로 학습이 된다.

 

람다 하이퍼파리미터를 너무 큰 값을 사용하게 되면 back propagation을 줄이는 것보다 l2norm미분 값을 줄이는데 더 많은 영향을 끼치는 업데이트를 하게 된다.
따라서 weight값의 상당 부분이 0이 되고 결국 매우 간단한 모델이 된다.

즉, 람다값을 너무 크게 지정하면 문제가 될 수 있다.

 

Outlier에 대해서 L1보다 덜 Robust(둔감)하다. 즉, outlier들도 포함시킨다.

따라서 Outlier에 대해 신경을 써야 하는 경우에 사용한다.

정말 sparse한 model을 제외하고는 대부분 L2를 사용한다.

 

출처: sanghyukchun.github.io/59/