Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Inteligencia Artificial para desarrolladores
  3. Redes neuronales
Extrait - Inteligencia Artificial para desarrolladores Conceptos e implementación en Java (2ª edición)
Extractos del libro
Inteligencia Artificial para desarrolladores Conceptos e implementación en Java (2ª edición) Volver a la página de compra del libro

Redes neuronales

Presentación del capítulo

Durante mucho tiempo, el objetivo de la inteligencia artificial ha sido simular la inteligencia humana y obtener un sistema artificial capaz de reflexionar, tomar decisiones y aprender.

Por lo tanto, los investigadores se han interesado muy rápidamente por el funcionamiento del cerebro para intentar reproducirlo. De esta manera, Mac Culloch y Pitts en 1943 definieron las primeras neuronas artificiales.

En la actualidad, ya no buscamos crear cerebros con todas sus capacidades, sino tener sistemas que puedan resolver algunos problemas complejos, sobre los que los sistemas clásicos están limitados. De esta manera nacieron las redes neuronales artificiales.

Este capítulo empieza explicando los orígenes biológicos, interesándose por el funcionamiento del cerebro y más concretamente de las neuronas.

A continuación se presenta el Machine Learning, dominio que cubre varias técnicas entre las que se encuentran las redes neuronales, con las formas de aprendizaje y los tipos de problemas relacionados, así como las técnicas matemáticas.

Estas técnicas tienen límites, así que a continuación se presenta la neurona formal. Se explica el perceptrón, uno de los modelos más sencillos de redes, así como su aprendizaje. Un ejemplo permite entender mejor su funcionamiento.

Las redes de tipos perceptrones no son suficientes...

Origen biológico

Desde hace mucho tiempo, sabemos que el razonamiento se hace gracias al cerebro. Por lo tanto, esto se estudió desde muy pronto (desde el siglo 18).

Hay "mapas" del cerebro, que indican sus principales estructuras y sus funciones asociadas. Aunque todavía no se ha entendido todo, sabemos por ejemplo que el cerebelo es muy importante para la coordinación de los movimientos, o que el hipotálamo gestiona las funciones importantes como dormir, el hambre o la sed.

Al contrario de lo pudiéramos pensar a causa de una idea extendida, incluso que aparece en las películas recientes como Lucy de Luc Besson, que se estrenó en 2014, se utiliza el 100% de nuestro cerebro. Sin embargo, en un momento dado, solo se moviliza una parte de este en función de las necesidades. Una zona que no se utilizara habitualmente, sufriría una fuerte degeneración y desaparecería rápidamente.

Las células más importantes del córtex cerebral son las neuronas. Hay muchas, y su número se acerca a cien mil millones en cada ser humano. Estas células demandan mucha energía y son frágiles. Están protegidas y se nutren de las células gliales (el 90% de las células del cerebro), que sin embargo no tienen ninguna función en el razonamiento.

Sabemos que las neuronas se comunican entre ellas a través de impulsos eléctricos....

Machine Learning

El Machine Learning o ML (traducido normalmente en español como "aprendizaje automático"), se comprende con todas las técnicas que permiten a un algoritmo aprender a partir de ejemplos, sin programación directa de la resolución.

El ML es vital en muchos dominios en los que se pide que un ordenador resuelva problemas que no sabemos modelizar exactamente, pero para los que se puede obtener ejemplos.

La mayoría de las técnicas de ML son algoritmos puramente matemáticos (resultado de las estadísticas), donde también encontramos técnicas relacionadas con la inteligencia artificial. Este es el caso de la metaheurística o de los algoritmos genéticos, pero sobre todo de las redes neuronales (normalmente llamadas "Deep Learning").

1. Formas de aprendizaje y ejemplos

El ML permite resolver diferentes tipos de problemas, que se reparten entre dos formas de aprendizaje principales. También se presenta una tercera forma de aprendizaje, aunque muy poco utilizada.

a. Aprendizaje no supervisado

El aprendizaje no supervisado no es la forma de aprendizaje más habitual, pero su utilización tiende a aumentar estos últimos años. En esta forma de aprendizaje no hay resultado esperado. Se utiliza esta forma de aprendizaje para hacer el clustering (también llamado segmentación): tenemos un conjunto de datos y buscamos determinar las clases de hechos.

En realidad, existen otras aplicaciones del aprendizaje no supervisado, pero el clustering representa la gran mayoría de las aplicaciones actuales. Por ejemplo, podemos citar a los sistemas de recomendaciones utilizados para las tiendas en línea o la publicidad.

Podemos imaginar una situación donde se tiene una base de datos de clientes y en la que buscamos obtener diferentes perfiles en función de sus compras o presupuesto. A priori no se sabe cuántos perfiles hay o cuales son. Este normalmente es un problema de clustering.

Por lo tanto, vamos a buscar maximizar la coherencia de los datos dentro de una misma clase (que por ejemplo podría ser "los deportes de los 20 a los 25 años") y a minimizarla entre las clases.

Imaginemos que tenemos el siguiente conjunto de datos:

images/07DP10.png

