Derivada de la Capa CrossEntropy

Función CrossEntropy

La entropía cruzada es una función de error que recibe x=[p1,...,pC]x=[p_1,...,p_C], un vector de probabilidades de cada clase (cuya suma es 1), e cc la etiqueta de la clase verdaderra, es decir, la clase cuya probabilidad debería ser 1.

Entonces, la función de entropía cruzada (CrossEntropy) se define como el menos logaritmo de la probabilidad que generó el modelo para la clase verdadera:

y(x,c)=CrossEntropy(x,c)=ln(xc) y(x,c) = CrossEntropy(x,c) = -ln( x_{c})

Derivada de la función CrossEntropy respecto a su entrada

En el caso de la capa CrossEntropy, como va al final de la red, no recibe un gradiente de otra capa para hacer la fase backward, por ende la fórmula del gradiente se puede aplicar directamente para calcular las derivadas de la capa.

El gradiente de CrossEntropy dy(x,c))dx\frac{dy(x,c))}{dx} entonces es un vector que me dice como cuanto debo cambiar las probabilidades (xx) para maximizar el error (recordamos que luego es descenso de gradiente utiliza el negativo del gradiente)

dy(x,c)dx=[dy(x,c)dx1,,dy(x,c)dxC] \frac{dy(x,c)}{dx} =[ \frac{dy(x,c)}{dx_1}, \dots, \frac{dy(x,c)}{dx_C} ]
Entonces cada elemento de este gradiente es una derivada simple, que va a depende del valor de cc, ya que xcx_c es el único valor que contribuye al error:
dy(x,c)dxi={0if icd(ln(xc))dxcif i=c \frac{dy(x,c)}{dx_i} = \begin{cases} 0 &\text{if } i \ne c \\ \frac{d(-ln( x_c))}{dx_c} &\text{if } i=c \end{cases}

El caso i=ci=c es simple, ya que d(ln(xc))dxc=1xc\frac{d(-ln( x_c))}{dx_c} = - \frac{1}{x_c}, entonces
dy(x,c)dxi={0if ic1xcif i=c \frac{dy(x,c)}{dx_i} = \begin{cases} 0 &\text{if } i \ne c \\ -\frac{1}{x_c} &\text{if } i=c \end{cases}