196 votos

Derivada de la función de pérdida Softmax

Estoy tratando de entender la retropropagación en una red neuronal con un clasificador Softmax, que utiliza la función Softmax:

\begin{equation} p_j = \frac{e^{o_j}}{\sum_k e^{o_k}} \end{equation}

Esto se usa en una función de pérdida de la forma

\begin{equation}L = -\sum_j y_j \log p_j,\end{equation}

donde $o$ es un vector. Necesito la derivada de $L$ con respecto a $o$. Ahora si mis derivadas son correctas,

\begin{equation} \frac{\partial p_j}{\partial o_i} = p_i(1 - p_i),\quad i = j \end{equation}

y

\begin{equation} \frac{\partial p_j}{\partial o_i} = -p_i p_j,\quad i \neq j. \end{equation}

Usando este resultado obtenemos

\begin{eqnarray} \frac{\partial L}{\partial o_i} &=& - \left (y_i (1 - p_i) + \sum_{k\neq i}-p_k y_k \right )\\ &=&p_i y_i - y_i + \sum_{k\neq i} p_k y_k\\ &=& \left (\sum_i p_i y_i \right ) - y_i \end{eqnarray}

Según los slides que estoy utilizando, sin embargo, el resultado debería ser

\begin{equation} \frac{\partial L}{\partial o_i} = p_i - y_i. \end{equation}

¿Alguien puede decirme dónde estoy cometiendo un error?

19 votos

Para otros que terminen aquí, este hilo se trata de computar la derivada de la función de entropía cruzada, que es la función de costo a menudo utilizada con una capa softmax (aunque la derivada de la función de entropía cruzada utiliza la derivada del softmax, -p_k * y_k, en la ecuación anterior). Eli Bendersky tiene una increíble derivación del softmax y su función de costo asociada aquí: eli.thegreenplace.net/2016/…

172voto

Daniel Kitachewsky Puntos 123

Tus derivadas $\large \frac{\partial p_j}{\partial o_i}$ son de hecho correctas, sin embargo hay un error cuando diferencias la función de pérdida $L$ con respecto a $o_i.

Tenemos lo siguiente (donde he resaltado en $\color{red}{rojo}$ donde te has equivocado) $$\frac{\partial L}{\partial o_i}=-\sum_ky_k\frac{\partial \log p_k}{\partial o_i}=-\sum_ky_k\frac{1}{p_k}\frac{\partial p_k}{\partial o_i}\\=-y_i(1-p_i)-\sum_{k\neq i}y_k\frac{1}{p_k}({\color{red}{-p_kp_i}})\\=-y_i(1-p_i)+\sum_{k\neq i}y_k({\color{red}{p_i}})\\=-y_i+\color{blue}{y_ip_i+\sum_{k\neq i}y_k({p_i})}\\=\color{blue}{p_i\left(\sum_ky_k\right)}-y_i=p_i-y_i$$ dado que $\sum_ky_k=1$ de las diapositivas (ya que $y$ es un vector con solo un elemento no nulo, que es $1$).

1 votos

Ah, sí, entiendo. ¡Y ni siquiera estoy cansado - no hay nadie a quien culpar excepto yo! Gracias por tu ayuda, Alijah.

1 votos

Moos, eres muy bienvenido. Me alegro de poder ayudar.

1 votos

Estoy inseguro de cómo llegar a la última línea desde la línea anterior en esta respuesta. ¿Sería posible publicar más información?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X