😺

[cs231n] Lecture 3 : Loss Functions and Optimization

Loss Function

입력 받은 WW가 얼마나 나쁜지 평가하여야 해서 가장 나쁘지 않은 WW를 결정해야함.
그것을 위해 사용하는 함수를 Loss Function이라고 함.
L=1NiLi(f(xi,W),yi)L = {1 \over N} \sum_i L_i(f(x_i, W),y_i)
LL : N개의 샘플들의 Average Loss, WW : Weight Matrix, ff : Predict Function, xix_i : 이미지, yiy_i : 분류 결과

Multi Class SVM

Support Vector Machine이란?

Support Vector Machine은 분류를 위한 Decision Boundary를 결정하는 모델이다.
Decision Boundary는 무수히 많이 존재하지만, 여기서는 Class로부터 가장 멀리떨어진 Boundary를 최적의 Boundary라고 한다.
이때, Support Vector는 Decision Boundary로부터 가까이 떨어진 Data이고, Decision Boundary로부터 Support Vector 까지의 거리를 Margin 이라고 한다.
최적의 Decision Boundary가 Class로부터 가장 멀리 떨어졌다고 하였으므로, 이는 곧 Margin이 가장 큰 Decision Boundary가 최적 될 것이다.
아래 링크를 참조하였다.
Multi Class SVM은 Class가 2개인 Binary Class SVM을 응용하여 여러 클래스를 분류할 수 있도록 한 모델이다.

Multi Class SVM Loss

Multi Class SVM에서 Loss는 다음과 같이 정의한다.
Li=jimax(0,sjsyi+1)L_i = \sum _{j \neq i} \max(0, s_j - s_{y_i} +1)
(ii : 정답, sjs_j 는 Classifier가 내놓은 스코어, syis_{y_i}는 정답 스코어)
이를 풀어서 적어보자.
이 함수의 의미는 Classifier가 정답이 아닌 Class에 대해서 내놓은 Score들을 순회하면서 정답의 Score와 비교하는데, 정답의 Score가 오답의 Score보다 유의미하게 (Saftey Margin 보다 더) 커야 한다는 것이다. 그렇게 된다면 Loss는 0이 되고 해당 Class를 잘 분류한 것이다.
그래프로 이를 작성하면 위와 같은 모양이 되어 이를 Hinge Loss 라고 하기도 한다.
모든 Class에 대해 Loss를 계산하고 이를 평균 내면 Classifier의 Average Loss가 된다.

Regularization

