이 포스트는 Do it 딥러닝 교과서 (윤성진 저)를 참고하여 만들어졌음!
분류 (Classification)
분류는 데이터가 입력되었을 때 해당 데이터의 클래스를 예측하는 문제이다. 분류되는 클래스의 개수가 2개일 때는 특별히 이진 분류(binary classification), 3개 이상일 때는 다중 분류(multiclass classification)라고 부른다.
분류모델의 출력 결과는 특정 클래스의 이름 혹은 확률로 표현될 수 있다. 전자의 경우 모델이 산출한 값 중 가장 큰 인덱스의 클래스를 최종 클래스로 예측하는 것이다. 후자의 경우는 모델이 산출한 값에 sigmoid(이진분류) 혹은 softmax(다중분류)를 취하여 해당 데이터가 가능한 클래스들에 속할 확률을 표현한다.
산출값이 가장 높은 클래스 하나만을 보여주는 것보다 모든 클래스들에 속할 확률을 보여주는 것이 더 직관적이며 해석이 용이하다. (정답 클래스를 맞추었지만 낮은 확률로 맞추었다면 모델을 더 개선시킬 여지가 있다고 판단할 수 있다.)
회귀 (Regression)
회귀는 주어진 x와 y의 관계를 연속함수 형태로 분석하는 문제이다. 회귀 모델의 산출값은 특정 클래스가 아니라 숫자형태로 도출된다. 회귀모델의 경우 출력값과 타겟값의 차이에 대한 값을 loss로 사용한다.
이진분류 (Binary classification)
이진분류 모델은 베르누이 분포 모델로 나타낼 수 있다.$$p(x; \mu)=\mu^x(1-\mu)^{(1-x)}, x \in {0,1}$$
베르누이는 동전 던지기로 예를 드는 것이 국룰이다. $x=1$은 동전의 앞면, $x=0$은 동전의 뒷면이 나오는 사건이라고 생각하면 이를 다음과 같이 표현할 수 있다.
$$p(x=1; \mu)=\mu^1(1-\mu)^{0}=\frac{1}{2}$$
$$p(x=0; \mu)=\mu^0(1-\mu)^{1}=\frac{1}{2}$$
이진분류 - 확률모델 정의
$$p(t_i | \vec{x}_i; \vec{\theta})=Bern(t_i; \mu(\vec{x}_i; \vec{\theta})\\ = \mu(\vec{x}_i;\vec{\theta})^{t_i}(1-\mu(\vec{x}_i ;\vec{\theta}))^{1-t_i} $$
$\vec{x}_i$는 $i$번째 입력 데이터, $t_i$는 $i$번째 입력 데이터에 해당하는 타겟 데이터, $\theta$는 가중치를 의미한다.
이때 $t_i$는 0또는 1의 값을 가지는 이진 클래스이며, $\mu(\vec{x}_i; \vec{\theta})^{t_i}$와 $(1-\mu(\vec{x}_i; \vec{\theta}))^{1-t_i}$는 어쨌거나 $[0,1]$ 범위에서 정의되는 확률값이다.
모델의 입력과 파라미터를 가중합한 결과를 $\mu(\cdot)$에 입력하면 확률이 도출되는 형태이므로 $\mu(\cdot)$은 sigmoid function이 된다. (이진분류이므로) 따라서 우리의 목적은 $t_i=1$일 때 결과값이 큰 양수를, $t_i=0$일 때 큰 음수를 산출하는 모델을 만드는 것이다.
시그모이드 (Sigmoid)
시그모이드 함수는 다음과 같이 정의된다.
$$\sigma(x)=\frac{1}{1+e^{-x}} $$
입력값이 큰 음수일수록 0에 가까운 값을, 큰 양수일수록 1에 가까운 값을 출력한다. 예를 들어 a,b 클래스가 존재할 때 모델의 출력값이 5라면 약 99%의 확률로 a클래스라고 예측할 수 있다. 그리고 동시에 1% 확률로 b클래스라고 예측하는 것이다. 또한 모델의 출력값이 -3인 경우에는 sigmoid 출력값이 약 0.05가 되는데, 이때는 5% 확률로 a클래스를, 95% 확률로 b클래스를 예측한 것이다.
다중 분류 모델
다중분류 모델은 카테고리 분포를 사용한다. 카테고리 분포는 클래스 개수 만큼의 베르누이 분포를 결합한 것과 같으며 다음과 같이 표현할 수 있다.$$p(\vec{x}/ \vec{\mu})= \Pi_{k=1}^{K} \mu_k^{x_k}$$$$\vec{\mu}=(\mu_1, \mu_2, \cdots, \mu_k)^T, \sum_{k=1}^{K} \mu_k=1 $$$$\vec{x}=(x_1, x_2, \cdots, x_K)^T, x_k= \begin{cases} 0, & \text{if } k = i \\ 1, & \text{if } k \neq i \end{cases} i \in {1, 2, \cdots, K}$$
여기서 $K$는 총 클래스 개수, $\mu_k$는 클래스 $k$가 도출될 확률, 따라서 $\vec{\mu}=(\mu_1, \mu_2, \cdots, \mu_k)^T$는 입력값이 각 클래스에 대응될 확률을 의미하는 벡터이다.
주사위 굴리기를 예로 들면 $K=6$이며 $\vec{\mu}=(\frac{1}{6}, \frac{1}{6}, \frac{1}{6}, \frac{1}{6}, \frac{1}{6}, \frac{1}{6})^T$이 된다.
다중분류 모델 - 확률모델 정의
다중분류 모델의 확률모델은 다음과 같이 나타낼 수 있다.
$$p(t_i|\vec{x}_i; \vec{\theta})=\text{Category}(t_i; \mu(\vec{x}_i; \vec{\theta}))=\Pi_{k=1}^{K}\mu(\vec{x}_i; \vec{\theta})_k^{t_{ik}} $$
위 모델을 해석하면 다음과 같다. 먼저 $i$번째 입력 데이터 $\vec{x}_i$는 $t_i$라는 target을 가진다. 이때 위 첨자 $t_{ik}$는 target class가 $i$인 경우 전체 클래스 $k$에 대하여 확률을 탐색한다는 의미이다.
Softmax
이때 다중분류 모델에서 출력된 로짓은 softmax를 거쳐 확률벡터 $\vec{\mu}$로 변환된다. softmax는 다음과 같이 정의된다. $$\text{softmax}(y_i)=\frac{e^{y_i}}{\sum_{j=1}^{K}e^{y_j}} $$
식에서 확인할 수 있듯이 모든 클래스에 대한 값을 더하면 1이 도출된다. 따라서 이를 확률값으로 사용할 수 있는 것이다.
회귀 (Regression)
회귀모델을 사용할 때 발생하는 오차는 Gaussian distribution으로 정의된다. 실생활의 거의 모든 문제는 중심극한 정리에 따라 가우시안 분포로 오차를 표현할 수 있기 때문이다. 가우시안 분포는 다음과 같이 표현된다.
$$N(x|\mu, \sigma^2)=\frac{1}{\sigma \sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$
또한, 중심극한 정리에 의거하여 관측 데이터의 분포를 근사하는 데도 자주 사용된다고 한다.
회귀모델 정의
회귀모델은 다음과 같이 정의할 수 있다.
$$t_i=y(\vec{x}_i; \vec{\theta})+\epsilon, \epsilon \sim N(\epsilon|0, \beta^{-1}) $$
여기서 $t_i$는 $i$번째 데이터 포인트의 $\vec{x}_i$의 target, $\epsilon$은 noise를 의미하며 이는 평균이 0, 분산이 $\beta^{-1}$인 Gaussian distribution을 따른다. 회귀에서 약간 특이한 점은 noise만큼의 오차를 허용한다는 것이다. 분산에 사용하는 $\beta^{-1}$은 정밀도라고 불리며, 이 값이 작을수록 target의 확률분포가 정밀하고 좁아지므로 회귀모델의 날카로운 예측이 요구된다.
이때 $y(\vec{x}_i; \vec{\theta})$는 모델이 출력한 상수값이기 때문에 target $t_i$의 확률분포는 다음과 같이 쓸 수 있다. $$p(t_i|\vec{x}_i;\vec{\theta})=N(t_i|y(\vec{x}_i; \vec{\theta}), \beta^{-1}) $$
이때 회귀모델이 noise를 예측하는 것을 불가능하다. 회귀모델의 역할은 target값의 평균인 $$y(\vec{x}_i; \vec{\theta})$$를 예측하는 것이다.
항등함수
회귀모델의 경우 확률분포의 정해진 평균과 분산을 기준으로 학습하는 것이므로 activation function으로 $y=x$의 항등함수를 사용한다. 따라서 이전 layer에서 출력된 값이 그대로 다음 layer의 뉴런에 입력된다.
'딥러닝' 카테고리의 다른 글
Optuna document 읽어보기 (0) | 2023.09.14 |
---|---|
3. 활성화 함수 (Activation function) (0) | 2023.09.13 |
1. 순방향 신경망 (0) | 2023.09.13 |
K means, 계층 군집화를 이용한 팀원 짜기 (0) | 2023.09.12 |
PyTorch CNN 모델 Fast API로 배포하기 (0) | 2023.09.07 |