본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

소프트맥스(softmax)는 다중 클래스 분류 문제에서 각 클래스에 대한 확률 분포를 계산하기 위해 사용되는 함수이다.

소프트맥스 함수는 입력값 벡터를 받아 각 항목에 대해 0과 1 사이의 값으로 변환하며, 전체 출력값의 합이 1이 되도록 정규화한다. 이 함수는 주로 신경망의 출력층에서 사용되어, 각 클래스에 속할 확률을 추정하는 데 활용된다. 입력값이 클수록 해당 클래스의 확률이 높아지며, 이를 통해 모델이 어느 클래스를 선택할지를 결정한다.

소프트맥스(softmax)라는 이름은 "soft maximum"에서 유래하였으며, 이는 가장 큰 값을 선택하는 하드한(max) 결정 방식 대신 확률적으로 부드러운(soft) 선택을 수행한다는 의미를 담고 있다. 즉, 단일 최대값을 출력하는 argmax 함수와 달리, 모든 클래스에 대해 연속적인 확률값을 출력한다는 점에서 'soft'한 max 함수로 해석할 수 있다.

소프트맥스 함수는 입력 벡터의 각 요소에 지수 함수를 적용한 뒤 전체 합으로 나누어 계산한다. 예를 들어, 입력 벡터가 [x1, x2, ..., xn]일 때, 소프트맥스 함수는 다음과 같이 정의된다:

각 클래스 i에 대한 출력값 = exp(xi) / (exp(x1) + exp(x2) + ... + exp(xn))

이로 인해 가장 큰 입력값에 해당하는 클래스가 가장 높은 확률을 갖게 된다.

  • 출력값의 합이 항상 1이므로 확률 분포로 해석 가능하다.
  • 출력 간의 상대적인 크기를 강조한다.
  • 출력이 민감하게 변할 수 있어, 입력값이 큰 경우 수치적 불안정성 문제가 발생할 수 있다. 이를 보완하기 위해 종종 입력값에서 최대값을 빼는 방식으로 안정화를 도모한다.
  • 다중 클래스 분류 모델의 출력층
  • 크로스 엔트로피 손실 함수와 함께 사용되어 학습 성능을 극대화
  • 자연어 처리(NLP)에서 단어 분포 예측 등 다양한 분야에 활용

소스코드 예제

편집 원본 편집

다음은 Python으로 구현한 소프트맥스 함수의 예제이다:

import numpy as np

def softmax(x):
    e_x = np.exp(x - np.max(x))  # 수치적 안정성을 위한 최대값 보정
    return e_x / e_x.sum(axis=0)

# 예제 입력
logits = np.array([2.0, 1.0, 0.1])
probabilities = softmax(logits)

print(probabilities)  # 출력: [0.659, 0.242, 0.099] (소수점은 예시에 따라 다를 수 있음)

소프트맥스 함수는 지수 함수(exp)를 사용하기 때문에, 입력값이 매우 클 경우 오버플로우가 발생할 수 있다. 이를 방지하기 위해 입력값에서 그 중 최대값을 빼는 방식으로 계산한다. 이 보정은 전체 분모와 분자에 동일한 상수를 곱하는 것과 같아 결과에는 영향을 미치지 않는다. 예를 들어, 다음과 같이 전개된다:

exp(xi - max(x)) / Σ exp(xj - max(x)) = [exp(xi) / exp(max(x))] / Σ [exp(xj) / exp(max(x))] = exp(xi) / Σ exp(xj)

따라서 출력값은 본래의 소프트맥스와 동일하며, 수치적으로 더 안정된 계산을 제공한다.

출력층 활성화 함수의 선택

편집 원본 편집

인공 신경망의 출력층 활성화 함수는 목표 변수의 형태에 따라 고른다.

문제 유형 출력층 활성화 함수 출력의 의미
회귀(연속형 목표치) 항등 함수 입력값을 그대로 내보내 연속값을 예측한다
이진 분류 시그모이드 양성일 확률 하나(0~1)
다범주 분류(출력 노드 여러 개, 정답 범주 하나) 소프트맥스 각 범주에 속할 사후 확률. 모든 출력의 합이 1

소프트맥스의 출력은 입력 x 가 주어졌을 때 범주 k 일 조건부 확률 P(범주 k | x), 즉 사후 확률(posterior probability)의 추정값으로 해석한다. 목표치가 다범주이고 출력값이 여러 개일 때 쓰는 이유가 이것이다.

  • 시그모이드는 출력 하나하나를 독립적으로 0~1 로 바꿀 뿐 합이 1 이 되지 않는다. 그래서 여러 범주 중 하나를 고르는 문제의 확률 분포로는 쓰지 않는다. 범주가 두 개일 때의 소프트맥스는 시그모이드와 같아진다.
  • ReLU 는 0 이상이면 값을 그대로 내보내는 함수로, 주로 은닉층에 써서 기울기 소실을 줄인다. 출력이 0~1 로 제한되지 않아 확률로 해석할 수 없다.
  • 항등 함수는 회귀 문제의 출력층에 쓴다. 범주별 확률을 주지 않는다.
  • Goodfellow, Ian, et al. Deep Learning. MIT Press, 2016.
  • Bishop, Christopher M. Pattern Recognition and Machine Learning. Springer, 2006.