Redes Neuronales Artificiales (RNAs) y Conceptos de Inteligencia Artificial (IA)

De los estudios científicos y filosóficos realizados a lo largo de los siglos, se han identificado mecanismos que son la base de la inteligencia humana. Inspirándose en sus operaciones, fue posible crear máquinas que imitan parte de estos mecanismos. El problema es que aún no han logrado imitar e integrárlos todos, por lo que los sistemas de Inteligencia Artificial (IA) que tenemos son en gran medida incompletos.

Un paso decisivo en la mejora de tales máquinas provino del uso de los llamados Redes Neuronales Artificiales (RNAs) que, a partir de los mecanismos que regulan redes neuronales naturales, se planean para simular el pensamiento humano. El software ahora puede imitar los mecanismos necesarios para ganar una partida de ajedrez o para traducir un texto de una a otra lengua de acuerdo con sus reglas gramaticales.

Este capítulo presenta los conceptos teóricos básicos de RNAs e IA.

Para seguir el capítulo es fundamental la comprensión del siguiente material:

  1. cálculo diferencial y funciones como sigmoidea.

  2. Programación de R y el uso de sus bibliotecas.

Revisaremos los conceptos básicos de las redes neuronales y probaremos un modelo usando R. Este capítulo es una base para comprender las redes neuronales y todos los capítulos posteriores.

Cubriremos los siguientes temas en este capítulo: 1. Conceptos de RNA 2. Neuronas, perceptrón y redes neuronales multicapa 3. Sesgo, pesos, funciones de activación y capas ocultas 4. Métodos de propagación hacia adelante y hacia atrás 5. Breve descripción general de la Unidad de procesamiento de gráficos (GPU)

Al final del capítulo, podrás reconocer las diferentes algoritmos de las redes neuronales y las herramientas que proporciona R para manejarlos.

Introducción

El cerebro es el órgano más importante del cuerpo humano. Es la unidad central de procesamiento para todas las funciones realizadas por nosotros. Con un peso de sólo 1,5 kilos, tiene alrededor de 86 mil millones de neuronas. Una neurona se define como una célula que transmite impulsos nerviosos o señales electroquímicas. El cerebro es una red compleja de neuronas que procesan información a través de un sistema de varias neuronas interconectadas. Siempre ha sido desafiante entender las funciones del cerebro; sin embargo, debido a los avances en tecnologías informáticas, ahora podemos programar redes neuronales artificialmente.

La disciplina de ANN surgió de la idea de imitar el funcionamiento del mismo cerebro humano que estaba tratando de resolver el problema. Los inconvenientes de Los enfoques convencionales y sus sucesivas aplicaciones han sido superados dentro de entornos técnicos bien definidos.

La IA o inteligencia artificial es un campo de estudio que tiene como objetivo otorgar poderes cognitivos a computadoras para programarlas para que aprendan y resuelvan problemas. El objetivo es que los computadores simulen a la inteligencia humana. La IA no puede imitar la inteligencia humana completamente; Las computadoras solo pueden programarse para hacer sólo algunos aspectos del cerebro humano.

El aprendizaje automático es una rama de la IA que ayuda a las computadoras a programarse a sí mismas en base a los datos de entrada. El aprendizaje automático le da a la IA la capacidad de resolución de problemas basadas en datos. Las RNA son un ejemplo de algoritmos de aprendizaje automático.

El aprendizaje profundo (DL) es un conjunto complejo de redes neuronales con más capas de procesamiento, que desarrollan altos niveles de abstracción. Se utilizan normalmente para tareas complejas, como el reconocimiento de imágenes, clasificación de imágenes y la identificación de la escritura a mano.

La mayoría de las personas piensa que las redes neuronales son difíciles de aprender y las usan como un caja negra. Este Rpubs tiene la intención de abrir la caja negra y ayudarte a aprender las partes internas con la implementación en R. Con el conocimiento práctico, podremos ver muchos casos de uso donde las redes neuronales pueden ser tremendamente útiles como se ve en el siguiente imagen:

imagen_1

Inspiración para redes neuronales

Las redes neuronales están inspiradas en la forma en que funciona el cerebro humano. Un cerebro humano puede procesar grandes cantidades de información utilizando datos enviados por los sentidos humanos (especialmente la visión). El procesamiento lo realizan las neuronas, que trabajan con señales eléctricas que pasan a través de ellas aplicando la lógica flip-flop, como abrir y cerrar las puertas a la señal a transmitir. La siguiente imagen muestra la estructura de una neurona:

