Visión de caso
Ingeniero Electricista de la Universidad del Valle en 1991 y Magíster en Automática de la misma universidad en 1997. Docente de la Facultad de Ingeniería en la Pontificia Universidad Javeriana Cali, coordinador del área de Sistemas Digitales y Microprocesadores. Miembro del Grupo de Automática y Robótica (GAR). Correo electrónico: jparra@puj.edu.co .
Ingeniero electrónico de la Pontificia Universidad Javeriana Cali. Miembro del Grupo de Automática y Robótica (GAR). Correo electrónico: dramoz@usa.net .
Ingeniera electrónica de la Pontificia Universidad Javeriana Cali. Miembro del Grupo de Automática y Robótica (GAR). Correo electrónico: atigreros@usa.net .
Desde el comienzo de la revolución computacional hubo interés por las máquinas inteligentes. Después del fracaso de los métodos de búsqueda de inteligencia artificial aplicados a problemas reales, un nuevo enfoque: inteligencia computacional retomó el camino basándose en estructuras copiadas de la naturaleza. Las redes neuronales (artificiales) emulan de manera simplificada el funcionamiento de las redes biológicas. La investigación ha estado dirigida primordialmente a simulación en computador de los algoritmos que se proponen, lo que se aleja del comportamiento real de las neuronas biológicas. Este artículo muestra un desarrollo en el que se implementó un sistema para diseñar, simular, crear e interactuar con redes neuronales en un dispositivo físico, para acercarse al concepto biológico. El dispositivo de trabajo (un FPGA) es un arreglo de elementos lógicos, cuyos puntos de interconexión pueden ser programados, lo que modela mejor la evolución de un cerebro biológico.
Palabras clave
Inteligencia computacional, diseño de redes neuronales, implementación de redes neuronales, sistemas bio-inspirados, FPGA, VHDL.
From the beginning of the computa- tional revolution there was interest for the intelligent machines. After the failure of the searching methods of Artificial Intelligence applied to real problems, a new approach, Computational Intelligence, recaptured the road basing on structures copied from nature. The (artificial) neural networks emulate in a simplified way the operation of the biological networks. Research has been directed primarily to computer simulation of the proposed algorithms, which moves away from the real behavior of the biological neurons. This article shows a development of a system for designing, simulating, creating, and interacting with neural networks implemented in a physical device, to come closer to the biological concept. The target device, a FPGA, is an arrangement of logical elements, whose interconnection points can be programmed, which better rnodels the evolution of a biological brain.
Keywords
Computational intelligence, neural networks design, neural networks implementation, bio-inspired systems, FPGA, VHDL.
El uso de redes neuronales ocupa hoy por hoy un lugar muy importante en la solución de problemas complejos, como: clasificación de patrones [1], modelamiento y control [4] y procesamiento de señales [5]. La mayoría de las implementaciones de redes neuronales son simuladas en computador, subutilizando una máquina poderosa en la ejecución de una sola labor y restringiendo la movilidad del sistema.
La implementación de redes neuronales en FPGA presenta una posible solución a este problema [2] [9]. Teniendo en cuenta que los niveles de integración y las prestaciones de las FPGA aumentan consistentemente cada año, es viable suponer que en un futuro cercano esta aproximación hará válido el desarrollo de sistemas bioinspirados soportados por hardware reconfigurable [7].
El presente artículo describe un sistema que le permite al diseñador de redes neuronales validar y verificar sus diseños en hardware reconfigurable, sin tener que conocer la arquitectura de dicho hardware ni los lenguajes de descripción para programarlos, en contraste con herramientas similares [10].
Una red neuronal artificial (NN) es una estructura compuesta por un conjunto de elementos denominados neuronas, relacionadas entre sí mediante diferentes valores de conexiones. La red genera patrones de salida como respuesta a impulsos o entradas, en los que la relación entre las entradas y las salidas es no lineal [6]. A continuación se muestra un diagrama Top-Down que sirve de base conceptual para describir el proyecto.


