2016년 8월 6일 토요일

선형 분류기

정의

하나의 층(layer) 만을 가진 분류기이다. 층의 수를 셀 때 입력층은 제외하므로 입력층 하나와 출력층 하나만을 가진 신경망이며 딥 신경망의 가장 기본적인 형태이다. 선형분류기의 학습에 필요한 수식과 용어들을 살펴보자.  

score 함수: 입력 데이터를 부류별 득점(스코어) 값으로 바꾸는 함수
loss 함수: 스코어 값과 참 값(ground true)이 얼마나 일치하는지를 수치화한 함수

선형분류기의 연산은 다음 수식을 통해 수행된다.

$f(x_i, W, b) =  W x_i + b$
여기서 $f$는 score 함수이고 $x$는 입력, $(W, b)$는 분류기의 파라메터 값이다. Loss 함수는 스코어 함수를 이용하여 구성된다. 



Loss 함수

SVM loss와 cross entropy(softmax) loss 두가지에 대해 살펴본다. Loss는 손실이니 손실이 작아지도록 분류기를 설계해야 한다. 

(1) SVM Loss


Multiclass SVM

기계학습에서 소개되는 기존의 전통적 SVM(support vector machine) 마진을 최대화하는 이진 분류기(binary classifier) 얻는 것이었다. 
여기서는 다 부류를 분류하는 경우에 어떻게 SVM으로 비용(penalty)을 정의하는지에 대해 살펴본다. 

어떤 입력이 들어가 선형분류기를 통과해서 클래스당 스코어 값을 얻었다고 하자. 이 때 SVM Loss는 부류별 출력 값 중 입력이 속해야 하는 정 부류(correct class) 스코어가  부 부류(incorrect class) 스코어보다 어떤 마진이상  값을 가지도록 하는 Loss이다.
스코어 값 차이가 마진보다 크면 SVM 로스는 0, 그렇지 않으면 차이 값에 의한 Loss가 나타난다.

$L_i = \sum_{j\neq y_i} \max(0, s_j - s_{y_i} + \Delta)$,  where $s_j = f(x_i, W)_j$.

여기서 $s_j$는 입력 $x_i$가 선형분류기 $f$를 통과해서 얻어진 부류 $j$에 대한 score 값을 나타낸다. $s_{y_i}$는 정 부류에 대한 스코어 값이다.


(예제
만일 3개의 부류(즉, 출력 클래스)를 가지고 있고, 어떤 입력 데이터에 대해 스코어 $s=[13, -7, 11]$ 나왔다고 하자, 첫번째 클래스가 true 클래스라고 가정하고, 마진 값은 10이라 가정한다. 위 수식에 넣어서 계산하면,

$L_i=max(0,-7-13+10)+max(0,11-13+10)$.

수식의 두 항중에서 첫번째 항은 0이다. 13> -7이고 10이상의 차이가 난다. 두번째 항은 13>11이지만 2밖에 차이가 안나고, 8 값이 나온다. 즉, 정 부류의 스코어 13은 부 부류의 스코어 11과의 마진이 10이 될 만큼 충분하지 않아 loss 8이 생기고, 전체 로스도 8이

Regularization


분류기가 같은 Loss 값을 주었다고 해도 이 Loss를 결정하는 파라메터 $(W, b)$는 유일하지 않을 수 있다. 이 문제를 해결하고 분류기의 일반화 능력을 높이기 위해  Loss 값에 Regularization이라 불리는 두번째 항을 추가한다
$R(W)$는 weigts 행렬의 각 요소 값들의 절대치 합(L1 penalty), 또는 제곱 합(L2 penalty)으로 요소값이 커지는 것을 억제한다.

$L =  \underbrace{ \frac{1}{N} \sum_i L_i }_\text{data loss} + \underbrace{ \lambda R(W) }_\text{regularization loss} \\\\$


Regularization항은 일반화 능력을 높이고 $w$값의 확산을 유도한다.

(예제)
입력이 $x=[1,1,1,1]$이다. 선택 가능한 가중치에 $w_1=[1,0,0,0]$과 $w_2=[0.25,0.25,0.25,0.25]$가 있다면 둘 중 어떤 것을 선택할지에 대해 살펴본다. 두 가중치에 대한 선형 분류기 연산은

$w_1^Tx = w_2^Tx = 1$

로 둘 다 1이다. 따라서 위의 식 $L$에 대입해 보면  가중치 벡터는 같은 값의 data Loss(첫번째 항의 값)을 준다. 그러나 두 번째 항을 살펴보면, $w_1$ L2 penalty 1이고, $w_2$는 0.25이다. 따라서 더 작은 $w_2$ 선호된다

$w_2$는 $w_1$보다 크기가  작고 값이  퍼져(diffuse)있다. 이것은 입력 $x$의 4개 값 중의 특정 부분에 집중하는 보다는 모든 입력요소가 골고루 기여하게 하고, 이것은 일반화 능력의 상승과 과적합(overfitting) 감소로 나타난다


(2) Cross-entropy Loss


Softmax classifier


SVM 로스 외에 보편적인 Loss 중의 하나인 cross entropy 로스를 사용하는 softmax 분류기를 살펴 본다. data loss항은 다음과 같다. 

$L_i = -\log\left(\frac{e^{f_{y_i}}}{ \sum_j e^{f_j} }\right) $


cross-entropy는 정보 이론(information theory)에서 왔는데 참 분포 $p$ 추정 분포 $q$ 사이의 cross-entropy[2] 

$H(p,q) = - \sum_x p(x) \log q(x)$

처럼 정의된다. 두 확률 분포의 겹칩의 정도를 표현하는 식이다. 
따라서 softmax 비교하여 $q = e^{f_{y_i}} / \sum_j e^{f_j}$이고, $p=[0,…,1,…0]$라면(, one-hot 벡터처럼 정확한 부류 하나만 1이고 나머지는 0인 경우) 식은 같다.
두 식의 모양은 동일하며 softmax 분류기는 cross-entropy loss 분류기로 불린다. 



수치적 안정성

지수 값을 가진 $exp$ 함수는 값이 아주 크고, 값의 나누기는 수치적 불안정성을 야기한다. 
이를 해결하기 위해 

$C=-\max_j{f_j}$

되도록 선정된 $C$값을 분자/분모에 곱하여 해결한다($exp$ 지수 값이 0근처로 shift 된다). 

$\frac{e^{f_{y_i}}}{\sum_j e^{f_j}}$ $= \frac{Ce^{f_{y_i}}}{C\sum_j e^{f_j}}$$= \frac{e^{f_{y_i} + \log C}}{\sum_j e^{f_j + \log C}}$



softmax 확률값

확률값이 confidence 의미하는 것은 아니다. 만일 regularization $\lambda$ 증가시키면 $w$ 값이 퍼지고 이에 따라 클래스의 스코어 값이 퍼지도록 변화된다. 따라서 스코어의 ordering 중요하지 절대 값은 변화 가능하다.



References

[1] cs231n linear classification
[2] 오일석, 패턴인식, 부록, 교보문고