10 votos

Vectorización de la pérdida de entropía cruzada

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.

19voto

David A. Puntos 1332

Lo que sigue es el mismo contenido de la edición, pero en un formato (para mí) ligeramente más claro, paso a paso:

Estamos tratando de probarlo:

$\frac{\partial{CE}}{\partial{\theta}} = \hat{y} - y$

dado

$CE(\theta) = -\sum\nolimits_{i}{y_i*log({\hat{y}_{i}})}$

y

$\hat{y}_{i} = \frac{exp(\theta_i)}{\sum\nolimits_{j}{exp(\theta_j)}}$

Sabemos que $y_{j} = 0$ para $j \neq k$ y $y_k = 1$ Así que..:

$CE(\theta) = -\ log({\hat{y}_{k}})$

$= - \ log(\frac{exp(\theta_k)}{\sum\nolimits_{j}{exp(\theta_j)}})$

$ = - \ \theta_k + log(\sum\nolimits_{j}{exp(\theta_j)}) $

$\frac{\partial{CE}}{\partial{\theta}} = - \frac{\partial{\theta_k}}{\partial{\theta}} + \frac{\partial}{\partial{\theta}} log(\sum\nolimits_{j}{exp(\theta_j))}$

Utilice el hecho de que $ \frac{\partial{\theta_k}}{\partial{\theta_k}} = 1 $ y $ \frac{\partial{\theta_k}}{\partial{\theta_q}} = 0 $ para $q \neq k$ para demostrarlo.

$ \frac{\partial{\theta_k}}{\partial{\theta}} = y $

Para la segunda parte escribimos la derivada para cada elemento individual de $\theta$ y utilizar la regla de la cadena para obtener:

$\frac{\partial}{\partial{\theta_i}} log(\sum\nolimits_{j}{exp(\theta_j))} = \frac{exp(\theta_i)}{\sum\nolimits_{j}{exp(\theta_j)}} = \hat{y}_{i}$

Por lo tanto,

$\frac{\partial{CE}}{\partial{\theta}} = \frac{\partial}{\partial{\theta}} log(\sum\nolimits_{j}{exp(\theta_j))} - \frac{\partial{\theta_k}}{\partial{\theta}} = \hat{y}$ - y

3voto

andynormancx Puntos 234

No, los gradientes no deben ser cero para los otros componentes. Si su predicción es $\hat y_{ij}$ para algunos $i,j$ y su observación $y_{ij}=0$ entonces usted predijo demasiado por $\hat y_{ij}$ .

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