3. 이미지 분류 · 01 softmax
softmax

점수(score)를 0~1 사이로 바꾸고, 전부 더하면 1이 되게 만드는 방법

무엇을 배울까요?

  • 여러 점수(score)를 확률처럼 보이게 바꾸는 방법(softmax)
  • percent(비율)과 softmax가 왜 다른지, 결과가 어떻게 달라지는지
  • 그래프로 보면 “선택이 강해지는 느낌”이 어떻게 보이는지

이해하기 쉬운 예시

  • 사진을 보고 모델이 이렇게 점수를 줬다고 해볼게요: [고양이 2.5, 강아지 2.25, 자동차 1.5]
  • softmax를 거치면 이 점수들이 확률처럼(합이 1) 바뀌어서, “고양이일 가능성이 제일 크다” 같은 식으로 말하기 쉬워져요.
01

도구 불러오기

이 셀에서 하는 일

이 셀은 앞으로 쓸 도구만 준비해요. 실행해도 화면에 출력은 없어요.

코드
import numpy as np
import matplotlib.pyplot as plt
예상 출력
(출력 없음)
02

percent / softmax 함수 만들기

이 셀에서 하는 일

이 셀은 '점수(score) → 확률처럼 보이는 값'으로 바꾸는 함수를 준비해요.

- percent: 합으로 나눠서 비율 만들기
- softmax: exp로 차이를 키운 뒤 다시 합으로 나누기

코드
# percent: 전체 합으로 나눠서 '비율'로 바꿔주는 함수
def percent(x):
total = np.sum(x)# 여기서 total은 "전부 더한 값"이에요
return x / total# 각 값을 total로 나누면, 자연스럽게 비율이 돼요
# softmax: exp로 차이를 키운 뒤, 전체 합으로 나눠서 '확률처럼' 만듦
def softmax(x):
exp_x = np.exp(x)# exp를 씌우면 큰 값이 더 눈에 띄게 커져요
exp_total = np.sum(exp_x)# exp 결과들을 전부 더해서 기준(분모)을 만들어요
return exp_x / exp_total# 마지막으로 나눠주면 합이 1이 돼서 '확률처럼' 보여요
예상 출력
(출력 없음)
03

값 넣고 결과 확인(print)

이 셀에서 하는 일

이 셀은 예시 점수를 넣고, percent와 softmax 결과를 숫자로 비교해요.

보면서 딱 하나만 느끼면 돼요: softmax는 큰 점수를 더 '티 나게' 만들어줘요.

코드
value = np.linspace(1.5, 2.5, 5)# 점수 5개를 예시로 만들어볼게요
p = percent(value)# percent를 적용하면, 단순 비율이 돼요
s = softmax(value)# softmax를 적용하면, 확률처럼(합이 1) 돼요
print('value:', value)# 원래 점수(아직 확률 아님)
print('percent:', p)# 비율이라서 합이 1이긴 한데, 차이 강조는 약해요
print('softmax:', s)# 큰 점수 쪽이 더 강하게 커져서 "선택"이 쉬워져요
예상 출력
value: [1.5  1.75 2.   2.25 2.5 ]
percent: [0.15  0.175 0.2   0.225 0.25 ]
softmax: [0.155 0.199 0.255 0.327 0.42 ]  (대략)
04

그래프 그리기(plt)

이 셀에서 하는 일

이 셀은 숫자 말고 그림으로도 이해되게 그래프를 그려요.

- 왼쪽: 원래 점수(value)
- 오른쪽: percent vs softmax

코드
plt.figure(figsize=(10, 3))# 그래프 전체 캔버스 크기를 잡아요
plt.subplot(1, 2, 1)# 1행 2열 중 왼쪽 칸이에요
plt.title('value (raw scores)')# 왼쪽 그래프 제목
plt.plot(value, 'r.-')# value를 빨간 선으로 그려요
plt.grid(True, alpha=0.3)# 격자를 깔아주면 읽기 편해요
plt.subplot(1, 2, 2)# 1행 2열 중 오른쪽 칸이에요
plt.title('percent vs softmax')# 오른쪽 그래프 제목
plt.plot(p, 'b.-', label='percent')# percent는 파란 선으로
plt.plot(s, 'g.-', label='softmax')# softmax는 초록 선으로
plt.legend()# 라벨(설명표)을 붙여줘요
plt.grid(True, alpha=0.3)# 오른쪽도 격자
plt.show()# 최종적으로 화면에 보여줘요
예상 출력
그래프가 화면에 표시됨(아래 이미지 참고)
plot

핵심 한 줄