Llegamos a ustedes gracias a:



Reportajes y análisis

Todo sobre el aprendizaje profundo

[07/06/2019] El aprendizaje profundo es una forma de aprendizaje automático que modela patrones de datos como redes complejas y de múltiples capas. Debido a que el aprendizaje profundo es la manera más general de modelar un problema, tiene el potencial de resolver problemas difíciles -como la visión por computadora y el procesamiento del lenguaje natural- que superan tanto a la programación convencional como a otras técnicas de aprendizaje automático.

El aprendizaje profundo no solo puede producir resultados útiles donde otros métodos fallan, sino que también puede construir modelos más precisos que otros métodos, y puede reducir el tiempo necesario para construir un modelo útil. Sin embargo, la formación de modelos de aprendizaje profundo requiere una gran cantidad de potencia de cálculo. Otro inconveniente del aprendizaje profundo es la dificultad de interpretar los modelos de aprendizaje profundo.

La característica definitoria del aprendizaje profundo es que el modelo que se está formando tiene más de una capa oculta entre la entrada y la salida. En la mayoría de las discusiones, el aprendizaje profundo significa el uso de redes neuronales profundas. Sin embargo, existen algunos algoritmos que implementan el aprendizaje profundo utilizando otros tipos de capas ocultas además de las redes neuronales.

Aprendizaje profundo vs. aprendizaje automático

Mencioné que el aprendizaje profundo es una forma de aprendizaje automático. Me referiré al aprendizaje no profundo de la máquina como aprendizaje clásico de la máquina, para ajustarse al uso común.

En general, los algoritmos clásicos de aprendizaje automático se ejecutan mucho más rápido que los algoritmos de aprendizaje profundo; una o más CPUs a menudo serán suficientes para entrenar un modelo clásico. Los modelos de aprendizaje profundo a menudo necesitan aceleradores de hardware como GPUs, TPUs o FPGAs para la formación, y también para su despliegue a escala. Sin ellos, los modelos tardarían meses en entrenarse.

Para muchos problemas, algunos algoritmos clásicos de aprendizaje de máquinas producirán un modelo "suficientemente bueno". Para otros problemas, los algoritmos clásicos de aprendizaje automático no han funcionado muy bien en el pasado.

Aplicaciones de aprendizaje profundo

Hay muchos ejemplos de problemas que actualmente requieren un aprendizaje profundo para producir los mejores modelos. El procesamiento del lenguaje natural (PNL, por sus siglas en inglés) es bueno.

En el otoño del 2016, la calidad de la traducción de Google Translate para las combinaciones de inglés-francés, inglés-chino e inglés-japonés mejoró drásticamente, pasando de crear una ensalada de palabras, a producir frases cercanas a la calidad de una traducción profesional realizada por un humano. Lo que ocurrió entre bastidores es que los equipos de Google Brain y Google Translate renovaron Google Translate, pasando de utilizar sus antiguos algoritmos de traducción automática estadística basada en frases (un tipo de aprendizaje automático clásico) a utilizar una red neuronal profunda formada con incrustaciones de palabras utilizando el marco TensorFlow de Google.

No fue un proyecto fácil. A muchos investigadores de nivel doctoral les llevó meses de trabajo en modelos y miles de semanas en la GPU para entrenar a los modelos. También alentó a Google a crear un nuevo tipo de chip, una unidad de procesamiento de tensores (TPU, por sus siglas en inglés), para ejecutar redes neuronales a escala para Google Translate.

Además del problema de traducción de idiomas abordado por Google Translate, las principales tareas de PNL incluyen el resumen automático, la resolución de co-referencias, el análisis del discurso, la segmentación morfológica, el reconocimiento de entidades con nombre, la generación de lenguaje natural, la comprensión del lenguaje natural, el etiquetado de parte del habla, el análisis de sentimientos y el reconocimiento del habla.

Otro buen ejemplo de la aplicación del aprendizaje profundo es la clasificación de imágenes. Debido a que los organismos vivos procesan imágenes con su corteza visual, muchos investigadores han tomado la arquitectura de la corteza visual de mamíferos como modelo para redes neuronales diseñadas para realizar el reconocimiento de imágenes. La investigación biológica se remonta a la década de 1950.

