Saltar para o conteúdo

Technical

Incorporar Conocimiento del Dominio

Paulo Maia · 17 de febrero de 2021

En los tiempos pasados, trabajar como Ingeniero de Machine Learning significaba dedicar el 95% del tiempo a la ingeniería de características y el 5% al entrenamiento de modelos con las características extraídas. Este era un proceso intensivo y laborioso que generalmente resultaba en pruebas de concepto poco flexibles y difíciles de adaptar a nuevas situaciones. Afortunadamente, el Deep Learning llegó en auxilio, y ahora, utilizando grandes volúmenes de datos y preprocesamiento simple, es posible entrenar algoritmos que producen predicciones mejores que los enfoques clásicos.

Para entender mejor este cambio de paradigma, le presentamos el siguiente ejemplo. Imagine que debe crear un modelo para identificar la especie de una planta basándose en la imagen de una hoja. Utilizando la metodología anterior, las tareas de visión por computadora necesarias para extraer características relevantes parecerían una lista interminable: eliminación de fondo, aplicación de filtros de detección de bordes, aplicación de filtros de características texturales, cálculo de distribuciones de color, cálculo de la forma del contorno de la hoja, detección, enmascaramiento y extracción de características de las venas de la hoja, etc. Después de aplicar el preprocesamiento, estas características estarían listas para alimentar su clasificador. Para obtener las características correctas y un clasificador preciso, necesitaría semanas o incluso meses de trabajo intensivo.

Actualmente, para obtener los mismos resultados o incluso mejores, solo necesita utilizar una Red Neuronal Convolucional preentrenada y ajustarla con sus imágenes y etiquetas. Este proceso puede completarse en una sola tarde.

El Deep Learning nos trajo una nueva era tecnológica. Con poco esfuerzo, podemos construir modelos que funcionan mejor que los humanos, y la palabra clave para lograrlo es datos. Pero ¿y si solo tenemos algunos miles de puntos de datos? ¿Y si nuestros datos no representan adecuadamente la población? ¿Y si el conocimiento humano sobre el negocio es mayor que nuestros datos? En ese momento, es hora de Incorporar Conocimiento del Dominio en nuestras Redes Neuronales Profundas (DNN).

Al Incorporar Conocimiento del Dominio, encontramos un punto medio donde entendemos el negocio, entendemos la tecnología, y elevamos la tecnología al servicio del negocio, en lugar de simplificar el negocio para adaptarlo a la tecnología.

Kelwin Fernandes

Curso

The ABCs of Machine Learning

Adentre en los fundamentos del Machine Learning con nuestro curso.

Más información

Agregar Invariancias con Data Augmentation

Como ya sabemos, cuanto más datos tenemos, mejor funcionan las Redes Neuronales Densas (DNN). Esto ocurre porque no le explicamos a nuestras DNN cómo deben aprender las cosas, simplemente hacen sus inferencias a partir de lo que ven.

Por ejemplo, si queremos entrenar un modelo para detectar gatos, no le decimos al modelo que busque un pequeño mamífero con cuatro patas, bigotes, cola larga, orejas puntiagudas, y con o sin pelaje. En su lugar, les mostramos imágenes de diferentes gatos y el modelo comienza a aprender cómo se ve un gato. Sin embargo, si solo estamos mostrando imágenes de gatos negros o gatos sentados en un sofá, nuestro modelo podría "pensar" que esas características son relevantes para detectar un gato y no podrá detectar gatos cuando esas condiciones no estén presentes.

En este ejemplo, queremos construir un modelo invariante al color, fondo, postura del gato y cualquier otra condición que no sea relevante para la tarea de detección de gatos, utilizando pequeñas cantidades de datos. Una forma de hacer esto es utilizando Data Augmentation.

Con Data Augmentation, podemos usar la misma imagen una y otra vez, aplicando transformaciones aleatorias o específicas que no comprometan la tarea. De esta forma, si queremos construir un modelo invariante a ciertas condiciones, debemos manipular esas condiciones en los datos originales para crear nuevos puntos de datos.

