Redes neuronales

 

¿Qué es una red neuronal?

Tres cosas que es necesario saber

Una red neuronal es un modelo de computación cuya estructura de capas se asemeja a la estructura interconectada de las neuronas en el cerebro, con capas de nodos conectados. Una red neuronal puede aprender de los datos, de manera que se puede entrenar para que reconozca patrones, clasifique datos y pronostique eventos futuros.

Las redes neuronales descomponen las entradas en capas de abstracción. Se pueden entrenar con muchos ejemplos para que reconozcan patrones de voz o en imágenes, por ejemplo, igual que el cerebro humano. Su comportamiento está definido por la forma en que se conectan sus elementos individuales, así como por la importancia (o ponderación) de dichas conexiones. Estas ponderaciones se ajustan automáticamente durante el entrenamiento de acuerdo con una regla de aprendizaje especificada hasta que la red neuronal lleva a cabo la tarea deseada correctamente.

¿Por qué son importantes las redes neuronales?

Las redes neuronales resultan especialmente adecuadas para llevar a cabo el reconocimiento de patrones a fin de identificar y clasificar objetos o señales en sistemas de voz, visión y control. También se pueden emplear para el modelado y la predicción de series temporales.

Estos son algunos ejemplos de uso de las redes neuronales:

  • Las compañías eléctricas pronostican la carga de sus redes con precisión para garantizar la fiabilidad y optimizar la eficiencia de los generadores eléctricos que utilizan.
  • Los cajeros automáticos pueden aceptar depósitos bancarios de forma fiable mediante la lectura del número de cuenta y del importe del depósito en un cheque.
  • Los patólogos confían en aplicaciones de detección de cáncer como guía a la hora de clasificar los tumores como benignos o malignos en función de la uniformidad del tamaño de las células, el grosor de la masa, la mitosis y otros factores.

Deep Learning

Las redes neuronales que operan en dos o tres capas de neuronas conectadas se conocen como redes neuronales superficiales. Las redes de deep learning pueden tener muchas capas, incluso cientos de ellas. Ambas son técnicas de machine learning que aprenden directamente de los datos introducidos.

El deep learning atrae mucha atención últimamente, y hay razones de peso para ello. Está consiguiendo resultados que antes no eran posibles.

El deep learning se adapta especialmente bien a aplicaciones de identificación complejas, tales como el reconocimiento facial, la traducción de textos y el reconocimiento de voz. También es una tecnología clave utilizada en sistemas y tareas avanzados de conducción asistida, que incluyen la asignación de carriles y el reconocimiento de señales de tráfico.

¿Cómo funcionan las redes neuronales?

Una red neuronal combina diversas capas de procesamiento y utiliza elementos simples que operan en paralelo, y están inspiradas en los sistemas nerviosos biológicos. Consta de una capa de entrada, una o varias capas ocultas y una capa de salida. Las capas están interconectadas mediante nodos, o neuronas; cada capa utiliza la salida de la capa anterior como entrada.

Arquitectura típica de una red neuronal.

Técnicas empleadas con las redes neuronales

Algunas técnicas habituales de machine learning para diseñar aplicaciones de redes neuronales son el aprendizaje supervisado y no supervisado, la clasificación, la regresión, el reconocimiento de patrones y el clustering.

Aprendizaje supervisado

Las redes neuronales supervisadas se entrenan para producir las salidas deseadas como respuesta a entradas de muestra, por lo que resultan idóneas para modelar y controlar sistemas dinámicos, clasificar datos con ruido y predecir eventos futuros. Deep Learning Toolbox™ incluye cuatro tipos de redes supervisadas: feedforward, de base radial, dinámicas y de cuantificación vectorial de aprendizaje.

Clasificación

La clasificación es un tipo de machine learning supervisado en el que un algoritmo “aprende” a clasificar nuevas observaciones a partir de ejemplos de datos etiquetados.

Regresión

Los modelos de regresión describen la relación entre una variable de respuesta (salida) y una o varias variables de predicción (entrada).

