Redes Neuronales Artificiales
Rubén Rodríguez Abril
Las redes neuronales artificiales se han convertido en el principal paradigma de la Inteligencia Artificial en nuestros tiempos pese a las dificultades que afrontaron inicialmente. En este y los artículos venideros introduciremos los principales principios sobre los que pivotan los modelos actuales de Deep Learning.
El camino hacia las redes neuronas artificiales
Durante el siglo XX surgieron dos paradigmas de computación radicalmente diferentes: el primero de ellos, subyacente al funcionamiento de los ordenadores actuales, hunde sus raíces en los trabajos del filósofo alemán Gottlieb Leibniz, que consideraba posible expresar pensamientos humanos a través de un lenguaje universal y simbólico, al que llamó characteristica universalis. En dicho idioma los pensamientos se representarían mediante símbolos semejantes a los pictogramas chinos o egipcios. Y los razonamientos se realizarían a través del calculus ratiocinator, un conjunto de reglas mecánicas para manipular símbolos/conceptos.
Esta concepción de la computación como manipulación de señales fue retomada en los años 30 del siglo XX por Alan Turing y Emil Post. Estos autores concibieron la construcción de autómatas capaces de realizar operaciones mediante la permutación de símbolos escritos en una cinta que servía de entrada y de salida del autómata. En los años 40 y 50, fueron construidos los primeros computadores eléctricos de aritmética binaria, que funcionaban según los esquemas de Turing y de Post. También fueron creados los lenguajes en los que se escribieron sus primeros programas.
En nacimiento de las Redes Neuronales
Sin embargo, a mediados del siglo XX surgió otro paradigma de computación, que proponía la construcción de máquinas especializadas no tanto en la manipulación de símbolos o variables algebraicas, sino en el reconocimiento de patrones. El funcionamiento de dichas máquinas se asemejaría al de los cerebros biológicos.
El punto de partida de este nuevo enfoque fue el trabajo conjunto del neurólogo Warren McCulloch y el lógico Walter Pitts “A Logical Calculus of the Ideas Immanent in Nervous Activity”, publicado en 1943. Aunque inicialmente dichos autores sólo pretendían modelizar el comportamiento de las neuronas biológicas utilizando el lenguaje de la lógica simbólica, en el año 1957 el lógico Frank J. Rosenblatt propuso la creación de una máquina, el perceptrón, compuesta por neuronas artificiales con un funcionamiento interno muy parecido a las neuronas del modelo McCulloch-Pitts. Éste es el punto de partida de los actuales sistemas de Inteligencia Artificial basados en redes neuronales artificiales.
La neurona artificial
La neurona artificial es el elemento básico en torno al cual giran todos los sistemas de aprendizaje profundo o Deep Learning, que son a su vez un subtipo del aprendizaje de máquina (Machine Learning). Pueden construirse físicamente utilizando circuitaje electrónico o ser simuladas mediante el uso de una tarjeta gráfica, lo cual viene a ser lo más común.
La neurona artificial es una unidad de cálculo dotada de varias entradas (inputs) y una salida (output). A través de las primeras recibe estímulos de otras unidades. A través de la segunda transmite su propio impulso a otras neuronas. Las células que estimulan a la neurona reciben el nombre de células aferentes. El impulso que sale de la neurona dirigido hacia otras células recibe el nombre de impulso eferente. El punto de contacto entre la neurona aferente y la neurona siguiente recibe el nombre de sinapsis. Cada sinapsis contribuye a estimular eléctricamente a la neurona. Cuando esta estimulación sobrepasa un cierto umbral, la neurona se activa y transmite un impulso eléctrico dirigido hacia otras neuronas.
Una neurona con dos entradas y una salida. A través de las primeras, recibe excitación. Por medio de la salida, excita a otras neuronas.
Modelo matemático de la neurona
Matemáticamente, la neurona puede ser simulada por un simple algoritmo ejecutable por cualquier procesador, si bien lo más común, como ya hemos indicado, es utilizar unidades de procesamiento gráfico (GPUs). De lo que se trata es de determinar si una neurona se va a estimular o no. Y si lo hace, cuál será la intensidad de su pulso.
Para ello, debemos calcular consecutivamente dos funciones diferentes. La primera de ellas es la función de excitación x, que equivale a la suma total de estímulos que recibe la neurona. La segunda es la función de activación, que determina si, dado un cierto nivel de excitación, la neurona ocasiona una respuesta s o no .
Función de excitación en redes neuronales
No todas las sinapsis contribuyen en igual medida a la excitación de la neurona. Algunas de ellas son más robustas que otras y la intensidad de cada una de ellas se determina por su peso sináptico. Cada señal de entrada debe multiplicarse por el peso correspondiente y la suma total de todos los estímulos ponderados recibe el nombre de función de excitación. Para una neurona de dos sinapsis, vendría determinado por la siguiente ecuación:
donde x es la función de excitación, d_{i} el impulso transmitido a cada dendrita por la neurona aferente (1 activo, 0 inactivo), y w_{i} el peso de la sinapsis. Si un peso sináptico es positivo, se dice que su sinapsis es excitadora. Si es negativo, estamos ante una sinapsis inhibidora.
Ejemplo de neurona artificial con dos sinapsis, una excitatoria de peso igual a 6, y otra inhibitoria, de peso -1.
Función de activación en redes neuronales
Una vez que el algoritmo ha calculado la suma total ponderada de estímulos, su siguiente paso será determinar si la neurona debe dispararse. Ésta es la misión de la denominada función de activación.
Función de Heaviside
Originariamente, las neuronas del perceptrón de Rosenblatt utilizaban la función escalón de Heaviside para esta tarea. Si la suma total de excitaciones alcanzaba un determinado umbral, el valor de activación era uno. En caso contrario, su valor era cero y la neurona se mantenía en reposo. Matemáticamente se expresaba a través de la siguiente ecuación:
Donde H(y) es la función de Heaviside, x es la suma ponderada de excitaciones, U es el umbral y s el parámetro booleano de activación (el equivalente al d de la función de excitación pero desde la perspectiva «saliente»). Para la neurona de dos sinapsis que hemos propuesto antes, la activación tiene lugar cuando d_{1}w_{1} + d_{2}w_{2} (el valor de x) es mayor que U.
Cuando el valor de excitación supera el umbral, –(x – U) > 0– la función de Heaviside devuelve 1.
Sin embargo, el uso de esta función hacía de la neurona una suerte de máquina binaria, que sólo podía representar dos valores: activación (valor binario 1) o reposo (valor binario 0). Como consecuencia de ello, una neurona dotada de dos dendritas únicamente podía adoptar cuatro configuraciones diferentes.
En la imagen se representa el comportamiento de la neurona de dos dendritas, cuyos pesos sinápticos son 6 y -1. El umbral es de 3. La ecuación 6d_{1} + (-1)d_{2} = 3 parte el plano en dos partes. Una de ellas (coloreada de blanco y que representa 6d_{1} + (-1)d_{2} > 3) corresponde a la activación de la neurona y la otra al reposo (en gris). La neurona puede reconocer cuatro configuraciones diferentes, correspondientes a los diferentes patrones de excitación de sus dendritas, pero sólo se excita para una configuración de (1,0) o (1,1).
Función Sigmoide
Si permitiéramos que las neuronas aferentes tuviesen n de valores de activación d_{i} situados entre el 1 y 0, entonces una neurona receptora dotada de dos sinapsis podría reconocer 2^{n} configuraciones diferentes, una neurona de tres sinapsis 3^{n} configuraciones, y así sucesivamente.
Por ese motivo, en el año 1995, los investigadores Hava Siegelmann y Eduardo Sontag recomendaron la adopción de funciones de activación sigmoides. Hasta este momento, en la comunidad científica se aceptaban unánimemente las conclusiones a las que habían llegado Minsky y Seifert en su libro Perceptrones, del año 1969. En este trabajo, ambos autores habían demostrado que las redes neuronales de McColluch-Pitts y el perceptrón de Rosenblatt tenían unas capacidades computacionales relativamente bajas, equivalentes tan sólo a las de un autómata de estado finito.
Posibles estados de configuración de una neurona con dos entradas (dos ejes d_{1} yd_{2}), con cuatro posibles valores de activación (n = 4), que serían \left \{ 0, 0.2, 0.8, 1\right \}. Así, la neurona es capaz de reconocer 16 configuraciones diferentes. A medida que aumenta n, el número de estas configuraciones aumenta.
Sin embargo, Siegelmann y Sontag demostraron que si las neuronas adoptan pesos sinápticos racionales y funciones de activación continuas (como las sigmoides), la capacidad computacional de la red neuronal se hace equivalente a la de una máquina de Turing.
Gráfica de una función de forma sigmoide. En ella no hay discontinuidades, como en el caso de la función escalón de Heaviside, sino que la curva suavemente evoluciona desde el valor 0 al valor 1. La neurona puede transmitir a través de su salida valores de activación intermedios.
Capacidades de las Redes Neuronales
Estructura topológica de las redes neuronales
Desde el punto de vista del flujo de información, las redes neuronales se dividen entre redes neuronales alimentadas hacia adelante (feed-forward) y redes con retroalimentación. En las primeras, la información fluye unidireccionalmente desde las neuronas de entrada hasta las neuronas de salida, sin que sea posible la creación de bucles. En las segundas se producen bucles de retroalimentación, en los que diferentes secciones de una red neuronal pueden intercambiarse información recíprocamente, como sucede en los cerebros biológicos.
Redes alimentadas hacia adelante
El paradigma de red neuronal alimentada hacia adelante es el perceptrón multicapas, en las que las neuronas se estructuran en capas sucesivas. Existe una capa inicial de entrada, otra de salida, y capas intermedias encargadas del procesamiento de la información, denominadas capas ocultas. El perceptrón multicapas es usado en áreas como el reconocimiento de imágenes.
Redes recurrentes
Desde el punto de vista de la evolución temporal de los estados de la red, se dice que una red neuronal es recurrente si el estado de excitación de una neurona no depende tan sólo de los impulsos sinápticos que recibe de otras células, sino también de sus propios estados anteriores. Es como si la neurona pudiera enviarse impulsos a sí misma. La información puede permanecer indefinidamente en la red a través de bucles, lo cual constituye una suerte de memoria. Este tipo de redes neuronales se utilizan en el procesamiento natural del lenguaje.
Aprendizaje de las redes neuronales
Concluiremos este artículo haciendo somera referencia al aprendizaje de las redes neuronales. En un modelo de computación clásico serial, el programador determina por completo el flujo de ejecución del programa y las instrucciones a ejecutar.
Sin embargo, en el caso de las redes neuronales artificiales, el programador sólo determina el número de capas de neuronas, sus tipos de conexión, su umbral, los mecanismos de actualización de los pesos sinápticos y la topología de la red. Las capacidades de computación de la red sólo se despliegan tras un largo proceso de aprendizaje, en el que los pesos sinápticos de las neuronas van progresivamente modificándose.
En ulteriores artículos de esta página haremos referencia a los diferentes tipos de aprendizaje a los que pueda ser sometida una red neuronal, y a las aplicaciones de los mismos.
Lecturas Recomendadas
– Maass, W. y Orponen, P. (1998). On the effect of analog noise in discrete-time analog computations. [Accedido el 16 de Octubre de 2021]
– Minsky, M. L., Papert, S. (1969). Perceptrons: an introduction to Computational Geometry.
– Siegelmann, H. T. y Sontag, E. D. (1995). On the computational power of neural nets.