in

¿Qué son las funciones de pérdida?

1ACbDS2jrLif4hrTcUNA4cg
Fuente: Miriam Espacio – Pexels

¿Qué son las funciones de pérdida?

Después de la publicación sobre las funciones de activación, nos sumergiremos en la segunda parte, la pérdida, o objetivo función para redes neuronales

Christophe Pere

Christophe Pere

17 de junio de 2020·8 min de lectura

Un cuaderno que contiene todo el código está disponible aquí: GitHub encontrará código para generar diferentes tipos de conjuntos de datos y redes neuronales para probar las funciones de pérdida.

Para entender que es un función de pérdida, aquí hay una cita sobre el proceso de aprendizaje:

Una forma de medir si el algoritmo está haciendo un buen trabajo: esto es necesario para determinar la distancia entre la salida actual del algoritmo y su salida esperada. La medición se utiliza como señal de retroalimentación para ajustar la forma en que funciona el algoritmo. Este paso de ajuste es lo que llamamos aprendiendo.
François Chollet, Aprendizaje profundo con Python (2017), Manning, capítulo 1 p.6

los función de pérdida es la función que calcula la distancia entre la salida actual del algoritmo y la salida esperada. Es un método para evaluar cómo su algoritmo modela los datos. Se puede clasificar en dos grupos. Uno para clasificación (valores discretos, 0,1,2…) y el otro para regresión (valores continuos).

¿Cuáles son las funciones de pérdida de uso común para entrenar una red neuronal?

Contenido

  • Entropía cruzada
  • Pérdida de registro
  • Pérdida exponencial
  • Pérdida de bisagra
  • Pérdida de divergencia de Kullback Leibler
  • Error cuadrático medio (MSE – L2)
  • Error absoluto medio (MAE – L1)
  • Pérdida de Huber

Estos paquetes son necesarios:

%matplotlib inline
import keras.backend as K
import numpy as np
import matplotlib.pyplot as plt

Clasificación

Entropía cruzada

ThIs función proviene de la teoría de la información donde el objetivo es medir la diferencia entre dos promedios del número de bits de distribución de información. los entropía cruzada como el Función de pérdida de registro (no es lo mismo pero miden lo mismo) calcula la diferencia entre dos funciones de distribución de probabilidad.

Entropía es el número de bits necesarios para transmitir un evento seleccionado al azar de una distribución de probabilidad. Una distribución sesgada tiene una entropía baja, mientras que una distribución donde los eventos tienen la misma probabilidad tiene una entropía mayor.

En teoría de la información, nos gusta describir el «sorpresa”De un evento. Los eventos de baja probabilidad son más sorprendentes, por lo tanto, tienen una mayor cantidad de información. Mientras que las distribuciones de probabilidad donde los eventos son igualmente probables son más sorprendentes y tienen una entropía mayor.

– Distribución de probabilidad sesgada (nada sorprendente): Baja entropía.

– Distribución de probabilidad equilibrada (sorprendente): Alta entropía.

La entropía cruzada es una clase de función de pérdida más utilizada en el aprendizaje automático porque conduce a mejores modelos de generalización y entrenamiento más rápido.

La entropía cruzada se puede usar con problemas de clasificación binaria y multiclase (muchas clases con una etiqueta, diferentes de muchas clases con múltiples etiquetas denominadas clasificación de múltiples etiquetas).

Tipos de entropía cruzada:

  • Entropía cruzada binaria: para problemas de clasificación binaria
  • Entropía cruzada categórica: problema binario y multiclase, la etiqueta debe codificarse como una representación de codificación única categórica (para 3 clases: [0, 1, 0], [1,0,0]…)
  • Entropía cruzada dispersa: problema binario y multiclase (la etiqueta es un número entero – 0 o 1 o… n, depende del número de etiquetas)

Rango de valores para esta clase de función de pérdida:

  • 0,00: Probabilidades perfectas
  • : Grandes probabilidades
  • : En el buen sentido
  • : Excelente
  • > 0,30: No es bueno
  • 1,00: Infierno
  • > 2,00 Algo no esta funcionando

Pérdida de registro

La Log-Loss es la entropía cruzada binaria hasta un factor 1 / log (2). Esta función de pérdida es convexa y crece linealmente para valores negativos (menos sensible a valores atípicos). El algoritmo común que utiliza Log-loss es el Regresión logística.

La probabilidad logarítmica negativa para problemas de clasificación binaria a menudo se abrevia simplemente como «pérdida logarítmica» como la función de pérdida derivada de la regresión logística.