imagen_2

Los principales componentes de cada neurona son:

  1. Dendritas: Puntos de entrada en cada neurona que toman información de otras neuronas en la red en forma de impulsos eléctricos.

  2. Cuerpo Celular: Genera inferencias a partir de las dendritas de entradas y decide qué acción a tomar.

  3. Terminales de axón: Transmiten salidas en forma de impulsos eléctricos a la siguienteneurona.

Cada neurona procesa señales solo si supera un cierto umbral, asumiendo un estado dicotómico 0 o 1.

AI ha sido un dominio para películas de ciencia ficción y libros de ficción. Las RNA dentro de AI han existido desde la década de 1950, pero los hemos hecho más dominantes en los últimos 10 años debido a los avances en la arquitectura informática y el rendimiento. Han habido grandes avances en el procesamiento informático, que conducen a:

  1. Paralelismo masivo
  2. Representación distribuida y computación
  3. Capacidad de aprendizaje y generalización.
  4. Tolerancia a fallos
  5. Bajo consumo de energía

En el dominio de los cálculos numéricos y la manipulación de símbolos, resolver problemas en la cúspide de la arquitectura centralizada, las computadoras modernas han superado a los humanos en gran medida. Donde realmente se quedan atrás con tal organización de estructura está en los dominios de reconocimiento de patrones, reducción de ruido y optimización. Un un niño pequeño puede reconocer a su mamá en una gran multitud, pero una computadora con una arquitectura centralizada no podría hacer lo mismo.

Aquí es donde la red neuronal biológica del cerebro ha estado superando a las máquinas, y por lo tanto aquí radica la inspiración para desarrollar una alternativa sostenida libremente, una arquitectura descentralizada que imite al cerebro.

Las RNA son sistemas de computación masivamente paralelos que consisten en una cantidad extremadamente grande de números de simples procesadores con muchas interconexiones.

Una de las agencias de noticias líderes a nivel mundial, Guardian, utilizó big data para digitalizar sus archivos cargando las instantáneas de todos los archivos que habían tenido. Sin embargo, la limitación aquí es para un usuario que copie el contenido y lo use en otro lugar. Para superar eso, uno puede usar una RNA para el reconocimiento de patrones de texto para convertir las imágenes a archivos de texto y luego a cualquier formato de acuerdo con las necesidades de los usuarios finales.

¿Cómo funcionan las redes neuronales?

A similitud de la estructura de la neurona biológica, las RNA definen a la neurona como una unidad central de procesamiento, que realiza una operación matemática para generar una salida a partir de un conjunto de entradas. La salida de una neurona es una función de la suma ponderada de las entradas más el sesgo. Cada neurona realiza una operación muy simple que implica su activación si la cantidad total de señales recibida excede un umbral de activación, como se muestra en la siguiente figura:

imagen_3

La función de la red neuronal completa es simplemente el cálculo de las salidas de todas las neuronas, lo cual es un cálculo totalmente determinista. Esencialmente, las RNA es un conjunto de aproximaciones de funciones matemáticas. Ahora estaríamos introduciendo nueva terminología asociada con las RNA:

  1. Capa de entrada
  2. Capa oculta
  3. Capa de salida
  4. Pesos
  5. Sesgos
  6. Funciones de activación

Enfoque en capas

Cualquier red neuronal que procesa un marco tiene la siguiente arquitectura:

imagen_4

Hay un conjunto de entradas, un procesamiento y un conjunto de salidas. Ésta aproximación por capas es también seguido en las redes neuronales. Las entradas forman la capa de entrada, las capas del medio que realizan el procesamiento se llama la(s) capa(s) oculta(s), y la salida(s) forma la capa de salida.

Nuestras arquitecturas de redes neuronales también se basan en el mismo principio. La capa oculta tiene la magia para convertir la entrada en la salida deseada. la comprensión de la capa oculta requiere conocimiento de pesos, sesgos y funciones de activación, que es nuestro próximo tema de discusión.

Pesos y sesgos

Los pesos en una RNA son el factor más importante para implementar un efecto en una entrada sobre la salida. Esto es similar a la pendiente en la regresión lineal, donde se multiplica un peso a la entrada que se suma para construir la forma de la salida. Los pesos son parámetros numéricos que determinan la fuerza con la que cada una de las neuronas afecta a la otra. Para una neurona típica, si las entradas son x1, x2 y x3, entonces los pesos sinápticos a ser aplicados a ellos se denotan como w1, w2 y w3.

La salida es:

\[ y = f(x) =\sum x_iw_i \]

