Skip to main content

소프트맥스 활성화 함수란?

이 짧은 튜토리얼에서는 분류 작업에서의 활용과 교차 엔트로피 손실과의 관계를 포함해 Softmax 활성화 함수를 살펴보겠습니다. 이 글은 AI 번역본입니다. 오역이 의심되는 부분은 댓글로 알려주세요.
Created on September 15|Last edited on September 15
이 글에서는 분류 작업에서의 활용과 Softmax 활성화 함수가 다음과 어떻게 연결되는지까지 자세히 살펴보겠습니다. 교차 엔트로피 손실.
이번 글에서 다룰 내용은 다음과 같습니다:

목차




소프트맥스 함수는 무엇에 사용되나요?

ML에서 가장 흔한 작업 중 하나는 분류즉, 입력(이미지, 비디오, 텍스트, 오디오)이 주어졌을 때 모델이 그것이 어떤 클래스에 속하는지 반환할 수 있느냐는 것입니다. 가장 단순한 형태의 신경망, 예를 들어 다층 퍼셉트론을 사용한다면, 출력값을 어떻게 클래스로 변환할 수 있을까요?
참고: MLP는 결국 입력들의 가중합일 뿐이라는 점을 기억하세요, 즉 다음과 같습니다. i=1NwixiR\large \displaystyle \sum_{i=1}^{N} w_ix_i \hspace{0.5em} \in \mathbb{R}, a 스칼라 값.
💡
본질적으로 우리는 필요합니다 일부 이 숫자를 입력이 어느 클래스에 속하는지에 대한 단서를 줄 수 있는 형태로 변환하는 방법 {xi}\large \{ x_i \} 속하는지를 알려줄 수 있어야 합니다. 여기에서 활성화 함수가 등장하며, 그중에서도 Softmax가 가장 널리 쓰이는 활성화 함수 중 하나입니다.
예를 들어, 가장 흔하고 누구나 인정하는 가장 중요한 이미지 분류 문제를 생각해 봅시다. 핫도그인가, 아닌가 🌭. 음식 이미지가 주어졌을 때 우리의 과제는 그 이미지를 “Hot Dog”인지 “Not Hot Dog”인지 분류하는 것입니다. 본질적으로 이 과제는 이진 분류입니다. “Hot Dog”에 1, “Not Hot Dog”에 0을 할당한다고 하면, 모델은 0과 1 사이의 값을 출력해야 하며, 어떤 임곗값을 기준으로 적절하게 클래스를 부여할 수 있습니다.
하지만 다중 클래스 분류 문제라면 어떨까요? 0과 1만으로는 충분하지 않습니다.
소프트맥스의 등장

왜 Max나 Argmax 활성화 함수 대신 Softmax를 사용할까?

왜 최대값이나 argmax 함수만 쓰지 않고 굳이 Softmax를 써야 하는지 궁금하실 수 있습니다. 함께 살펴보겠습니다.
먼저, 사용을 고려해 보세요 max 함수, 즉 주어진 입력 시퀀스에서 가장 큰 값을 반환하는 함수입니다. 따라서 다음과 같은 입력이 있다면 i={4,2}\large i = \{ 4, 2 \}  그런 경��� 출력은 다음과 같이 보일 것입니다 z=max(i)={1,0}\large z = max(i) = \{ 1, 0\}다른 모든 값은 0으로만 반환됩니다. The argmax 이는 함수가 전체 목록을 반환하는 대신 가장 큰 값의 인덱스를 반환하는 약간 다른 변형입니다.
Softmax는 더 부드러운 버전의 max 함수입니다(누가 예상했겠습니까!). 최대값에 1, 나머지에 0을 주는 이진 시퀀스를 반환하는 대신, 우리가 원하는 것이 만약 다음과 같다면 어떨까요? 확률 최댓값이 아닌 입력들에도 0만이 아니라 다양한 값을 주는 것입니다. 상상해 보듯이, 다중 클래스 분류에서는 0과 1만으로는 큰 도움이 되지 않습니다. 우리가 원하는 것은 값들의 분포입니다. 바로 여기에서 Softmax가 사용됩니다.

소프트맥스 활성화 함수 정리

소프트맥스 활성화 함수는 수학적으로 다음과 같이 표현할 수 있습니다:
\huge

σ(z)i=ezij=1Kezj\huge \sigma(z)_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}

이 함수는 확률 값들의 시퀀스를 출력하므로 다중 클래스 분류 문제에 유용합니다. 예를 들어, 5개 클래스 분류 문제에서는 Softmax 함수의 출력이 다음과 비슷하게 나타날 수 있습니다:
[0.1,0.1,0.2,0.4,0.2]\huge [\,0.1 , 0.1 , 0.2, 0.4, 0.2\,]

보시다시피, 합은 1.0\large 1.0그리고 이를 해석하면, 클래스가 원-핫 인코딩되어 있다고 가정할 때 4번째 클래스(또는 인덱스 3)가 가장 확률이 높고, 그다음으로 5번째와 3번째가 근접하게 뒤따릅니다.
문장에서 원-핫 인코딩이 어떻게 동작하는지 보여주는 그림. 출처: SauravMaheshkar/infographics

소프트맥스 + 크로스 엔트로피 손실(주의: 수식 포함)

