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/…