Las máquinas aprenden mediante una función de pérdida. Es un método para evaluar qué tan bien algoritmo específico modela los datos dados. Si las predicciones se desvían demasiado de los resultados reales, la función de pérdida arrojaría un gran número. Poco a poco, con la ayuda de alguna función de optimización, la función de pérdida aprende a reducir el error en la predicción. En este artículo analizaremos varias funciones de pérdida y sus aplicaciones en el dominio de la máquina / aprendizaje profundo.
No existe una función de pérdida para todos los algoritmos en el aprendizaje automático. La elección de una función de pérdida para un problema específico, como el tipo de algoritmo de aprendizaje automático elegido, la facilidad de cálculo de las derivadas y, en cierta medida, el porcentaje de valores atípicos en el conjunto de datos son diversos.
En general, las funciones de pérdida pueden clasificarse en dos categorías principales dependiendo del tipo de tarea de aprendizaje con la que estamos tratando - Pérdidas por regresión y Pérdidas por clasificación . En la clasificación, estamos tratando de predecir el resultado del conjunto de valores categóricos finitos, es decir, dado un gran conjunto de datos de dígitos escritos a mano, categorizándolos en uno de 0-9 dígitos. La regresión, por otro lado, trata de predecir un valor continuo, por ejemplo, el área del piso dada, el número de habitaciones, el tamaño de las habitaciones, predecir el precio de la habitación.
NOTA
n - Número de ejemplos de capacitación.
Ejemplo de entrenamiento con un conjunto de datos.
y (i) - Etiqueta de verdad del terreno para el i-ésimo ejemplo de entrenamiento.
y_hat (i) - Predicción para el i-ésimo ejemplo de entrenamiento.
Pérdidas de regresión
Error cuadrático medio / Pérdida cuadrática / Pérdida L2
Formulación matemática : -
Como su nombre indica, El error cuadrático medio se mide como el promedio de la diferencia al cuadrado entre las predicciones y las observaciones reales. Solo le preocupa la magnitud promedio del error, independientemente de su dirección. Sin embargo, debido a la cuadratura, las predicciones que están muy lejos de los valores reales son penalizadas fuertemente en comparación con las predicciones menos desviadas. Además MSE tiene buenas propiedades matemáticas que hacen que sea más fácil calcular gradientes.
import numpy as np
y_hat = np.array ([0.000, 0.166, 0.333]) y_true = np.array ([0.000, 0.254, 0.998])
def rmse (predictions, targets): differences = predictions - targets differences_squared = differences ** 2 mean_of_differences_squared = differences_squared.mean () rmse_val = np.sqrt (mean_of_differences_squared) return rmse_val
imprimir ("d es:" + str (["%.8f" % elem for elem in y_hat]))
imprimir ("p es:" + str (["%.8f" % elem for elem in y_true]))
rmse_val = rmse (y_hat, y_true)
print ("error rms es:" + str (rmse_val))
Error Absoluto Medio / Pérdida L1
Formulación matemática : -
import numpy as np
y_hat = np.array ([0.000, 0.166, 0.333])
y_true = np.array ([0.000, 0.254, 0.998]) [19659025] imprimir ("d es:" + str (["%.8f" % elem for elem in y_hat]))
imprimir ("p es:" + str (["%.8f" % elem for elem in y_true]))
def mae (predicciones, objetivos):
diferencias = predictions - targets
absolute_differences = np.absolute (diferencias)
mean_absolute_differences = absolute_differences.mean ()
return mean_absolute_differences
mae_val = mae (y_hat, y_true)
print ("el error de mae es : "+ str (mae_val))
Error de sesgo promedio
Esto es mucho menos común en el dominio de aprendizaje automático en comparación con su contraparte. Esto es igual que MSE con la única diferencia de que no tomamos valores absolutos. Claramente hay una necesidad de precaución ya que los errores positivos y negativos pueden anularse mutuamente. Aunque menos preciso en la práctica, podría determinar si el modelo tiene sesgo positivo o sesgo negativo.
Formulación matemática : -
Pérdidas de clasificación
Bisagra Pérdida / Multi clase SVM Loss
En términos simples, el puntaje de la categoría correcta debe ser mayor que la suma de los puntajes de todas las categorías incorrectas por algún margen de seguridad (generalmente uno). Y por lo tanto, la pérdida de bisagra se usa para la clasificación de margen máximo más notablemente para máquinas de vectores de soporte . Aunque no diferenciable es una función convexa que facilita el trabajo con los optimizadores convexos habituales utilizados en el dominio de aprendizaje automático.
Formulación matemática : -
Considere un ejemplo en el que tenemos tres ejemplos de entrenamiento y tres clases para predecir: perro, gato y caballo. Debajo de los valores predichos por nuestro algoritmo para cada una de las clases: -
Pérdidas de bisagra de cálculo para los 3 ejemplos de entrenamiento: -
## 1er ejemplo de entrenamiento max ( 0, (1.49) - (-0.39) + 1) + max (0, (4.21) - (-0.39) + 1) max (0, 2.88) + max (0, 5.6) 2.88 + 5.6 8.48 (Pérdida alta como predicción incorrecta)
## 2. ° ejemplo de entrenamiento max (0, (-4.61) - (3.28) + 1) + max (0, (1,46) - (3,28) + 1) max (0, -6,89) + max (0, -0,82) 0 + 0 0 (Pérdida cero como predicción correcta) [19659014] ## Tercer ejemplo de entrenamiento max (0, (1.03) - (-2.27) + 1) + max (0, (-2.37) - (-2.27) + 1) max (0 , 4.3) + max (0, 0.9) 4.3 + 0.9 5.2 (Pérdida alta como predicción incorrecta)
Pérdida de entropía cruzada / Probabilidad de registro negativo
Esta es la la configuración más común para los problemas de clasificación. La pérdida de entropía cruzada aumenta a medida que la probabilidad prevista diverge de la etiqueta real.
Formulación matemática : -
Observe que cuando la etiqueta real es 1 (y ( i) = 1), la segunda mitad de la función desaparece, mientras que en el caso de que la etiqueta real sea 0 (y (i) = 0) se deja caer la primera mitad. En resumen, solo estamos multiplicando el registro de la probabilidad pronosticada real para la clase de verdad en el terreno. Un aspecto importante de esto es que la pérdida de entropía cruzada penaliza fuertemente las predicciones que son seguras pero erróneas .
import numpy as np
predictions = np.array ([[0.25,0.25,0.25,0.25]
[0.01,0.01,0.01,0.96]] )
targets = np.array ([[0,0,0,1]
[0,0,0,1]])
def cross_entropy (predictions, targets, epsilon = 1e-10):
predictions = np.clip (predictions, epsilon, 1 .-epsilon)
N = predictions.shape [0]
ce_loss = -np.sum (np.sum (targets * np.log (predicciones + 1e-5))) / N
return ce_loss
cross_entropy_loss = cross_entropy (predictions, targets)
print ("La pérdida de entropía cruzada es:" + str (cross_entropy_loss))
Las funciones de pérdida común en machine learning se publicó originalmente en Towards Data Science ] en Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.