Data/머신러닝 & 딥러닝

신경망의 구성요소(5)/ 활성화 함수- 소프트맥스

빛날희- 2021. 7. 20. 01:08

파이토치로 배우는 자연어처리 책을 참고하여 작성하였습니다.

참고한 유튜브


▶ 소프트 맥스란?

값을 예측하기 위해 신경망의 출력물들을 변환하기 위한 활성화 함수로 시그모이드 함수는 각 클래스에 대한 확률값을 구할 수 있다. 그러나 시그모이드는 각 클래스에 대한 확률값이므로 모든 확률값을 더하면 1보다 큰 값이 나온다. 반면 소프트맥스는 입력으로 들어간 모든 클래스에 대한 확률값을 도출하므로 도출된 모든 확률값을 더하면 1이 된다. 

 

소프트 맥스의 공식은 다음과 같다. 

각 출력값에 대해 모든 출력 값의 합으로 나눠 K개 클래스에 대한 이산 확률 분포를 만든다. 즉 0-1사이의 값을 가지고 출력의 합이 1이되는 분포를 가진다. 

이는 분류 task 에서 유용하게 사용될 수 있으며 주로 범주형 크로스 엔트로피와 함께 사용된다. 

 

 

 

▶ Softmax vs Sigmoid

소프트 맥스와 시그모이드 함수의 차이에 대해 더 자세히 알아보자.

일전에 언급했듯이 소프트 맥스는 모든 출력값을 더하면 1이, 시그모이드는 그렇지 않다는 점에 차이가 있다.

 

그럼 이 두 차이가 신경망에서 어떤 의미가 있을까?

 

해당 모형에서 시그모이드 함수는 각 출력값에 대해 독립적으로 확률을 가진다. 따라서 파랑 출력값에 대해 역전파를 수행하여 값을 갱신시키기 위해 파랑 출력과 연결된 가중치들만을 업데이트 시켜 학습을 할 수 있다. 

 

그러나 softmax는 모든 값을 합했을 때 1이 나와야 하므로 파랑 값을 갱신시키면서 다른 값이 함께 갱신된다. 따라서 시그모이드와 달리 소프트맥스 활성화함수를 사용했을 때 모든 가중치 값에 대해 동시다발적으로 업데이트가 가능하기 때문에 학습이 더욱 효율적으로 일어날 수 있다. 

 

예를 들어 파랑 결과값만을 True로 추출하고 싶기 때문에 1로 만들려고 한다고 해보자. 이때 시그모이드의 경우 파랑 결과값을 1로 만들기 위해 가중치를 학습하고 다른 출력결과값들은 파랑 결과값이 어디로 가든 제각기 값을 갱신시켜서 0으로 수렴하도록 학습해야할 것이다. 그러나 소프트맥스는 파랑 결과값을 1로 맞추면 합계를 1로 맞추기 위해 나머지 값들이 모두 0으로 자동 수렴되기 때문에 학습에 가속도를 붙일 수 있다. 

 

 

 

▷ 구현

softmax함수를 적용한 y_output 요소들이 모두 0에서 1값을 띄고 있으며 모두 합했을 때 1이 도출되는 것을 볼 수 있다.