Esta respuesta está en el lado general de las funciones de costo, no está relacionada con TensorFlow, y abordará principalmente la parte de "alguna explicación sobre este tema" de su pregunta.
En la mayoría de los ejemplos / tutoriales que seguí, la función de costo utilizada fue algo arbitraria. El punto era más introducir al lector a un método específico, no a la función de costos específicamente. No debería detenerte seguir el tutorial para familiarizarte con las herramientas, pero mi respuesta debería ayudarte a elegir la función de costo para tus propios problemas.
Si desea respuestas sobre Cross-Entropy, Logit, normas L2, o cualquier cosa específica, le aconsejo que publique múltiples preguntas más específicas. Esto aumentará la probabilidad de que alguien con conocimiento específico vea tu pregunta.
Elegir la función de costo correcta para lograr el resultado deseado es un punto crítico de los problemas de aprendizaje automático. El enfoque básico, si no sabe exactamente lo que quiere de su método, es utilizar el error cuadrático medio (Wikipedia) para los problemas de regresión y el porcentaje de error para los problemas de clasificación. Sin embargo, si desea obtener buenos resultados de su método, debe definir buenos y, por lo tanto, definir la función de costo adecuada. Esto proviene tanto del conocimiento del dominio (cuáles son sus datos, qué está tratando de lograr) como del conocimiento de las herramientas a su disposición.
No creo que pueda guiarlo a través de las funciones de costo ya implementadas en TensorFlow, ya que tengo muy poco conocimiento de la herramienta, pero puedo darle un ejemplo sobre cómo escribir y evaluar diferentes funciones de costo.
Para ilustrar las diversas diferencias entre las funciones de costo, usemos el ejemplo del problema de clasificación binaria, donde queremos, para cada muestra , la clase .XnorteF( xnorte) ∈ { 0 , 1 }
Comenzando con propiedades computacionales ; cómo dos funciones que miden la "misma cosa" podrían conducir a resultados diferentes. Tome la siguiente función de costo simple; El porcentaje de error. Si tiene muestras, es la clase pronosticada y la clase verdadera, desea minimizarnorteF( ynorte)ynorte
- 1norte∑norte{ 10 0 si f( xnorte) ≠ ynorte de otra manera= ∑norteynorte[ 1 - f( xnorte) ] + [ 1 - ynorte] f( xnorte) .
Esta función de costo tiene el beneficio de ser fácilmente interpretable. Sin embargo, no es suave; si solo tiene dos muestras, la función "salta" de 0, a 0.5, a 1. Esto generará inconsistencias si intenta usar el descenso de gradiente en esta función. Una forma de evitarlo es cambiar la función de costo para usar las probabilidades de asignación; . La función se conviertep ( ynorte= 1 | Xnorte)
- 1norte∑norteynortep ( ynorte= 0 | Xnorte) + ( 1 - ynorte) p ( ynorte= 1 | Xnorte) .
Esta función es más suave y funcionará mejor con un enfoque de descenso de gradiente. Obtendrá un modelo 'más fino'. Sin embargo, tiene otro problema; Si tiene una muestra que es ambigua, supongamos que no tiene suficiente información para decir algo mejor que . Luego, el uso del descenso de gradiente en esta función de costo conducirá a un modelo que aumenta esta probabilidad tanto como sea posible y, por lo tanto, tal vez, sobreajuste.p ( ynorte= 1 | Xnorte) = 0.5
Otro problema de esta función es que si mientras , está seguro de que tiene razón, pero está equivocado. Para evitar este problema, puede tomar el registro de la probabilidad, . Como y , la siguiente función no tiene el problema descrito en el párrafo anterior:p ( ynorte= 1 | Xnorte) = 1ynorte= 0Iniciar sesiónp ( ynorteEl | Xnorte)Iniciar sesión( 0 ) = ∞Iniciar sesión( 1 ) = 0
- 1norte∑norteynorteIniciar sesiónp ( ynorte=0 | Xnorte) +( 1 - ynorte) registropags( ynorte= 1| Xnorte) .
Esto debería ilustrar que, para optimizar lo mismo , el porcentaje de error, las diferentes definiciones pueden producir resultados diferentes si son más fáciles de entender, computacionalmente.
Es posible que las funciones de costos y para medir el mismo concepto , pero podría dar lugar a su método de mejores resultados que .UNAsiA BUNAsi
Ahora veamos cómo funcionan los diferentes costos pueden medir diferentes conceptos. En el contexto de la recuperación de información, como en la búsqueda de Google (si ignoramos la clasificación), queremos que los resultados devueltos
Tenga en cuenta que si su algoritmo devuelve todo , devolverá todos los resultados relevantes posibles y, por lo tanto, tendrá una alta recuperación, pero tendrá una precisión muy baja. Por otro lado, si devuelve solo un elemento, el que es más seguro es relevante, tendrá alta precisión pero baja recuperación.
Para juzgar tales algoritmos, la función de costo común es el puntaje (Wikipedia) . El caso común es el F_1, que otorga el mismo peso a la precisión y la recuperación, pero el caso general es el puntaje , y puede ajustar para obtenerFF1Fββ
- Mayor recuerdo, si usaβ> 1
- Mayor precisión, si usa .β< 1
En tal escenario, elegir la función de costo es elegir qué compensación debe hacer su algoritmo .
Otro ejemplo que a menudo se menciona es el caso del diagnóstico médico, puede elegir una función de costo que castigue más falsos negativos o falsos positivos dependiendo de lo que sea preferible:
- Más personas sanas se clasifican como enfermas (pero entonces, podríamos tratar a personas sanas, lo que es costoso y podría lastimarlas si en realidad no están enfermas)
- Más personas enfermas se clasifican como saludables (pero luego, podrían morir sin tratamiento)
En conclusión, definir la función de costo es definir el objetivo de su algoritmo. El algoritmo define cómo llegar allí.
Nota al margen: Algunas funciones de costo tienen buenas formas de algoritmo para alcanzar sus objetivos. Por ejemplo, existe una buena manera de minimizar la pérdida de Bisagra (Wikipedia) , resolviendo el problema dual en SVM (Wikipedia)