Me encuentro con un problema relacionado con la búsqueda del gradiente de la función de pérdida de entropía cruzada con respecto al parámetro $\theta$ donde:
$CE(\theta) = -\sum\nolimits_{i}{y_i*log({\hat{y}_{i}})}$
Dónde, $\hat{y}_{i} = softmax(\theta_i)$ y $\theta_i$ es un vector de entrada.
También, $y$ es un vector de una clase correcta y $\hat{y}$ es la predicción para cada clase utilizando la función softmax.
Así, por ejemplo, tenemos $y_i = \begin{pmatrix}0\\0\\0\\1\\0\end{pmatrix}$ and $\hat{y}_{i} = \begin{pmatrix}0.10\\0.20\\0.10\\0.40\\0.20\end{pmatrix}$
Para encontrar la derivada parcial $\frac{\partial{CE(\theta)}}{\partial{\theta{ik}}} = -{y_{ik} - \hat{y}_{ik}}$
Tomando de ahí para cada $i$ los gradientes parciales individuales serán $\frac{\partial{CE(\theta)}}{\partial{\theta{i}}} = \begin{pmatrix}y_{i1} - \hat{y}_{i1}\\y_{i2} - \hat{y}_{i2}\\y_{i3} - \hat{y}_{i3}\\y_{i4} - \hat{y}_{i4}\\y_{i5} - \hat{y}_{i5}\end{pmatrix}$
Pero esto no es cierto porque los gradientes deberían ser en realidad 0 para todas las demás filas excepto para la 4ª fila porque hemos utilizado la propiedad del vector único caliente. Así que el gradiente real debería ser $\frac{\partial{CE(\theta)}}{\partial{\theta{i}}} = \begin{pmatrix}0\\0\\0\\y_{i4} - \hat{y}_{i4}\\0\end{pmatrix}$
Y por lo tanto, los gradientes para todos $i$ debe ser $\frac{\partial{CE(\theta)}}{\partial{\theta}} = \left( \begin{array}{ccc} 0 & 0 & 0 & y_{i4} - \hat{y}_{i4} & 0 \\ 0 & 0 & y_{i3} - \hat{y}_{i3} & 0 & 0 \\ ... \\ 0 & y_{i2} - \hat{y}_{i2} & 0 & 0 & 0 \end{array} \right)$
Pero esto no es igual a $\hat{y} - y$ . Por lo tanto, no deberíamos llamar al gradiente de la función de entropía cruzada una diferencia vectorial entre el predicho y el original.
¿Puede alguien aclarar esto?
ACTUALIZACIÓN: He corregido mi derivación
$\theta = \left( \begin{array}{c} \theta_{1} \\ \theta_{2} \\ \theta_{3} \\ \theta_{4} \\ \theta_{5} \\ \end{array} \right)$
$CE(\theta) = -\sum\nolimits_{i}{y_i*log({\hat{y}_{i}})}$
Dónde, $\hat{y}_{i} = softmax(\theta_i)$ y $\theta_i$ es un vector de entrada.
También, $y$ es un vector de una clase correcta y $\hat{y}$ es la predicción para cada clase utilizando la función softmax.
$\frac{\partial{CE(\theta)}}{\partial{\theta{i}}} = - (log(\hat{y}_{k}))$
ACTUALIZACIÓN: Se ha eliminado el índice de $y$ y $\hat{y}$ Así, por ejemplo, tenemos $y = \begin{pmatrix}0\\0\\0\\1\\0\end{pmatrix}$ and $\hat{y} = \begin{pmatrix}0.10\\0.20\\0.10\\0.40\\0.20\end{pmatrix}$
ACTUALIZACIÓN: Se ha corregido la derivada que estaba tomando. $\theta_{ik}$ debería ser sólo en relación con el tiempo. $\theta_{i}$ . Para encontrar la derivada parcial $\frac{\partial{CE(\theta)}}{\partial{\theta{i}}} = -{y_{k} - \hat{y}_{k}}$
Tomando de ahí para cada $i$ los gradientes parciales individuales serán $\frac{\partial{CE(\theta)}}{\partial{\theta}} = \begin{pmatrix}y_{1} - \hat{y}_{1}\\y_{2} - \hat{y}_{2}\\y_{3} - \hat{y}_{3}\\y_{4} - \hat{y}_{4}\\y_{5} - \hat{y}_{5}\end{pmatrix}$
Lo anterior ocurre porque $CE(\theta) = -(y_k*log({\hat{y}_{k}}))$ Y, $\hat{y}_{k} = log(softmax(\theta_k)) = \theta_k - log(\sum\nolimits_{j}{exp(\theta_j)})$ Tomando la derivada parcial de $CE(\theta)$ por ejemplo $\theta_i$ nos encontramos con que:
$\frac{\partial{CE(\theta)}}{\partial{\theta{i}}} = - (\frac{\partial{\theta_k}}{\partial{\theta{i}}} - softmax(\theta_i))$
PASO PRINCIPAL: El hecho de que $\frac{\partial{\theta_k}}{\partial{\theta{i}}} = 0, i \neq k$ y $\frac{\partial{\theta_k}}{\partial{\theta{i}}} = 1, i = k$ hace que el vector $\frac{\partial{CE(\theta)}}{\partial{\theta}} = \hat{y} - y$ lo que completa la prueba.