Detalles de la función de pérdida de entropía cruzada CrossEntropyLoss() comúnmente utilizada en Pytorch
Cuando se utiliza el marco de aprendizaje profundo de Pytorch, a menudo se utiliza una función de este tipo al calcular la función de pérdida:
Esta función de pérdida combina dos funciones. Es muy útil al realizar entrenamiento de clasificación (categoría específica). Durante el entrenamiento, a cada categoría se le asigna un peso y el peso del parámetro opcional debe ser un tensor 1D. Esto es útil cuando el conjunto de entrenamiento está desequilibrado. Por lo tanto, a continuación se muestra una descripción detallada de la función.
La entropía cruzada se utiliza principalmente para determinar qué tan cerca está la salida real de la salida esperada. ¿Por qué dices esto? Por ejemplo: en el entrenamiento de clasificación, si una muestra pertenece a la clase K, entonces el valor de salida del nodo de salida correspondiente a la clase debe ser 1 y el valor de salida de otros nodos debe ser 0. Es decir, esta matriz también es la La etiqueta de la muestra es el resultado más esperado de la red neuronal. Es decir, se utiliza para medir la diferencia entre la salida de la red y la etiqueta, y esta diferencia se utilizará para actualizar los parámetros de la red después de la retropropagación.
Antes de entender la entropía cruzada, hablemos de Información y Entropía.
Contenido de la información: Es una medida de la incertidumbre de un evento; cuanto mayor es la probabilidad de un evento, menor es la incertidumbre y menor es la cantidad de información que lleva. Supongamos que X es una variable aleatoria discreta, su valor establecido es igual a 0.
Entropía: Es un indicador del grado de caos de un sistema y representa la cantidad total de información en el sistema; cuanto mayor es la cantidad total de información, mayor es la incertidumbre del sistema.
Por ejemplo, si Xiao Ming y Xiao Wang van a disparar, el resultado es en realidad una distribución 0-1 y el valor de X es {0: acierto, 1: fallo}. Antes de disparar, sabemos que las probabilidades anteriores de Xiao Ming y Xiao Wang son 10 y 99,9 respectivamente. De acuerdo con la introducción del volumen de información anterior, podemos obtener el volumen de información de Xiao Ming y Xiao Wang alcanzando el objetivo respectivamente. Pero si queremos medir aún más la incertidumbre de los resultados de tiro al blanco de Xiao Ming, debemos utilizar el concepto de entropía. Entonces, para medir, debemos utilizar las expectativas. Esperamos la cantidad de información de todos los eventos posibles, y el resultado es la incertidumbre del tiro al blanco de Xiao Ming:
En consecuencia, la entropía de Xiao Wang (incertidumbre del tiro al blanco) es: Aunque la incertidumbre del tiro al blanco de Xiao Ming Los resultados son muy bajos, después de todo, 9 de cada 10 veces se falla el objetivo, pero la incertidumbre de los resultados de los disparos de Xiao Wang es aún menor, solo 1 de cada 1000 veces se sale del objetivo, el resultado es bastante seguro.
Entropía cruzada: describe principalmente la distancia entre la salida real (probabilidad) y la salida esperada (probabilidad), es decir, cuanto menor es el valor de la entropía cruzada, más cercanas están las dos distribuciones de probabilidad. Supongamos que la distribución de probabilidad p es la salida esperada, la distribución de probabilidad q es la salida real y la entropía cruzada, entonces cómo expresarlo con una fórmula, por ejemplo, suponiendo N = 3, la salida esperada es, la salida real es, entonces : De lo anterior se puede ver que q2 está más cerca de p y su entropía cruzada también es menor.
La entropía cruzada calculada por Pytorch no se calcula de esta manera, sino de otra forma de entropía cruzada: es otra forma de entropía cruzada.
La función CrossEntropyLoss() en Pytorch es principalmente el resultado de combinar softmax-log-NLLLoss en uno.
1. Los valores después de Softmax están todos entre 0 ~ 1, por lo que los valores después de ln varían desde infinito negativo hasta 0.
2. Luego, logaritmiza el resultado después de Softmax y cambia la multiplicación por suma para reducir la cantidad de cálculo y garantizar la monotonicidad de la función.
3. El resultado de NLLLoss es. lo anterior genera el valor correspondiente al valor de la etiqueta. El resultado de NLLLoss es tomar el valor correspondiente a la salida anterior y el valor de la etiqueta (en el siguiente ejemplo: tome el valor correspondiente a log_output\logsoftmax_output e y_target), elimine el negativo. firmar y luego promediarlo.
Aquí está el ejemplo que escribí en la simulación:
El resultado más calculado es:
Los resultados anteriores muestran que se usa loss_func=nn en pytorch directamente. CrossEntropyLoss() da el mismo resultado que calcular softmax-log-NLLLoss. Los resultados obtenidos son consistentes.
[1] blogs.com/JeasonIsCoding/p/10171201.html
Para obtener más conocimientos sobre el procesamiento del lenguaje natural y pytorch, siga también la cuenta oficial de AINLPer y lo mejor en seco. Los productos se entregarán inmediatamente.