반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Leo's Garage

Softmax 함수에 대하여 본문

Study/AI ML

Softmax 함수에 대하여

LeoBehindK 2026. 2. 18. 12:01
728x90
반응형

Softmax가 뭘 하는 함수인가?

Softmax는 여러 개의 "점수(score, logit)"을 받아서, 이를 확률처럼 해석 가능한 값들의 묶음으로 바꿔주는 함수이다.

  • 입력: 클래스별 점수 (예: 고양이 2.0, 개 1.0, 토끼 0.1)
  • 출력: 각 클래스에 대한 값 (0 ~ 1), 전체 합이 1

즉, 결과는 "확률 분포 형태"가 되어, 한 샘플이 여러 클래스 중 '하나'일 때 "모델이 각 후보에 얼마나 무게를 두는지"를 직관적으로 볼 수 있다. 

 

"확률로 만든다"의 의미

여기서 "확률"은 현실 세계의 진짜 확률을 보장한다는 뜻이 아니라

여러 후보의 유력함을 0 ~ 1 사이의 '몫(지분)'으로 바꾸고, 그 몫들의 합이 1이 되게 만든 것
그래서 마치 확률처럼 읽을 수 있음

 

비유 1: 케이크 지분 

  • 점수는 그냥 "선호/유력함"의 크기일 뿐이라 단위가 애매하다.
  • Softmax는 그걸 "지분(share)"로 바꾼다. 즉, 전체 중에서 각 후보가 차지하는 몫

 

비유 2: 하나를 뽑는 상황에 맞는 표현

"고양이/ 개/ 토끼 중 딱 하나"라면 

  • 고양이 0.7, 개 0.2, 토끼 0.1이라면 고양이가 가장 유력하다는게 바로 읽힌다.

 

Softmax 출력이 항상 실제 정답확률과 동일하지는 않는다. (모델이 과신/ 과소신 할 수 있으므로)

그래서 실무에서는 "확률처럼 쓰되, 필요하면 Calibration"을 하기도 한다.

 

Softmax는 정규화(Normalization) 인가?

어느정도는 "정규화"라고 봐도 되긴 한데 정확히는 확률 분포로 정규화 (Probability Normalization)

왜냐면 출력이

  • 각 값이 0 ~ 1
  • 합이 1

을 만족하기 때문이다.

 

단순 정규화(합으로 나누기)와의 차이는

단순히 $ \frac{s_i}{\sum{s}} $ 같은 방식은 

  • 점수에 음수가 있으면 곤란
  • 점수 차이를 확산도로 자연스럽게 반영하기 어렵다

Softmax는 지수(exp)를 통해

  • 모든 값을 양수로 만들고
  • 큰 점수의 우위를 더 강하게 반영한 뒤
  • 합이 1이 되게 나눔

그래서 "그냥 스케일 맞춤"이 아니라 "확률 분포 형태로 만드는" 특수한 정규화이다

 

이름의 유래: 왜 Soft + Max인가?

  • max: 최댓값을 고르는 연산
  • soft: 하지만 Softmax는 hard하게 하나만 고르지 않고 최댓값 쪽으로 몰아주되 나머지도 0이 아닌 값으로 남김

즉, 

  • argmax/ one-hot 같은 hard max 선태의 
  • soft 버전

점수 차이가 커지면 커질수록 출력은 점점 "hard max"처럼 된다

 

수식과 수식 해석

기본 수식

입력이 점수 벡터 $z = [z_1, ..., z_K]$ 일때:

$$softmax(x)_i=\frac{e^{z_i}}{\sum_{j=1}^{K}{e^{z_{j}}}}$$

의미

1. $e^{z_i}$

  • 점수를 항상 양수인 가중치로 변환
  • 큰 점수는 더 크게 (차이를 강조)

2. $\sum_{j}{e^{z_j}}$

  • 전체 가중치의 총합 (전체 가능성 총랴)

3. $\frac{e^{z_i}}{\sum_j{e^{z_j}}}$

  • 전체 중에서 i가 차지하는 비중(지분)
  • 그래서 합이 1이 됨

 

왜 지수의 밑이 꼭 $e$여야 하나?

핵심은 "밑이 e인지"가 아니라 지수 형태를 쓰는 것이다.

1. 밑을 바꿔도 본질은 같다

밑을 $a$로 쓰면:

$$\frac{a^{z_i}}{\sum_j{a^{z_j}}}=\frac{e^{(lna)z_i}}{\sum_j{e^{(lna)z_j}}}$$

즉, 밑을 바꾸는 건 점수 스케일을 바꾸는 것과 동치이고, 이는 온도 조절과 사실 상 같은 효과이다.

 

2. 그럼 왜 관습적으로 $e$인가?

  • 미분이 너무 깔끔함: $\frac{d}{dx}e^x=e^x$
  • 학습(경사하강 등)에서 수식 전개/구현이 편해 표준이 됨

 

3. "왜 하필 지수 형태냐"가 더 중요한 이유

  • 확률 모델/통계 물리(MaxEnt, Bolzmann 형태)에서 정규화된 지수 분포는 매우 자연스럽게 등장
  • "점수 -> 확률분포"로 갈 때 여러 성질(양수, 비율 강조, 정규화)을 동시에 만족 

 

수치적으로 안전한 구현

지수를 바로 쓰면 overflow가 날 수 있어서 보통 다음을 쓴다. 

$$ m = max_j{z_j}, softmax(z)_i=\frac{e^{z_i-m}}{\sum_j{e^{z_j-m}}} $$

  • 모든 점수에서 같은 $m$을 빼도 결과는 동일 (분자/분모 공통 상쇄)
  • 대신 지수 입력이 작아져서 안전

 

Sigmoid의 일반화가 Softmax인가?

다중 클래스 관점에서는 "그렇다"라고 볼 수 있다

2 Class에서 Softmax = Sigmoid와 동치

Class가 2개(0,1)일 때:

$$ P(y=1)=\frac{e^{z_1}}{e^{z_0}+e^{z_1}}=\frac{1}{1+e^{-(z_1-z_0)}}=\sigma(z_1-z_0)$$

즉 2 Class Softmax는 Sigmoid로 표현 가능 

 

 

 

728x90
반응형