NNGen: Un sistema de generación automatica de redes neuronales digitales para FPGA Tosini, Marcelo Alejandro* - Acosta, Gerardo** - Boemo, Eduardo Ivan*** * Grupo de Investigación en Computación Aplicada (INCA) - Fac. de ciencias Exactas -Universidad Nacional del Centro de la Prov. de Bs. As. (UNCPBA) – Campus universitario, Paraje Arroyo Seco s/n, Tandil (7000) Email: mtosini@exa.unicen.edu.ar ** CONICET- Grupo ADQDAT – Dept. de Ing. Electromecánica – Fac. de Ingeniería - Universidad Nacional del Centro de la Prov. de Bs. As. (UNCPBA) – Av. Del Valle 5737, Olavarría (7400) Email: ggacosta@fiog.fio.unicen.edu.ar *** Escuela Técnica Superior de Informática – Universidad Autónoma de Madrid Ctra. Colmenar Km. 15, Madrid, España Email: eib@ii.uam.es Abstract A software environment for the automatic generation of multilevel perceptron neural networks (MLP) appears in this article. The basic architecture of the neural network is totally orthogonal and its specialization is made from the specification of the parameters of the MLP that is being designed and the structural parameters of the architecture like number of bits , precision, etc... The result of the automatic generation is the description of the circuit in VHDL modules that can be synthesized directly in FPGA. In order to verify the performance of the generation software, the development of an artificial neuronal network (RNA) is implemented on a Xilinx FPGA (family XC4000), to make predictions on climatic variables in a limited environment with own microclimate. These variables (temperature, humidity of the ground, ventilation...) are desired to maintain under control, and for it he is extremely advantageous to have a module able to predict his evolution in a widely temporary horizon as it is possible. This way, the RNA will take ahead the task of prediction within a greater system, based on knowledge, dedicated to the control and supervision of a greenhouse. Resumen Se presenta en este artículo un ambiente para la generación automática de redes neuronales del tipo perceptrón multicapa (MLP). La arquitectura básica de la red neuronal es totalmente ortogonal y su especialización se reliaza a partir de la especificación de los parámetros topológicos del MLP que se está diseñando y de los parámetros estructurales propios de la arquitectura como ancho de palabra, precisión, etc… El resultado de la generación automática es la descripción total del circuito en distintos módulos VHDL que pueden ser sintetizados directamente en FPGA. A fin de comprobar el rendimiento del software de generación se muestra el desarrollo de una red neuronal artificial (RNA), implementada en una FPGA de la familia XC4000 de Xilinx, diseñada para realizar predicciones sobre variables climáticas en un medioambiente acotado con microclima propio. Estas variables (temperatura, humedad del suelo, ventilación,…) se desean mantener bajo control, y para ello es sumamente ventajoso disponer de un módulo capaz de predecir su evolución en un horizonte temporal tan amplio como sea posible. De este modo, la RNA llevará adelante la tarea de predicción dentro de un sistema mayor, basado en conocimiento, dedicado al control y supervisión de un invernadero. Palabras Clave Redes neuronales digitales, Sistemas digitales, automatización de plantas, inteligencia artificial. 1. Introducción La utilización de redes neuronales se ha difundido ámpliamente en varias tareas y procesos de uso cotidiano tales como OCRs, reconocedores del habla, detectores de gases, etc. Aún más, versiones digitales de casi todas estas redes se pueden encontrar con facilidad en el mercado bajo la forma de dispositivos electrónicos basados en algún circuito integrado genérico o en ASICs especializados programados específicamente para cumplir con alguna de las tareas citadas [Wawrzynek, 1996][ Mauduit, 1992][ Mumford, 1992][ Watanabe, 1993]. Por otro lado, el diseño de una red neuronal que cumpla cierta tarea particular y su posterior síntesis en un circuito digital demanda bastante tiempo y esfuerzo. La herramienta desarrollada propone una metodología de diseño por pasos que permite al diseñador de la red neuronal concentrarse en los aspectos estructurales propios de la red como la cantidad de entradas, el número de neuronas ocultas, los valores de los pesos sinápticos, el uso de bias, etc. A partir de estos parámetros mínimos el sistema genera la arquitectura necesaria para el funcionamiento de la red neuronal al tiempo que genera el programa de control de la misma. 2. Arquitectura de la red neuronal digital propuesta La arquitectura desarrollada se compone básicamente de cuatro bloques principales: las memorias de datos y pesos sinápticos, el módulo de cálculo y la unidad de control. La estructura interna de cada uno de ellos es totalmente ortogonal facilitando su generación automática a partir de la definición de ciertos parámetros básicos durante la primera fase del diseño. La unidad de control es microprogramada, lo que permite la adaptación dinámica de una arquitectura ya diseñada a tipos específicos de MLPs. La figura 1 muestra el diagrama de bloques del circuito y su descripción más detallada puede encontrarse en [Tosini, 2000] El conjunto total de parámetros que personalizan el diseño se puede dividir en dos grandes grupos: los dependientes de la topología de la red MLP diseñada y los dependientes de la arquitectura del circuito que materializa dicha red. La correcta elección de todos ellos permitirá la adecuada generación de la ruta de datos y del microprograma de control. Por otro lado, una selección inadecuada de algunos de ellos resultará en un circuito sin funcionalidad o de dimensiones prohibitivas para su implementación final en FPGA. • Los parámetros dependientes de la topología del MLP son fundamentalmente la cantidad de entradas y de neuronas ocultas del MLP e influyen sobre el tamaño de las memorias de datos y de pesos, sobre el tiempo de cálculo de cada neurona y sobre el tamaño del microprograma. • Los parámetros arquitectónicos son, en principio, independientes de la topología de MLP diseñada aunque influyen drásticamente sobre la precisión final de los resultados y sobre la velocidad de funcionamiento del circuito. Los dos principales son el ancho de palabra y la granularidad del módulo de cálculo. Los parámetros citados influyen directamente en el área ocupada por el circuito, lo cual es un factor determinante en vista a que la materialización final se hará sobre dispositivos programables (FPGA) con una cantidad limitada de espacio para lógica y un número también limitado de registros. Dada la ortogonalidad y escalabilidad del diseño es posible determinar durante el diseño el área que ocupará en la FPGA y la cantidad de ciclos que demandará una decisión completa de la red diseñada. Puesto que no es posible determinar cuantos CLBs demandará un diseño determinado en una FPGA se usa el número de registros como una métrica aproximada para la estimación del tamaño del circuito. En efecto, dado que, los módulos que forman la arquitectura tienen una estructura sistólica, compuesta por secuencias de PEs seguidos de registros, la cantidad de registros necesarios para implementar dichos módulos conserva una relación directa con el tamaño final del circuito. % $ ! "& !' # - . / . 0 ) 1 2 % ( ) * + , $ # $ "& " 3 4 0 ) . 5 Figura 1: Diagrama de bloques de la arquitectura En general, para una red neuronal de n entradas, m neuronas ocultas y w bits de ancho de palabra, el número de registros total del circuito será: Nrtotal = 2w − 2 2w − 2 2 2 .w + .w + 7 + 2. + 6 + (n + m − 1).w + log 2 (m.(n + 2) + 1) β β β donde β representa el factor de granularidad con el cual se segmenta la ruta de datos del circuito. La programación de la unidad de control se realiza a través de un microprograma formado por un número variable de microinstrucciones que depende de la topología de la red MLP diseñada (cantidad de entradas y neuronas ocultas). Una microinstrucción codifica la configuración completa de las señales de control para cada ciclo de reloj, de modo tal que la ejecución de todas las microinstrucciones del microprograma en forma cíclica permite obtener las sucesivas decisiones de la red neuronal. Puesto que el microprograma se ejecuta cíclicamente sin rupturas condicionales de secuencia, la unidad de control se mapea directamente como una ROM indexada por un contador de programa de manera que en cada ciclo de reloj se obtiene la siguiente microinstrucción a ejecutar. 3. Generación automática del circuito El sistema NNGen permite la creación y manejo de distintos proyectos a fin de mantener distintos diseños de MLPs. Para cada proyecto es posible especificar todos los parámetros relevantes necesarios para personalizar el circuito, generar el microprograma de control, simular el correcto funcionamiento del microprograma y, por último, generar los fuentes VHDL de todos los componentes. La figura 2 muestra la ventana principal a partir de la cual se pueden seguir todos estos pasos del diseño. Los parámetros topológicos de la red son tres: el número de entradas del MLP, la cantidad de neuronas ocultas y el número de salidas de la red. La configuración de estos parámetros permite al sistema generar el microprograma de control que maneja todas las señales de la ruta de datos en cada ciclo de reloj. Los parámetros de implementación permiten adaptar la estructura de los bloques de cálculo y generar las memorias de datos (RAM programable) y de pesos sinápticos (buffer circular en ROM). Puesto que el entrenamiento de la red es ‘off-line’ es necesario indicarle al sistema el archivo de pesos correspondiente. El ancho de palabra determina el número de bits de los datos internos y la precisión de cálculo permite configurar el tipo de aritmética a usar. Por ejemplo, la aritmética mostrada en la figura 3 (4,4) configura la ruta de datos para trabajar con datos de 8 bits con 4 bits de parte entera y 4 de parte decimal. Figura 2: Ventana principal del sistema NNGen. Figura 3: Selección de parámetros para la generación del MLP. Una vez generado el programa de control la herramienta permite realizar la simulación lógica del mismo a fin de comprobar su funcionamiento. Puesto que la sincronización de las señales para manejar la ruta de datos sistólica es bastante complicada, el simulador permite seguir la evolución de los cálculos en todos los puntos de la ruta de datos durante cada ciclo de reloj. La figura 4 muestra la simulación del microprograma para un MLP de 4 entradas y 2 neuronas ocultas. En la simulación lógica se muestra las ecuaciones de los cálculos que se están desarrollando en cada etapa de la ruta de datos. Figura 4: Simulador lógico del MLP diseñado. Una vez establecidos los parámetros y el microprograma de control NNGen está en condiciones de generar los módulos VHDL de todo el sistema. Puesto que en los pasos anteriores se realizan todas las verificaciones de coherencia necesarias, la fase de generación de código es totalmente automática. Los módulos principales son: • NNUC.vhd: Implementa el conjunto de microinstrucciones en una memoria ROM direccionable cíclicamente. entity Unidad_control is port (CLK : in STD_LOGIC; RESET : in STD_LOGIC; microinst : out STD_LOGIC_VECTOR (0 to 9); reset_DP : out STD_LOGIC; input_sel : out STD_LOGIC; salida_MVR : out STD_LOGIC_VECTOR (1 downto 0); weigth_clk : out STD_LOGIC; output_En : out STD_LOGIC); end Unidad_control; • NNMVR.vhd: Implementa una memoria RAM programable cuya función es almacenar los datos de entrada y los resultados intermedios de la red. entity M_v_r is port (Ld : in STD_LOGIC_VECTOR (7 downto 0); Indp Mi Input_sel CLK RESET OUT_to_DP end M_v_r; • : : : : : : in STD_LOGIC_VECTOR (7 downto 0); in STD_LOGIC_VECTOR (0 to 9); in STD_LOGIC; in STD_LOGIC; in STD_LOGIC; out STD_LOGIC_VECTOR (7 downto 0)); NNPesos.vhd: Materializa una memoria ROM accesible secuencialmente de manera cíclica. entity FIFO_rom is port (WCLK : in STD_LOGIC; RESET : in STD_LOGIC; wout : out STD_LOGIC_VECTOR (7 downto 0)); end FIFO_rom; • NN_data_path: compuesta por los módulos acumulador.vhd, guild.vhd, parallel.vhd y sigmoide.vhd. Este módulo implementa la ruta de datos propiamente dicha. Desde el punto de vista del MLP, materializa la funcionalidad de una neurona, acumulando los productos de las entradas por los pesos sinápticos y generando el resultado de salida. entity nn_data_path (CLOCK : RESET : value : weight : data_reset : out_en : output : result : end nn_data_path; • is port in STD_LOGIC; in STD_LOGIC; in STD_LOGIC_VECTOR (7 downto 0); in STD_LOGIC_VECTOR (7 downto 0); in STD_LOGIC; in STD_LOGIC; out STD_LOGIC_VECTOR (15 downto 0); out STD_LOGIC_VECTOR (7 downto 0)); <nombre_proyecto>.vhd: Es el módulo principal del circuito. entity main is port (CLK RESET input Input_ack Output_ack output Input_enable Output_enable end main; : : : : : : : : in STD_LOGIC; in STD_LOGIC; in STD_LOGIC_VECTOR (7 downto 0); in STD_LOGIC; in STD_LOGIC; out STD_LOGIC_VECTOR (15 downto 0); out STD_LOGIC; out STD_LOGIC); 4. Síntesis en FPGA El código VHDL generado por NNGen puede implementarse en FPGA o ASIC. Para este trabajo, se utilizó el paquete Foundation de Xilinx y la implementación se realizo para la familia XC4000. A modo de ejemplo se muestra a continuación los resultados de la implementación de un MLP de 4 entradas y 2 neuronas ocultas con 8 bits de ancho de datos y granularidad igual a 2. Device utilization summary: Number of External IOBs Flops: Latches: Number of CLBs Total CLB Flops: 4 input LUTs: 3 input LUTs: 30 out of 61 0 0 268 305 415 149 out out out out of of of of 400 800 800 400 49% 67% 38% 51% 37% Design statistics: Minimum period: 65.900ns (Maximum frequency: Maximum net delay: 13.731ns 15.175MHz) 5. Evaluación del circuito A fin de comprobar el funcionamiento correcto de la arquitectura generada se implementó el modelo descripto de manera que se pudieran analizar series temporales variando todos los parámetros de la red: número de series de entrada, cantidad de muestras pasadas de cada serie de entrada (nk), cantidad de muestras pasadas de la salida realimentada (ni), número de neuronas ocultas, parámetros de aprendizaje, etc.. La figura 5 muestra una comparación de una serie de salida de la red neuronal junto con la serie real con que fue entrenada, usando una serie temporal de entrada de 250 muestras, una serie de salida de 250 muestras y una red neuronal de 4 entradas (ni=2, nk=2) con 2 neuronas en su capa oculta. 200 150 100 50 0 1 14 27 40 53 66 79 92 105 118 131 144 157 170 183 196 209 222 235 248 Figura 5: Salida de la red neuronal (puntos) vs. serie real de entrenamiento (trazo continuo). En la figura 6 se observa una fase de decisión completa con la evolución de las señales de control y los resultados de cálculo. El microprograma de control tiene 32 microinstrucciones y se obtiene un resultado válido también cada 32 microinstrucciones con lo que a la frecuencia máxima obtenida en la síntesis en la FPGA la red tiene una frecuencia de 474218 DPS (decisiones por segundo). datos de entrada Entradas de la unidad de cálculo Microinstrucciones primer resultado Habilitación de salida Señales de la Unidad de Control Figura 6: diagrama de señales del circuito para una decisión completa del MLP con 4 entradas y 2 neuronas ocultas. 6. Escalabilidad del circuito El circuito posee un conjunto mínimo de señales de entrada/salida que hacen posible su interconexión en cascada u otras configuraciones más complejas como árboles o matrices. Puesto que los buses de entrada y salida de datos tienen la misma cantidad de bits, es posible conectar uno o más circuitos a la salida de un circuito dado. La sincronización entre dos circuitos en cascada se realiza a través de un protocolo de handshaking con cuatro señales: Input_enable, Input_ack, Output_enable y Output_ack. Con este esquema simple de sincronización es posible configurar cada circuito para que procese cada capa sucesiva de la red neuronal o incluso para que procese una sola neurona. De esta manera, paralelizando el hardware, es posible implementar redes neuronales mucho más grandes [Nordström, 1992]. En la figura 7 se muestran dos posibles configuraciones multi circuito para el MLP presentado en el ejemplo anterior (4 entradas y 2 neuronas ocultas). La figura 7 a) muestra una implementación con 2 circuitos: uno para el nivel de entrada (2 neuronas de 4 entradas cada una) y otro para la neurona de salida (una neurona de 2 entradas). La figura 7 b) muestra la misma red pero implementada a partir de 6 circuitos, uno por cada neurona. Para este caso, es necesario agregar controladores de los buses a fin de sincronizar los resultados de cada nivel a la entrada de las neuronas del siguiente nivel. entrada datos salida resultados primer nivel input_Ack (3 neuronas) input_En segundo nivel output_En input_Ack output_Ack input_En (1 neurona) output_En output_Ack a) entrada datos neurona neurona entrada datos salida resultados neurona neurona entrada datos neurona neurona neurona entrada datos neurona b) Figura 7: Configuraciones multi circuito. a) un circuito por nivel. b) un circuito por neurona 7. Conclusiones Si bien el proyecto global, en que se incluye este trabajo no está aún finalizado [Acosta, 2000], y por consiguiente, no se han realizado pruebas exhaustivas de campo, se pudo experimentar la arquitectura presentada en distintos estadios de su desarrollo. Se dedicó tiempo y esfuerzos al análisis de la mecánica de funcionamiento de las RN, así como a la definición y prueba de cada uno de los componentes básicos, tanto a nivel teórico como en su implementación y simulación lógica. Por otro lado, se logró cumplir con uno de los objetivos iniciales referido a posibilidad de sintetizar el diseño completo de la RNA en una FPGA de tamaño moderado como lo es la serie XC4010D de la familia XILINX con la que se trabajó. Las tareas a futuro se relacionan con la redefinición de la unidad de control a fin de optimizar las secuencias de microinstrucciones y el análisis de solapamiento de cálculo de sucesivas decisiones a fin de minimizar los ciclos ociosos de la ruta de datos debidos a los períodos de llenado y vaciado de las etapas de pipeline. Asimismo, se espera poder ampliar el sistema de generación a fin de soportar el diseño de otros tipos de redes neuronales. Referencias • Acosta, Gerardo, Alonso González, Carlos, Spina, Marcelo, de la Vega, Roberto, (2000), “On the application of a task taxonomy for Knowledge Bases Supervision in Climate Control of a greenhouse”, Aceptado para su publicación, Proc. of 4th IFAC International Symposium on Intelligent Components and Instruments for Control Applications SICICA 2000, Sept. 13 al 15, Buenos Aires. • Tosini, Marcelo, (2000), “Implementación en Harware de una Ruta de datos segmentada para Redes Neuronales”, VI Workshop Iberchip, IWS´2000, Sao Paulo, Brasil, pp 292-299, 16 al 18 de Marzo de 2000. • Nordström, T. and Svensson, B., “Using and Designing Massively Parallel Computers for Artificial Neural Networks”, Journal of Parallel and Distributed Processing, vol. 14, no. 3, pp. 260-285, march 1992. • Wawrzynek et al, “Spert II, a vector microprocessor system”, IEEE Computer, Marzo 1996, pp 79-86. • Mauduit et al, “Lneuro 1.0: a piece of hardware Lego for building neuralnetwork systems”, IEEE Transactions on neural networks, vol. 3, no. 3, mayo 1992. • Mumford et al, “The mod 2 neurocomputer system design” , IEEE Transactions on neural networks, vol. 3, no. 3, mayo 1992. • Watanabe et al, “A single 1,5-V digital chip for a 106 synapse neural network”, IEEE Transactions on neural networks, vol. 4, no. 3, mayo 1993.