Utilizando el ejemplo de detección de gatos, para hacer nuestro modelo invariante, podríamos aplicar diferentes transformaciones a las imágenes, por ejemplo, zoom hacia afuera, distorsión, rotación, manipulación de contraste, manipulación de brillo, manipulación de fondo (sustrayendo el fondo original y utilizándolo como pantalla azul para nuevos contextos). Con estas transformaciones, es más fácil para el modelo aprender qué es relevante y qué no.

¿Qué no hacer? Recuerde, Data Augmentation es relevante para proporcionar Conocimiento del Dominio al modelo, por lo tanto, sea inteligente al aplicarlo. No aplique transformaciones aleatorias solo para aumentar el número de puntos de datos. En su lugar, asegúrese de que las transformaciones que está aplicando tengan sentido dentro de su dominio. Por ejemplo, cuando aplique zoom a sus imágenes, no haga zoom demasiado grande o podría eliminar el gato de la imagen. Tampoco haga zoom demasiado pequeño o terminará con un par de píxeles representando a su gato.

Además de Data Augmentation, también puede utilizar Output Augmentation. Este enfoque consiste en utilizar datos aumentados como entrada y el promedio de predicción de esos datos como salida. De esta forma, la predicción final no está condicionada por varianzas de entrada.

Agregar Invariancias con DNN Personalizado

Otra forma de agregar invariancias a los modelos DNN es manipulando la propia Red Neuronal, lo que puede hacerse utilizando diferentes enfoques. En este artículo, le presentamos 3 ejemplos de personalización de DNN mediante la manipulación de la función de pérdida, kernels y arquitecturas.

Manipulación de la Función de Pérdida

La función de pérdida se utiliza para penalizar al modelo cuando se desvía del objetivo. En este caso, nuestro objetivo es obtener predicciones precisas e invariantes. Por lo tanto, podemos utilizar la función de pérdida a nuestro favor penalizando varianzas. Por ejemplo, utilizar una función de pérdida de esta forma (f(x) – f(ax+b))^2, donde x es el valor de la característica, ayuda al modelo a ser invariante a transformaciones lineales.

Manipulación de Kernels

En la sección anterior, vimos que podemos agregar invariancias a iluminación y contraste con Data Augmentation. Otra forma de agregar estas invariancias es aplicar normalización local. Podemos hacer esto mediante preprocesamiento o manipulación de algunos kernels de CNN para realizar normalización local y congelar esa o esas capas durante el entrenamiento.

Arquitecturas Personalizadas

Una invariancia difícil de agregar en CNN está relacionada con la postura. Una representación 2D de un objeto 3D siempre está asociada con una postura, es decir, una traslación y una rotación. Este concepto no es nuevo para el cerebro humano, que puede deconstruir una representación 2D e identificarla con objetos en el mundo real (3D). De hecho, nuestro cerebro está tan acostumbrado a realizar Gráficos Inversos que incluso se deja engañar por ilusiones ópticas.

Por el contrario, las CNN no pueden hacer estas asociaciones espaciales, ya que parte de esa información se pierde con el max pooling. Para resolver este problema, Geoffrey Hinton creó una novedosa arquitectura CNN donde las neuronas se reemplazan por cápsulas, creando el concepto de Capsule Networks.

En esencia, las cápsulas realizan complejos cálculos internos y encapsulan la salida en forma de vector. Este vector tiene una dirección y una magnitud; la magnitud representa la probabilidad de que cierta entidad esté presente y la dirección representa características espaciales incluyendo postura, iluminación y deformación.

Actualmente, el costo computacional para entrenar una Capsule Network es demasiado alto para computadoras personales, pero manténgase atento y continúe buscando arquitecturas que mejor se adapten a sus necesidades.

Agregar Invariancias de Grupo

En algunos casos, podría tener varianzas relacionadas con algunos grupos (raza, género, edad, país). La asociación del punto de datos con uno o más de estos grupos podría ser irrelevante para su modelo o incluso injusta. Para evitar esto, una opción es realizar un enfoque de Average Voting que asegure invariancia de grupo. También puede consultar nuestra charla sobre Fairness in AI para más sugerencias.

Como se muestra en la imagen anterior, este método consta de dos partes. Primero, entrene un modelo diferente para cada grupo y luego calcule la predicción promedio para obtener el resultado final.

