소프트맥스 함수의 이름의 의미는 무엇일까요? 이 단어는 Soft와 Max의 결합어인데요. 입력 값의 ‘가장 큰값’을 ‘부드럽게’ 선택하는 과정이라고 합니다. 아직 무슨 소리인지 모르겠죠?
소프트맥스는 딥러닝, 특히 다중 클래스 분류 문제에 자주 등장합니다. 신경망의 출력 층에서 있는 것을 보셨을거예요. 이 글에서 소프트맥스 함수는 무엇이고 어떤 원리로 딥러닝에서 사용하는지 알아보도록 하겠습니다.
Softmax 란
소프트맥스 함수는 임의의 실수 값으로 구성된 벡터를 확률 분포로 바꾸는 데 사용됩니다. 쉽게 말해 입력 벡터(일반적으로 신경망의 마지막 레이어의 출력)를 가져와 이를 합이 1이 되는 확률 벡터로 변환한다는 말입니다.
이는 입력이 여러 중 하나에 속할 수 있는 시나리오(클래스 분류)에서 예측할때 필요합니다. 그림을 보시면 입력 벡터 z를 소프트맥스 함수에 넣으니 각각을 확률로 나타냅니다.
실제 예측할 때는 가장 확률이 놓은 Class로 예측하게 됩니다. 첫번째 Class는 1, 나머지는 0으로 나옵니다.
- Softmax의 목적 : 최대값을 미분 가능한 근사치를 제공하는 것입니다. 미분이 불가능한 함수를 가능하도록 바꿈으로 인해 Max 함수를 사용하는 모델을 최적화 합니다.
- Softmax의 명칭 : 최대값(=max)의 Soft(=smooth)한 근사치이기 때문에 Soft + max라고 부릅니다.
소프트맥스 함수는 수학적으로 다음과 같이 정의됩니다.
$$ Sortmax(z)_{i} = \dfrac{e^{z_{i}}} { \sum_{j=1}^{K} e^{z_{j}}} $$
- z는 실수값의 입력 벡터
- K는 분류 클래스 수
- e는 자연로그(오일러 수)의 밑
Softmax 활성화 함수 특징
1. 출력 범위
- 소프트맥스 함수의 출력은 확률 벡터입니다. 벡터의 각 요소는 해당 클래스에 속하는 입력의 확률을 나타냅니다. 출력은 0~1 사이의 실수이고 '확률'로 해석할 수 있습니다.
2. 확률 합계
- 소프트맥스 출력의 확률 합계는 항상 1입니다. 이는 입력이 하나의 클래스에만 속할 수 있는 다중 클래스 분류 문제에 적합합니다.
3. 미분성
- Softmax는 미분 가능하며, 이는 역전파와 같은 경사 기반 최적화 알고리즘을 사용하여 신경망을 훈련하는 데 중요합니다.
4. 단조성
- 소프트맥스 함수는 단조롭게 증가합니다. 즉, 입력 값이 증가하면 해당 확률도 증가합니다.
- 소프트맥스 활성화 함수를 적용해도 원소의 대소 관계는 변하지 않습니다.
- 출력층에서 이중 분류면 sigmoid, 다중 분류면 softmax 사용합니다.
Sigmoid와 Softmax의 관계는?
- logit – sigmoid : 역함수 관계임
- logit – softmax :
- logit 함수는 신경망의 결과값, [-∞, ∞]의 범위
- softmax 함수는 logit을 입력으로 받아 확률값([0, 1])으로 변화시킴
- sigmoid – softmax :
- sigmoid와 softmax는 클래스의 차이만 있을 뿐 수학적으로는 같은 함수, sigmoid를 일반화된 형태가 softmax함수
- sigmoid : softmax에서 K=2일 때, 이진 분류에 사용
- softmax : sigmoid 함수를 K개의 클래스로 일반화, 다중 분류에 사용
Softmax와 Cross Entropy의 관계는?
다중 클래스 분류에서 출력층에 Softmax 함수를 두고 비용함수(Cost Function)을 크로스엔트로피(Cross Entropy)를 사용합니다. 학습을 수행할 때 타겟 레이블이 1, 0, 0, 0 으로 원핫인코딩 되어 있어서 Softmax에서 나온 Probability와 오차 계산을 위해 사용됩니다.
신경망에서 소프트맥스 함수는 다중 클래스 분류 작업을 위한 출력 계층에서 일반적으로 사용됩니다. 네트워크의 원시 출력 또는 로짓에 소프트맥스를 적용한 후 가장 높은 확률의 클래스가 예측 클래스가 됩니다.
예측 클래스=argmax(Softmax(logits))
마치며
요약하자면, 소프트맥스 기능은 분류를 위한 딥러닝 모델의 중요한 요소입니다. 원시 출력을 확률로 변환하는 방법을 제공하여 의사 결정에서 더 쉽게 해석하고 사용할 수 있도록 해줍니다.
'딥러닝' 카테고리의 다른 글
딥러닝에서 크로스 엔트로피(Cross Entropy)를 사용하는 이유 (0) | 2024.01.18 |
---|---|
딥러닝에서 손실함수를 사용하는 이유 (0) | 2024.01.17 |
활성화 함수 종류: 왜 활성화 함수가 필요할까? (1) | 2024.01.15 |
신경망 연산: 딥러닝 가중치 계산 방법 (0) | 2024.01.12 |
신경망 모델 표기법 및 출력층 설계 (1) | 2024.01.11 |