El gran avance en el campo de la red neuronal para la visión fue LeNet-5 de Yann LeCun en 1998, una red neuronal convolucional de siete niveles (CNN) para el reconocimiento de dígitos manuscritos digitalizados en imágenes de 32x32 píxeles. Para analizar imágenes de mayor resolución, la red LeNet-5 necesitaría ser expandida a más neuronas y más capas.

Los mejores modelos de clasificación de imágenes en profundidad de hoy en día pueden identificar diversos catálogos de objetos con resolución HD en color. Además de las redes neuronales puras y profundas (DNNs), a veces la gente utiliza modelos de visión híbrida, que combinan el aprendizaje profundo con algoritmos clásicos de aprendizaje automático que realizan subtareas específicas.

Otros problemas de visión, además de la clasificación básica de imágenes, que se han resuelto con el aprendizaje profundo incluyen la clasificación de imágenes con localización, detección de objetos, segmentación de objetos, transferencia de estilos de imágenes, coloración de imágenes, reconstrucción de imágenes, superresolución de imágenes y síntesis de imágenes.

La clasificación de imágenes se puede ampliar a la clasificación de video extrayendo los fotogramas individuales de un video y clasificando cada fotograma. Los objetos detectados en los clips de video se pueden seguir de fotograma a fotograma.

Según Goodfellow, Bengio y Courville, que escriben en el 2016, el aprendizaje profundo se ha utilizado con éxito para predecir cómo interactuarán las moléculas con el fin de ayudar a las compañías farmacéuticas a diseñar nuevos fármacos, a buscar partículas subatómicas y a analizar automáticamente las imágenes de microscopios utilizadas para construir un mapa tridimensional del cerebro humano.

Redes neuronales de aprendizaje profundo

Las ideas de las redes neuronales "artificiales" se remontan a la década de 1940. El concepto esencial es que una red de neuronas artificiales construida a partir de conmutadores de umbral interconectados, puede aprender a reconocer patrones de la misma manera que lo hacen el cerebro y el sistema nervioso de un animal (incluyendo la retina).

Backpropagation: El aprendizaje en redes neuronales profundas ocurre al fortalecer la conexión entre dos neuronas cuando ambas están activas al mismo tiempo durante el entrenamiento. En el software moderno de redes neuronales, esto es más comúnmente una cuestión de aumentar los valores de peso para las conexiones entre neuronas usando una regla llamada backpropagation of error, backprop, o BP.

Neuronas: ¿Cómo se modelan las neuronas? Cada uno tiene una función de propagación que transforma las salidas de las neuronas conectadas, a menudo con una suma ponderada. La salida de la función de propagación pasa a una función de activación, que se activa cuando su entrada supera un valor umbral.

Funciones de activación: En las décadas de 1940 y 1950, las neuronas artificiales utilizaron una función de activación escalonada y se denominaron perceptrones. Las redes neurales modernas pueden decir que están usando percepciones, pero en realidad tienen funciones de activación suave, como la función logística o sigmoide, la tangente hiperbólica y la Unidad Lineal Rectificada (ReLU, por sus siglas en inglés). ReLU es generalmente la mejor opción para la convergencia rápida, aunque tiene un problema de neuronas "muriendo" durante el entrenamiento, si el ritmo de aprendizaje se establece demasiado alto.

La salida de la función de activación puede pasar a una función de salida para dar forma adicional. A menudo, sin embargo, la función de salida es la función de identidad, lo que significa que la salida de la función de activación es pasada a las neuronas conectadas aguas abajo.

Topologías de redes neuronales: Ahora que conocemos las neuronas, necesitamos aprender sobre las topologías de la red neuronal común. En una red de retroalimentación, las neuronas están organizadas en distintas capas: una capa de entrada, cualquier número de capas de procesamiento ocultas y una capa de salida, y las salidas de cada capa van solo a la siguiente capa.

En una red de feed-forward con conexiones de acceso directo, algunas conexiones pueden saltar sobre una o más capas intermedias. En las redes neuronales recurrentes, las neuronas pueden influirse a sí mismas, ya sea directa o indirectamente a través de la siguiente capa.

