소프트맥스 함수란?
소프트맥스(softmax) 함수는 K개의 실수로 이루어진 벡터를 확률 분포로 변환합니다. 변환된 각 출력값은 0과 1 사이의 값을 가지며, K개 출력값을 모두 더하면 정확히 1이 됩니다. 소프트맥스는 신경망 분류 모델의 출력층에서 표준적으로 사용되는 활성화 함수로, 모델이 산출한 원시 점수(로짓, logit)를 각 클래스에 대한 확률로 바꿔 줍니다. 또한 무차원(dimensionless) 함수이기 때문에 입력값은 단위가 없는 순수한 숫자입니다.
계산기 사용 방법
입력란에 벡터를 쉼표, 공백, 또는 줄바꿈으로 구분된 숫자 목록 형태로 입력하세요(예: 1, 2, 3). 숫자는 양수, 음수, 0, 소수 모두 가능합니다. 계산 버튼을 누르면 각 성분의 소프트맥스 확률값, 출력값의 합계(1이 되어야 합니다), 그리고 가장 큰 확률을 가진 성분의 위치를 나타내는 argmax(1부터 시작하는 인덱스)를 확인할 수 있습니다.
공식 자세히 알아보기
각 성분 \(j\)에 대한 소프트맥스는 $$\sigma(z)_j = \frac{e^{z_j}}{\sum_{k} e^{z_k}}$$ 로 정의됩니다. 지수 함수를 취하면 모든 항이 양수가 되고, 전체 합으로 나누어 정규화하면 합계가 1이 됩니다. 이 계산기는 수치적 안정성을 위해 지수를 취하기 전에 모든 원소에서 최댓값 \(m\)을 먼저 뺍니다: $$\sigma(z)_j = \frac{e^{z_j - m}}{\sum_{k} e^{z_k - m}}.$$ 공통 인수인 \(e^{-m}\)이 약분되므로 결과는 동일하게 유지되면서, 큰 입력값에서 발생할 수 있는 오버플로(overflow)를 방지할 수 있습니다.
계산 예시
\(z = (1, 2, 3)\)인 경우: \(e^{1} = 2.71828\), \(e^{2} = 7.38906\), \(e^{3} = 20.08554\)이며, 이들의 합은 \(30.19287\)입니다. 각 항을 합으로 나누면 \(\sigma = (0.09003, 0.24473, 0.66524)\)가 되고, 이 값들의 합은 \(1\)입니다. argmax는 가장 큰 입력값에 해당하는 인덱스 \(3\)이며, 그 확률은 \(0.66524\)입니다.
자주 묻는 질문
출력값의 합은 왜 항상 1이 되나요? 각 지수값을 모든 지수값의 합으로 나누어 정규화하기 때문에, 합계는 반드시 1이 됩니다.
모든 입력값이 같으면 어떻게 되나요? 결과는 균등 분포가 되어, 모든 출력값이 \(1/K\)로 동일해집니다.
모든 입력값에 같은 상수를 더하면 결과가 달라지나요? 아니요. 소프트맥스는 평행 이동 불변(shift-invariant)이라서, 모든 입력값에 같은 상수 \(c\)를 더해도 출력값은 변하지 않습니다. 바로 이 성질 덕분에 최댓값을 빼는 처리가 안전하게 적용될 수 있습니다.