¿Qué es el aprendizaje profundo? Algoritmos que imitan el cerebro humano.

Definición de aprendizaje profundo

El aprendizaje profundo es una forma de aprendizaje automático que modela patrones en los datos como redes complejas de múltiples capas. Dado que el aprendizaje profundo es la forma 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 la programación convencional como 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, entrenar modelos de aprendizaje profundo requiere una gran cantidad de potencia informática. 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á entrenando tiene más de una capa oculta entre la entrada y la salida. En la mayoría de las discusiones, el aprendizaje profundo significa utilizar 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 versus aprendizaje automático

Mencioné que el aprendizaje profundo es una forma de aprendizaje automático. Me referiré al aprendizaje automático no profundo como aprendizaje automático clásico , 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 CPU a menudo serán suficientes para entrenar un modelo clásico. Los modelos de aprendizaje profundo a menudo necesitan aceleradores de hardware como GPU, TPU o FPGA para la capacitación y también para la implementación a escala. Sin ellos, los modelos tardarían meses en entrenarse.

Para muchos problemas, algún algoritmo clásico de aprendizaje automático producirá 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 (NLP) es bueno.

En el otoño de 2016, la calidad de la salida de Google Translate para los pares de idiomas inglés-francés, inglés-chino e inglés-japonés mejoró repentinamente de manera espectacular, desde crear una ensalada de palabras hasta producir oraciones cercanas a la calidad de una traducción profesional realizada por un humano. Lo que sucedió detrás de escena es que los equipos de Google Brain y Google Translate renovaron Google Translate de usar sus viejos algoritmos estadísticos de traducción automática basados ​​en frases (un tipo de aprendizaje automático clásico) a usar una red neuronal profunda entrenada con incrustaciones de palabras usando el marco TensorFlow de Google .

Ese no fue un proyecto fácil. Muchos investigadores con nivel de doctorado necesitaron meses de trabajo en modelos y miles de semanas de GPU para entrenar los modelos. También impulsó a Google a crear un nuevo tipo de chip, una Unidad de procesamiento de tensor (TPU), 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 resumen automático, resolución de co-referencias, análisis del discurso, segmentación morfológica, reconocimiento de entidades nombradas, generación de lenguaje natural, comprensión del lenguaje natural, etiquetado de parte del discurso, sentimiento análisis y reconocimiento de voz.

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 los mamíferos como modelo para las 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 1998 de Yann LeCun, una red neuronal convolucional (CNN) de siete niveles para el reconocimiento de dígitos escritos a mano digitalizados en imágenes de 32x32 píxeles. Para analizar imágenes de mayor resolución, la red LeNet-5 debería ampliarse a más neuronas y más capas.

Los mejores modelos de clasificación de imágenes profundas de hoy en día pueden identificar diversos catálogos de objetos con resolución HD en color. Además de las redes neuronales profundas puras (DNN), a veces las personas utilizan modelos de visión híbridos, 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 estilo 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 videoclips se pueden rastrear de un cuadro a otro.

Según Goodfellow, Bengio y Courville, escribiendo en 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 empresas farmacéuticas a diseñar nuevos medicamentos, buscar partículas subatómicas y analizar automáticamente las imágenes microscópicas utilizadas para construir un mapa tridimensional del cerebro humano.

Redes neuronales de aprendizaje profundo

Las ideas de 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 interruptores de umbral interconectados puede aprender a reconocer patrones de la misma manera que lo hace el cerebro y el sistema nervioso de un animal (incluida la retina).

Retropropagación

El aprendizaje en redes neuronales profundas se produce fortaleciendo 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 propagación inversa del 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 dispara cuando su entrada supera un valor de umbral.

Funciones de activación