donde i es el número de entradas. Simplemente, esta es una multiplicación de matrices para llegar a la suma ponderada. El sesgo es como la intersección agregada en una ecuación lineal. Es un parámetro adicional que se utiliza para ajustar la salida junto con la suma ponderada de las entradas a la neurona.

El procesamiento realizado por una neurona se denota como:

\[ output = sum(weights*inputs) + bias \]

Se aplica una función a esta salida y se denomina función de activación. la entrada de la siguiente capa es la salida de las neuronas en la capa anterior, como se muestra en la siguiente imagen:

imagen_5

Entrenamiento de redes neuronales

El entrenamiento es el acto de presentar a la red algunos datos de muestra y modificar los pesos para aproximarse mejor a la función deseada. Hay dos tipos principales de entrenamiento: aprendizaje supervisado y aprendizaje no supervisado.

Aprendizaje supervisado

Suministramos a la red neuronal las entradas y las salidas deseadas. La respuesta de la red a las entradas es medida. Los pesos se modifican para reducir la diferencia entre las salidas real y deseada.

Aprendizaje sin supervisión

Solo suministramos insumos. La red neuronal ajusta sus propios pesos, de modo que similares entradas causan salidas similares. La red identifica los patrones y las diferencias en las entradas sin ayuda externa.

Época

Una iteración o paso por el proceso de proporcionar a la red una entrada y la actualización de los pesos de la red se denomina época. Es una ejecución completa de feed-forward y backpropagation para actualización de pesos. También es una lectura completa de todo el conjunto de datos.

Por lo general, se requieren muchas épocas, del orden de decenas de miles a veces, para entrenar la red neuronal de manera eficiente. Veremos más sobre épocas en el próximos capítulos.

Funciones de activación

La abstracción del procesamiento de las redes neuronales se logra principalmente a través de la funciones de activación. Una función de activación es una función matemática que convierte la entrada en una salida y agrega la magia del procesamiento de redes neuronales. Sin funciones de activación, el funcionamiento de las redes neuronales serían como funciones lineales. Una función lineal es aquella en la que la salida es directamente proporcional a la entrada, por ejemplo:

Ejemplo con la base de datos Restaurant

Programa R simple para construir, entrenar y probar redes neuronales.

Clasificación basada en 3 entradas y 1 salida categórica

## Warning: package 'NeuralNetTools' was built under R version 4.1.3
## [1] "C:/R"
##    no CustomerWillTip Service Ambience Food TipOrNo
## 1   1               1       4        4    5     Tip
## 2   2               1       6        4    4     Tip
## 3   3               1       5        2    4     Tip
## 4   4               1       6        5    5     Tip
## 5   5               1       6        3    4     Tip
## 6   6               1       3        4    5     Tip
## 7   7               1       5        5    5     Tip
## 8   8               1       5        4    4     Tip
## 9   9               1       7        6    4     Tip
## 10 10               1       7        6    4     Tip
## 11 11               1       6        7    2     Tip
## 12 12               1       5        6    4     Tip
## 13 13               1       7        3    3     Tip
## 14 14               1       5        1    4     Tip
## 15 15               1       7        5    5     Tip
## 16 16               0       3        1    3  No-tip
## 17 17               0       4        6    2  No-tip
## 18 18               0       2        5    2  No-tip
## 19 19               0       5        2    4  No-tip
## 20 20               0       4        1    3  No-tip
## 21 21               0       3        3    4  No-tip
## 22 22               0       3        4    5  No-tip
## 23 23               0       3        6    3  No-tip
## 24 24               0       4        4    2  No-tip
## 25 25               0       6        3    6  No-tip
## 26 26               0       3        6    3  No-tip
## 27 27               0       4        3    2  No-tip
## 28 28               0       3        5    2  No-tip
## 29 29               0       5        5    3  No-tip
## 30 30               0       1        3    2  No-tip
## [1] "no"              "CustomerWillTip" "Service"         "Ambience"       
## [5] "Food"            "TipOrNo"

Entrenar el modelo en función de la salida desde la entrada

## # weights:  26
## initial  value 7.546548 
## iter  10 value 5.835899
## iter  20 value 5.257209
## iter  30 value 5.191261
## iter  40 value 5.147843
## iter  50 value 5.141805
## iter  60 value 5.141784
## iter  70 value 5.141778
## final  value 5.141778 
## converged
## a 3-5-1 network with 26 weights
## inputs: Service Ambience Food 
## output(s): CustomerWillTip 
## options were - decay=0.05