Logistic, cross-entropy loss의 확률론적 의미

$\newcommand{\argmin}{\mathop{\mathrm{argmin}}\limits}$ $\newcommand{\argmax}{\mathop{\mathrm{argmax}}\limits}$

머신러닝을 공부하다보면 logistic을 참 많이 접하게 된다. 당장 로지스틱 회귀만 해도 그렇고, 딥러닝에서 자주 사용하는 saturating non-linearity 중 하나인 softmax function도 logistic function의 multi-class 버전이니 말이다.

Logistic(또는 softmax) function은 어떤 값들을 (0, 1) 사이의 값으로 squash하면서, 동시에 값들의 총 합이 1이 되도록 하는 성질이 있는데, 이 결과 logistic function의 함수값이 Kolmogorov의 확률의 정의에 부합하기 때문에 주로 값들을 확률화하는 함수로 쓰인다. 딥러닝에서 분류문제를 풀때 output layer의 activation function으로 자주 쓰이곤 하는 이유도 여기에 있다 (각 클래스의 ‘확률’ 값을 계산하기 위해).

그런데 하고많은, (0, 1)에 bounded되어있고 합이 1이 되는 함수들 중에서 굳이 logistic function을 사용하는 이유는 뭘까? 그건 바로 logistic function이 확률값에서부터 자연스럽게 유도되는, 내재적으로 확률의 성질을 가지는 함수이기 때문이다. 이 글은 logistic이 그냥 이유없이 확률처럼 생겨서 만들어지고 사용되는 함수가 아니라는 것을 증명해보는 지루한 글이다. Logistic function은 내재적으로 cross-entropy loss와 깊은 연관이 있는데, 이 로스를 줄이는 것이 왜 classification을 해결하는 과정이 되는지 역시 같은 맥락에서 함께 살펴볼 것이다.

Odds, Log odds, Logit, and Logistic

어떤 사건이 일어날 확률은 $ P(x)$ 외에도 다양한 방법으로 표현될 수 있다. Odds가 그 종류 중 하나다. 주로 질병통계학이나 도박과 같이 카테고리가 두 개(성공과 실패/발병과 비발병)인 분야에서 자주 사용하는 표현인데, 로지스틱 함수의 확률론적 의미는 바로 여기에서부터 시작한다.

발생 확률(또는 성공 확률)이 $ p$인 어떤 사건 $ A$의 Odds는 다음과 같이 나타낼 수 있다.

\[Odds(A) = \frac{p}{1-p}\]

즉, Odds는 성공 확률이 실패 확률에 비해 얼마나(몇 배나) 더 큰가?를 나타내는 척도라고 해석할 수 있다. Odds가 클수록 성공확률이 큰 것이다. Odds는 평범한(?) 확률값 $ p$에 비해 성공확률값의 변화에 민감하다는 특징이 있다. 또한 질병통계학에서는 relative risk 등의 다른 표현에 비해 robust하기에 자주 사용한다.

Odds에 (자연)로그를 취한 것을 Log odds라고 한다.

\[\log{Odds(A)} = \log{\frac{p}{1-p}} = \log{p} - \log{(1-p)}\]

로그변환은 통계학에서 자주 사용하는 변환으로,

함수의 증감 형태, convex/concave 형태를 유지시키고 극점의 위치를 유지시키며 곱(또는 나눗셈)으로 표현된 식을 선형조합의 꼴로 풀어쓸 수 있도록 해준다 는 장점이 있다. 즉, 계산은 용이하게 해주는데 함수의 특성은 그대로 유지하는 변환이라 할 수 있겠다. 로그변환의 이러한 성질에 의해 Log odds는 여전히 값이 클수록 성공확률이 큰 것을 의미하는 함수이다.

한 편, Logit function은 다음과 같은 꼴의 함수를 말한다. Logit function은 (0, 1)을 support로 가지며 ($ - \infty$, $ + \infty$) 값을 domain으로 가진다.

\[logit(x) = \log{\frac{x}{1-x}}\]

어디서 많이 본 꼴이다. 그렇다. Log odds는 성공확률 $ p$에 대한 Logit function 함수값과 일치한다 ($ \log{Odds(A)} = logit(p)$). 다시말해 Logit 함수는 log Odds의 성질을 가지는 함수이다.

Logistic function은 바로 이 Logit function의 역함수이다.

