Empezamos otra entrada hablando de otra parte importante en la construcción de modelos de inteligencia artificial, las funciones de pérdida.
En resumen, al entrenar un modelo, las funciones de perdida son las que miden la distancia que hay entre las predicciones del modelo y los resultados reales.
L1 o función de pérdida absoluta
Esta función de pérdida quizá es la más intuitiva, simplemente nos devuelve la distancia entre el valor real y la predicción. Se calcula siempre en valor absoluto. Veamos un ejemplo, si tengo como valor real el 3 y nuestro modelo predice un 5, nuestro error absoluto es | 3 – 5 | = 2, pero si nuestro modelo predice -10, nuestro error absoluto será de | 3 – (-10) | = 13. Lógicamente la segunda predicción es peor.
Ahora veámoslo con código:
En la gráfica anterior podemos ver como el error absoluto aumenta a medida que nos alejamos del 0.0 en el eje horizontal. Ahora veremos otra función muy parecida pero que suaviza la curva a medida que nos acercamos al 0.
L2 o función de pérdida del error cuadrático medio
En pocas palabras, L2 nos devuelve el cuadrado de la distancia que hay entre la predicción y el valor real. L2 no es mas que L1 al cuadrado. Imaginaros que el valor real es 4, nuestro modelo hace una predicción de 5, por tanto el error cuadrático es (4 – 5) ^2 = 1. Ahora imaginamos que nuestro modelo hace una predicción de 10, entonces el error cuadrático ahora será (4 – 10 ) ^2 = 36. Por supuesto que la segunda predicción es mucho peor que la anterior.
Vamos un poco de código:
Como podemos ver, hemos definido el valor real como 0, y hemos creado 1000 predicciones que van desde -1 hasta 1. Luego definimos L2 como el cuadrado de la diferencia entre el valor real y las predicciones. En la gráfica vemos como aumenta el error a medida que nos alejamos del 0 en el eje horizontal.
Diferencia entre L2 y L1 (Funciones de pérdida con TensorFlow)
Para verlo vamos a ampliar las predicciones entre -2 y 2 y cambiamos el valor real a 1:
Como podemos ver, al comparar L1 frente a L2 vemos que L2 es una función de pérdida más curvada cerca del valor real (en este caso 1.0) y por tanto los algoritmos usan este factor para converger al valor real más lento.
Pseudo-Huber Función de Pérdida
Continuando con las funciones de pérdida definimos esta función como:
En resumen esta función es como L2, pero nos permite modificar un poco la pendiente de la curva en valor lejanos al valor real, pudiendo hacer las pendientes un poco más horizontales, lo cual beneficiaría a nuestro algoritmo. El factor que nos ayudará a modificar esa pendiente es delta.
Vamos a crear una función que nos calculará la función de pérdida pseudo-huber donde le pasemos por parámetros un tensor con las predicciones, un valor de delta y el valor real.
De esta manera podemos usarla varias veces para poder comparar distintos valores de delta.
Veámoslo con código:
Ahora vamos a comparar la función pseudo-huber evaluada para delta = 1, delta = 50 y la función de pérdida L2 a ver si es verdad todo el rollo que os estoy contando jejeje
Como podemos ver en valores cercanos al valor real (en este caso 0.0), tanto L2 como pseudo-huber se comportan parecido, pero a medida que nos alejamos del valor real L2 adquire mucha mayor inclinación, mientras que a menor delta pseudo-huber tiene las ramas más horizontales.
Función de pérdida de bisagra
Definimos esta función como:
Esta función es frecuente utilizada en SVM (Support Vector Machine) que es un algoritmo de Inteligencia Artificial.
Veámosla en código:
Función de pérdida de entropía cruzada
LIBROS COMPLEMENTARIOS