devmoon

Softmax와 확률(Probability) 본문

AI/딥러닝 기초

Softmax와 확률(Probability)

Orca0917 2023. 7. 10. 18:57

 

해당 게시글은 Stack overflow의
"Why use softmax as opposed to standard normalization?"을
참고하여 작성된 글임을 먼저 말씀드립니다.

 

 

 

 

여러 딥러닝 모델들에서 확률의 개념이 필요할 때, 우리는 softmax함수를 자주 사용하게 된다. Softmax를 사용하는 주된 이유는 벡터의 원소값들을 확률로 해석해 줄 수 있기 때문이라고 보통 학습한다. 하지만 생각해 보면 softmax라는 함수를 배우기 이전, 우리는 확률이라는 것을 계산할 때 그 비율로 확률을 나타냈었다.

 

 

 

 

상자에서 복원추출한 빨간공과 파란공의 수

 

 

 

 

예를 들어, 어떤 상자 안에 빨간색과 파란색 구슬들이 들어있고 상자로부터 1000번 복원추출을 했다고 해보자. 이때 결과로 빨간 구슬이 700번, 파란 구슬이 300번 나왔다고 하면 빨간 구슬이 나올 확률은 70%, 파란 구슬이 나올 확률은 30%라고 한다. 이를 간단한 수식으로 나타내면 아래와 같다.

 

 

 

$$ p_i = \frac{n_i}{\sum_{k=0}^K n_k} $$

  • $p_i$ : $i$번째 색상이 등장할 확률 (비율)
  • $n_i$ : $i$번째 색상의 등장 횟수
  • $K$: 전체 색상의 수

 

 


 

 

벡터의 원소값을 '비율'의 관점에서 확률로 해석한 결과

 

 

 

동일한 원리를 딥러닝의 1차원 벡터에 적용시켰을 때, 모든 출력값을 더해서 각 원소에 나눠주면 각 값들에 대한 확률을 구할 수 있지 않을까 생각해 보았다. Softmax 함수대비 이런 단순한 확률식을 사용하게 되면 먼저 지수함수 ($e^x$)꼴이 등장하지 않아 계산에 대한 부담도 분명 적을 것이다. 그렇다면 왜 딥러닝에서는 이런 단순한 방법을 사용하지 않고 굳이 softmax를 사용하여 확률로 해석하는 것일까? 이 의문에 대한 답을 탐색해 본 결과 몇 가지 이유를 찾을 수 있었다.

 

 

 

 

$$  p_i = \frac{e^{x_i}}{\sum_{k=1}^K e^{x_k}} $$

 

 

 

 

1. 벡터의 원소값이 음수인 경우를 다룰 수 없다.

비율(경우의 수)을 기반으로 한 확률값을 추정하는 방식은 분자가 항상 양수이므로 확률 자체의 값이 음수가 될 수 없었다. 하지만, 딥러닝의 연산에서는 벡터의 값에 음수가 포함될 수 있어 확률값이 음수가 되어버리는 문제가 생긴다. 이렇게 되면 더 이상 해당 값을 확률로 해석하는 것이 불가능해진다. 반면, Softmax는 지수함수가 있어 양의 값만 출력이 되도록 만들어주어 언제나 확률로 계산할 수 있도록 도와준다.

 

 

 

 

2. 숫자의 크기가 달라도 비율이 일정하면 확률이 일정하다.

어떤 공을 빨간 공 그리고 파란 공으로 예측한 횟수가 각각 (1회, 2회)라고 한다면, 파란 공이 등장할 확률은 약 66%라고 할 수 있다. 만약 (100회, 200회)이더라도 파란 공이 등장할 확률은 66%라고 할 것이다. 하지만 Softmax는 등장한 값에 대한 비율만을 고려하는 것이 아니라 값의 크기까지 고려한다. 동일한 비율로 등장하더라도 더 많은 횟수로 예측되었다면 파란 공이 등장할 확률을 높게 측정한다.

 

 

 

a = torch.tensor([1, 2], dtype=float)
b = torch.tensor([100, 200], dtype=float)

torch.nn.Softmax()(a)  # tensor([0.2689, 0.7311], dtype=torch.float64)
torch.nn.Softmax()(b)  # tensor([3.7201e-44, 1.0000e+00], dtype=torch.float64)

 

 

 

 

3. 자연로그를 사용하는 주요 손실함수

$$ \ln e^{p_i} = p_i $$

Cross-entropy함수를 비롯한 다양한 함수에서 확률 값에 $\log$ 를 취한 값 ($\log p_i$)을 사용하고 있다. 여기에 $\exp$ 함수를 취해주면 확률 값 자체만을 가져올 수 있는 효과를 준다. 이런 경우 softmax는 최대 가능도를 추정하도록 학습한다.

 

 

 

 


 

위의 이유들 이외에도 `Softmax`를 사용하였을 때의 이점은 비선형함수라는 점, 미분을 한 형태도 유사하다는 점들이 존재하였다. 사실 이번 게시글에 대한 궁금증은 딥러닝을 공부하기 초반부터 늘 갖고 있던 고민이었다. 이번 기회에 단순히 그냥 우연에 의한 확률값의 변환이 아닌 여러 근거들을 갖고 값들을 확률로 해석할 때 Softmax를 사용하고 있음을 알게 되었다.

 

 

 

 

참고자료

  1. Tom, Omg, Why use softmax as opposed to standard normalization, Stackoverflow, 2021.05.03 last modified, https://stackoverflow.com/questions/17187507/why-use-softmax-as-opposed-to-standard-normalization/67315743#67315743
  2. Adel, Michael Baudin, Fitting a Normal distribution to 1D data, Stackoverflow, 2021.10.19 last modified, https://stackoverflow.com/questions/20011122/fitting-a-normal-distribution-to-1d-data
  3. Shashank Gupta, Why is the softmax used to represent a probability distribution, Stack Exchange, 2021.07.24 last modified, https://stats.stackexchange.com/questions/189331/why-is-the-softmax-used-to-represent-a-probability-distribution
  4. Thomas Kurbiel, Derivative of the Softmax Function and the Categorical Cross-Entropy Loss, Medium-Towards Data Science, 2021.04.23, https://towardsdatascience.com/derivative-of-the-softmax-function-and-the-categorical-cross-entropy-loss-ffceefc081d1

 

Comments