Skip to main content

소프트맥스 활성화 함수 이해하기

이 짧은 튜토리얼에서는 분류 작업에서의 활용과 교차 엔트로피 손실과의 관계를 포함해 Softmax 활성화 함수를 살펴보겠습니다. 이 글은 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려주세요.
Created on September 15|Last edited on September 15
이 글에서는 분류 작업에서의 활용과 함께 Softmax 활성화 함수를 자세히 살펴보고, 그것이 다음과 어떻게 연관되는지 설명합니다. 교차 엔트로피 손실.
다음 내용을 다룹니다:

목차




Softmax 함수는 어디에 사용되나요?

ML에서 가장 흔한 작업 중 하나는 분류즉, 입력(이미지, 비디오, 텍스트, 오디오)을 주었을 때 모델이 그것이 어떤 클래스에 속하는지 반환할 수 있느냐는 뜻입니다. 가장 단순한 형태의 신경망, 예를 들어 다층 퍼셉트론(MLP)을 사용할 때, 그 출력값을 어떻게 클래스로 변환할 수 있을까요?
참고: 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만으로는 충분하지 않습니다.
소프트맥스의 출현

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

왜 단순히 최대값이나 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/인포그래픽스

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

우리의 정의를 사용하여 위 섹션 말하자면 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}


결론

이것으로 소프트맥스 활성화 함수에 대한 간단한 튜토리얼을 마치겠습니다. 질문이나 의견이 있으시면 아래에 자유롭게 남겨 주세요.
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