본문 바로가기

SW/DeepLearning

[Deep Learning] L1 Regularization의 Gradient에 관한 소고

1. 개요

 

딥러닝을 배우면 Ridge, Lasso regularization에 관해 알게 된다.

 

각각 L2, L1 norm을 Loss 항에 더하는 방식으로 이루어진다.

(실제로는 Norm에 lambda 값을 붙여서 조절해준다.)

 

Objective = Loss + Norm

 

 

이 때 Optimizer로 SGD를 사용한다고 가정하면,  for 문 안에서 다음과 같은 수식을 사용한다.

 

Loss 항의 w에 대한 편미분이야 Regularization이 없을 때도 있으니 생략하고,

Norm 항의 w에 대한 편미분에 대해 생각해보자.

 

우선 L2 norm은 간단하다.

모든 weight parameter에 대해 위 연산만큼을 gradient 계산시에 더해주면 된다.

 

잠깐, 그런데 L1 norm은?

고등 수학을 배웠다면, 절댓값을 씌운 함수는 0에서 미분 불가능하다는 사실을 알 것이다.

 

그러면 딥러닝에서 L1 norm을 사용할 때엔, 어떤 방법으로 Gradient를 구할까?

 

2. Normalization of RSS(MSE)

 

Norm term이 없이 RSS(Residual Sum of Square)만 있는 경우,

즉 MSE(Mean Squeared Error)를 Loss function으로 한 경우를 가정해보자.

 

h를 scale function 이라고 했을 때,

결과물 값을 내기 전 Z_j 를 통해 normalize를 먼저 해보면,

 

 

 

k는 input x의 batch 개수인 1~N 에 속하고,

j는 input x의 feature 개수인 1~D 에 속한다.

코드 짤 때는 0~N-1, 0~D-1로 알아서 수정하자.

 

최적을 찾기 위해 RSS에 대한 gradient 값이 0이 된다고 가정해보면,

 

이렇게 된다.

 

이 때,

 

특징 j를 제외한 값 / 특징j에 대한 값 으로 분리하기 위해

위와 같이 rho_j값을 가정하면 결국

 

이렇게 된다.

즉, feature j를 제외한 residual 과 normalized x_i를 sum 한 값이

normalized 된 feature j와 같을 때

RSS의 gradient가 최소가 된다.

 

 

이 형식을 기억해놓자.

 

3. Subgradient Descent

 

RSS만 있는 경우와는 달리, L1 Regularization 하는 경우 Object function에 L1 norm term이 생긴다.

 

이렇게 정리된다.

 

 

개요에서 말했듯이,

L1norm이 추가되면 w_j = 0 에서 미분 불가능한 점이 생긴다.

우리는 Convex function을 이용해 Subgradient Descent를 할 것이다.

 

 

 

w_j가 0보다 작을때, 클 때는 간단하고, w_j=0를 잘 살펴보자.

|x| 함수는 미분할 경우 unique하지 않지만, [-1, 1] 사이의 어떤 값을 하나 선택한 convex function은 unique하다.

[-1, 1]에서 0을 택한 요런 함수는 unique하게 존재한다는 뜻이다.

 

다시 돌아가서 정리해보면,

 

이런 결과를 얻을 수 있다.

 

 

lambda 값이 0일 경우(Green line) : Linear Regression

lambda 값이 적당할 경우 (Pink line) : Lasso Regression

lambda 값이 너무 클 경우 : 특별한 일이 없으면 parameter는 0이다.

여기서 regularization coefficient를 너무 크게 하면 안되는 원인을 찾을 수 있다.

 

4. Unnormalized Case

 

아까 2번에서 Normalized Feature에 대해 다루었는데,

Unnormalized의 경우는 어떨까?

딱 두 가지만 바꾸면 된다.

 

Left : Normalized / Right : Unnormalized

h_j 에 있던 언더바(normalized 되었음) 을 없앴고,

결과물에 1/Z_j 를 곱했다.

 

그럴듯하다.

 

교재의 설명

 

5. 소감

 

아무래도 따라잡기 어려운 파트.

옛날에 시험 공부할 때에도 세번은 봤던 것 같다.

요 주제를 다룬 한국 블로그 글은 못봤는데....

내가 최초인가?

기부니가 조타.