우리의 정의를 사용하여 위 섹션 말하자면 p1,p2,...pn\large p_1, p_2, ... p_n 네트워크에서 출력된 확률을 나타내며 z1,z2,...,zn\large z_1, z_2, ..., z_n 정규화되지 않은 로그 확률을 나타내며, q1,q2,...,qn\large q_1, q_2, ..., q_n 소프트맥스 출력, 즉 …을 나타내며 qi=σ(zi)i\large q_i = \sigma(z_i) \hspace{0.2em} \forall i, 그런 다음 사용하여 크로스 엔트로피 손실 다음과 같이:
Ji=ipi×log(qi)Jz=z{ipi×log(σ(zi))}=ipi×zlog(σ(zi))=ijpj×zlog(σ(zj))pi×zlog(σ(zi))=ijpj×1σ(zi)zσ(zj)pi×1σ(zi)zσ(zi)\huge \begin{array}{ll} J_i &= - \displaystyle \sum_{i} p_i \times log(q_i) \\ \frac{\partial J}{\partial z} &= \frac{\partial}{\partial z} \left\{ - \sum_i p_i \times log(\sigma(z_i)) \right\} \\ &= - \sum_{i} p_i \times \frac{\partial}{ \partial z} log(\sigma(z_i))\\ &= - \sum_{i \neq j} p_j \times \frac{\partial}{\partial z} log(\sigma(z_j)) - p_i \times \frac{\partial}{\partial z} log(\sigma(z_i)) \\ &= - \sum_{i \neq j} p_j \times \frac{1}{\sigma(z_i)} \cdot \frac{\partial}{\partial z} \sigma(z_j) - p_i \times \frac{1}{\sigma(z_i)}\cdot \frac{\partial}{\partial z} \sigma(z_i) \\ \end{array}


σ(zj)z=ziezjkezk=ezjzi[k1ezk]=ezj(ezikezK)2=(ezjkezk)(ezikezk)=σ(zj)σ(zi)\huge \begin{array}{ll} \frac{\partial }{\partial }\frac{\sigma(z_j)}{z} &= \frac{\partial}{\partial z_i} \frac{e^{z_j}}{\sum_k e^{z_k}} \\ &=e^{z_j} \frac{\partial}{\partial z_i} \left[ \displaystyle \sum_k \frac{1}{e^{z_k}} \right] \\ &= e^{z_j} \left( -\frac{e^{z_i}}{\sum_k e^{z_K}}\right)^2 \\ &= - \left( \frac{e^{z_j}}{\sum_{k} e^{z_k}} \right) \cdot \left( \frac{e^{z_i}}{\sum_{k} e^{z_k}}\right) \\ &= - \sigma(z_j) \cdot \sigma(z_i) \end{array}

ziz=ziσ(ezk)kezk=ezikezk+ezizi1kezk=σ(zi)ezi(1kezk)2zzi=σ(zi)σ(zi)2\huge \begin{array}{ll} \frac{\partial}{\partial} \frac{z_i}{z} &= \frac{\partial}{\partial z_i} \frac{\sigma (e^{z_k})}{\sum_k e^{z_k}} \\ &= \frac{e^{z_i}}{\sum_k e^{z_k}} + e^{z_i} \frac{\partial}{\partial z_i} \frac{1}{\sum_k e^{z_k}} \\ & = \sigma(z_i) - e^{z_i} (\frac{1}{\sum_k e^{z_k}})^2 z^{z_i} \\ &= \sigma(z_i) - \sigma(z_i)^2 \end{array}

이제 모두 합쳐 봅시다
Jz=ijpj×1σ(zi)(σ(zj)σ(zi))pi×1σ(zi)(σ(zi)σ(zi)2)=ijpjσ(zi)pi(1σ(zi))=σ(zi)ijpjpi+piσ(zi)=σ(zi)(ijpjijpi+ijpiσ(zi))=σ(zi)pi\huge \begin{array}{ll} \frac{\partial J}{\partial z} &= - \displaystyle\sum_{i \neq j} p_j \times \frac{1}{\sigma(z_i)} \left( - \sigma(z_j) \cdot \sigma (z_i) \right) - p_i \times \frac{1}{\sigma(z_i)} \left( \sigma(z_i) - \sigma(z_i)^2 \right) \\ &= \displaystyle \sum_{i\neq j} p_j \,\, \sigma(z_i) - p_i(1 - \sigma(z_i)) \\ &= \sigma(z_i) \displaystyle \sum_{i \neq j} p_j - p_i + p_i\sigma(z_i) \\ &= \sigma(z_i) \left( \displaystyle \sum_{i \neq j} p_j - \displaystyle \sum_{i \neq j} p_i + \displaystyle \sum_{i \neq j} p_i \sigma(z_i)\right) \\ &= \sigma(z_i) - p_i \end{array}


결론

이것으로 Softmax 활성화 함수에 대한 짧은 튜토리얼을 마치겠습니다. 궁금한 점이나 의견이 있으시면 아래에 자유롭게 남겨 주세요.
Weights & Biases의 전체 기능 세트를 확인하려면 이 짧은 내용을 참조하세요. 5분 가이드수학적 내용과 “처음부터 구현”한 코드까지 다루는 보고서를 더 보고 싶으시다면, 아래 댓글이나 저희의 채널에서 알려 주세요. 포럼 ✨!
다음 주제에 대한 다른 보고서도 확인하세요 완전 연결 선형 회귀, 교차 엔트로피 손실, 결정 트리와 같은 다른 기초 개념도 다룹니다.


이 글은 AI로 번역되었습니다. 오역이 있을 수 있으니 댓글로 알려 주세요. 원문 보고서는 다음 링크에서 확인하실 수 있습니다: 원문 보고서 보기
Ikram Ali
Ikram Ali •  
Softmax is a softer version of the max function. Damn, I didn't see that coming.
Reply