Tomando la neurona como la entidad básica de una red neuronal, se plantea la estructura del diagrama 3, a partir del modelo matemático del diagrama 2. La representación de la información numérica se hace en punto fijo, teniendo en cuenta las restricciones que impone el hardware [8].
Debido al costo en recursos de tiempo y espacio que consume la implementación de un multiplicador en lógica programable, éste se convierte en la parte esencial de la implementación de una NN. Para el trabajo se tuvieron en cuenta diferentes estructuras y arquitecturas de multiplicadores, las cuales fuéron comparadas con base en la información obtenida a partir de la herramienta MAX+PLUS II [11]. Este programa permite obtener la información de espacio utilizado por una implementación y su frecuencia máxima de trabajo.

Puesto que se buscaba una implementación de bajo costo de recursos en el FPGA, se optó por una implementación serial por paralelo, utilizando una variante del algoritmo de Booth [3]. En la siguiente tabla se puede observar diferentes implementaciones de multiplicadores, en los que la implementación escogida sobresale en casi todas las características evaluadas.

Se implementaron las siguientes funciones de activación (ver gráfica 1):
Todos los parámetros de las funciones pueden ser personalizados: niveles de umbral, pendiente y corte con el eje y.

A partir de la estructura de una neurona, se diseña el sistema completo mediante la adición de una memoria RAM que almacena el resultado del cómputo de una neurona y las entradas x a la red y una memoria ROM para almacenar la topología de la red.
La gráfica 2 muestra el sistema completo y la gráfica 3 muestra el algoritmo de la implementación.


El software para el diseño de la red por parte del usuario tiene como fin principal crear un archivo tipo VHDL que cumpla con las características de los lenguajes para descripción de hardware, para así poder implementar a través de éste la red neuronal en un FPGA.
Se le da al usuario la mayor libertad posible para generar la red que más se acomode a sus necesidades; es decir, el usuario puede crear la topología (ver figura 1), escoger entre diferentes funciones de activación, determinar el tamaño de palabra de los datos y, en el momento de generar el archivo en VHDL, poder escoger la ubicación de las memorias para almacenar los datos (externas o internas a la arquitectura), además permite realizar la simulación de la red implementada en el PC y monitorear su funcionamiento directamente en el FPGA.

Se probó la red ingresando topologías arbitrarias con distintas cantidades de entradas, salidas, capas ocultas, etc. Se crearon redes para resolver problemas básicos como la función OR, la función XOR y la función Suma áritmética. Durante el desarrollo de las pruebas se logró comprobar que es posible realizar la implementación de una red neuronal de grandes dimensiones sin que haya un incremento significativo de recursos.




En las gráficas 4 a 7 se puede observar las variaciones de los recursos y las velocidades de cómputo respecto a la variación del tamaño de la red implementada.
Es importante, al implementar redes neuronales en hardware, tener un balance adecuado entre el uso de recursos y la velocidad de procesamiento, de tal manera que sea posible implementar una gran variedad de redes neuronales en el dispositivo destino. En este caso, con un FPGA de mediana complejidad como el FLEX10K10 se pudo implementar diversas topologías de redes neuronales. Esto posiblemente no se hubiera logrado de haber optado por otro tipo de implementación, basado, por ejemplo, en sistemas paralelos, lo cual hubiese sido más rápido, pero con mayor costo de recursos.
La implementación de sistemas digitales basados en procesamiento serial presenta la ventaja de disminuir al máximo la cantidad de recursos necesarios para su implementación a costa de disminuir la velocidad de procesamiento global; esto, en ciertos casos, puede ser compensado con la replicación de algunas partes constituyentes del sistema. Este tipo de sistemas puede ser ventajoso en FPGA de poca capacidad, cuando los recursos son escasos o en casos en los que se requiera un ingreso de datos rápido para grandes frecuencias, como por ejemplo los sistemas de comunicación.
La forma de representar los números y de hacer operaciones con ellos, cuando se trata de números reales, es fundamental para el éxito de un diseño en FPGA. La opción de utilizar el formato punto fijo en sistemas digitales implementados en FPGA es la más adecuada; ya que permite realizar implementaciones más rápidas con un bajo costo en espacio.
Las funciones de activación en una red neuronal constituyen una base fundamental en la calidad de respuesta que se pueda esperar de la red. En ciertos casos, un análisis adecuado mediante varias pruebas puede permitir disminuir los recursos necesarios para implementar una red neuronal. Por ejemplo, si bien es cierto que la respuesta de una función lineal puede ser mejor que la respuesta de una función umbral, para algunos casos, el costo de la segunda en rapidez y espacio es mayor que la primera, influyendo significativamente en las características con las que se requieran los resultados.