항등함수와 Softmax 함수

 

 

항등함수와 Softmax함수는 출력층에서 사용하는 활성화 함수로, 항등함수 (identity function)는 입력을 그대로 출력한다.

그렇다면 위의 그림에서 항등 함수 옆에 있는 Softmax 함수는 무엇일까? Softmax 함수는 그림에서 보다시피 모든 입력 신호로부터 영향을 받는다.

 

Softmax 함수 식

 

Softmax 함수의 분자는 입력 신호 a_k의 지수함수, 분모는 모든 입력 신호의 지수 함수의 합으로 구성된다.

이렇게 모든 입력 신호로부터 영향을 받는 이유는 Softmax는 확률적 해석이 가능하게 하는 출력층의 활성화 함수로 사용되기 때문이다. 이와 같은 특징 때문에 항등함수는 회귀에서 주로 사용하고, Softmax 함수는 분류에 주로 사용한다.

 

 

 

 

 


 

 

 

Softmax 함수

오버플로우 문제

Softmax는 분류 문제를 풀 때 값을 확률로 변환하기 위해 사용하는 함수로, 신경망을 학습할 때에는 Softmax를 사용하지만 추론(순전파), 즉 실제 test data에 모델을 적용할 때는 Softmax 함수를 생략하는 것이 일반적이다. Softmax 함수는 지수(e) 함수를 사용하기 때문에 값이 기하급수적으로 커져 컴퓨터에서 inf, 무한대로 인식하기가 쉽다. 따라서 이러한 큰 값들끼리 나눗셈을 하면 수치가 불안정해지는 오버플로우 문제가 발생한다. 따라서 위의 Softmax 함수 식을 그대로 프로그래밍하면 오버플로우가 발생할 수 있으므로 우리는 위의 식을 개선할 필요가 있다.

 

 

개선한 Softmax 함수 식

 

위의 식이 개선된 Softmax 함수 식이다. 이 수식을 쉽게 말하자면 임의의 숫자 C를 분모 분자에 모두 곱하여 기하급수적으로 커지는 지수함수의 값을 작게 만들어서 오버플로우를 방지한다는 뜻이다. 이 때 임의의 숫자 C'는 입력신호(a_k)의 최대값을 음수로 변환한 값이다.

 

즉, 예를 들어 입력신호 a_k가 1000 800 500 이렇게 3개가 있다면 C' 은 -1000 이고, 위의 개선된 Softmax 함수 수식에 a_k+C'을 대입하면 0 -200 -500이 된다.

이 값들은 지수함수의 성질에 의해 매우 작은 숫자로 반환되어 오버플로우가 발생하지 않는다.

 

 

특징

Softmax 함수의 출력은 0에서 1 사이의 실수이며, Softmax 함수의 출력의 총합은 1이다. 이러한 성질 때문에 Softmax 함수의 출력을 '확률'로 해석할 수 있다. 또한 Softmax는 분류 문제에 주로 쓰이므로 분류 개수만큼의 출력층의 뉴런수를 잘 설정해야한다. 예를 들어 고양이, 개로 분류하고자 하면 출력층의 뉴런수를 2개로 설정하면 되고 숫자를 0부터 9까지 분류하고자 하면 출력층의 뉴런수를 10개로 설정하면 된다.

 

 

 

 

 


 

 

 

 

 

출처 : https://wikidocs.net/35476

 

위의 그림은 Softmax 함수를 가장 직관적으로 이해할 수 있는 그림이다. 출처의 링크를 참고하길 바란다.

 

출처 : https://wikidocs.net/35476

 

앞서 기술했다시피, Softmax 함수에 의해 출력된 값들은 0.26 0.70 0.04처럼 0에서 1사이의 값이며 총합이 1이므로 출력값을 확률로 받아들일 수 있다. 신경망을 학습할 때 Softmax의 예측값과 실제값의 오차를 계산하여 이를 통해 가중치와 편향을 업데이트하며(역전파) 신경망을 만든다. 위의 그림의 실제값은 0 1 0 의 형태인 원-핫 인코딩 형태로 원-핫 인코딩이란 정답을 뜻하는 원소만 1이고 나머지는 모두 0인 배열을 의미한다.

 

 

 

+ Recent posts