엄청 다양한 regluarization 방법들이 있는데 그 중 가장 흔한 건 L2 Regularization이나 weight decay입니다.

물론 위의 두 방법을 제외하고 여러 방법이 존재합니다.


 

L2 Reglurization은 weight vector의 euclidian norm을 penalize 합니다.

L1 norm을 penalize하려면 L1 regluarization이 더 좋습니다.

이후 수업에서는 딥러닝에 많이 사용하는 reglurarization(dropout, batch normalization, stochastic depth)을 배워볼 것입니다.


 

Q. 어떻게 L2 reglurarization이 모델의 복잡성을 측정할 수 있습니까??
A.
우리가 실제로 linear classification을 할 때 모델의 예측은 W와 x의 닷프로덕트를 통해 계산됩니다. 그래서 linear classification 측면에서 w1과 w2는 같은 결과를 낼 수 있습니다.

하지만 L2 Regularization 관점에서는 이 두 벡터가 다르게 취급됩니다. 
L2 Regularization은 가중치 벡터 W의 크기를 측정하는 방식으로 모델의 복잡성을 평가합니다. 여기서 복잡성은 가중치 벡터의 크기에 의해 결정됩니다. w2는 w1에 비해 상대적으로 더 작은 L2 norm을 가지기 때문에 L2 regularization은 w2를 선호합니다. 즉 L2 regularization은 가중치 벡터의 크기가 작을수록 더 선호하므로, w2가 더 적합한 선택이됩니다.

L2 regularization은 가중치 벡터의 크기를 감소시켜 과적합을 방지하고, 모델의 복잡성을 줄이는 방식으로 작용합니다. 여기서 모델의 복잡성이란, 모델이 너무 큰 가중치를 가지지 않도록 하여, 지나치게 세밀한 데이터의 변동을 학습하지 않도록 제한하는 것입니다.

반면, L1 regularization은 가중치 벡터의 절댓값 합을 기준으로 복잡성을 평가합니다. L1 regularization은 sparsity를 촉진하는 경향이 있습니다. 즉 L1 regularization을 사용하면 일부 가중치가 0이 되어, 불필요한 입력 변수들이 자동으로 제외됩니다. 이 경우 w1이 선호될 것입니다. 왜냐면 L1 regularization은 많은 가중치를 0으로 만들고 덜 복잡한 모델을 선호하기 때문입니다.

따라서, L2 regularization은 모델의 복잡성을 가중치 벡터의 크기로 측정하고, L1 regularization은 가중치 벡터의 0이 아닌 요소의 개수로 복잡성을 측정합니다.
 
질문에 대한 답은 모델과 데이터셋에 따라 달라질 수 있습니다. 어떤 종류의 regularization이 더 적합할지는 문제의 특성에 맞게 직접 고려해야합니다.

 

Log 함수는 monotonic function(단조 증가 함수)기 때문에, 입력값이 커지면 출력값도 증가합니다. 따라서 raw probability를 직접 최대화하는 것보다 그 확률의 log 값을 최대화하는 것이 수학적으로 더 쉽고 효율적입니다. 특히 확률이 매우 작은 값일 때, log를 사용하면 더 안정적인 계산이 가능합니다. 예를 들어, 확률  P = 10^-10 과 같은 매우 작은 값은 그 자체로 다루기 어려울 수 있지만, log(10^-10) = -10처럼 더 다루기 쉬운 수로 바꿔주기 때문에 계산이 더 안정적입니다.

 

Loss 함수는 모델의 badness를 측정하는 함수로, 예측이 얼마나 틀렸는지를 평가합니다. 우리가 원하는 것은 이 Loss를 최소화하는 것입니다. 모델이 정답 클래스의 확률을 최대화하려는 목표를 가지고 있지만, Loss 함수는 모델의 잘못된 예측을 최소화하려는 것이기 때문에, 정답 클래스의 확률에 대해 -log를 취한 값을 최소화 하는 방향으로 최적화됩니다. 즉, 정답 클래스의 -log 확률을 최소화 하는 것이 Loss 함수의 목표가 됩니다.

Q.  softmax loss의 min, max 값은?
A. min = 0, max = infinity
우리가 원하는 확률 분포는 정답 클래스에 1 오답 클래스에는 0이어야 합니다. -log1은 0이므로 정답 클래스가 정확이 예측되면 Loss는 0이 됩니다. 하지만 정답 클래스가 정확하다면 Softmax의 점수들은 어떻게 될까요?
이 점수들이 무한대에 가까워져야합니다. 왜냐면 Softmax에서 exp(x)를 계산하기 때문에, 정확한 1과 0이라는 확률을 얻으려면 정답 클래스의 점수가 무한대에 가까워야 하고, 나머지 클래스의 점수는 마이너스 무한대에 가까워져아합니다.
근데 컴퓨터는 무한대나 마이너스 무한대를 표현할 수 없기 때문에 실제로 완벽한 zero loss를 얻을 수 없습니다. 이론적으로 Loss가 0이 가장 작은 값입니다.
max 값은 제한되지 않습니다. 그래서 정답 클래스의 확률이 0이라면 log(0)은 마이너스 무한대고 결국 Loss는 -log(0) 즉 무한대가 됩니다. 하지만 현실적으로 확률이 정확히 0이 될 수 없으므로, 정답 클래스의 점수가 마이너스 무한대가 되어야만 확률이 0이됩니다. 이 경우도 마찬가지로 유한한 정밀도를 가진 컴퓨터에서는 정확히 무한대 값을 얻을 수 없습니다.

Q. 보통 W가 초기화됐을 때 매우 작기 때문에 모든 score는 0에 가까울 텐데 그 때의 loss 값은 얼마일까
A. -log(1/c) -> log c 왜냐면 e^0 = 1 이고  -log(1 / 1 + 1 + ... 1)이 될테니까. 이것도 전에 말한 것처럼 좋은 디버깅 방법입니다.

 


Softmax vs SVM

SVM에서는 correct class와 incorrect class의 점수 사이의 마진을 봅니다. 반면에 softmax 또는 cross-entropy loss에서는 확률 분산을 계산하고 correct class의 minus log를 봅니다. 

svm은 어찌됐든 정답 클래스가 다른 오답 클래스의 score보다 훨씬 더 크기만 하면 됐습니다. 그래서 조금의 변화가 있어도 별 영향이 없었는데 softmax에서는 정답 클래스에 대한 점수를 어떻게든 계속해서 끌어올리려고 합니다. 정답 클래스는 무한대로, 오답 클래스는 마이너스 무한대로. 그게 이 loss function들의 흥미로운 차이점입니다. svm은 어느 정도 선을 넘어서 올바르게 classfied 하면 give up 해버리고 그 데이터 포인트에 대해 더 신경쓰지 않는 반면에 softmax는 계속해서 모든 각각의 data point들을 계속 향상시키려고합니다. 뭐 실제로는 비슷하게 동작할테지만 그래도 마음속에 이런 차이점 정도는 새겨놓고 사는 것도 나쁘진 않을 것 같습니다.

 

그래서 이 W의 loss를 어떻게 줄일건지는. 이어서 다음 포스트에서 봅시다.

+ Recent posts