De esta forma, tenemos modelos variantes combinados para calcular una predicción invariante.

Eliminar Invariancias

En las secciones anteriores, vimos cómo agregar invariancia a DNN. Sin embargo, existe una invariancia que ya está integrada en las CNN, debido a su arquitectura: invariancia traslacional. Esta característica podría ser útil para una gran cantidad de tareas. No obstante, en algunos casos, es relevante conocer la posición del objeto en relación con la imagen.

Por ejemplo, en colposcopia, cada imagen está centrada dentro del cuello uterino, es decir, el contorno de las imágenes del conjunto de datos es muy similar. Además, para este examen, el área más relevante es el cuello uterino en sí. Por lo tanto, para esta tarea, es útil conocer la ubicación de los píxeles.

Para evitar que los kernels convolucionales ignoren la información de posición, podemos pasar esa información a CNN como canales adicionales. Por ejemplo, agregando 3 canales adicionales donde cada píxel tomaría el valor de su fila, su columna y su distancia al centro, respectivamente.

Forzar Comportamiento Monótono

En este punto, ya hemos visto cómo agregar invariancias a las DNN y cómo eliminarlas a nuestro favor. En esta sección, veremos cómo manipular las varianzas del modelo.

En algunos problemas, tenemos suficiente Conocimiento del Dominio para saber qué esperar cuando se modifica cierta característica. Por ejemplo, en pronóstico de ventas, cuando nada más cambia, es seguro asumir que una disminución de precio llevará a un aumento de ventas.

Sin embargo, en datos del mundo real, hay más de una única característica siendo modificada, lo que hace más difícil para el algoritmo aprender esas correlaciones esperadas. Por ejemplo, en el sector hotelero, durante la alta temporada, generalmente tanto los precios como las ventas aumentan. Sin embargo, aquí no hay una relación de causa-efecto. En este caso, ambos efectos son causados por una mayor demanda.

Para ayudar al modelo a comprender mejor estas correlaciones, podemos obligarlo a tener un Comportamiento Monótono. Wilson Silva, et al. propusieron una metodología efectiva e intuitiva para lograrlo en un artículo con nuestra colaboración. Su enfoque consiste en separar características monótonas de características sin restricciones y hacer que sigan dos flujos diferentes, como se muestra en la figura a continuación. Un flujo está diseñado para características sin restricciones y consiste en una DNN convencional. El segundo flujo, diseñado para características monótonas, consiste en una DNN donde los pesos fueron forzados a ser positivos. Al final, los dos flujos independientes se concatenan para dar el resultado final.

Volviendo al ejemplo anterior, con este enfoque, podemos garantizar que un aumento de precio siempre influirá negativamente en el pronóstico de ventas, sin importar la temporada o la excepción en los datos de entrenamiento.

¡Tenga cuidado al utilizar esta técnica! Recuerde que está pasando Conocimiento del Dominio, no fuerce comportamiento monótono si no está 100% seguro del efecto de las características.

Curso

The Machine Learning Spectrum

Para dominar más estrategias de Machine Learning, consulte nuestro curso.

Más información

Conclusión

¿Revolucionó el Deep Learning la inteligencia artificial? ¡Sí! ¿Es ahora más fácil obtener mejores predicciones con menos esfuerzo? ¡También sí! ¿Es posible que un mono entrene una DNN? Algunos podrían responder "sí" a esta pregunta, pero esa no es nuestra opinión. Las DNN nunca deben tratarse como cajas negras; en su lugar, debemos entender lo que realmente sucede dentro de ellas para obtener el máximo provecho.

Además, ¡nunca subestime la inteligencia humana y el conocimiento del dominio! Combínelos con sus modelos para mejorarlos y mejorarse a sí mismo.

Si usted es un desarrollador, ¡no olvide probarlo en casa!

Si desea integrar Conocimiento del Dominio, pero los enfoques anteriores no se adaptan a su problema, contáctenos, y encontremos una solución juntos.

¿Desea discutir esta idea con más detalle?

Programe una reunión con Rafael Cavalheiro

Conozca a Rafael Más información