Si buscamos determinar las clases en estos datos, sería posible definir las tres siguientes:

images/07DP11.png

De esta manera, se maximiza...

Neurona formal y perceptrón

La neurona artificial, también llamada neurona formal, retoma el funcionamiento de la neurona biológica.

1. Principio

Una neurona recibe entradas y proporciona una salida, gracias a diferentes características:

  • Pesos asignados a cada una de las entradas, que permita modificar la importancia de algunas respecto a otras.

  • Una función de agregación, que permita calcular un único valor a partir de las entradas y de los pesos correspondientes.

  • Un umbral (o sesgo), que permita indicar cuándo debe actuar la neurona.

  • Una función de activación, que asocia a cada valor agregado un único valor de salida dependiendo del umbral.

La noción de tiempo, importante en biología, no se tiene en cuenta para la mayoría de las neuronas formales.

Por lo tanto, la neurona formal se puede resumir con la siguiente forma:

images/cap7_pg16.png

Como para la regresión lineal y la regresión logística, la principal dificultad será el aprendizaje de los pesos (y del umbral, que se puede ver como un peso particular). Las funciones de agregación y de activación se eligen a priori.

Es la presencia de la función de activación, si es no lineal, lo que permitirá solventar la condición de linealidad de los algoritmos de Machine Learning vistos anteriormente, así como el número de neuronas y sus conexiones entre ellas (porque podemos tener varias neuronas, que es el caso más habitual).

2. Red de tipo "perceptrón"

El perceptrón es la más sencilla de las redes neuronales. Un perceptrón es una red que contiene p neuronas formales. Cada una se relaciona con las n entradas. Esta red permite tener p salidas.

En el caso de una tarea de regresión, tendríamos una única salida (y por lo tanto, una única neurona), que dará un valor real. En el caso de una tarea de clasificación, tendremos una salida por clase y es la salida con el valor más fuerte la que indicará la clase elegida por la red.

En el caso particular donde solo tengamos dos clases, solo se utilizará una única salida y se seleccionará la clase en función del valor obtenido (en general, esta será la primera clase si el valor es inferior a 0.5 o la segunda clase en otro caso). 

Por lo tanto, con tres neuronas y cinco entradas...

Red feed-forward

Las redes de tipo "feed-forward" o en capas, permiten superar los límites de los perceptrones. En efecto, estos ya no están limitados a los problemas linealmente separables.

1. Red con capa oculta

Están compuestas por una o varias capas ocultas de neuronas, relacionadas con las entradas o las capas anteriores y una capa de salida, relacionada con las neuronas ocultas. Se llaman feed-forward porque la información solo puede ir desde las entradas hasta las salidas, sin volver atrás.

El número de capas ocultas y el número de neuronas de cada capa, se seleccionan por parte del usuario (normalmente haciendo pruebas sobre varios valores). Hablamos de "Deep Learning" cuando el número de capas es importante (a partir de tres o cuatro capas ocultas).

Cuantas más capas tiene la red y más complejas son, permite un mejor aprendizaje y más rápido, que con una o dos capas ocultas. En efecto, cada capa se puede ver como una etapa adicional en el algoritmo (por ejemplo, para el reconocimiento de cifras, podemos imaginar que la primera capa detecta los trazos y los bucles, que la capa siguiente permite acumular algunas características de la primera capa y que una tercera capa, deduce de todo esto el número escrito).

A continuación se muestra un ejemplo de red con cinco entradas y tres salidas, de manera que hay dos neuronas ocultas.

images/cap7_pg32.png

En este caso, hay que ajustar los pesos y umbrales de todas las neuronas ocultas (aquí 12 argumentos), así como los pesos y umbrales de las neuronas de salida (9 argumentos). Por lo tanto, el problema completo contiene 21 valores a determinar.

Las redes que utilizan neuronas de tipo perceptrón, se llaman MLP por MultiLayer Perceptron, mientras que las que utilizan neuronas con función de activación gaussiana, se llaman RBF (por Radial BasisFunction). Las redes MLP y RBF son habituales pero cada vez más, están siendo sustituidas por redes más adaptadas para las imágenes (CNN) o para las series temporales y los sonidos (SNN). Estos dos tipos de redes se ven más adelante, pero salen del ámbito de este libro.

2. Aprendizaje por retropropagación del gradiente

El algoritmo de descenso por gradiente tal y como se ha explicado anteriormente, solo funciona para los perceptrones que no tienen capa oculta.

En el caso de las redes feed-forward...

Otras arquitecturas

Las redes feed-forward se utilizan mucho, pero estas no son las únicas redes. Existen múltiples arquitecturas que permiten trabajar sobre diferentes problemas.

No entraremos en detalle sobre sus implementaciones, pero vamos en presentar los aspectos principales.

1. Red de neuronas con consolación

Las redes neuronales consolativas (o con consolación, identificadas con CNN en inglés), están adaptadas para trabajar sobre las imágenes. En efecto, los píxeles no son completamente independientes y normalmente es útil trabajar sobre zonas de la imagen.

