딥러닝에 사용되는 softmax 함수

조금씩 어떤 한 분야를 이해해가는 것은 즐거운 일이다. 예전에 스타크래프트를 할 때 까맣게 가려져 있던 미니맵을 프로브가 정찰하면서 점차적으로 어둠을 물리쳐가는 느낌이라고 해야할까? (프로 유저입니다.ㅋㅋ) 맵을 밝힐수록 두려움은 사라진다. 오늘은 softmax 함수라는 미지의 세계를 밝혀보자. 



▶ softmax 함수란?


softmax 함수는 K개의 값이 존재할 때 각각의 값의 편차를 확대시켜 큰 값은 상대적으로 더 크게, 작은 값은 상대적으로 더 작게 만든 다음에 normalization 시키는 함수다[2]. 아래 식을 살펴보자.  


...(공식1: softmax 함수)


공식1에서 분자에 있는 지수함수가 각각의 값의 편차를 확대시키는 역할을 한다. 지수함수 그래프를 생각해보면 입력값이 커질수록 기하급수적으로 출력값이 커짐을 알 수 있다. 따라서 K개 값 중에서 큰 값이었던 것은 상대적으로 확실히 커지게 되고, 작은 값이었던 것은 상대적으로 작아지게 된다. 분모에 모든 K값의 지수함수값을 모두 더했기 때문에 상대성을 갖게 되는 것이다. 


그리고 또 하나 중요한 것은 softmax 함수를 거친 K개 값의 합은 1이 된다는 것이다.  



그러니까 정리하자면, softmax를 통해서 K개 값들은 상대적인 중요도를 나타내는 K개 값으로 새로 태어나고, 그 값들의 총합은 1이 된다. 이러한 특성이 있기 때문에 딥러닝의 마지막 출력단에 사용되는 것이다. fully-connected layer의 마지막 층의 출력값에 softmax를 적용하면 그 값들은 클래스 확률로 변모한다. 어떤 클래스에 속할 확률을 나타내는 것이다. 강아지 클래스에 속하는지, 고양이 클래스에 속하는지, 사람 클래스에 속하는지 말이다. 

 


<참고자료>

[1] https://ko.wikipedia.org/wiki/%EB%94%A5_%EB%9F%AC%EB%8B%9D

[2] https://nerve.tistory.com/160, 김정섭님 티스토리

댓글()