\[logistic(x) = \frac{1}{1+e^{-x}}\]

성공확률 $ p$를 갖는 사건 $ A$를 바탕으로 해석해보면 Logistic function은 성공확률 $ p$ 그 자체이다.

\[\begin{align*} \frac{p}{1-p} &= e^{\log{Odds(A)}} \\ p &= e^{\log{Odds(A)}} -e^{\log{Odds(A)}}p \\ (1+e^{\log{Odds(A)}})p &= e^{\log{Odds(A)}} \end{align*}\] \[\begin{align*} \therefore p &= \frac{e^{\log{Odds(A)}}}{1+e^{\log{Odds(A)}}} \\ &= \frac{1}{1+e^{-\log{Odds(A)}}} \end{align*}\]

Binary classification and Logistic function

두 개의 클래스(클래스 1, 2)를 분류하는 문제를 생각해보자. 우리가 분류에 사용할 데이터를 $ X$,특정 샘플이 클래스 1, 2에 속한다고 판단하는 사건을 각각 $ Y_1, Y_2$라고 하자.

Binary classification 문제는 데이터 $ X$가 주어졌을 때 둘 중 어느 클래스에 속할지 그 확률 $ P(Y_i|X)$ (posterior probability)를 구하는 문제라고 할 수 있다. $ P(Y_1|X) >P(Y_2|X)$일 때 우리는 $ Y_1$이 옳은 클래스일 것이라고 예측을 하게 되고, $ P(Y_1|X) < P(Y_2|X)$일 때 $ Y_2$가 옳은 클래스일 것이라고 예측하게 된다.

Bayes’ rule에 의해서 posterior probability $ P(Y_i|X)$는 likelihood $ P(X|Y_i)$와 prior probability $ P(Y_i)$의 곱에 비례한다. (분모인 prior predictive probability $ P(X)$는 클래스에 관계 없이 $ X$의 marginal probablity로 항상 같으므로 덜 중요하다)

\[P(Y_i\|X) = \begin{cases}P(Y_1|X)=\frac{P(X|Y_1)P(Y_1)}{P(X)} =\frac{P(X|Y_1)P(Y_1)}{P(X|Y_1)P(Y_1) +P(X|Y_2)P(Y_2)}  \\ P(Y_2|X)=\frac{P(X|Y_2)P(Y_2)}{P(X)} =\frac{P(X|Y_2)P(Y_2)}{P(X|Y_1)P(Y_1) +P(X|Y_2)P(Y_2)} \end{cases}\]

따라서

\[P(Y_i\|X) = \begin{cases}P(Y_1|X) \propto P(X|Y_1)P(Y_1)  \\ P(Y_2|X) \propto P(X|Y_2)P(Y_2) \end{cases}\]

여기서 $ a_i = \log{P(X|Y_i)P(Y_i)}$를 정의하면 다음과 같이 각 클래스의 posterior probability를 표현할 수 있게 된다.

\[\begin{array}{lcl} P(Y_1|X) &=& \frac{e^{a_1}}{e^{a_1} + e^{a_2}} \\ &=& \frac{1}{1+e^{-(a_1-a_2)}} \end{array}\]

$ a = a_1 - a_2 = \log{ \frac{P(X|Y_1)P(Y_1)}{P(X|Y_2)P(Y_2)} }$라고 하면 $ P(Y_1|X)$는 $ a$에 대한 로지스틱 함수값이 된다.

\[P(Y_1|X) =\frac{1}{1+e^{-a}} = logistic(a)\]

그런데 $ a$는 위의 정의에 따라

\[\begin{array}{lcl} a &=& \log{ \frac{P(X|Y_1)P(Y_1)}{P(X|Y_2)P(Y_2)} } \\ &=& \log{ \frac{P(Y_1|X)}{P(Y_2|X)} } \\ &=& \log{ \frac{P(Y_1|X)}{1-P(Y_1|X)} } \\ &=& \log{Odds(Y_1|X)} \end{array}\]

즉, 데이터 $ X$를 바탕으로 $ Y_1$이 옳은 클래스라고 판단할 log odds이다.

위에서 사건 $ A$의 logistic은 사건의 성공확률 $ p$ 그 자체라는 것을 보였으므로, 결론적으로 $ logistic(Y_1|X)$는 사건 $ Y_1|X$의 확률, 즉 내재적으로 $ P(Y_1|X)$ 그 자체이다 (바로 위의 증명과 완전히 일맥상통한다).

