1. 개요
딥러닝을 배우면 Ridge, Lasso regularization에 관해 알게 된다.
각각 L2, L1 norm을 Loss 항에 더하는 방식으로 이루어진다.
(실제로는 Norm에 lambda 값을 붙여서 조절해준다.)
이 때 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의 경우는 어떨까?
딱 두 가지만 바꾸면 된다.
h_j 에 있던 언더바(normalized 되었음) 을 없앴고,
결과물에 1/Z_j 를 곱했다.
그럴듯하다.
5. 소감
아무래도 따라잡기 어려운 파트.
옛날에 시험 공부할 때에도 세번은 봤던 것 같다.
요 주제를 다룬 한국 블로그 글은 못봤는데....
내가 최초인가?
기부니가 조타.
'SW > DeepLearning' 카테고리의 다른 글
[PyTorch] PyTorch Basic - 기본 틀 (0) | 2020.06.29 |
---|---|
[PyTorch] PyTorch Basic - Data Handling (0) | 2020.06.27 |
[Pytorch] Pytorch로 ResNet bottleneck 만들기 (0) | 2020.06.27 |