Entendiendo la Pérdida de Clasificación, la Pérdida Contrastiva, la Pérdida de Márgenes, la Pérdida de Triplete, la Pérdida de Bisagra y todos esos nombres Confusos

Después del éxito de mi post Entendiendo la Pérdida de Entropía Cruzada Categórica, la Pérdida de Entropía Cruzada Binaria, la Pérdida de Softmax, la Pérdida Logística, la Pérdida Focal y todos esos nombres confusos, y después de verificar que la Pérdida de Triplete supera a la Pérdida de Entropía Cruzada en mi tema de investigación principal (Recuperación Multimodal), decidí escribir un post similar explicando las funciones de Pérdida de Clasificación.

Las pérdidas de clasificación se utilizan en diferentes áreas, tareas y configuraciones de redes neuronales (como Redes Siamesas o Redes Triples). Es por eso que reciben diferentes nombres, como Pérdida por Contraste, Pérdida de Margen, Pérdida de Bisagra o Pérdida de Triplete.

Funciones de Pérdida de Clasificación: Aprendizaje Métrico

A diferencia de otras funciones de pérdida, como la Pérdida de Entropía Cruzada o la Pérdida de Error Cuadrado Medio, cuyo objetivo es aprender a predecir directamente una etiqueta, un valor o un conjunto o valores dados a una entrada, el objetivo de las Pérdidas de Clasificación es predecir distancias relativas entre entradas. Esta tarea a menudo se llama aprendizaje métrico.

Las funciones de pérdida de clasificación son muy flexibles en términos de datos de entrenamiento: Solo necesitamos una puntuación de similitud entre los puntos de datos para usarlos. Esa puntuación puede ser binaria (similar / diferente). Por ejemplo, imagine un conjunto de datos de verificación de rostros, en el que sepamos qué imágenes de rostros pertenecen a la misma persona (similares) y cuáles no (diferentes). Usando una función de Pérdida de ranking, podemos entrenar a una CNN para inferir si dos imágenes de rostros pertenecen a la misma persona o no.

Para usar una función de pérdida de clasificación, primero extraemos entidades de dos (o tres) puntos de datos de entrada y obtenemos una representación incrustada para cada uno de ellos. Luego, definimos una función métrica para medir la similitud entre esas representaciones, por ejemplo, la distancia euclidiana. Finalmente, entrenamos a los extractores de características para producir representaciones similares para ambas entradas, en caso de que las entradas sean similares, o representaciones distantes para las dos entradas, en caso de que sean diferentes.
Ni siquiera nos importan los valores de las representaciones, solo las distancias entre ellas. Sin embargo, esta metodología de capacitación ha demostrado producir representaciones poderosas para diferentes tareas.

Formulación de Pérdidas de clasificación

Se utilizan diferentes nombres para clasificar las Pérdidas, pero su formulación es simple e invariante en la mayoría de los casos. Distinguimos dos tipos de Pérdidas de clasificación para dos configuraciones diferentes: Cuando usamos pares de puntos de datos de entrenamiento o trillizos de puntos de datos de entrenamiento.
Ambos comparan distancias entre representaciones de muestras de datos de entrenamiento.

Si prefieres el formato de video, hice un video con esta publicación. También disponible en español:

Pérdida de Clasificación por pares

Ejemplo de una configuración de pérdida de clasificación por pares para entrenar una red para la verificación de caras de imagen. En esta configuración, los pesos de los CNN se comparten. Lo llamamos redes siamesas. Pero una pérdida de clasificación por pares se puede usar en otras configuraciones o con otras redes.

Para pares positivos, la pérdida será \(0\) solo cuando la red produzca representaciones para ambos elementos del par sin distancia entre ellos, y la pérdida (y por lo tanto, la actualización de los parámetros netos correspondientes) aumentará con esa distancia.

Para pares negativos, la pérdida será \(0\) cuando la distancia entre las representaciones de los elementos de dos pares sea mayor que el margen \(m\). Pero cuando esa distancia no es mayor que \(m\), la pérdida será positiva, y los parámetros netos se actualizarán para producir una representación más distante para esos dos elementos. El valor de pérdida será como máximo \(m\), cuando la distancia entre \(r_a\) y \(r_n\) sea \(0\). La función del margen es que, cuando las representaciones producidas para un par negativo son lo suficientemente distantes, no se desperdician esfuerzos en ampliar esa distancia, por lo que el entrenamiento adicional puede enfocarse en pares más difíciles.

Pérdida de Clasificación de Triples

Ejemplo de una configuración de pérdida de clasificación de tripletes para entrenar una red para la verificación de caras de imagen. En esta configuración, los pesos de los CNN se comparten. Lo llamamos redes triples.