이때문에 우리는 확률분포에 대한 가정 없이도 (deterministic하게) logistic function을 각 클래스로 판단할 ‘확률값’으로 곧바로 사용할 수 있는 것이다.

Multi-class classification and Softmax function

$ n$ 개의 클래스(클래스 1, 2, … $ n$)를 분류하는 문제를 생각해보자. 우리가 분류에 사용할 데이터를 $ X$,특정 샘플이 클래스 1, 2, … $ n$에 속한다고 판단하는 사건을 각각 $ Y_1, Y_2, …, Y_n$라고 하자. Logistic function을 유도했을 때와 마찬가지로,

\[P(Y_i|X) = \begin{cases}P(Y_1|X)=\frac{P(X|Y_1)P(Y_1)}{P(X)} =\frac{P(X|Y_1)P(Y_1)}{\sum_{i=1}^{n} P(X|Y_i)P(Y_i)}  \\ P(Y_2|X)=\frac{P(X|Y_2)P(Y_2)}{P(X)} =\frac{P(X|Y_2)P(Y_2)}{\sum_{i=1}^{n} P(X|Y_i)P(Y_i)} \\ ... \\ P(Y_n|X)=\frac{P(X|Y_n)P(Y_n)}{P(X)} =\frac{P(X|Y_n)P(Y_n)}{\sum_{i=1}^{n} P(X|Y_i)P(Y_i)} \end{cases}\]

이고, $ a_i = \log{P(X|Y_i)P(Y_i)}$를 정의하면 posterior probability는 다음과 같이 Softmax function의 꼴로 표현된다.

\[\begin{array}{lcl} P(Y_1|X) &=& \frac{e^{a_1}}{e^{a_1} + e^{a_2} + ... +e^{a_n}} \\ &=&\frac{e^{a_1}}{\sum_{i=1}^{n} e^{a_i}} \end{array}\]

이처럼 Logistic function을 multi-class 문제로 일반화시키면 Softmax function을 얻을 수 있다. 이때문에 Softmax function을 multi-class logistic function이라고 하기도 한다.

Cross-entropy loss and MLE

i번째 관측치 벡터 ($ x_i$)의 ground truth 클래스를 $ t_i$, 분류기를 통해 판단한 클래스를 $ y_i$라고 하면,

$ t_i|x_i, a {\sim}^{iid} Bernoulli(p_i),$  where $ p_i = P(t_i=1|x_i) = P(Y_1|X) = y_i$

라고 가정할 수 있다. 이 때 likelihood는 다음과 같이 적을 수 있다.

\[\begin{array}{lcl} L = \prod_{i=1}^{n} P(t_i|x_i, a) &=& \prod_{i=1}^{n} p_{i}^{t_i} (1-p_i)^{1-t_i} \\ &=& \prod_{i=1}^{n} y_{i}^{t_i} (1-y_i)^{1-t_i}  \end{array}\]

Maximum likelihood estimation(MLE)을 위해서 log likelihood $ \log{L}$을 구하면

\[\log{L} = \sum_{i=1}^{n} \log{\{y_{i}^{t_i} (1-y_i)^{1-t_i}\}} = \sum_{i=1}^{n} \{ t_i \log{y_i} + (1-t_i) \log{(1-y_i)} \}\]

인데, 이 식에 negative($ -$)를 취하면 cross-entropy loss(CE)의 정의와 일치한다. 따라서

\[\hat{\theta}^{MLE} = argmax_{\theta}(\log{L}) = argmin_{\theta}(-\log{L}) =argmin_{\theta}(CE)\]

이므로, 위의 Bernoulli 분포 가정 하에서 cross-entropy loss를 minimize하는 것은 MLE와 동일한 과정이 된다. 이때문에 cross-entropy loss를 최소화하는 과정을 통해 올바른 클래스 $ t_i$에 가까운 예측 확률값 $ y_i$를 얻을 수 있게 된다.

Acknowledgement

  • 이 글을 많이 참고했다. 이 글을 바탕으로 노테이션을 정리하고 수식 유도를 풀어 쓴 정도다.
  • Odds에 대해서는 이 글을 참고했다.