Hay muchas propiedades interesantes que se pueden obtener al combinar redes neuronales convolucionales (CNN) y redes neuronales recurrentes (RNN). Esa combinación hace uso de lo mejor de ambos mundos, el mundo espacial y el temporal.
Sin embargo, los RNN están completos, lo que significa que en realidad pueden aprender cualquier función computacional. Esto significa que, en teoría, no necesitamos combinar CNN con RNN para hacer las cosas, solo necesitamos el RNN. Pero, como de costumbre, en realidad necesitamos módulos especializados para señales específicas. Los CNN son buenos para tratar datos relacionados con el espacio, mientras que los RNN son buenos para las señales temporales, es solo el teorema de no almuerzo gratis en juego aquí.
Por lo tanto, los problemas en los que se requiere un par CNN-RNN son cuando se trata de:
- ¿Qué piensan los científicos de los expertos en SEO?
- ¿Dónde entran en juego las funciones de activación en una red neuronal de convolución?
- Tengo problemas para mejorar el rendimiento de mi red neuronal a medida que aumento el número de unidades, ¿cuál podría ser el problema?
- ¿Qué tecnología tiene un futuro mejor, el aprendizaje automático o Node.js?
- Podría ser el primer experto en aprendizaje automático en una empresa como consultor o a tiempo completo. En cualquier caso, ¿cuál debería ser mi tasa?
- Asignación de entradas de secuencia espacial a clases de salida estáticas.
- Asignación de entradas espaciales estáticas a salidas de secuencia (subtítulos de voz o texto)
En el primer caso, podemos tener una entrada de video y necesitamos clasificar ese video en una categoría de clase estática. Una aplicación particular sería el reconocimiento de la acción humana, a partir de una secuencia de cuadros de video que necesitamos para identificar la acción humana, como caminar, sentarse, saltar o correr. Podría ser posible que dicho sistema identifique los delitos en curso en tiempo real y cosas como la detección de disturbios solo a través de videos.
En el segundo caso, el par CNN-RNN puede alimentarse, por ejemplo, de una imagen estática, pero generar una salida de secuencia como voz o texto que describe el contenido de esa imagen estática. En aplicaciones como el subtitulado automático de imágenes [1], dichos sistemas necesitan describir el contenido de una imagen generando subtítulos de imagen.
En ambos casos, la CNN actúa como el detector de características entrenables para la señal espacial. Aprende potentes características convolucionales que operan en una entrada espacial estática (marco) mientras el RNN recibe una secuencia de tales representaciones de alto nivel para generar una descripción del contenido o mapear a alguna clase estática de salidas. En el subtitulado de imágenes, normalmente hay un mecanismo de atención incorporado para permitir que el sistema atienda ciertas partes de la imagen mientras genera los subtítulos.
En realidad, Facebook está trabajando en sistemas que pueden describir el contenido de la imagen a las personas ciegas que utilizan estos pares CNN-RNN. Aunque también es posible realizar subtítulos de imágenes con solo una arquitectura de red neuronal totalmente avanzada con un uso inteligente de las convoluciones en el tiempo. El uso de convoluciones en el tiempo no es propenso a los problemas de gradiente de explosión / desaparición encontrados en los RNN de vainilla.
En lugar de utilizar un RNN de vainilla típico, también se pueden utilizar redes de memoria a largo plazo a corto plazo (LSTM) o de unidad recurrente cerrada (GRU) para eliminar el problema de las dependencias a largo plazo. Lo que hace que los pares CNN-LSTM o CNN-GRU sean extremadamente poderosos al tratar con señales espacio-temporales.
También tenemos las llamadas redes neuronales convolucionales recurrentes (RCNN) que tienen conexiones recurrentes directamente en los núcleos mismos. Aunque este sistema puede sufrir la incapacidad de lidiar con dependencias a largo plazo al igual que los RNN de vainilla.
Espero que esto ayude.
Notas al pie
[1] Show and Tell: subtítulos de imágenes abiertos de origen en TensorFlow