Vamos a analizar 3 situaciones de esta pérdida:

Fuente: https://omoindrot.github.io/triplet-loss. Representación de tres “tipos de negativos” para un par ancla y positivo.

Selección de negativos

Una decisión importante de un entrenamiento con Pérdida de Clasificación de Tripletes es la selección de negativos o la minería de tripletes. La estrategia elegida tendrá un gran impacto en la eficiencia de la capacitación y el rendimiento final. Una apreciación obvia es que se debe evitar el entrenamiento con trillizos fáciles, ya que su pérdida resultante será \(0\).

Las primeras estrategias utilizaron minería de trillizos fuera de línea, lo que significa que los trillizos se definen al comienzo del entrenamiento o en cada época. Más tarde, se propuso la minería de trillizos en línea, lo que significa que los trillizos se definen para cada lote durante el entrenamiento, lo que resultó en una mejor eficiencia y rendimiento del entrenamiento.
La forma óptima de selección de negativos depende en gran medida de la tarea. Pero no voy a entrar en esto en este post, ya que su objetivo es solo ver los diferentes nombres y enfoques para Clasificar las Pérdidas. Consulte la entrada de blog de Oliver moindrot para un análisis más profundo sobre la minería de tripletes.

La pérdida de triples en aprendizaje profundo se introdujo en el Aprendizaje de Similitud de imágenes de grano fino con Deep Ranking y FaceNet: Una Integración Unificada para Reconocimiento Facial y Agrupación en Clústeres.

Este github contiene algunas gráficas interesantes de un modelo entrenado en MNIST con Pérdida de Entropía Cruzada, Pérdida de Clasificación por Pares y Pérdida de Clasificación por Tripletes, y código Pytorch para esos entrenamientos.

Otros nombres utilizados para las Pérdidas de Clasificación

Las pérdidas de clasificación son esencialmente las explicadas anteriormente, y se utilizan en muchas aplicaciones diferentes con la misma formulación o variaciones menores. Sin embargo, se usan diferentes nombres para ellos, lo que puede ser confuso. Aquí explico por qué se usan esos nombres.

  • Pérdida de clasificación: Este nombre proviene del campo de recuperación de información, donde queremos entrenar a los modelos para clasificar los artículos en un orden específico.
  • Pérdida de margen: Este nombre proviene del hecho de que estas pérdidas utilizan un margen para comparar distancias de representaciones de muestras.
  • Pérdida contrastante: La pérdida contrastante se refiere al hecho de que estas pérdidas se calculan contrastando dos o más representaciones de puntos de datos. Este nombre se usa a menudo para la Pérdida de clasificación por pares, pero nunca he visto usarlo en una configuración con trillizos.
  • Pérdida de trillizos: A menudo se usa como nombre de pérdida cuando se emplean pares de entrenamiento de trillizos.
  • Pérdida de bisagra: También conocido como objetivo de margen máximo. Se utiliza para entrenar a los SVM para la clasificación. Tiene una formulación similar en el sentido de que optimiza hasta un margen. Es por eso que este nombre a veces se usa para clasificar las Pérdidas.

Las redes siamesas y triples

Las redes siamesas y triples son configuraciones de entrenamiento en las que se utilizan las Pérdidas de Clasificación por Parejas y las Pérdidas de Clasificación por Triples. Pero esas pérdidas también se pueden usar en otras configuraciones.
En estas configuraciones, las representaciones de las muestras de entrenamiento en el par o triplete se calculan con redes idénticas con pesos compartidos (con la misma CNN).

Las redes siamesas

están construidas por dos CNN idénticos con pesos compartidos (ambos CNN tienen los mismos pesos). Cada una de estas redes procesa una imagen y produce una representación. Esas representaciones se comparan y se calcula una distancia entre ellas. Luego, se usa una Pérdida de Clasificación por pares para entrenar la red, de modo que la distancia entre representaciones producidas por imágenes similares es pequeña, y la distancia entre representaciones de imágenes no similares es grande.

Dado que en una configuración de red siamesa las representaciones para ambos elementos en el par son calculadas por la misma CNN, siendo \(f (x)\) que CNN, podemos escribir la Pérdida de Clasificación por Pares como:

Redes Triples

La idea es similar a una red siamesa, pero una red triples tiene tres ramas (tres CNN con pesos compartidos). El modelo es entrenado dando simultáneamente una imagen positiva y una negativa a la imagen de anclaje correspondiente, y usando una Pérdida de Clasificación de Tripletes. Esto permite a la red aprender mejor qué imágenes son similares y diferentes a la imagen de anclaje.

