본문 바로가기

머신러닝/[기타]

Sigmoid, Logit and Softmax

 오늘은 서로 다른 듯하지만 사실 같은 근본을 가진 Sigmoid, Logit, Softmax 들을 간략히 정리하겠습니다. 

 수식을 사용하지 않고, 말로만 내용을 생각해봅시다. 먼저 Sigmoid부터요. 저희는 대게 Sigmoid function을 어디서 사용했을까요. 이진 분류를 위한 네트워크 모델의 마지막 Activation layer에서 사용했죠. 그렇게 사용할 수 있었던 이유는, Sigmoid function이 모든 실수 공간에서 [0,1]로 매핑되는 함수이기 때문입니다. 그러면서도 그래프의 양 꼬리부분이 굉장히 길게 늘어져있기 때문에, 이진 분류에 용이했죠. 단순하게 생각하면 0~0.5의 출력은 False, 0.5~1의 출력은 True로 취급하면 될테니까요. 다만 거기서 끝입니다. 단순히 [0,1]의 공간으로 매핑될 뿐, 전체 출력값을 모두 합쳤을 때 1이 되지 않기 때문에, 기존 Sigmoid의 출력물을 해당 클래스에 속할 확률이라고 말할 수가 없습니다. 그런데 필요하잖아요. 그래서 만들었어요. 확룔로. 그런데 만드는 김에, 이진 분류가 아니라 멀티클래스 분류에도 쓸 수 있으면 좋겠죠? 그래서 일반화시켰어요. 그게 Softmax입니다.

 Sigmoid와 Softmax는 이게 끝입니다. 단순 [0,1] 매핑 함수를 멀티클래스에 대해 일반화하고, 확률이 출력되도록 한 것. 그럼 이제 Logit에 대해 생각해봅시다. Sigmoid의 결과를 다시 한 번 생각해보죠. 0과 1사의 어떤 소수값이 산출되었을 때, 저희는 0.5보다 낮으면 False, 0.5보다 높으면 True라는 표현을 썻습니다. 자연스럽게요. 이러한 생각은 사실 Odds라는 개념에서 유도됩니다. Odds는 승산비-라는 의미인데, True일 확률을 y라고 한다면, False일 확률은 1-y로 정의됩니다. 이진 분류에서요. 이때 Odds는 y/(1-y)로 정의됩니다. Odds가 1보다 크다는 것은 분자(False일 확률)보다 분모(True 일 확률)이 더 크다는 말이며, 이는 y>0.5와 동치이며, Odds가 1보다 작다는 것은 분자(False일 확률)보다 분모(True 일 확률)이 더 작다는 말이며, 이는 y<0.5와 동치입니다. 결국 우리는 Odds라는게 1보다 크냐 작냐로 True와 False라는 클래스를 분류하고 있는겁니다. 핵심은 y/(1-y)가 1보다 크냐 작냐가 분류의 기준이 된다는 말인데, 이러한 식의 양변에 Log를 씌운 것. 그게 Logit입니다. 조금 더 생각해보면 이러한 Logit function은 Sigmoid의 역함수입니다. 즉, 0과 1사이의 값을 일차원 실수 공간으로 매핑시키는 역활을 하게되는 거죠. 텐서플로우 예제 코드를 다룰 때 Logit이라는 용어를 종종 접하게되는데, 이는 Softmax등을 통해 어떤 확률값을 계산하지 않고, Layer를 거쳐서 나온 산출물을 그대로 다음 Layer에 넘길 때 사용하는 것이라 생각할 수 있겠습니다. Logit을 통해 산출된 값이 Sigmoid 등의 Activation function의 인풋이 되어야 마땅하니까요. 이상입니다.