softmax (소프트맥스) 함수의 미분을 구해보도록 하겠습니다. softmax (소프트맥스)는 딥러닝에서 굉장히 중요한 역할을 하지요. 중요한 것은 알지만 pytorch 로 구현이 잘되어있어서 softmax의 메커니즘을 잘 잊고 살지요. 중요한 것을 되새기기 위해 소프트맥스 함수의 미분을 알아보겠습니다.
softmax 함수의 미분?
softmax 함수란?
K차원을 갖은 벡터 $\mathbf{x} = (x_1,…,x_K)$가 있다고 합시다. 이 변수 $\mathbf{x}$가 입력들어가는 softmax 함수 $S(\mathbf{x})=(s_1 (\mathbf{x}),s_2 (\mathbf{x}),…, s_K (\mathbf{x}))$는 아래와 같이 정의됩니다.
$$s_i(\mathbf{x}) = \frac{\exp{x_i} }{ \sum_{j=1}^K \exp{x_j} }$$
softmax 함수의 미분해보자
여기서 $x_k$에 대해 미분을 해보겠습니다. $$\frac{\partial}{\partial x_k} s_i(\mathbf{x}) $$을 구해보겠다는 의미인데요. $s_i(\mathbf{x})$의 분자에 있는 $\exp{x_i}$는 $i = k$이면 관 $x_k$와 관련있는 term 이고 $i \neq k$이면 $x_k$와 관련없는 term 이죠. 이점을 이용한다면 미분은 금방 됩니다.
$$\frac{\partial}{\partial x_k} s_i(\mathbf{x}) = \frac{\exp {x_i} \left (\delta[i-k]\sum_{j=1}^K \exp {x_j} – \exp{x_k} \right) }{\left( \sum_{j=1}^K \exp{x_j} \right)^2} $$
여기서 $\delta$는 kronecker delta(Kronecker delta(크로네커 델타) 함수 정의와 응용) 입니다.