– log loss = log-verosimilitud negativa, bajo una distribución de probabilidad de Bernoulli

Para problemas de clasificación, «pérdida de registro«,»entropía cruzada» y «probabilidad logarítmica negativa”Se utilizan indistintamente.

De manera más general, los términos «entropía cruzada» y «probabilidad logarítmica negativa”Se utilizan indistintamente en el contexto de las funciones de pérdida para los modelos de clasificación.

Pérdida exponencial

La pérdida exponencial se diseñó al comienzo del algoritmo Adaboost que lo optimizó con avidez. La forma matemática es:
exp_loss = 1 / m * suma (exp (-y * f (x)))

Y se puede codificar así:

def exponential_loss(y_pred, y_true):
return np.mean(np.exp(- y_pred * y_true))

El resultado se puede mostrar a continuación:

Pérdida exponencial vs clasificación errónea (1 si y

Pérdida de bisagra

La función de pérdida de bisagra se desarrolló para corregir el hiperplano del algoritmo SVM en la tarea de clasificación. El objetivo es realizar diferentes penalizaciones en el punto que no están correctamente pronosticados o demasiado cerrados del hiperplano.

Su fórmula matemática es Hinge = max (0, 1-y * f (x)) y el código correspondiente:

def Hinge(y_pred, y_true):
return np.max([0., 1. - y_pred * y_true])

El resultado de esta ecuación es convexo pero no diferenciable, necesita un algoritmo de sub-gradiente para ser optimizado.

El resultado se muestra a continuación:

1*phZL0v6

Pérdida de bisagra vs clasificación errónea (1 si y

Pérdida de divergencia de Kullback Leibler

La divergencia KL es la puntuación de dos funciones de distribución de probabilidad diferentes. La diferencia KL entre una PDF de q (x) y una PDF de p (x) se indica KL (Q || P) donde || medio divergencia (no es simétrico KL (P || Q)! = KL (Q || P)).

KL (Q || P) = -sum (q (x) * log (p (x) / q (x)) o suma (q (x) * log (q (x) / p (x))

La suma es para un caso discreto e integral para continuo. Esto significa que la divergencia aumenta si la PDF de q (x) es grande y la PDF de p (x) es pequeña para los mismos datos. En el aprendizaje automático, puede representar esto como la diferencia entre la predicción y la verdad básica.

El siguiente código muestra cómo usar la divergencia KL con predicciones y verdad fundamental:

def kl_divergence(y_true, y_pred):
return y_true * np.log(y_true / y_pred)

Aquí se puede mostrar una visualización simple:

1*e4PvmefkzzrK5ZA218m31Q

Fuente: Wikipedia

Como tal, la divergencia de KL a menudo se denomina «entropía relativa. «

– Entropía cruzada: Número promedio de bits totales para representar un evento de Q en lugar de P.

– Entropía relativa (Divergencia KL): Número medio de bits adicionales para representar un evento de Q en lugar de P.

Regresión

Pérdida por error cuadrático medio (también denominada regularización L2)

Es la diferencia cuadrada entre la salida actual y_pred y la salida esperada y_verdadero dividido por el número de salida. La función MSE es muy sensible a los valores atípicos porque la diferencia es un cuadrado que da más importancia a los valores atípicos. Si tuviéramos que predecir un valor para todos los objetivos, la predicción debería ser la significar.

Esto se expresa así:

def mean_square_error(y_true, y_pred):
return K.mean(K.square(y_true-y_pred), axis=-1)

Podemos visualizar el comportamiento de la función MSE comparando un rango de valores (aquí -10000 a 10000) con un valor constante (aquí 100):

1*4KXPuHcCAcQhJn3u e4Www

El comportamiento de la pérdida por error cuadrático medio

El comportamiento es una curva cuadrática especialmente útil para el algoritmo de descenso de gradientes. El gradiente será menor cerrado a los mínimos. MSE es muy útil si los valores atípicos son importantes para el problema. Si los valores atípicos son ruidosos o datos incorrectos o medidas incorrectas, debe usar la función de pérdida MAE.

Pérdida de error absoluta media (también denominada regularización L1)

A la diferencia de la función de pérdida anterior, el cuadrado se reemplaza por un valor absoluto. Esta diferencia tiene un gran impacto en el comportamiento de la función de pérdida que tiene forma de “V”. El gradiente es el mismo en cada punto, incluso cuando los valores están cerrados a los mínimos (puede crear un salto). Necesita modificar dinámicamente la tasa de aprendizaje para reducir el paso cerrado al mínimo. La función MAE es más robusta a los valores atípicos porque se basa en un valor absoluto en comparación con el cuadrado del MSE. Es como una mediana, los valores atípicos no pueden afectar su comportamiento.

Puede implementarlo fácilmente así:

def mean_square_error(y_true, y_pred):
return K.mean(K.abs(y_true-y_pred), axis=-1)

Podemos visualizar el comportamiento de la función MAE comparando un rango de valores (aquí -10000 a 10000) con un valor constante (aquí 100):

1* G BWSB9TGCdEEWg4jI3g

El comportamiento de la pérdida media absoluta por error

Error logarítmico cuadrático medio

Pérdida de Huber

Huber Loss es una combinación de MAE y MSE (L1-L2) pero depende de un parámetro adicional llamado delta que influye en la forma de la función de pérdida. Este parámetro debe ajustarse con precisión mediante el algoritmo. Cuando los valores son grandes (lejos de los mínimos) la función tiene el comportamiento del MAE, cerrada a los mínimos, la función se comporta como el MSE. Entonces el delta parámetro es su sensibilidad a valores atípicos. La forma matemática de la pérdida de Huber es:

1*M0BeXxKh1khQ XF9 E1qfw

Podemos implementar esta función de dos maneras, aquí presento una función donde todos los bloques son explícitos.

# custom huber loss function 
def huber_loss_error(y_true, y_pred, delta=0.1):
res = []
for i in zip(y_true, y_pred):
if abs(i[0]-i[1])<=delta:
res.append(0.5*((i[0]-i[1])**2))
else:
res.append(delta*((abs(i[0]-i[1]) )-0.5*(delta**2)))
# can also be write as:
# np.where(np.abs(y_true-y_pred) < delta, 0.5*(y_true-y_pred)**2 , delta*(np.abs(y_true-y_pred)-0.5*delta))

return res # np.sum(res)

Podemos visualizar el comportamiento de la función de pérdida de Huber comparando un rango de valores (aquí -10 a 10) con un valor constante (aquí 0):

Comportamiento de la pérdida de Huber

La pérdida de Huber permite tener un gradiente grande para números grandes, pero un gradiente decreciente cuando los valores se vuelven más pequeños. Pero esta función necesita un ajuste fino delta, pero es computacionalmente costosa. Para evitar esto, puede usar Log-Cosh Loss (no se explica en este artículo, pero puede ver en el siguiente gráfico la diferencia entre ellos).

1*ywHVRJCq0fbZIP25Onl4kw

Comparación entre la función de pérdida de Huber (delta = 1) y la función de pérdida Log-Cosh

Referencias:

  • https://machinelearningmastery.com/how-to-choose-loss-functions-when-training-deep-learning-neural-networks/
  • https://keras.io/api/losses/regression_losses/#meansquaredlogarithmicerror-class
  • Jingyi Xu et al., Una función de pérdida semántica para el aprendizaje profundo con conocimiento simbólico (2017), arxiv
  • https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
  • https://towardsdatascience.com/kl-divergence-python-example-b87069e4b810
  • https://machinelearningmastery.com/divergence-between-probability-distributions/
  • https://dibyaghosh.com/blog/probability/kldivergence.html
  • https://algorithmia.com/blog/introduction-to-loss-functions#:~:text=There%20are%20several%20different%20common,of%20loss%20functions%20is%20discussed.
  • Ian Goodfellow, Yoshua Bengio, Aaron Courville, Aprendizaje profundo (2016), MIT Press
  • François Chollet, Aprendizaje profundo con Python (2017), Manning
  • François Chollet, Cuadernos complementarios de Jupyter para el libro Aprendizaje profundo con Python (2017), github
  • https://ml-cheatsheet.readthedocs.io/en/latest/loss_functions.html
  • https://towardsdatascience.com/common-loss-functions-in-machine-learning-46af0ffc4d23
  • https://medium.com/@phuctrt/loss-functions-why-what-where-or-when-189815343d3f
  • https://algorithmia.com/blog/introduction-to-loss-functions
  • https://machinelearningmastery.com/loss-and-loss-functions-for-training-deep-learning-neural-networks/
  • https://en.wikipedia.org/wiki/Loss_function#:~:text=In%20mathematical%20optimization%20and%20decision,cost%22%20associated%20with%20the%20event.
  • Murphy, Kevin, Aprendizaje automático: una perspectiva probabilística (2012), MIT

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

eliminar suscripcion youtube

¿Cómo elimino todas las suscripciones a los canales de YouTube?

Gestión de datos de clientes (CDM) | CX