Classification 문제를 위한 softmax 핵심 이해

아래 내용은 인프런 [처음하는 딥러닝과 파이토치(Pytorch) 부트캠프] 강의를 듣고 공부한 내용입니다.

 

Classification (분류)

분류 문제는 출력 결과가 다르므로, 분류 타입에 따라 다른 activation function을 사용하는 것이 일반적임

예측 문제 Regression
(숫자 예측, 예 : 키)
Binary Classification
(이진 분류)
Multi-Class(Multi-Label) Classification (다중 분류)
Final Action None Sigmoid Softmax (또는 Log-Softmax)
Loss Function MSE Loss BCE Loss Cross Entropy Loss (또는Negative Log Likelihood Loss)

 

Softmax

softmax 함수는 분류될 클래스가 k개일 때, k 차원의 vector를 입력받아서, 각 클래스에 속할 확률을 추정함.

  • 자연로그의 밑인 상수 e에 대한 지수함수를 사용하면, 지수함수는 증가함수(단조 증가, 계속 증가)이므로 작은 값의 차이도 확실히 구별될 수 있도록 커짐. (작은 값은 더 작아지고, 큰 값은 더 커지는 특성이 있음)
  • 또한 자연로그의 미분은 자연로그 그대로이므로, 미분 계산에 용이함.
이미지를 필기체로 썼을 때, 각각의 이미지를 딥러닝에 넣어서 진짜 이 숫자가 뭔 거 같은지 출력값을 받아내려면 그 분류하고자 하는 클래스의 개수만큼 출력이 된다.

 

  • softmax 함수의 각 출력은 확률값으로 0 ~ 1사이의 값이며, 각 확률값의 총합은 항상 1이다. 

 

iris(붓꽃) 데이터셋으로 붓꽃 품종을 ['setosa', 'versicolor', 'virginica'] 중에 하나로 예측한다고 한다면, 클래스는 3개가 되고, softmax를 통과하면, [0.5, 0.4, 0.1]과 같이 각 클래스가 될 확률을 리턴해줌.

 -> setosa일 확률 0.5, versicolor일 확률 0.4, virginica일 확률 0.1 => setosa로 예측

 

만약, 총 클래스의 수가 3개라고 한다면 k =3, 즉 3차원 벡터로 z = [z1 z2 z3]의 입력을 받게 되고,