Entrenamiento: El aprendizaje supervisado de una red neuronal se realiza como cualquier otra máquina de aprendizaje. Presenta la red con grupos de datos de entrenamiento, compara la salida de la red con la salida deseada, genera un vector de error y aplica correcciones a la red basadas en el vector de error. Los lotes de datos de entrenamiento que se ejecutan juntos antes de aplicar correcciones se denominan épocas.

Para aquellos interesados en los detalles, la retropropagación utiliza el gradiente de la función de error (o costo) con respecto a los pesos y sesgos del modelo para descubrir la dirección correcta para minimizar el error. Dos cosas controlan la aplicación de las correcciones: el algoritmo de optimización y la variable de velocidad de aprendizaje, que normalmente necesita ser pequeña para garantizar la convergencia y evitar causar neuronas ReLU muertas.

Optimizadores: Los optimizadores de redes neuronales suelen utilizar algún tipo de algoritmo de descenso de gradiente para impulsar la retropropagación, a menudo con un mecanismo que ayuda a evitar atascarse en los mínimos locales, como la optimización de minitrabajos seleccionados al azar (Descenso de Gradiente Estocástico), y la aplicación de correcciones de momento al gradiente. Algunos algoritmos de optimización también adaptan las tasas de aprendizaje de los parámetros del modelo, observando el historial de gradientes (AdaGrad, RMSProp y Adam).

Al igual que con todo el aprendizaje de máquina, es necesario comprobar las predicciones de la red neuronal con un conjunto de datos de validación separado. Sin hacer eso se corre el riesgo de crear redes neuronales que solo memorizan sus entradas, en lugar de aprender a ser predictores generalizados.

DNNs de verdad: Una red neural profunda para un problema real puede tener más de 10 capas ocultas. Su topología puede ser simple o bastante compleja.

Cuantas más capas haya en la red, más características podrá reconocer. Desafortunadamente, cuantas más capas haya en la red, más tiempo se tardará en calcular y más difícil será de entrenar.

Algoritmos de aprendizaje profundo

Como mencioné anteriormente, la mayor parte del aprendizaje profundo se realiza con redes neuronales profundas. Las redes neuronales convolucionales (CNN) se utilizan a menudo para la visión artificial. Las redes neuronales recurrentes (RNN) se utilizan a menudo para el procesamiento de lenguaje natural y otras secuencias, al igual que las redes de memoria a corto plazo (LSTM) y las redes neuronales basadas en la atención. Los bosques aleatorios, también conocidos como bosques de decisión aleatoria, que no son redes neuronales, son útiles para una serie de problemas de clasificación y regresión.

Redes neurales de CNN: Las redes neuronales convolucionales suelen utilizar capas convolucionales, pooling, ReLU, completamente conectadas y de pérdida, para simular una corteza visual. La capa convolucional básicamente toma las integrales de muchas pequeñas regiones superpuestas. La capa de agrupación realiza una forma de remuestreo no lineal. Las capas ReLU aplican la función de activación sin saturación f(x) = max(0,x). En una capa completamente conectada, las neuronas tienen conexiones con todas las activaciones de la capa anterior. Una capa de pérdida calcula cómo el entrenamiento en red penaliza la desviación entre las etiquetas predichas y las verdaderas, utilizando una función de pérdida Softmax o cruzada para la clasificación, o una función de pérdida euclidiana para la regresión.

RNN, LSTM y redes neuronales basadas en la atención: En las redes neuronales de retroalimentación, la información fluye desde la entrada, a través de las capas ocultas, hasta la salida. Esto limita la red a tratar con un solo estado a la vez.

En las redes neuronales recurrentes, la información circula a través de un bucle, lo que permite que la red recuerde las salidas anteriores recientes. Esto permite el análisis de secuencias y series temporales. Los RNNs tienen dos problemas comunes: los gradientes de explosión (que se fijan fácilmente sujetando los gradientes), y los gradientes de desaparición (que no son tan fáciles de fijar).

