성장通

다중 분류 모델과 카테고리 분포 본문

ML&DL/ML DL 기본기

다중 분류 모델과 카테고리 분포

백악기작은펭귄 2022. 7. 13. 18:30

다중 분류 모델과 카테고리 분포

다중 분류 문제는 주사위를 굴렸을 때 각 면이 나올 확률을 계산하는 문제처럼, 세 개 이상의 결과를 가지는 상황에서 각 결과의 확률을 구하는 문제이다. 이러한 다중 분류의 확률분포는 카테고리 분포(Categorical distribution)을 따르므로, 다중 분류 모델은 카테고리 분포를 예측하는 모델로 정의할 수 있다.

 

카테고리 분포

카테고리 분포는 베르누이 분포를 일반화한 분포로, K개의 사건의 확률을 표현한다.

 

$$
p(x|\mu)=\Pi^K_{k=1} \mu_k^{x_k}
$$

 

$$
\mu = (\mu_1, \mu_2, ..., \mu_K)^T, \ \Sigma^K_{k=1}\mu_k=1
$$

 

$$
x = (x_1, x_2, ..., x_K)^T, \ x_k = 1 (k=i)\ or\ 0 (k\neq i),\ i\in(1,2,...,K)
$$

 

K는 사건의 개수이고 $\mu_k$는 사건 k가 발생할 확률이며 $\mu=(\mu_1, \mu_2, ..., \mu_k)^T$는 각 사건에 대한 확률을 나타내는 벡터이다. $x=(x_1, x_2, ..., x_K)^T$는 0 또는 1로 표현되는 확률변수로 사건 k는 $x$에서 $x_k$만 1이고 나머지는 0인 벡터로 표현된다.

 

주사위 굴리기를 예로 들면, 주사위는 1부터 6까지 나올 수 있는 경우의 수가 여섯 가지이므로 K=6이다. 이때 숫자 1이 나올 사건의 확률변수는 $x=(1,0,0,0,0,0)^T$이며 마찬가지로 숫자 2가 나올 사건의 확률변수는 $x=(0,1,0,0,0,0)^T$이다. 여기서 숫자 1이 나올 확률은 $\mu_1$로, 일반적인 정육면체 주사위에선 각 결과의 확률이 같으므로 $\mu=({1\over 6},{1\over 6},{1\over 6},{1\over 6},{1\over 6},{1\over 6})^T$가 된다.

 

카테고리 분포의 확률 질량 함수의 그래프는 다음과 같이 그려지며, 각 막대 그래프는 각 사건의 발생 확률을 나타낸다.

 

 

확률 모델 정의

관측 데이터는 입력 데이터 $x_i$와 타깃 $t_i=(t_{i1},t_{i2}, ..., t_{iK})^T$로 이루어진 pair로 구성되며 $\mathfrak(D)={(x_i, t_i): i=1, ..., N}$와 같이 표현 가능하다. 타깃은 한 값만 1이고 나머지는 0인 One-Hot Vector이다. 다중 분류 모델은 타깃 $t_i$의 확률분포(카테고리 분포) 파라미터 $\mu$를 예측한다. 모델은 $x_i$를 입력으로 받아 $\mu(x_i;\theta)$를 출력하며, 다음과 같은 카테고리 분포를 예측한다.

 

$$
p(t_i|x_i;\theta) = Category(t_i; \mu(x_i; \theta)) = \Pi^K_{k=1} \mu(x_i; \theta)_{k}^{t_{ik}}
$$

 

출력 계층의 활성 함수

동물 사진을 입력 받아서 분류하는 다중 분류 모델을 만든다고 가정하자. 모델은 동물 사진을 입력 받아서 강아지, 고양이, 다람쥐 등 K개의 클래스에 속할 확률인 $\mu$를 예측한다. 이때 신경망 모델은 각 클래스에 속할 수치인 점수 또는 로짓을 실수 벡터로 출력하고 이를 활성 함수를 통해 카테고리 분포의 확률 벡터 $\mu$로 변환한다. 이때 사용하는 활성 함수가 소프트맥스(softmax) 함수이다.

 

이진 분류 문제도 다중 분류 문제로 풀 수 있지만, 둘의 핵심적인 차이는 신경망 출력의 출력 형태이다. 이진 분류는 특정 클래스일 '확률'을 예측하기 때문에 실수 형태를 띄게 되고, 다중 분류는 특정 클래스가 발생할 '확률인 벡터'를 예측하기 때문에 크기가 K인 실수 벡터가 된다.

 

소프트맥스 함수

소프트맥스 함수는 실수 벡터를 확률 벡터로 변환한다. 실수 벡터의 각 요소는 [0, 1] 범위로 변환되고 각 요소의 합은 1이 된다. 그래서 신경망의 출력 계층에서 실수 벡터를 카테고리 확률 분포의 확률 벡터로 변환할 때 사용한다.

 

$$
softmax(y_i) = {{e^{y_i}\over {\Sigma^K_{j=1} e^{y_j}}}}
$$

 

소프트맥스는 입력값이 클수록 1에 가깝게, 작을수록 0에 가깝게 만들어주는 특성을 가지기 때문에 Max 함수와 유사한 기능을 한다. 다만 Max 함수와 달리 부드러운 곡선 형태를 띠기 때문에 부드러운 Max, 즉 소프트맥스라고 한다.

 

소프트맥스는 시그모이드를 여러 클래스에 대해 일반화한 함수이므로 이를 통한 각 클래스의 확률은 시그모이드 함수와 같은 모양이 된다.

 

소프트맥스 함수 계산 과정

  1. 실수 벡터 $y=(y_1, y_2, ..., y_K)^T$의 각 요소에 지수 함수를 적용해서 $e^y$ 형태로 만든다.

$$
e^y = (e^{y_1}, e^{y_2}, ..., e^{y_K})^T
$$

 

  1. $e^y$ 벡터를 $e^y$ 요소의 합산으로 나누어서 정규화한다.

$$
\hat{e}^y = {1\over {\Sigma^K_{k=1}e^{y_k}}}(e^{y_1}, e^{y_2}, ..., e^{y_K})^T
$$

 

  1. 정규화된 $\hat{e}^y$ 벡터는 각 요소가 [0, 1] 범위의 실수이고 모든 요소의 합은 1이다.

$$
\Sigma^K_{k=1} \hat{e}^{y_k} = 1
$$