Softmax 함수의 이해와 활용

Ruah·2024년 11월 13일

Softmax 함수란?

소프트맥스(softmax) 함수는 여러개의 값이 있을 때, 각 값이 상대적으로 얼마나 중요한지를 확률 분포로 나타내는 함수이다.
예를들어, 어떤 요소가 여러개 주어졌을 때 이 중에서 가장 중요한 것을 찾아내야 하는 상황에서 주로 쓰인다.


Softmax가 쓰이는 대표적인 예시

model 학습 단계 사용 예시

1. 다중 클래스에서 이미지 분류

  • 예를 들어 컴퓨터가 사진을 보고 강아지인지, 고양이인지, 새인지 구분해야한다고 가정해보자. 컴퓨터는 각 동물에 해당할 확률을 계산해 "강아지: 0.7", "고양이 : 0.2", "새: 0.1"과 같이 확률로 출력하게 된다. 이 확률들을 계산할 때 Softmax 함수가 사용된다. 각 동물들의 점수를 지수 함수로 변환 후 softmax를 적용해, 가장 확률이 높은 동물을 정답을로 결정한다.

2.확률 기반 손실 함수 계산

  • Softmax는 모델 출력이 확률 분포가 되게 만들어 교차엔트로피(Cross Entropy) 와 같은 손실 함수와 함께 사용된다. 손실 함수는 모델이 예측한 확률 분포와 실제 클래스 간의 차이를 계산해 모델을 업데이트 하는데 도움을 준다.

후처리 단계 사용예시

헉습이 다 끝난 모델에서 softmax는 다음과 같은 상황에서도 유용히 쓰인다.

1. 확률 해석

  • 모델이 예측한 점수를 Softmax로 변환해, 출력값을 확률로 해석할 수 있다. 예를 들어, 모델이 분류 결과로 [2.3, 0.7, 1.5]라는 점수를 출력하면, Softmax를 적용해 [0.65, 0.12, 0.23]의 확률로 해석할 수 있다. 이렇게 하면 예측 결과의 신뢰도를 파악하는 데 유용하다.

2. 자연어 처리에서 중요한 단어 찾기

예를 들어, 문장 "오늘 날씨가 정말 좋다"에서 각 단어의 중요도를 계산하고 싶다고 하자. 여기서 '날씨'와 '좋다'라는 단어가 상대적으로 중요하다고 Softmax가 판단하게된다면, 각 단어가 문장에서 차지하는 중요도를 확률로 나타낼 수 있다. 날씨:0.6, 좋다:0.3, 오늘:0.1 처럼 softmax를 통해 확률이 높은 순서로 단어의 중요도를 매길 수있다.


Softmax 함수 사용 코드 예제

Python에서는 numpy 라이브러리를 통해 Softmax를 쉽게 구현할 수 있다.
간단한 예제 :

import numpy as np

def softmax(x):
	exp_x = bo,exo( x- np.exp(x)) # overflow 방지를 위해 입력 값에서 최대값을 뺌.
    return exp_x / exp_x.sum(axis = 0)

Softmax로 중요도 순위 계산하기

예를 들어, 우리가 '차', '오토바이', '대중교통'라는 세 가지 요소의 중요도를 점수로 0~10점까지 계산해 이 중 어떤 것이 가장 중요한지 알고 싶다고 할 때, 각각의 중요도를 8,5,2로 평가했다면 softmax를 통해 다음과 같이 각 요소의 상대적 중요도를 계산할 수 있다.

scores = np.array([8, 5, 2])
softmax_scores = softmax(scores)

print("차:", softmax_scores[0] )
print("대중교통:", softmax_scores[1])
print("오토바이:", softmax_scores[2])

이렇게 계산하면 각 요소의 중요도가 확률로 표현되고, 이 확률을 바탕으로 가장 중요한 요소를 순위로 정할 수 있다.


왜 Softmax가 필요할까?

1. 확률 분포로 변환하여 해석을 쉽게 함.

  • softmax는 입력값을 0과 1사이의 값으로 변환하고, 그 합이 1이 되도록 해준다.
  • 예를 들어, 연도 점수가 8, 이름이 5, 과거가 2일 때 각 값이 중요한 정도를 0~1 사이의 확률로 나타내면, 점수만 비교하는 것보다 직관적으로 중요도를 해석하기 쉬워진다. 특히, 여러 값 중에서 가장 중요한 것이 무엇인지 확률로 나타낼 때 사용자나 시스템이 이해하기에 더 용이해 진다.

2. 상대적 차이를 강조하여 큰 값에대한 중요성을 높임

  • Softmax는 점수가 큰 값은 더 크게, 작은 값은 더 작게 만들어 점수 간의 상대적인 차이를 강조한다.
  • 예를들어, 연도가 8점이고 이름이 7점이라면, Softmax를 사용하지 않을 때는 차이가 1점에 불과해 큰 차이로 느껴지지 않지만, Softmax를 적용하면 연도가 이름보다 훨씬 중요하다고 느껴질 만큼 차이가 확대될 수 있다.

3. 확률 기반 의사 결정이 필요할 때 사용

  • 특히 여러 요소의 상대적 중요도를 기반으로 확률에 따라 의사결정을 해야할 때 Softmax가 유용하다.
  • 챗봇이나 분류 모델이 여러선택지 중 어느 것이 가장 가능성이 높은지 확률을 통해 결정해야 할 경우, Softmax는 확률적 의사결정 기준을 제공할 수 있다.

따라서 LLM이 점수를 계산할 수 잇는 상황에서도 확률로 변환하여 해석을 쉽게하고, 상대적 차이를 강조하여 명확하게 중요도를 구분하고자 할 때 Softmax가 추가로 쓰인다. LLM의 단순 점수만으로 충분한 상황이 많지만, 결과를 더 직관적으로 해석하고 정확한 확률 기반의 결정을 내리기 위해 Softmax를 함께 사용하는 경우가 있다.

정리

Softmax는 주로 모델 학습 시 다중 클래스 분류를 위해 사용되지만, 학습 이후에도 출력값을 확률로 해석하거나 후처리할 때 유용하게 활용된다. 학습과정에서는 주로 예측과 손실 계산에 사용되지만, 학습된 모델으 ㅣ결과 해석에서도 Softmax가 많은 도움을 준다고 볼 수 있다.

profile
집요한 주니어 개발자의 호되게 당했던 기록

0개의 댓글