En las décadas de 1940 y 1950, las neuronas artificiales usaban una función de activación escalonada y se llamaban perceptrones . Las redes neuronales modernas pueden decir que están usando perceptrones, pero en realidad tienen funciones de activación suave, como la función logística o sigmoidea, la tangente hiperbólica y la unidad lineal rectificada (ReLU). ReLU suele ser la mejor opción para una convergencia rápida, aunque tiene el problema de que las neuronas “mueren” durante el entrenamiento si la tasa de aprendizaje se establece demasiado alta.

La salida de la función de activación puede pasar a una función de salida para darle forma adicional. Sin embargo, a menudo, la función de salida es la función de identidad, lo que significa que la salida de la función de activación se pasa a las neuronas conectadas aguas abajo.

Topologías de redes neuronales

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

En una red de alimentación directa 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.

Formación

El aprendizaje supervisado de una red neuronal se realiza como cualquier otro aprendizaje automático. 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 las correcciones se denominan épocas.

Para aquellos interesados ​​en los detalles, la propagación inversa usa 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 tasa de aprendizaje, que generalmente debe ser pequeña para garantizar la convergencia y evitar la muerte de las neuronas ReLU.

Optimizadores

Los optimizadores para redes neuronales suelen utilizar algún tipo de algoritmo de descenso de gradiente para impulsar la propagación hacia atrás, a menudo con un mecanismo para ayudar a evitar quedarse atascado en mínimos locales, como optimizar mini lotes seleccionados al azar (descenso de gradiente estocástico) y aplicar correcciones de impulso al gradiente . Algunos algoritmos de optimización también adaptan las tasas de aprendizaje de los parámetros del modelo al observar el historial del gradiente (AdaGrad, RMSProp y Adam).

Al igual que con todo el aprendizaje automático, debe comparar las predicciones de la red neuronal con un conjunto de datos de validación separado. Sin hacer eso, corre el riesgo de crear redes neuronales que solo memoricen sus entradas en lugar de aprender a ser predictores generalizados.

DNN reales

Una red neuronal 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 tomará calcular y más difícil será 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 lenguaje natural y otros procesos de secuencia, 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 variedad de problemas de clasificación y regresión.

Redes neuronales CNN

Las redes neuronales convolucionales suelen utilizar capas convolucionales, agrupadas, ReLU, totalmente 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 reducción de resolución no lineal. Las capas ReLU aplican la función de activación no saturante 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 de la red penaliza la desviación entre las etiquetas predichas y verdaderas, usando una función de pérdida de entropía cruzada o Softmax 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 alimentación hacia adelante, la información fluye desde la entrada, a través de las capas ocultas, hasta la salida. Esto limita la red a lidiar con un solo estado a la vez.

En las redes neuronales recurrentes, la información recorre un ciclo, lo que permite a la red recordar salidas anteriores recientes. Esto permite el análisis de secuencias y series de tiempo. Los RNN tienen dos problemas comunes: gradientes explosivos (que se solucionan fácilmente sujetando los gradientes) y gradientes que desaparecen (no tan fáciles de arreglar).

En los LSTM, la red es capaz de olvidar (activar) información previa o recordarla, en ambos casos alterando los pesos. Esto efectivamente le da a un LSTM memoria tanto a largo como a corto plazo y resuelve el problema del gradiente que desaparece. Los LSTM pueden manejar 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 lidiar con 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 bosque aleatorio o bosque de decisión aleatoria. 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 genera 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 agregación bootstrap (también conocido como ensacado ) para árboles individuales y tomar subconjuntos aleatorios de las características.

Marcos de aprendizaje profundo

Si bien puede escribir programas de aprendizaje profundo desde los primeros principios, es mucho más eficiente usar marcos de aprendizaje profundo, especialmente dado que se han optimizado para su uso con GPU 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 usar con otros marcos de back-end.

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

MXNet, de Amazon y otros, es otra alternativa sólida a TensorFlow, con el pretexto 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 admite redes neuronales dinámicas.

Si bien todos los marcos mencionados anteriormente son principalmente Python, Deeplearning4j (DL4J), originalmente de Skymind y ahora un proyecto de 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.