En el caso de las redes triples, dado que se utiliza la misma CNN \(f(x)\) para calcular las representaciones de los tres elementos triples, podemos escribir la Pérdida de Clasificación de Triples como :

Pérdida de Clasificación para la Recuperación Multimodal

En mi investigación, he estado utilizando la Pérdida de Clasificación de Triples para la recuperación multimodal de imágenes y texto. Los datos de entrenamiento consisten en un conjunto de datos de imágenes con texto asociado. El objetivo es aprender incrustaciones de las imágenes y las palabras en el mismo espacio para la recuperación multimodal. Para hacer eso, primero aprendemos y congelamos incrustaciones de palabras únicamente del texto, utilizando algoritmos como Word2Vec o GloVe. Luego, nuestro objetivo es entrenar a una CNN para incrustar las imágenes en ese mismo espacio: La idea es aprender a incrustar una imagen y su leyenda asociada en el mismo punto del espacio de incrustación multimodal.

El primer enfoque para hacer eso, fue entrenar a una CNN para predecir directamente incrustaciones de texto de imágenes utilizando una Pérdida de Entropía Cruzada. Los resultados fueron agradables, pero más tarde descubrimos que el uso de un Triplete Los resultados de Pérdida de clasificación fueron mejores.

La configuración es la siguiente: Utilizamos incrustaciones de texto fijas (guante) y solo aprendemos la representación de la imagen (CNN). Por lo tanto, la muestra de anclaje \(a\) es la imagen, la muestra positiva \(p\) es el texto asociado a esa imagen, y la muestra negativa \(n\) es el texto de otra imagen “negativa”. Para elegir el texto negativo, exploramos diferentes estrategias de minería negativa en línea, utilizando las distancias en el espacio de los guantes con la incrustación de texto positivo. La minería de trillizos es particularmente sensible en este problema, ya que no hay clases establecidas. Dada la diversidad de las imágenes, tenemos muchos trillizos fáciles. Pero tenemos que ser cuidadosos en la minería de negativos duros, ya que el texto asociado a otra imagen también puede ser válido para una imagen de anclaje.

Entrenamiento de pérdida de clasificación de tripletes de una canalización de recuperación multimodal. Las incrustaciones de guante de texto son fijas, y entrenamos a la CNN para incrustar la imagen más cerca de su texto positivo que del texto negativo.

Usando esta configuración, calculamos algunos resultados cuantitativos para comparar el entrenamiento de Pérdida de Clasificación de Tripletes con el entrenamiento de Pérdida de Entropía Cruzada. No voy a explicar los detalles del experimento aquí, pero la configuración es la misma que la utilizada en (papel, blogpost). Básicamente, hacemos algunas consultas textuales y evaluamos el rendimiento de la imagen por recuperación de texto cuando aprendemos de los datos de las redes sociales de una manera auto supervisada. Los resultados con una Pérdida de Clasificación de Tripletes son significativamente mejores que con una Pérdida de Entropía Cruzada.

Recuperación de imágenes por texto precisión media en InstaCiones1M.

Otra ventaja de usar una Pérdida de Clasificación de Tripletes en lugar de una Pérdida de Entropía Cruzada o Pérdida de Error Cuadrado Medio para predecir incrustaciones de texto, es que podemos dejar de lado incrustaciones de texto pre-calculadas y fijas, que en el caso de regresión usamos como verdad de fondo para modelos out. Eso permite utilizar RNN, LSTM para procesar el texto, que podemos entrenar junto con la CNN, y que conducen a mejores representaciones.

Se utilizan enfoques similares para entrenar sistemas de recuperación multimodal y sistemas de subtítulos en COCO, por ejemplo aquí.

Clasificación de capas de pérdida en Marcos de Aprendizaje profundo

Caffe

  • Capa de Pérdida Constrastiva. Limitado al cálculo de Pérdidas de Clasificación por Pares. Se puede utilizar, por ejemplo, para entrenar redes siamesas.

  • Capa de Pérdida de Clasificación de Triplete PyCaffe. Por David Lu para entrenar redes de trillizos.

PyTorch

  • Coseno embebido en pérdida. Es una Pérdida de Clasificación en pares que usa la distancia de coseno como métrica de distancia. Las entradas son las características de los elementos del par, la etiqueta que indica si es un par positivo o negativo y el margen.

  • Pérdida marginal. Similar a la primera, pero utiliza la distancia euclidiana.

  • Un triple de pérdida de carga. Una Pérdida de Clasificación de Triples usando la distancia euclidiana.

Flujo tensor

  • pérdida de contraste. Pérdida de Clasificación Por Pares.

  • triplet_semihard_loss. Pérdida de triplete con minería negativa semiduro.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.