Softmax
AI의 Softmax function을 살펴봅니다. Ultralytics YOLO26과 neural network를 사용한 multi-class classification에서 logits를 probability로 변환하는 방식을 알아봅니다.
Softmax는 인공지능 분야에서 핵심적인 수학 함수로, 특히 많은 분류 알고리즘의 마지막 단계에서 사용됩니다. 이 함수는 흔히 로짓이라고 하는 원시 숫자 벡터를 확률 벡터로 변환합니다. 이 변환을 통해 출력값이 모두 양수가 되고 합이 정확히 1이 되므로 유효한 확률 분포가 생성됩니다. 이러한 특성 때문에 Softmax는 다중 클래스 분류를 위해 설계된 신경망의 출력 레이어에서 표준 활성화 함수로 사용됩니다. 다중 클래스 분류에서는 시스템이 서로 배타적인 두 개 이상의 옵션 중 하나의 카테고리를 선택해야 합니다.
Softmax의 작동 원리#
일반적인 딥 러닝(DL) 워크플로에서 네트워크의 레이어는 복잡한 행렬 곱셈과 덧셈을 수행합니다. 활성화 함수가 적용되기 전 마지막 레이어의 출력은 로짓이라는 원시 점수로 구성됩니다. 이러한 값은 음의 무한대부터 양의 무한대까지 범위가 넓기 때문에, 이를 신뢰도 수준으로 직접 해석하기는 어렵습니다.
Softmax는 다음 두 가지 주요 연산을 수행하여 이 문제를 해결합니다.
-
지수화: 각 입력값의 지수를 계산합니다. 이 단계에서는 $e^x$가 항상 양수이므로 모든 값이 음수가 아니게 되며, 최댓값보다 훨씬 낮은 값에는 불이익을 주고 가장 큰 점수는 강조합니다.
-
정규화: 지수화된 값들을 합산한 다음 각 지수값을 전체 합으로 나눕니다. 이 정규화 과정은 숫자를 전체의 구성 요소를 나타내도록 조정하므로, 개발자가 이를 백분율 형식의 신뢰도 점수로 해석할 수 있습니다.
실제 적용 사례#
명확한 확률을 출력하는 Softmax의 기능은 다양한 산업과 머신 러닝(ML) 작업에서 필수적입니다.
- 이미지 분류: 컴퓨터 비전에서 모델은 Softmax를 사용하여 이미지를 분류합니다. 예를 들어 Ultralytics YOLO26 분류 모델이 사진을 분석할 때 "골든 리트리버", "저먼 셰퍼드", "푸들"과 같은 클래스에 대한 점수를 생성할 수 있습니다. Softmax는 이러한 점수를 확률(예: 0.85, 0.10, 0.05)로 변환하여 이미지에 골든 리트리버가 포함되어 있을 가능성이 높다는 것을 나타냅니다. 이는 자동 사진 정리부터 헬스케어 분야의 AI를 활용한 의료 진단에 이르기까지 다양한 애플리케이션에 매우 중요합니다.
- 자연어 처리(NLP): Softmax는 대규모 언어 모델(LLMs)의 텍스트 생성 기능을 뒷받침하는 핵심 요소입니다. Transformer와 같은 모델이 문장을 생성할 때는 어휘에 있는 모든 단어에 대한 점수를 계산하여 다음 단어(토큰)를 예측합니다. Softmax는 이 점수들을 확률로 변환하여 모델이 다음에 올 가능성이 가장 높은 단어를 선택할 수 있도록 하며, 이를 통해 원활한 기계 번역과 대화형 AI가 가능해집니다.
- 강화 학습: 강화 학습의 에이전트는 행동을 선택할 때 Softmax를 사용하는 경우가 많습니다. 에이전트는 항상 가장 높은 값을 가진 행동을 선택하는 대신 확률을 활용하여 다양한 전략을 탐색할 수 있으며, 로봇 제어 또는 게임 플레이와 같은 환경에서 탐색과 활용 사이의 균형을 유지합니다.
Python 코드 예제#
다음 예제에서는 사전 학습된 YOLO26 분류 모델을 로드하고 Softmax를 통해 생성된 확률 점수에 액세스하는 방법을 보여줍니다.
from ultralytics import YOLO
# Load a pre-trained YOLO26 classification model
model = YOLO("yolo26n-cls.pt")
# Run inference on a sample image
results = model("https://ultralytics.com/images/bus.jpg")
# The model applies Softmax internally. Access the top prediction:
# The 'probs' attribute contains the probability distribution.
top_prob = results[0].probs.top1conf.item()
top_class = results[0].names[results[0].probs.top1]
print(f"Predicted Class: {top_class}")
print(f"Confidence (Softmax Output): {top_prob:.4f}")Softmax와 관련 개념의 구분#
Softmax는 다중 클래스 시나리오에서 널리 사용되지만, 모델 학습과 아키텍처 설계에 사용되는 다른 수학 함수와는 구분해야 합니다.
- Sigmoid: Sigmoid 함수도 값을 0과 1 사이로 조정하지만 각 출력을 독립적으로 처리합니다. 따라서 Sigmoid는 이진 분류(예/아니요) 또는 클래스가 서로 배타적이지 않은 다중 레이블 분류에 적합합니다. 예를 들어 이미지에 "사람"과 "배낭"이 모두 포함될 수 있습니다. Softmax는 확률의 합을 1로 만들기 때문에 클래스들이 서로 경쟁하도록 합니다.
- ReLU (정류 선형 유닛): ReLU는 주로 네트워크의 은닉 레이어에서 비선형성을 도입하는 데 사용됩니다. Softmax와 달리 ReLU는 출력을 특정 범위로 제한하지 않으며, 음의 입력에는 0을 출력하고 양의 입력에는 입력값 자체를 출력합니다. 또한 확률 분포를 생성하지 않습니다.
- Argmax: Softmax가 모든 클래스에 대한 확률을 제공하는 반면, Argmax 함수는 일반적으로 이와 함께 사용되어 확률이 가장 높은 단일 인덱스를 선택합니다. Softmax는 "소프트" 신뢰도를 제공하고 Argmax는 "하드" 최종 결정을 제공합니다.
고급 통합#
최신 ML 파이프라인에서 Softmax는 손실 함수 내부에서 암시적으로 계산되는 경우가 많습니다. 예를 들어 교차 엔트로피 손실은 Softmax와 음의 로그 가능도를 하나의 수학적 단계로 결합하여 학습 중 수치적 안정성을 향상합니다. Ultralytics Platform과 같은 플랫폼은 이러한 복잡한 처리를 자동으로 수행하므로, 사용자가 이러한 수학 연산을 직접 구현하지 않고도 견고한 모델을 학습할 수 있습니다.