En los LSTMs, la red es capaz de olvidar información previa o recordarla, en ambos casos alterando los pesos. Esto le da a un LSTM una memoria a largo y corto plazo, y resuelve el problema del gradiente de fuga. Los LSTMs pueden tratar con secuencias de cientos de entradas pasadas.

Los módulos de atención son puertas generalizadas que aplican pesos a un vector de entradas. Un codificador de atención neuronal jerárquico utiliza múltiples capas de módulos de atención para tratar decenas de miles de entradas pasadas.

Bosques al azar: Otro tipo de algoritmo de aprendizaje profundo, que no es una red neuronal profunda, es el Random Forest, o Random Decision Forest. Un bosque aleatorio se construye a partir de muchas capas; pero en lugar de neuronas, se construye a partir de árboles de decisión, y produce un promedio estadístico (modo de clasificación o media de regresión) de las predicciones de los árboles individuales. Los aspectos aleatorios de Random Forests son el uso de la agregación de bootstrap (también conocida como empaquetamiento) para árboles individuales y la toma de subconjuntos aleatorios de las características.

Marcos de aprendizaje profundo

Aunque se pueden escribir programas de aprendizaje profundo a partir de principios básicos, es mucho más eficaz utilizar marcos de aprendizaje profundo, especialmente si se tiene en cuenta que se han optimizado para su uso con GPUs y otros aceleradores. El marco preeminente es TensorFlow, que se originó en Google. La API de alto nivel preferida para TensorFlow es Keras, que también se puede utilizar con otros frameworks de back-end.

PyTorch, de Facebook y otros, es una fuerte alternativa a TensorFlow, y tiene la distinción de soportar redes neuronales dinámicas, en las que la topología de la red puede cambiar de época en época. Fastai es una API de alto nivel de terceros que utiliza PyTorch como back-end.

MXNet, de Amazon y otros, es otra fuerte alternativa a TensorFlow, con la pretensión de una mejor escalabilidad. Gluon es la API imperativa de alto nivel preferida para MXNet.

Chainer, de IBM, Intel y otros, fue de alguna manera la inspiración para PyTorch, dado que define la red neuronal por ejecución y soporta redes neuronales dinámicas.

Mientras que todos los frameworks mencionados anteriormente son principalmente Python, Deeplearning4j (DL4J), originalmente de Skymind y ahora un proyecto Apache, es principalmente Java y Scala. DL4J es compatible con Apache Spark y Hadoop.

ONNX se propuso originalmente como un ecosistema abierto para modelos de IA intercambiables. ONNX ahora tiene un tiempo de ejecución además del formato de archivo de intercambio.

TensorRT, de Nvidia, es otro tiempo de ejecución para los modelos de IA, específicamente para aprovechar las GPUs de Nvidia. El tiempo de ejecución ONNX puede utilizar TensorRT como plug-in.

Aprendizaje de transferencia profunda

El aprendizaje de transferencia es el proceso de adaptar un modelo capacitado en un conjunto de datos, a otro conjunto de datos. El aprendizaje de transferencia es mucho más rápido que los modelos de formación desde cero, y requiere muchos menos datos para la formación.

Google Cloud AutoML implementa el aprendizaje de transferencia profunda para la visión, la traducción y el lenguaje natural. Azure Machine Learning Service ofrece servicios de aprendizaje de transferencia profunda similares a los de visión personalizada, habla y traducción personalizada y búsqueda personalizada.

Entrenamiento de aprendizaje profundo distribuido

Mientras que TensorFlow tiene su propia manera de coordinar la formación distribuida con los servidores de parámetros, un enfoque más general utiliza Open MPI (interfaz de paso de mensajes). Horovod, un marco de entrenamiento distribuido para TensorFlow, Keras y PyTorch que fue creado en Uber, utiliza Open MPI, así como Nvidia NCCL. Horovod alcanza una eficiencia de escalado de entre el 68% y el 90%, dependiendo del modelo que se esté entrenando.

Libros y recursos para el aprendizaje profundo

Puede aprender mucho sobre el aprendizaje profundo simplemente instalando uno de los paquetes de aprendizaje profundo, probando sus ejemplos y leyendo sus tutoriales. Para mayor profundidad, considere uno o más de los siguientes recursos.

Puede ver también