소프트맥스(softmax)는 로지스틱 함수를 일반화한 것으로서 여러 개의 카테고리가 있을 때 사용합니다. 둘의 차이를 한 번 알아보겠습니다. 먼저 텐서플로를 불러옵니다.
import tensorflow as tf
로지스틱 함수와 소프트맥스 함수의 출력 결과를 간단한 예시로 알아보겠습니다.
먼저 x1
과 x2
를 아래와 같이 정의합니다.
x1 = [1.0, 2.0, 3.0]
로지스틱 함수 또는 시그모이드 함수는 주어진 각각의 입력을 0~1 사이의 값으로 변환합니다.
y_sigmoid = tf.nn.sigmoid(x1).numpy()
y_sigmoid
array([0.7310586 , 0.880797 , 0.95257413], dtype=float32)
위 출력결과에서 기존 1.0, 2.0, 3.0
가 0~1 사이 값으로 변환되었습니다. 그러나 그 합은 1보다 클 수도, 작을 수도 있습니다.
y_sigmoid.sum()
2.5644298
소프트맥스 역시 주어진 입력을 0~1사이의 값으로 변환합니다.
y_softmax = tf.nn.softmax(x1).numpy()
y_softmax
array([0.09003057, 0.24472848, 0.66524094], dtype=float32)
소프트맥스에서 출력의 합은 1이 됩니다.
y_softmax.sum()
1.0
따라서 둘 중에 하나로 분류할 경우에는 하나의 입력을 로지스틱 함수에 넣어 하나의 출력을 얻습니다. 이 출력은 0~1사이의 값이므로 둘 중에 어느 한쪽일 확률로 해석할 수 있습니다.
여러 개 중의 하나로 분류할 경우에는 카테고리와 같은 수의 입력을 소프트맥스 함수에 넣습니다. 각각의 출력은 0~1 사이이며, 모두 더하면 1이 되므로 출력을 각 카테고리에 해당하는 확률로 해석할 수 있습니다.