NNGen: Un sistema de generación automatica de redes neuronales

Anuncio
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.
Descargar