Loss Function을 통해 괜찮은 WW를 찾는 다는 것은, Training Data를 이용하여 WW를 찾는 다는 것이다.
하지만 우리가 찾은 Classifier가 Test Data에 얼마나 잘 맞는가를 알아야 하기 때문에 Training Data에서 나타나는 성능보다 Test Data에서 얼마나 좋은 성능이 나타나는지를 알아야 한다.
Training Data를 통해서 학습을 하면, 해당 Training Data에 가장 잘 맞게 학습이 되기 때문에 학습된 모델이 복잡할 수 있다. (파란색 곡선) 하지만 모델이 단순할 수록 다른 데이터에도 잘 들어맞기 때문에 (Occam's Razor) 모델을 단순화 할 필요가 있고,
그래서 아래와 같이  Data Loss에 Regularization Loss를 추가한다.
L(W)=1NiLi(f(xi,W),yi)+λR(W)L(W) = {1 \over N} \sum_i L_i(f(x_i, W),y_i) + \lambda R(W)
λ\lambda는 두 항간의 Trade-off로 Hyperparameter이다.

L2 Regularization

R(W)=klWk,l2R(W) = \sum_k \sum_l W^2_{k,l}
L2 Regrularization에서는 Euclidean Norm 이 작을수록 less complex 하다고 생각한다.
따라서 WW의 Euclidean Norm에 페널티를 주어 Euclidean Norm이 작은 (값들이 Coarse한, 값들이 고른) WW를 선호하게 한다.
데이터의 모든 요소가 골고루 결과에 영향을 미치는 것을 원한다면, 다시 말해서 데이터의 특정 값에 의해 결과가 좌우되는 것을 원하지 않는다면 L2 Regularization을 해볼 수 있을 것이다.

L1 Regularization

R(W)=klWk,lR(W) = \sum_k \sum_l |W_{k,l}|
L1 Regularization에서는 WW에 0이 많을 수록(Sparse 할수록) less complex하다고 생각한다.
따라서 WW의 Sparsity를 높인다. (W를 희소 행렬이 되도록, 0의 갯수를 늘려서)

Elastic Net Regularization

R(W)=klβWk,l2+Wk,lR(W) = \sum_k \sum_l \beta W^2_{k,l} + |W_{k,l}|
L1과 L2를 섞은것
Max Norm Regularization, Dropout등의 다른 Regularization도 있음 

Softmax Classifier (Multinomial Logistic Regression)

Multiclass SVM 에서는 정답 점수가 오답 점수보다 높기만 하면 됐지만, Multinomial Logistic Regression에서는 점수 각각에 추가적인 의미를 부여한다.

Logistic Regression

Linear Regression과 달리 결과가 연속적인 값이 아닌 Category가 있는 이산적인 값일 경우 Linear Regression을 적용할 수 없다. 이런 경우에 특정 Category가 속할 확률을 이용해서 회귀 분석을 하게 되는데, 이런 방법을 Logistic Regression이라 한다.
로지스틱 회귀 분석에서는 Category에 속할 확률의 Odds(승산) 값을 사용한다. Odds란, 어떤 사건 AA가 발생할 확률을 발생하지 않을 확률로 나눈 값(Odds=P(A)1P(A)Odds = {P(A) \over 1 - P(A)})이다.
이때, Odds의 값은 0보다 크므로 회귀식을 사용하기 위해 로그를 취해 사용한다. 이를 바탕으로 Logistic Regression 의 식을 적어보면,
log(P(A)1P(A))=βTxlog \left( {P(A) \over 1 - P(A)}\right) = \vec{\beta}^T \vec{x} 이고, 이를 정리하면 
P(A)=11+eβTxP(A) = { 1 \over 1 + e^{-\vec{\beta}^T \vec{x}}} 이다.
이를 응용하여 KK개의 Class를 분류할 수도 있다. (다항 로지스틱 회귀 분석)

Softmax Function

입력 받은 값을 0에서 1사이의 값으로 바꾸고, 해당 값을 전부 더하면 1이 되도록 하는 함수이다.
f(xi)=exijexjf(x_i) = \cfrac{e^{x_i}}{\sum_j e^{x_j}}

Softmax Classifier의 Loss Function

점수를 Softmax 함수에 넣고, 나온 확률 값을 log-\log취한다. 따라서,
Li=log(esyijesj)L_i = -\log \left( \cfrac{e^{sy_i}}{\sum_j e^{s_j}} \right)
log-\log를 취하는 이유는? Kulllback-Leibler Divergence에 의한 결과이다. Kullback-Leibler Divergence란 두 확률 분포 사이의 차이를 계산하는 방법이다. DKL(PQ)=yP(i)logP(i)Q(i)D_{KL}(P||Q)=\sum_y P(i) \log\cfrac{P(i)}{Q(i)} Softmax 함수에 넣어서 만들어진 확률 분포(QQ)와 정답 확률 분포(PP) (정답은 1 나머지는 0)를 비교하면, 정답 스코어는 P(i)P(i)가 1, 오답 스코어는 P(i)P(i)가 0이다. 따라서 Kullback-Leibler Divergence의 결과는 DKL(PQ)=logQ(i)D_{KL}(P||Q) = -\log Q(i)가 된다.
고양이를 완벽하게 분류했다면 마찬가지로 0이 나와야 하지만, 유한 정밀도에서는 0이 나올 수 없다. (정답이 무한대여야 하기 떄문에)
SVM Loss Function에서 점수들이 0에 가까이 모여있을 경우 (클래스의 개수 - 1) 이 나온 것처럼,
Softmax Classifier의 Loss Function에서는 log\log (클래스의 개수)가 나온다.

Softmax Classifier와 SVM Classifier의 차이 

SVM의 경우 Margin을 넘기만 하면 얼마나 넘던 값이 같음.
Softmax의 경우 Class에 속할 확률이 1이 되기 위해 계속해서 성능 개선을 할 수 있음.

Optimization

Loss가 작아지는 WW를 구하는 과정을 Optimization이라고 한다.

Random Search

WW를 대충 아무거나 놓고 해보기
개구림

Gradient Descent

Loss는 WW에 따라 변한다. 따라서 WW를 조금씩 변화시켜보면서 Loss가 점점 작아지는 방향으로 WW를 업데이트하는 방법을 Gradient Descent (경사 하강법) 이라고 한다.
WW를 임의의 값으로 초기화 하고, Loss와 Gradient를 계산한 후에 Weight를 Gradient의 반대 방향으로 업데이트 한다.
while True: weight_grad = evaluate_gradient(loss_function, data, weights) weights += - step_size * weights_grad
Python
step_size는 Hyperparameter의 일종으로, Learning Rate라고도 한다.

Stochastic Gradient Descent

Dataset의 크기가 커지면 Dataset 전체를 이용해서 Loss를 계산하는 것은 매우 시간이 오래 걸린다.
따라서 전체 Dataset을 이용하는 것 보다 Minibatch라는 작은 Training sample로 나눠서 Loss의 추정치와 Gradient의 추정치를 계산해서 사용한다.
while True: data_batch = sample_traing_data(data, 256) weights_grad = evaluate_gradient(loss_funfction, data_batch, weights) weights += - step_size * weights_grad
Python

Image Feature

이미지를 쌩으로 집어 넣는 것 보다 이미지의 여러 특징들을 계산해서 특징 벡터로 만들고 집어넣는게 성능이 더 좋을 수 있다.
이미지의 색조만 넣는 Color Histogram이나, 이미지의 Edge 정보를 넣는 Histogram of Oriented Gradients (HOG)나, Bag of Words 등이 있음