Softmax Function

BrandAnn·2023년 2월 13일

Softmax Function

본 내용은 밑바닥 부터 시작하는 딥러닝에서 대부분 가져왔다.

신경망의 출력층 중 하나인 Softmax 함수를 가볍게 다뤄볼까 한다. 출력층이라고 하면 인공지능 모델이 인풋의 클래스를 예측해주는 Predict 해주는 최종 단계이다. 신경망은 대체로 분류(classification) 또는 회귀(regression) 문제를 다루는데 softmax는 분류에 사용된다. Softmax는 다중분류에 사용되는 출력층으로서 특정 인풋이이 여러 분류중 어떤 분류(eg. 강아지, 고양이, 사람)에 속하는 지를 확률로 예측해준다.

그렇다면 softmax함수는 어떤 방식으로 돌아가는 걸까? 데이터셋 내 분류의 수 마다 소프트맥스의 노드 개수가 부여된다. 필자 인공지능을 처음 공부할 때 인공지능모델은 하나의 답안만 출력해줄거라고 무의식적으로 생각했다. 하지만 softmax는 그렇지 않다. 인풋 사진이 주어지면 해당 사진이 고양이일 확률, 강아지일 확률, 사람일 확률을 각각 따로 출력해준다. 중요한 것은 인공신경망 모델은 본인이 학습한 분류에 대해서만 예측을 해준다.
예를 들면 강아지, 고양이, 사람과 같이 3개의 클래스가 있는 데이터셋을 학습했다면 해당 모델은 학습한 분류에 대해서만 예측할 줄 밖에 모른다. 나무 사진이 주어지든, 자동차 사진이 주어지든, 모델은 본인이 학습한 3개의 클래스 외에는 그어떤 분류에 대해서 예측을 하지 못한다. 그리고 이때 softmax는 3-way softmax를 가진다고 얘기한다. 3-way 라는 것은 3개의 클래스를 얘기하고 3개의 노드로 구성된다. ImageNet대회에서 우승한 AlexNet 같은경우 1000개의 클래스가 주어진 데이터셋에 대한 학습을 진행했기에 1000-way softmax 출력층을 사용했다.


학습한 데이터셋에 3개의 클래스가 존재했을 때의 softmax layer이다.

Softmax 함수의 공식이다.

그렇다면 함수의 작동방식을 수학적으로 조금 더 자세히 보겠다.

exp(x): e^x를 뜻하는 지수함수이다
e : 자연상수(euler's number) 2.712...
n: 출력층의 뉴런 수
yk: 출력층의 뉴런 중 k번째 (특정 예측클래스 eg. 강아지)

분자: 입력신호 ak의 지수 함수
분모: 모든 입력 신호의 지수 함수의 합

이것을 풀어서 설명하자면 일단 각 값을 지수화 시켜준다. 지수화를 시켜주는 이유는 후에 각 코스트를 미분하여 Gradient를 구하기 위해서이다. 그리고 지수화된 모든 a를 합해준다. 그리고 exp(a)의 총합으로부터 각 exp(a)를 나눠주며 normalize해준다. 결과는 나눠진 모든 exp(a)의 총합이 1이 된다. Softmax함수의 출력 결과는 모든 범주에 대한 확률의 비율을 나타내는 하나의 배열로 구성된다.

Softmax 함수 Python

하지만 softmax 함수를 직접 모델에 적용시킬 때 연산과정에서 문제가 발생한다고 한다. 발생하는 현상을 오버플로(overflow) 현상이라고 하는데 모델이 값들을 연산하는 과정에 값들이 너무 커지거나 작아져 수치적 '안정성'이 깨지는 것을 말한다. 더 나아가 이는 최종 결과에 영향을 미칠 수 있다.
Softmax 함수 내 지수 함수를 사용하면 입력 값이 매우 커져 수치가 무한대로 가는 오버플로 현상이 발생할 수 있다. 해당 문제를 해결하기 위해 각 분모 분자에 C라는 임의의 정수를 곱해주는 방법이 있다. 이로써 전체 값의 비율은 변하지 않는 반면 지수함수의 값이 상대적으로 작아진다. C라는 정수는 분자와 분모의 값을 조절해주는 역할을 해주며 지수함수의 값이 매우 커지는 것을 제한해줄 수 있다.

이후에 정수 C를 함수 exp() 안으로 욺겨 log^C로 바꿔준다. 계산하면 c x e^ak는 e^ak + log^c가 되고 e^ak x e^logC가 된다.

Softmax 요약

Softmax는 다차원분류 예측에 사용된다. 정답 분류에 가장 높은 확률을 출력하여 라벨을 예측하는 함수이며 여러 출력층의 종류 중 하나이다. 비슷한 출력층으로는 Sigmoid 함수가 있지만 Sigmoid 함수는 Softmax과 달리 이중분류에 사용된다. Softmax는 데이터셋 내 존재하는 분류만 학습할 수 있으며 해당 분류에 대한 값(확률)을 각각 부여해준다.

0개의 댓글