Reconocimiento de patrones

El reconocimiento de patrones es un componente importante de las aplicaciones de redes neuronales en visión artificial, procesamiento de radar, reconocimiento de voz y clasificación textual. Funciona mediante la clasificación de los datos de entrada en objetos o clases en función de características clave, ya sea mediante la clasificación supervisada o no supervisada.

Por ejemplo, en la visión artificial, se emplean técnicas de reconocimiento de patrones supervisado para el reconocimiento óptico de caracteres (OCR), la detección facial, el reconocimiento facial, la detección de objetos y la clasificación de objetos. En el procesamiento de imágenes y la visión artificial, se emplean técnicas de reconocimiento de patrones no supervisado para la detección de objetos y la segmentación de imágenes.

Aprendizaje no supervisado

Las redes neuronales no supervisadas se entrenan permitiendo que la red neuronal se autoajuste continuamente a las nuevas entradas. Se emplean para inferir información a partir de conjuntos de datos que constan de datos de entrada sin respuestas etiquetadas. Se pueden utilizar para descubrir distribuciones naturales, categorías y relaciones entre categorías en los datos.

Deep Learning Toolbox incluye dos tipos de redes no supervisadas: capas competitivas y mapas de organización automática.

Clustering

El clustering es un enfoque de aprendizaje no supervisado en el cual se pueden emplear redes neuronales para el análisis de datos exploratorio a fin de localizar patrones ocultos o agrupaciones de datos. Este proceso implica la agrupación de datos por similitud. Entre las aplicaciones del análisis de clusters están el análisis de secuencias genéticas, la investigación de mercados y el reconocimiento de objetos.

Desarrollo de redes neuronales superficiales con MATLAB

Con herramientas y funciones para administrar grandes conjuntos de datos, MATLAB® ofrece toolboxes especializadas para trabajar con machine learning, redes neuronales, deep learning, visión artificial y conducción autónoma.

Con unas pocas líneas de código, MATLAB permite desarrollar redes neuronales sin ser un experto. Podrá ponerse en marcha rápidamente, crear y visualizar modelos o desplegar modelos en servidores y dispositivos embebidos.

MATLAB permite integrar los resultados en sus aplicaciones existentes. MATLAB automatiza la implementación de sus modelos de redes neuronales en sistemas de empresa, clusters, nubes y dispositivos embebidos.

Flujo de trabajo típico para diseñar redes neuronales

Cada aplicación de red neuronal es única, pero el desarrollo de la red suele implicar los pasos siguientes:

  1. Acceder a los datos y prepararlos
  2. Crear la red neuronal
  3. Configurar las entradas y salidas de la red
  4. Ajustar los parámetros de la red (las ponderaciones y tendencias) para optimizar el rendimiento
  5. Entrenar la red
  6. Validar los resultados de la red
  7. Integrar la red en un sistema de producción

Clasificación y clustering de redes superficiales

MATLAB y Deep Learning Toolbox proporcionan funciones de línea de comandos y apps para crear, entrenar y simular redes neuronales superficiales. Las apps facilitan el desarrollo de redes neuronales para tareas tales como la clasificación, la regresión (incluida la regresión de series temporales) y el clustering. Tras crear las redes con estas herramientas, es posible generar automáticamente código de MATLAB para capturar el trabajo y automatizar las tareas.

Preprocesamiento, posprocesamiento y perfeccionamiento de la red

El preprocesamiento de las entradas y los objetivos de la red aumenta la eficiencia del entrenamiento de redes neuronales superficiales. El posprocesamiento permite el análisis detallado del rendimiento de la red. MATLAB y Simulink® proporcionan herramientas para ayudarle a:

  • Reducir las dimensiones de los vectores de entrada mediante el análisis de componentes principales
  • Llevar a cabo análisis de regresión entre la respuesta de la red y los objetivos correspondientes
  • Escalar las entradas y los objetivos para que se ajusten al rango [-1,1]
  • Normalizar la media y la desviación estándar del conjunto de datos de entrenamiento
  • Utilizar el preprocesamiento de datos y la división de datos automatizados al crear sus redes

