Softmax 함수란?

Smiling Sammy·2021년 11월 23일
2
post-thumbnail

Softmax함수는 뭘까?

딥러닝 교재나 활성화함수를 parameter로 지정할 때, 항상 softmax, sigmoid는 봐왔을 것이다.
단순하게 지수함수를 전체 지수함수의 합으로 나눈 값이 아닌 어떤 동작을 하는지, 왜 이름은 softmax인지 알고싶었다.

Softmax.. 왜 이름이 Softmax일까..???

Softmax ?

Softmax 함수는 아래와 같다.

lni=1kexp(xi)ln\sum_{i=1}^{k}{exp(x_i)}

엥? Softmax = Softmax 활성화함수 아니었었나...?
네.. 아니었습니다 ㅎㅎ (이래서 항상 이름의 유래를 알아야...!!)

그럼 Softmax는 무엇을 할까?

Softmax함수는 최대값 함수에 근사하도록 동작한다.

가장 큰 x값을 xmaxx_{max}라고 했을 때, exp(xmax)exp(x_{max})는 어떤 exp(xi)exp(x_{i})보다도 크다고 가정할 수 있다.

위 방식으로 아래 첫번째 식이 두번째의 식처럼 바뀌게 된다!
lni=1kexp(xi)ln(exp(xmax))ln\sum_{i=1}^{k}{exp(x_i)} \approx ln(exp(x_{max}))

lni=1kexp(xi)xmaxln\sum_{i=1}^{k}{exp(x_i)} \approx x_{max}

Softmax의 목적은 최대값을 미분가능한 근사치를 제공하는 것이다. 미분이 불가능한 함수를 가능하도록 바꿈으로 인해 Max 함수를 사용하는 모델을 최적화 할 수 있다.

왜 Softmax함수라고 불릴까?

  1. 최대값의 근사치이다.
  2. 최대값의 soft/smooth한 근사치이다.

Softmax Activation Function?

우리가 아는 아래의 함수는 Softmax 활성화 함수다.
(Softmax Activation Function)

exp(ak)i=1nexp(ai)exp(a_k) \over \displaystyle\sum_{i=1}^{n}{exp(a_i)}

왜 우리는 Softmax 활성화 함수를 Softmax라고 부를까?

  1. Softmax 활성화 함수는 Softmax 함수랑 매우 유사하게 생겼다. (분모를 보면 알 수 있다)
  2. Softmax 활성화 함수는 특정 조건에서, 큰 input은 강조하고, 작은 input은 억제한다. 이는 Softmax 함수와 유사한 방식으로 작동한다.

주의점

오버플로

Softmax 활성화 함수는 지수 함수를 사용하기 때문에, 컴퓨터로 계산을 할 때 오버플로 문제가 생길 수 있다. 즉, 아주 큰 값을 내뱉을 수 있다는 것이다. 예를 들어 exp(1000)exp(1000)은 무한대를 뜻하는 inf가 된다.

오버플로(overflow): 컴퓨터가 표현할 수 있는 수의 범위가 한정되어 너무 큰 값은 표현할 수 없는 문제

보통 오버플로를 막을 목적으로 입력 신호 중 최댓값을 이용한다.

def softmax(x):
	c = np.max(x)
    exp_x = np.exp(x-c) # 오버플로 방지
    sum_exp_x = np.sum(exp_x)
    y = exp_x / sum_exp_x
    
    return y

따라서 최댓값을 뺀 것으로 소프트맥스 활성화 함수를 구현하면 오버플로를 방지할 수 있다.

특징

  • 출력은 0~1 사이의 실수이다.
    • 출력을 '확률'로 해석할 수 있다.
  • 출력의 총합은 1이다.
  • 소프트맥스 활성화 함수를 적용해도 원소의 대소 관계는 변하지 않는다.
    • 소프트맥스 활성화 함수에 사용되는 지수 함수가 단조 증가 함수이기 때문
    • 즉, 출력층의 소프트맥스 활성화 함수는 생략해도 된다.

참고

profile
Data Scientist, Data Analyst

0개의 댓글