Estas redes están compuestas por múltiples capas, que pueden tener funciones diferentes. En particular, se distinguen las capas de consolación, que tratan las partes de la imagen (es necesario verlas como extractores de características), las capas de pooling (que combinan las salidas de las capas de convolución para detectar funcionalidades de más alto nivel) y las capas más clásicas de clasificación (normalmente con la función ReLU como función de activación).

Sin embargo, estas redes son muy difíciles de entrenar partiendo de 0. Generalmente se utiliza una red conocida pre-entrenada, y solo haremos el entrenamiento sobre nuestro dataset sobre algunas generaciones. Esta utilización de una red existente, se llama transfer learning o aprendizaje...

Dominios de aplicación

Las redes neuronales se utilizan en muchos dominios. Son una técnica muy correcta cuando los criterios siguientes se cumplen:

  • Hay muchos ejemplos disponibles para el aprendizaje, y además es posible crear uno fácilmente.

  • No existen relaciones conocidas entre las entradas y las salidas expresadas por las funciones.

  • La salida es más importante que la manera de obtenerla, las redes neuronales no permiten tener una explicación sobre el proceso utilizado internamente.

1. Reconocimiento de patterns

La tarea más habitual que se asigna a las redes neuronales, es el reconocimiento de patterns.

En esta tarea, diferentes patterns se presentan a la red durante el aprendizaje. Cuando se deben clasificar nuevos ejemplos, entonces se puede reconocer los motivos: se trata de una tarea de clasificación.

De esta manera, las redes neuronales pueden reconocer los caracteres manuscritos o las formas. Las aplicaciones permiten leer las matrículas en una imagen, incluso en presencia de defectos de iluminación sobre la matrícula en sí misma.

2. Estimación de funciones

La estimación de funciones o regresión consiste en asignar un valor numérico a partir de entradas, generalizando la relación existente entre ellas. Las entradas pueden representar características o series temporales, según las necesidades.

De esta manera, son posibles las aplicaciones...

Implementación

Los MLP (MultiLayer Perceptron) son redes muy utilizadas. Son redes feed-forward, con neuronas de tipo perceptrón. La función de agregación es una suma ponderada y la función de activación una sigmoidea, lo que permite un aprendizaje por retro-propagación. Sobre todo los encontramos en regresión.

La red codificada aquí tiene una única capa oculta. El número de neuronas de las diferentes capas, así como el número de entradas, son parametrizables.

A continuación se presentan dos problemas:

  • El problema del XOR (O exclusivo), que es sencillo de resolver y permite probar si los algoritmos funcionan.

  • El problema "Abalone", que es de tipo regresión y se utiliza mucho para comparar algoritmos de aprendizaje.

La aplicación es en Java y solo utiliza librerías estándares, de manera que sea fácilmente reutilizable.

1. Puntos y conjuntos de puntos

Los problemas utilizados con las redes neuronales, necesitan muchos puntos para el aprendizaje. Por lo tanto, no es conveniente introducirlos a mano en el código.

Por lo tanto, se utilizarán archivos de texto con tabulaciones como separadores.

La primera clase es PuntoND, que se corresponde con un ejemplo (que contiene N dimensiones). Este contiene una tabla de valores considerados como entradas y una tabla de valores de salida. Hacemos estos atributos públicos, pero se declaran final. De esta manera, no son modificables.

El comienzo de la clase es la siguiente:

public class PuntoND {  
   public final doble[] entradas;  
   public final doble[] salidas;  
   
   // Constructor aquí   
} 

El constructor recibe como argumentos la cadena que se corresponde con la línea del archivo de texto y el número de salidas de los ejemplos (los valores son tanto las entradas como las salidas). Inicialmente, el contenido se separa de los caracteres que se corresponde con la tecla tabulación (’\t’), gracias a la función split. A continuación, las entradas y las salidas se transforman en nombres reales.

   public PuntoND(String str, int _numSalidas) {  
       String[] contenido = str.split("\t");  
       entradas = new doble[contenido.length...

Resumen

Las redes neuronales se han inspirado en el funcionamiento del cerebro de los seres vivos. En efecto, las sencillas células se limitan a transmitir impulsos eléctricos en función de las entradas que reciben y permiten el conjunto de comportamientos y razonamientos. Su potencia emerge del número de células grises y de sus conexiones.

Su principal utilización se encuentra en la Machine Learning. Las principales formas de aprendizaje son el aprendizaje no supervisado (para las tareas de clustering) y el aprendizaje supervisado (para la regresión o la clasificación). Sin embargo, las técnicas puramente matemáticas no permiten la resolución de problemas complejos, en particular no linealmente separables. Las redes neuronales y en particular el Deep Learning, permiten eliminar estos límites. 

La neurona artificial, llamada neurona formal, combina una función de agregación, que permite obtener un valor único a partir del conjunto de entradas, pesos de la neurona y de su sesgo y una función de activación, que permite obtener su salida.

La función de agregación normalmente es una suma ponderada. La función de activación es más variable, pero se corresponde con la función sigmoidea o la función ReLU en la mayoría de los casos actuales.

Sin embargo, las redes de una única capa también...