El perfeccionamiento de la capacidad de la red para generalizar contribuye a evitar el sobreajuste, un problema habitual en el diseño de redes neuronales. El sobreajuste se produce cuando una red ha memorizado el conjunto de entrenamiento pero no ha aprendido a generalizar cuando hay entradas nuevas. El sobreajuste produce un error relativamente pequeño en el conjunto de entrenamiento, pero un error mucho mayor cuando se presentan datos nuevos a la red.

Dos soluciones posibles para mejorar la generalización son:

  • La regularización, que modifica la función de rendimiento de la red (la medida de error que minimiza el proceso de entrenamiento). Mediante la inclusión de los valores de las ponderaciones y las tendencias, la regularización produce una red que funciona bien con los datos de entrenamiento y ofrece un comportamiento más fluido cuando se le presentan datos nuevos.
  • La parada temprana utiliza dos conjuntos de datos distintos: el conjunto de entrenamiento, para actualizar las ponderaciones y las tendencias, y el conjunto de validación, para detener el entrenamiento cuando la red empieza a sobreajustar los datos.

Gráficos de posprocesamiento para analizar el rendimiento de la red, incluidos el rendimiento de validación del error cuadrático medio para etapas de entrenamiento sucesivas (arriba a la izquierda), un histograma de errores (arriba a la derecha) y matrices de confusión (abajo) para las fases de entrenamiento, validación y prueba.

Generación y despliegue de código

Mediante Deep Learning Toolbox con MATLAB Coder™, GPU Coder™ y MATLAB Compiler™, es posible desplegar redes entrenadas en sistemas embebidos o integrarlas en una amplia gama de entornos de producción. Puede utilizar MATLAB Coder a fin de generar código C y C++ para su red entrenada, lo cual permite simular una red entrenada en hardware de PCs y, posteriormente, desplegar la red en sistemas embebidos. Puede utilizar MATLAB Compiler y MATLAB Compiler SDK™ para desplegar redes entrenadas como librerías C/C++ compartidas, ensamblados de Microsoft®. NET, clases de Java® y paquetes de Python® a partir de programas de MATLAB. También puede entrenar un modelo de red en la aplicación desplegada o en un componente.

Soporte para Simulink

Deep Learning Toolbox proporciona un conjunto de bloques para crear redes neuronales superficiales en Simulink. Todos los bloques son compatibles con Simulink Coder™. Estos bloques se dividen en cuatro librerías:

  • Bloques de función de transferencia, que admiten un vector de entrada de red y generan un vector de salida correspondiente.
  • Bloques de función de entrada de red, que admiten cualquier número de vectores de entrada ponderados, vectores de salida de capa de ponderación y vectores de tendencias, y devuelven un vector de entrada de red.
  • Bloques de función de ponderación, que aplican un vector de ponderación neuronal a un vector de entrada (o un vector de salida de capa) a fin de obtener un valor de entrada ponderado para una neurona.
  • Bloques de preprocesamiento de datos, que asignan datos de entrada y salida dentro de los rangos más adecuados para que la red neuronal los gestione directamente.

Si lo prefiere, puede crear y entrenar sus redes en el entorno de MATLAB y generar automáticamente bloques de simulación de red para usarlos con Simulink. Este enfoque también permite ver las redes de forma gráfica.

Aplicaciones que emplean redes neuronales

La Universidad de Lund ha desarrollado un modelo predictivo y ha simulado miles de combinaciones de perfil de riesgo a fin de aumentar las tasas de supervivencia a largo plazo de los receptores.
Mejora del diagnóstico del cáncer mediante una red neuronal para detectar el cáncer a partir de datos de espectrometría de masas en perfiles de proteínas.
Entrenamiento de una red neuronal para clasificar imágenes de dígitos.