Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRESENTAN:
ASESORES:
A mis asesores por su tiempo y consejos durante el desarrollo de este trabajo, en especial al Dr.
Rodrigo quien fue de gran ayuda para poder concluir este proyecto, gracias.
i
ii
Índice
Dedicatoria ........................................................................................................................................... i
Índice ...................................................................................................................................................iii
Índice de figuras ................................................................................................................................. vii
Introducción ........................................................................................................................................ix
Objetivo general ..............................................................................................................................ix
Objetivos específicos .......................................................................................................................ix
Justificación .....................................................................................................................................ix
Planteamiento del problema ..........................................................................................................xi
Estructura del proyecto terminal ....................................................................................................xi
Capítulo 1 Marco Teórico. ................................................................................................................. 1
1.1. Redes Neuronales Artificiales................................................................................................... 2
1.1.1. Principios básicos de las Redes Neuronales ...................................................................... 2
1.1.2. Aplicaciones de las redes neuronales ............................................................................... 3
1.1.3 Arquitecturas típicas de las redes neuronales ................................................................... 5
1.1.4. Mecanismos de Aprendizaje ............................................................................................. 8
1.1.5. Entrenamiento de las redes neuronales artificiales ........................................................ 11
1.1.6. El Perceptrón ................................................................................................................... 12
1.1.7. Implementación y tecnologías emergentes .................................................................... 12
1.2. Implementación en dispositivos programables ..................................................................... 13
1.2.1. Dispositivo lógico programable FPGA ............................................................................. 13
1.2.2. Arquitectura genérica ..................................................................................................... 14
1.2.3. Descripción de la arquitectura ........................................................................................ 14
1.2.4. Lenguaje de descripción de hardware VHDL .................................................................. 16
Capítulo 2 Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) .. 19
2.1 Introducción ............................................................................................................................ 20
2.1. Las Redes ADALINE y MADALINE ........................................................................................... 20
2.2. Perceptrón.............................................................................................................................. 24
2.3. Algoritmo de entrenamiento Perceptrón .............................................................................. 25
2.4. Red de Retroprogación (Backpropagation) ............................................................................ 26
2.4.1 Regla Delta generalizada .................................................................................................. 27
iii
2.4.3 Estructura y Aprendizaje de la Red Backpropagation ...................................................... 28
2.4.2 Pasos para aplicar el Algoritmo de Entrenamiento.......................................................... 28
2.4.3 Dimensiones de la red. Número de capas ocultas ........................................................... 31
Capítulo 3 Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y
máquinas de estado finito) ............................................................................................................... 33
3.1. Introducción ........................................................................................................................... 34
3.2. Operación única del RT .......................................................................................................... 34
3.2. Decisión de caja de registro ASMD ........................................................................................ 35
3.3. Máquina de Estados Finitos ................................................................................................... 37
3.3.1 Representación FSM......................................................................................................... 37
3.4.1 Descripción ASM .............................................................................................................. 37
3.5 Modelado de Hardware en VHDL ........................................................................................... 38
3.3.1 ¿Qué es Síntesis? .............................................................................................................. 39
3.3.2 Síntesis en un proceso de diseño ..................................................................................... 39
3.3.3 Los valores para Modelar Hardware ............................................................................... 39
3.3.4 FSM, Código de desarrollo en VHDL................................................................................. 40
Capítulo 4 Diseño y descripción de la implementación de una unidad de control en hardware para
ejecutar el algoritmo de entrenamiento y comparación con su equivalente en software .............. 41
4.1. Introducción ........................................................................................................................... 42
4.2. Descripción del diseño de la unidad de control .................................................................... 42
4.2.1. Puertos ............................................................................................................................ 42
4.2.2. Sistema de reloj ............................................................................................................... 42
4.2.3. Variables y registros ........................................................................................................ 44
4.2.4. Función de activación para la red neuronal .................................................................... 45
4.2.5. Máquina de estados ........................................................................................................ 45
4.2.6. Sintetizabilidad ................................................................................................................ 52
4.3. Comparación con la implementación en software. ............................................................... 52
Capítulo 5 Simulación y resultados ................................................................................................... 55
5.1. Herramientas de simulación .................................................................................................. 56
5.2 Revisión de sintaxis y sintetización. ........................................................................................ 56
5.3 Simulación con ISE Simulator .................................................................................................. 58
5.3.1 Entrenamiento del perceptrón ........................................................................................ 58
iv
5.3.1.1 Simulación de diferentes patrones de entrenamiento ................................................. 63
5.3.2. Entrenamiento de la red de retropropagación ............................................................... 68
Capítulo 6 Conclusiones y futuras posibilidades de desarrollo ......................................................... 73
6.1. Conclusiones........................................................................................................................... 74
6.2. Futuras posibilidades de desarrollo ....................................................................................... 75
Bibliografía ........................................................................................................................................ 77
Anexos ............................................................................................................................................... 79
Especificaciones generales de la familia de FPGA Spartan-3E ...................................................... 79
Código en VHDL para la red neuronal de retropropagación ......................................................... 81
Código en VHDL para el perceptrón.............................................................................................. 91
Código en C++ para la red neuronal de retropropagación ........................................................... 97
Código en C++ para el perceptrón .............................................................................................. 101
v
vi
Índice de figuras
FIGURA 1.1 UNA NEURONA ARTIFICIAL SIMPLE .............................................................................................................. 2
FIGURA 1.2 NEURONA BIOLÓGICA .............................................................................................................................. 3
FIGURA 1.3 RED DE UNA CAPA ................................................................................................................................... 6
FIGURA 1.4 RED MULTICAPA ..................................................................................................................................... 7
FIGURA 1.5 ARQUITECTURA DE LA FAMILIA SPARTAN-3E .............................................................................................. 15
FIGURA 1.6 DIAGRAMA DE INTERCONEXIÓN EN EL FPGA .............................................................................................. 16
FIGURA 2.1 RED DE UNA CAPA ADALINE ................................................................................................................. 21
FIGURA 2.2RED MULTICAPA MADALINE .................................................................................................................. 22
FIGURA 2.3 EL PERCEPTRÓN ................................................................................................................................... 24
FIGURA 2.4 ALGORITMO DE ENTRENAMIENTO RETROPROGACIÓN .................................................................................. 27
FIGURA 3.1DIAGRAMA DE BLOQUES ......................................................................................................................... 35
FIGURA 3.2DIAGRAMA DE TIEMPO ........................................................................................................................... 35
FIGURA 3.3DIAGRAMA ASM .................................................................................................................................. 36
FIGURA 3.4DIAGRAMA A BLOQUES ........................................................................................................................... 36
FIGURA 3.5 MÁQUINA DE ESTADOS FINITOS Y SU EQUIVALENTE EN DIAGRAMA ASM .......................................................... 38
FIGURA 3.6 COMPONENTES DE UNA ARQUITECTURA .................................................................................................... 38
FIGURA 4.1 OSCILADOR DE LA TARJETA DEL FPGA ....................................................................................................... 43
FIGURA 4.2 FLANCO DE SUBIDA DEL CICLO DE RELOJ ..................................................................................................... 43
FIGURA 4.3 SISTEMA DE RELOJ EN VHDL ................................................................................................................... 44
FIGURA 4.4 REGISTRO DE VARIABLE EN ESTADOS FUTURO Y PRESENTE.............................................................................. 45
FIGURA 4.5 DIAGRAMA DEL PERCEPTRÓN. ................................................................................................................. 46
FIGURA 4.6 MÁQUINA DE ESTADOS PARA EL PERCEPTRÓN ............................................................................................. 46
FIGURA 4.7 DIAGRAMA DE BLOQUES DE HARDWARE CAPAZ DE REALIZAR EL ENTRENAMIENTO DE UN PERCEPTRÓN. .................. 47
FIGURA 4.8 DIAGRAMA DE LA RED DE RETROPROPAGACIÓN ........................................................................................... 48
FIGURA 4.9 MÁQUINA DE ESTADOS PARA RETROPROPAGACIÓN...................................................................................... 49
FIGURA 4.10 COMPARACIÓN DE LAS CARACTERÍSTICAS DEL CÓDIGO PARA UNA MISMA FUNCIÓN .......................................... 54
FIGURA 5.1 SINTETIZACIÓN CORRECTA ...................................................................................................................... 56
FIGURA 5.2 IMPLEMENTACIÓN CORRECTA .................................................................................................................. 57
FIGURA 5.3 RESUMEN DE RECURSOS CONSUMIDOS Y NOTIFICACIONES ............................................................................. 57
FIGURA 5.4 SIMULACIÓN ........................................................................................................................................ 59
FIGURA 5.5 TRANSICIONES...................................................................................................................................... 60
FIGURA 5.6 ENTRENAMIENTO CONCLUIDO ................................................................................................................. 61
FIGURA 5.7 RESULTADOS DE ENTRENAMIENTO EN C++................................................................................................. 62
FIGURA 5.8 SIMULACIÓN DEL ENTRENAMIENTO COMO COMPUERTA NOR........................................................................ 63
FIGURA 5.9 ENTRENAMIENTO COMO COMPUERTA NOR EN C++.................................................................................... 64
FIGURA 5.10 ENTRENAMIENTO COMO COMPUERTA AND EN C++.................................................................................. 64
FIGURA 5.11SIMULACIÓN DEL ENTRENAMIENTO COMO COMPUERTA AND ...................................................................... 65
FIGURA 5.12 SIMULACIÓN DEL ENTRENAMIENTO COMO COMPUERTA NAND ................................................................... 66
FIGURA 5.13 ENTRENAMIENTO COMO COMPUERTA NAND EN C++ ............................................................................... 67
FIGURA 5.14 SIMULACIÓN DEL ENTRENAMIENTO DE LA RED DE RETROPROPAGACIÓN COMO COMPUERTA XOR ....................... 69
FIGURA 5.15 ENTRENAMIENTO DE LA RED DE RETROPROPAGACIÓN COMO COMPUERTA XOR EN C++ CON 5,000 ÉPOCAS ........ 70
FIGURA 5.16 ENTRENAMIENTO DE LA RED DE RETROPROPAGACIÓN COMO COMPUERTA XOR EN C++ CON 20,000 ÉPOCAS...... 70
vii
viii
Introducción
Objetivo general
Objetivos específicos
Justificación
Las redes neuronales tienden a un procesamiento de información perteneciente a la
inteligencia artificial que busca emular el comportamiento del sistema nervioso. Se basa en las
múltiples interconexiones que se generan entre sus elementos básicos, denominados neuronas.
De esta forma, según esta interacción pueden formar diferentes tipos de arreglos para cumplir una
tarea específica.
ix
Las Líneas de trabajo en diferentes campos como son:
IMPLEMENTACIONES
SOTFWARE HARDWARE
Flexibles Eficientes
Programas con licencia FPGA (acelera las fases de ejecución)
Economicos Chips (VLSI Digital)
Biochips
VLSI analógico
Opto-Electrónicos
Portabilidad
No dependen de una computadora
Ahorro de energia
x
Planteamiento del problema
Si bien la mayoría de redes neuronales artificiales están diseñadas en software y dependen
para ello de un ordenador para su entrenamiento y adaptación, en este trabajo se tiene como
objetivo demostrar el mayor aprovechamiento de la implementación en hardware del algoritmo
de entrenamiento de retropropagación (Backpropagation), por esto la importancia y la vigencia de
las implementaciones en hardware que planteamos radica en aprovechar las ventajas propias de
las redes neuronales artificiales en específico del entrenamiento de retropropagación, para las
aplicaciones que requieren un alto desempeño de ejecución, velocidad y factibilidad que nos
ofrece programarla en un FPGA con Lenguaje Descriptor de Hardware, sin depender de un
ordenador para sus etapas de entrenamiento y ejecución.
Los FPGA son dispositivos programables con una alta capacidad de integración. Estos
dispositivos están diseñados para implementaciones en hardware, en comparación con un sistema
basado en microprocesador, todo el procesamiento realizado por la red neuronal será en paralelo
y no secuencial.
Las redes neuronales se implementan tanto en hardware como en software. Ambos tipos
de desarrollo presentan un campo de acción definido, el cual depende de los requerimientos
específicos de la aplicación; por lo cual, debe ser analizada para realizar una correcta elección
xi
xii
Marco Teórico. 1
1
Marco Teórico. 2
Una red neuronal artificial es un sistema que procesa información cuenta con ciertas
características de desempeño con las redes neuronales biológicas en común. Las redes neuronales
artificiales han sido desarrolladas como modelos matemáticos de la cognición humana, en común
basado en los siguientes supuestos:
Una red neural está caracterizada por el patrón de conexión entre las neuronas (llamado
arquitectura), el método para determinar el peso de las conexiones (llamado entrenamiento,
aprendizaje o algoritmo) y la función de activación.
Cada neurona cuenta con un estado interno, llamado nivel de activación, el cual es
recibido en la entrada por una función. Usualmente, una neurona envía su nivel de activación
como una señal a una o varias neuronas, por ejemplo, consideremos la neurona Y de la Figura 1.1
que recibe las entradas X1, X2 y X3 en la neurona Y y sus pesos respectivos en las conexiones son
W1, W2 y W3. [1]
2
Marco Teórico. 3
Hay una analogía cercana entre las estructuras de las redes neurales artificiales y las
biológicas. Una neurona biológica tiene tres tipos de componentes: Dendritas, axón y núcleo. Las
diferentes dendritas reciben señales de otras neuronas. Las señales son impulsos eléctricos que
son transmitidos a lo largo de la brecha sináptica por medio de procesos químicos. La acción de los
químicos modifica la señal en una manera similar a la que el peso de la conexión de una red neural
artificial lo hace. [1]
El núcleo de la neurona suma las señales entrantes. Cuando se reciben suficientes señales
la neurona se dispara, eso significa que transmite una señal sobre el axón a las otras neuronas.
Se puede resumir que las características las neuronas biológicas fueron sugeridas para las redes
neurales artificiales a partir de:
3
Marco Teórico. 4
Procesado Natural del Lenguaje: incluye el estudio de cómo se construyen las reglas del
lenguaje. Los científicos del conocimiento Rumelhart y McClelland han integrado una red neuronal
de proceso natural del lenguaje. El sistema realizado ha aprendido el tiempo verbal pass tense de
los verbos en Inglés. Las características propias de la computación neuronal como la capacidad de
generalizar a partir de datos incompletos y la capacidad de abstraer, permiten al sistema generar
buenos pronósticos para verbos nuevos o verbos desconocidos.
4
Marco Teórico. 5
Este tipo de problema ha sido abordado con éxito por Hopfield y el resultado de su trabajo ha sido
el desarrollo de una ANN que ofrece buenos resultados para problemas combinatorios.
Filtro de Ruido: las ANN también pueden ser utilizadas para eliminar el ruido de una señal.
Estas redes son capaces de mantener en un alto grado las estructuras y valores de los filtros
tradicionales.
Modelos Económicos y Financieros: una de las aplicaciones más importantes del modelado
y pronóstico es la creación de pronósticos económicos como por ejemplo los precios de
existencias, la producción de las cosechas, el interés de las cuentas, el volumen de las ventas etc.
Las redes neuronales están ofreciendo mejores resultados en los pronósticos financieros que los
métodos convencionales.
5
Marco Teórico. 6
Una red de una capa tiene una capa de pesos, una de conexiones y una de salidas.
Usualmente, las unidades pueden ser distinguidas como unidades de entrada, las cuales reciben
señales del mundo exterior y como unidades de salida, de las cuales, la respuesta de la red puede
ser leída. En la típica red de una capa, las unidades de entrada están totalmente conectadas a las
unidades de salida pero no están conectadas a otras unidades de entrada, tampoco las unidades
de salida están conectadas a otras unidades de salida como se muestra en la Figura 1.3.[1]
Es una red con más de una capa y nodos entre las unidades de entrada y salida. Las redes
multicapa pueden resolver problemas más complejos que las redes de una capa pero el
entrenamiento de estás es más difícil. Sin embargo ocasionalmente el entrenamiento de una red
multicapa puede ser más exitoso para resolver un problema complejo ya que es posible que una
red monocapa no podría ser entrenada correctamente. [1]
Las redes multicapa son aquellas que disponen de conjuntos de neuronas agrupadas en
varios niveles o capas. Normalmente, todas las neuronas de una capa reciben señales de entrada
de otra capa anterior, más cercana a la entrada de la red. A estas conexiones se les denomina
conexiones hacia adelante o feedforrward.
Sin embargo, en un gran número de estas redes también existe la posibilidad de conectar
las salidas de las neuronas de capas posteriores a las entradas de las capas anteriores, a estas
conexiones se les denomina conexiones hacia atrás o feedback.
6
Marco Teórico. 7
7
Marco Teórico. 8
ADALINE/MADALINE
PERCEPTRON
LINEAR/ASSOC REWART PENALITY
CONEXIONES HACIA LINEAR/ASSOCOIATIVE MEMORY
DELANTE FEEDFORWARD OPTIMAL LINEAR ASSOC MEM.
DRIVE-REINFORCEMENT (DR)
CONEXIONES LATERALES LEARNIG VECTOR QUANTIZER
2 CAPAS
IMPLICITAS Y AUTORREC. TOPOLOGY PRESERVING MAR (TPM)
BIDIRECTIONAL ASSOC MEM. (BAM)
ADAPTIVE BAM
CONEXIÓN ADELANTE- SIN CONEXIONES LATERALES
TEMPORAL ASSOC MEMORY (TAM)
ATRÁS
FUZZY ASSOCIATIVE MEMORY (FAM)
FEEDFORWARD/FEEDBACK
CON CONEXIONES COMPETTITIVE ADAPTIVE BAM
LATERALES Y AUTOCORREC. ADAPTIVE RESSONANCE THEORY (ART)
ADAPTIVE HEURISTIC CRITIC (AHC)
CONEXIONES HACIA SIN CONEXIONES LATERALES
BOLTZMANN/CAUCHY MACHINE
ADELANTE
CON CONEXIONES COUNTERPROPAGATION
3 (FEEDFORWARD)
LATERALES BOLTZMANN/CAUCHY MACHINE
CONEXIONES ADELANTE Y LATERALES BOLTZMANN/CAUCHY MACHINE
CONEXIONES HACIA ADELANTE BACK-PROPAGATION (BPN)
FEEDFORWARD-FEEDBACK JERARQUIA DE NIVELES DE
N COGNITRON/NEOCOGNITRON
CAPAS BIDEMENCIONALES
El aprendizaje es el proceso por el cual una red neuronal modifica sus pesos en respuesta a
la información de entrada. Los cambios que se producen durante el proceso de aprendizaje se
reducen a la destrucción, modificación y creación de conexiones entre neuronas. En los sistemas
biológicos existe una continua creación y destrucción de conexiones. En los modelos de redes
neuronales artificiales, la creación de una nueva conexión implica que el peso de la misma pasa a
tener un valor distinto de cero. De la misma forma, una conexión se destruye cuando un peso pasa
a ser cero.
8
Marco Teórico. 9
Es por ello que una de las clasificaciones por las que se realizan las redes neuronales
obedece al tipo de aprendizaje utilizado por dichas redes. Así se pueden distinguir:
Otro criterio que se puede utilizar para diferenciar las reglas de aprendizaje se basa en
considerar si la red puede aprender durante su funcionamiento habitual o si el aprendizaje supone
la desconexión de la red; es decir su inhabilitación hasta que el proceso termine. En el primer caso,
se trataría de un aprendizaje ON LINE, mientras que el segundo se conoce como aprendizaje OFF
LINE.
9
Marco Teórico. 10
PERCEPTRON
APRENDIZAJE POR ADALINE/MADALINE
OFF LINE
CORRECCIÓN DE ERROR BACK-PROPAGATION (BPN)
COUNTERPROPAGATION
LINEAR REWART PENALTY
APRENDIZAJE POR
ON LINE ASSOCIATIVE REWART PENALTY
REFUERZO
ADAPTIVE HEURISTIC CRITIC (AHC)
APRENDIZAJE BOLTZMANN MACHINE
OFF LINE
ESTOCASTICO CAUCHY MACHINE
HOPFIELD
LEARNING MATRIX
LINEAR ASSOCIATIVE MEMORY (LAM)
OFF LINE
OPTIMAL LAM
DRIVE-REINFORCEMENT
APRENDIZAJE HEBBIANO
FUZZY ASSOCIATIVE MEMORY (FAM)
ADDITIVE GROSSBERG
SHUNTING GROSSBERG
ON LINE
BIDIRECTIONAL ASSOC MEM. (BAM)
ADAPTIVE BAM
LEARNING VECTOR QUANTIZER
APRENDIZAJE
COGNITRON/NECOGNITRON
COMPETITIVO
OFF LINE TOPOLOGY PRESERVING MAP
/COOPERATIVO
ON LINE ADAPTIVE RESONANCE THEORY
10
Marco Teórico. 11
El objetivo del entrenamiento de una RNA es conseguir una aplicación determinada, para
un conjunto de entradas produzca el conjunto de salidas deseadas o mínimamente consistentes. El
proceso de entrenamiento consiste en aplicación de diferentes conjuntos o vectores de entrada
para que se ajusten los pesos de las interconexiones según un procedimiento predeterminado.
Durante la sesión de entrenamiento los pesos convergen gradualmente hacia los valores que
hacen que cada entrada produzca el vector de salida deseado.
Los sistemas no supervisados son modelos de aprendizaje más lógicos en los sistemas
biológicos. Desarrollados por Kohonen en 1984 y otros investigadores, estos sistemas de
aprendizaje no supervisado no requieren de un vector de salidas deseadas y por tanto no se
realizan comparaciones entre las salidas reales y salidas esperadas. El conjunto de
11
Marco Teórico. 12
1.1.6. El Perceptrón
El Perceptrón [3] fue la primera red neuronal artificial. Era computacionalmente factible
sobre el hardware de aquella época, estaba basada en modelos biológicos y era capaz de
aprender. Desafortunadamente también sufría de importantes debilidades: la inhabilidad de
aprender a realizar una importante clasificación de tareas. Sin embargo, comentar sobre eta red
puede contribuir a entender cercanamente redes relacionadas las cuales son inmensamente
prácticas.
Rosenblatt propuso varias variaciones del Perceptrón pero la más sencilla consiste de tres
capas. La primera es una entrada “retina”. Está conectada a una segunda capa, compuesta de lo
que él llamo “unidades de asociación”, las cuales actúan como detectores de caracteres, esta capa
finalmente se conecta a una capa de salida. Las unidades (neuronas) en su modelo producen una
salida que es una suma la cual tiene un umbral con un peso, de sus entradas. [3]
Simuladores Software: constituyen una de las formas más versátiles con las que se pueden
implementar redes neuronales. Estos programas constituyen todo un sistema de desarrollo para
prototipos de Redes Neuronales. Estos programas se utilizan para diseñar, construir, entrenar y
probar Redes neuronales artificiales para resolver problemas complejos y problemas del mundo
real.
Los primeros simuladores software se ejecutaban en ordenadores grandes con
demasiados recursos pero el avance de los ordenadores personales en capacidad de procesado y
capacidad de memoria hace posible que exista una serie de simuladores software de grandes
prestaciones que corren sobre ordenadores personales. Entre otros paquetes software se incluye
Neural Works, Neuralyst, Explore Net y Kwowledge Net.
12
Marco Teórico. 13
Robert Hecht-Nielsen desarrolló el acelerador Mark III hardware que constaba de 8100
procesadores y trabajaba como un periférico de un VAX. La mayoría de las casas comerciales
dedicadas al diseño de las ANN han desarrollado diferentes tarjetas basadas en los diferentes
procesadores existentes, diseñadas para trabajar en el entorno de un ordenador personal PC y
presentando un progresivo ratio de actualizaciones e interconexiones por segundo.
Chips de Silicio: Otro de los campos de la investigación en el mundo de las ANN al margen
de los simuladores software y aceleradores hardware, es la integración de todos los componentes
de computación neuronal en un chip de silicio. Un ejemplo concreto es el chip Electronic Neural
Network (EEN) de la compañía AT&T que contiene 256 transistores-neuronas y más de 100.000
resistencias-sinapsis. Actualmente este chip se está utilizado para aplicaciones de compresión del
ancho de banda de imágenes de vídeo para poder ser transmitidas por una línea telefónica.
Existen muchas compañías y centros de investigación que están trabajando en el desarrollo de
circuitos integrados diseñados para computación neuronal. La mayoría de las aplicaciones de estos
chips son la simulación de procesos sensitivos como; visión de imágenes y la audición de sonidos.
13
Marco Teórico. 14
Los bloques lógicos están conformados por tablas de verdad (Look-Up Table, LUT), la cual
es un circuito programable que permite implementar cualquier función lógica de un número
determinado de entradas, por flip-flops y multiplexores.
Para controlar las conexiones necesarias entre los bloques lógicos los recursos de
interconexión y las unidades de entrada-salida se programan dichas conexiones mediante técnicas
de programación con la tecnología de celdas SRAM.
• Bloques lógicos configurables (CLB) contienen flexibles tablas de consulta (LUT) que
implementan la lógica más elementos de almacenamiento utilizados como flip-flops.
CLBs realizar una amplia variedad de funciones lógicas, así como almacenado de datos.
• Bloques de Entradas / Salidas (IOBs) que controlan el flujo de datos entre los pines de
E / S y lógica interna del dispositivo. Cada IOB apoya el flujo bidireccional de datos más 3
estados de operación. Soportan una gran variedad de señales, entre ellos cuatro de alto
rendimiento diferencial.
14
Marco Teórico. 15
La familia Spartan-3E Figura 1.5 cuenta con una amplia red de registros que interconectar
los cinco elementos funcionales, la transmisión de señales entre ellos. Cada elemento funcional
tiene asociado una matriz de conmutación que permite múltiples conexiones de enrutamiento
Figura 1.6[12]
15
Marco Teórico. 16
Es utilizado principalmente, junto con Verilog, para implementar circuitos en FPGA’s, CPLD´s y en
el campo de los ASIC’s, siendo este diseño portable y reusable.
Cabe mencionar que las sentencias VHDL son inherentemente concurrentes, es decir, se ejecutan
simultáneamente. Solamente las que se encuentren dentro de procesos, funciones o procesos son
ejecutados de manera secuencial.
Para realizar esta labor, se utilizan las denominadas herramientas EDA (Electronic Design
Automation) creadas especialmente para las tareas de síntesis, implementación y simulación de
16
Marco Teórico. 17
circuitos descritos. Algunas son ofrecidas dentro de los entornos de desarrollo de los fabricantes
(Quartus II, MAXPLUS II, ISE) mientras que otros son desarrollados y ofrecidos por compañías EDA
especializadas como Leonardo Spectrum (sintetizador de Mentor Graphics). [5]
17
Marco Teórico. 18
18
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 19
Capítulo 2 Algoritmos de
entrenamiento Perceptrón y de
Retropropagación
(Backpropagation)
19
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 20
2.1 Introducción
En este capítulo examinaremos un grupo de redes neuronales que tienen una arquitectura
similar. Este es el grupo de las redes con conexiones hacia adelante, las cuales se caracterizan por
arquitecturas en niveles y conexiones estrictamente hacia adelante entre neuronas. Estas redes
son todas buenas clasificadoras de patrones y utilizan aprendizaje supervisado.
Las redes ADALINE (ADAptive LINear Element) ver Figura 2.1 y MADALINE (Múltiple
ADALINE) ver Figura 2.2 fueron desarrollados por Bernie Widrow [Widrow 60] en la Universidad
de Stanford poco después de que Rosenblatt desarrollara el Perceptrón. La red ADALINE está
limitada a una única neurona de salida, mientras que MADALINE puede tener varias. [13]
20
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 21
21
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 22
22
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 23
23
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 24
2.2. Perceptrón
Perceptrón formado por varias neuronas de lineales para recibir las entradas a la red y una
entrada de salida, es capaz de decidir cuando una entrada presentada a lared pertenece a una de
las dos clases que es capaz de reconocer.
La única neurona de salida del Perceptrón realiza la suma ponderada de las entradas, resta
el umbral y pasa el resultado a una función de transferencia de tipo escalón.
Sin, embargo , el Perceptrón , al constar sólo de una capa de entrada y otra de salida con
una única neurona, tiene una capacidad de representación bastante limtada. Este modelo solo es
capaz de discriminar patrones muy sencillos, linealmente separables. El caso más conocido es la
imposibildad del Perceptrón de representar la función OR-EXCLUSIVA.
24
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 25
El algoritmo de aprendizaje del perceptrón es de tipo supervizado, lo cual requiere que sus
resultados sean evaluados y se realicen las oportunas modificaciones del sistema si fuera
necesario.
Inicialmente se asignan valores aleatorios a cada uno de los pesos (wi) de las conexiones y
al umbral (-w0=0).
Presentar un nuevo patrón de entrada Xp = (x1, x2,…, xN) junto con la salida esperada
d(t).
25
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 26
wi(t+1)= wi (t)+α[d(t)-y(t)]xi(t)
(0≤i≤N)
Donde d(t) representa la salida deseada, y será 1 si el patrón pertenece a la clase A, y -1 es la clase
B. En estas ecuaciones, α es un factor de ganancia en el rango 0.0 a 1.0. [13]
En 1986, Rumelhart, Hinton y Williams, formalizaron un método para que una red
neuronal aprendiera la asociación que existe entre los patrones de entrada y las clases
correspondientes, utilizando varios niveles de neuronas.
Este proceso se repite, capa por capa, hasta que todas las neuronas de la red hayan
recibido un error que describa su aportación relativa al error total. Basándose en el valor del error
recibido, se reajustan los pesos de conexión de cada neurona, de manera que en la siguiente vez
que se presente el mismo patrón, la salida esté más cercana a la deseada [16][18][19].
26
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 27
La regla por Widrow en 1960 (regla delta) a sido extendida con redes con capas
intermedias (regla Delta Generalizada) con conexiones hacia adelante (feedforward) y cuyas
células tienen funciones de activación continuas (lineales o sigmoidales), dando lugar al algoritmo
de retropropagación (backpropagation). Estas funciones continuas son no decresientes y
derivables. [13]
Este algoritmo utiliza también una función o superficie de error asociada a la red,
buscando el estado estable de mínima energía o de mínimo error a través del camino descendente
27
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 28
de la superficie del error. Por ello, realimenta el error del sistema para realizar la modificación de
los pesos en un valor proporcional al gradiente de dicha función de error.
El método que sigue la regla generalizada para ajustar los pesos es exactamente el mismo que el
de la regla utilizada en el Perceptrón y ADALINE; es decir, los pesos se actualizan de forma
proporcional a la delta, o diferencia entre la salida deseada y la obtenida (δ= sal. Deseada – sal.
obtenida). [13]
En una red Backpropagation existe una capa de entrada con N neuronas y una capa de
salida con M neuronas y al menos una capa oculta de neuronas internas. Cada neurona de una
capa (excepto las de entrada) recibe entradas de todas las neuronas de la capa anterior y envía su
salida a todas las neuronas de la capa posterior (excepto las de salida). No hay conexiones hacia
atrás feedback ni laterales entre las neuronas de la misma capa.
La aplicación del algoritmo tiene dos fases, una hacia delante y otra hacia atrás. Durante la
primera fase el patrón de entrada es presentado a la red y propagado a través de las capas hasta
llegar a la capa de salida. Obtenidos los valores de salida de la red, se inicia la segunda fase,
comparándose éstos valores con la salida esperada para así obtener el error. Se ajustan los pesos
de la última capa proporcionalmente al error. Se pasa a la capa anterior con una retropopagación
del error, ajustando los pesos y continuando con este proceso hasta llegar a la primera capa. De
esta manera se han modificado los pesos de las conexiones de la red para cada patrón de
aprendizaje del problema, del que conocíamos su valor de entrada y la salida deseada que debería
generar la red ante dicho patrón.
La técnica Backpropagation requiere el uso de neuronas cuya función de activación sea continua, y
por lo tanto, diferenciable. Generalmente, la función utilizada será del tipo sigmoidal.
2. Presentar un patrón de entrada y especificar la salida deseada que debe generar la red.
Para ello se presentan las entradas a la red y se calcula la salida de cada capa hasta llegar a la capa
de salida, ésta será la salida de la red. Los pasos son los siguientes:
28
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 29
Se calculan las entradas netas para las neuronas ocultas procedentes de las neuronas de entrada.
Para una neurona j oculta:
Ecuación 1
Ecuación 2
Se realizan los mismos cálculos para obtener las salidas de las neuronas de salida:
Ecuación 3
La función f debe ser derivable. En general disponemos de dos formas de función de salida:
La selección de la función depende de la forma que se decida representar la salida: si se desea que
las neuronas de salida sean binarias, se utiliza la función sigmoidal, en otros casos, la lineal.
29
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 30
por lo que los términos de error para las neuronas de salida quedan:
Si la neurona j no es de salida, entonces la derivada parcial del error no puede ser evaluada
directamente, por tanto se obtiene el desarrollo a partir de valores que son conocidos y otros que
pueden ser evaluados.
donde observamos que el error en las capas ocultas depende de todos los términos de error de la
capa de salida. De aquí surge el término propagación hacia atrás.
Paso 5. Actualización de los pesos: para ello utilizamos un algoritmo recursivo, comenzando por las
neuronas de salida y trabajando hacia atrás hasta llegar a la capa de entrada, ajustando los pesos
de la siguiente forma:
30
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 31
En ambos casos, para acelerar el proceso de aprendizaje se puede añadir un término momento.
resulta aceptablemente pequeño para cada uno de los patrones aprendidos [4][5].
Respecto al número de capas de la red, en general tres capas son suficientes (entrada -
oculta-salida). Sin embargo, hay veces que un problema es fácil de resolver con más de una capa
oculta. El tamaño de las capas, tanto de entrada como de salida, suele estar determinado por la
naturaleza de la aplicación. En cambio, decidir cuántas neuronas debe tener una capa oculta no
suele ser tan evidente. El número de neuronas ocultas interviene en la eficiencia de aprendizaje y
de generalización de la red. No hay ninguna regla que indique el número óptimo, en cada
problema se debe ensayar. [13]
31
Algoritmos de entrenamiento Perceptrón y de Retropropagación (Backpropagation) 32
32
Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y máquinas de
33
estado finito)
Capítulo 3 Implementación de
Algoritmos de entrenamiento en
VHDL (unidad de control y
máquinas de estado finito)
33
Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y máquinas de
34
estado finito)
3.1. Introducción
Un FSMD (máquina de estado finito con ruta de datos) combina una FSM y circuitos
secuenciales. Los FSM, que algunas veces se conoce como una ruta de acceso de control,
examinan los mandatos externos y el estado, y genera las señales de control para especificar la
operación regular de circuitos secuenciales, que se conocen colectivamente como una ruta de
datos. La FSMD es utilizada para poner en práctica los sistemas descritos por RT (registro
transferencia) metodología, en la que las operaciones se especifican como manipulación de datos
y la transferencia de una colección de registros. [22]
Donde rdest está el registro de destino, rsrc1,r src2, y rsrcn son la fuente registra, y f ( .)
especifica la operación que se va a realizar. La notación indica que el contenido de la fuente los
registros son alimentados a la f (.). La cual se realiza mediante un circuito combinatorio, y el
resultado se pasa a la entrada del registro de destino y se almacena en el registro de destino en el
siguiente flanco de reloj. Las siguientes operaciones son varias formas de representar RT:
34
Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y máquinas de
35
estado finito)
En el diagrama de bloques se muestra que para mayor claridad, se utiliza el registro y los
siguientes sufijos para representar la entrada y la salida de un registro. Se tiene en cuenta que
cada operación de RT está sincronizada por el reloj. El resultado de la función f (.) no se almacena
para registrar el destino hasta el siguiente flanco ascendente del reloj.
Ejemplo:
35
Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y máquinas de
36
estado finito)
36
Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y máquinas de
37
estado finito)
Un FSM (máquina de estados finitos) se utiliza para modelar un sistema que transita entre un
número finito de estados internos. Las transiciones dependen de la entrada del estado y externa
actual. A diferencia de un circuito secuencial regular, las transiciones de estado de la FSM, que no
presentan un sencillo y repetitivo patrón. Su lógica siguiente estado por lo general se construye a
partir de cero y, a veces se conoce como Lógica "al azar". Esto es diferente de la lógica siguiente
estado de un circuito secuencial regular, que se compone principalmente de los componentes
"estructurados", como incrementos y palancas de cambio.
Un diagrama de estado se compone de nodos, que representan los estados y están dibujados
como círculos y arcos de transición anotados. Una expresión lógica se expresa en términos de
señales de entrada se asocia con cada arco de transición y representa una condición específica. El
arco se toma cuando el correspondiente expresión se evalúa verdadero.
Los valores de salida Moore se colocan en el interior del círculo, ya que dependen sólo del
estado actual. Los valores de salida Mealy se asocian con las condiciones de arcos
Un cuadro de estado representa un estado en el FSM, y los valores de salida afirmado Moore
se enumeran dentro de la caja. Tenga en cuenta que sólo tiene un camino de salida. Una caja de
decisión prueba la condición de entrada y determina que salen camino a tomar. Cuenta con dos
vías de salida, marcada T y F, que se corresponden con los valores verdaderos y falsos de la
enfermedad. A condicionales listas de los cuadros de salida afirmaron valores de salida Mealy y
37
Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y máquinas de
38
estado finito)
por lo general se coloca después de un cuadro de decisión. Indica que la señal de salida de lista se
puede activar sólo cuando se cumple la condición correspondiente en el cuadro de decisión. [22]
ENTIDAD
38
Implementación de Algoritmos de entrenamiento en VHDL (unidad de control y máquinas de
39
estado finito)
Después de producir una lista de conexiones a nivel de puertas, un optimizador de la lógica lee
en este net list y optimiza el circuito de la zona y el momento especificado por el usuario
limitaciones.
Un circuito puede ser descrito de muchas maneras diferentes, no todos los cuales pueden
ser sintetizables. Esto es debido al hecho de que VHDL fue diseñado principalmente como lenguaje
de simulación y no para la síntesis.
No hay objeto directo en VHDL que significa un cerrojo o un flip-flop, Por lo tanto, cada
sistema de síntesis proporcionan diferentes mecanismos para modelar un flip-flop o un latch.
• Alambre
• Flip-flop (un dispositivo activado por flancos)
• Latch (un dispositivo sensible al nivel)
Las tres condiciones deben cumplirse antes de que una variable se deduzca como un Latch.
40
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
41
el algoritmo de entrenamiento y comparación con su equivalente en software
41
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
42
el algoritmo de entrenamiento y comparación con su equivalente en software
4.1. Introducción
4.2.1. Puertos
Las unidades de control requieren de puertos por los cuales se comuniquen, con el resto
del hardware, en los puertos se han incluido entrada y salida de datos, reloj y reset.
42
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
43
el algoritmo de entrenamiento y comparación con su equivalente en software
Es importante notar que dentro del sistema de reloj que se desarrolló para la unidad de
control, se hace uso de los flancos de subida para actualizar el valor de las variables, como se
mencionó en el capítulo 3, es necesario trabajar las variables con 2 estados, uno futuro y uno
actual ya que si se intenta usar la variable normal como usualmente se hace en lenguajes como C,
es muy probable tener errores y advertencias de fallas por latch (enclavamiento o
retroalimentación).
Dentro de esta misma sección de reloj se define como es que el sistema se comportará
ante un reset, lo que se estableció es que la máquina de estados se regrese al primer estado y los
valores de las variables se restablezcan a sus valores iniciales para repetir el proceso de
entrenamiento.
43
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
44
el algoritmo de entrenamiento y comparación con su equivalente en software
VHDL cuenta con una gran variedad de tipos de variables disponibles para almacenar
datos. Para el caso de las redes neuronales es necesario contar con variables enteras con signo y
variables de punto flotante con signo. Las variables enteras con signo son parte de la librería
básica de VHDL por lo que no es necesario desarrollar una librería propia para hacer uso de ellas,
en el caso de las variables de punto flotante no es así. VHDL no tiene en sus librerías básicas
soporte para variables de punto flotante ni de punto fijo por lo que es necesario, por ejemplo para
el caso de una red neuronal de retropropagación, desarrollar o implementar una librería de punto
flotante ya que el uso de este tipo de variable es necesario. Actualmente hay disponibles librerías
para el uso de punto flotante y fijo en VHDL, estas se pueden conseguir en el sitio
http://www.vhdl.org. Es importante mencionar que no todas las operaciones con punto flotante
son sintetizables por lo que se tiene que realizar un estudio profundo de las características con las
que cuenta esta librería para ajustarla a las necesidades del proyecto en el cuál se implementará
Todas las variables tienen un valor futuro y uno registrado o actual para que, como se
mencionó en la descripción del reloj, al terminar un ciclo de reloj la variable actualice su valor.
44
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
45
el algoritmo de entrenamiento y comparación con su equivalente en software
Dentro de las opciones que ofrece VHDL para realizar un proceso, la más adecuada para
este caso es la implementación de una máquina de estados ya que cuando se define bien como
trabajará la transición de estados y como se comportarán las variables involucradas en este
proceso, la sintetización se logra sin problemas por lo que se obtiene una arquitectura
implementable en hardware. Mostrar gráficamente una máquina de estados es poco práctico en
este caso ya que cuenta con varias operaciones internas en cada estado por lo que se muestran
diagramas de flujo generalizados para hacer más simple la visualización de cómo se implementan
los algoritmos.
El perceptrón con el que se realizan las pruebas es el de la Figura 4.5, este es el perceptrón
que se entrena para ambos casos, software y hardware
45
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
46
el algoritmo de entrenamiento y comparación con su equivalente en software
46
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
47
el algoritmo de entrenamiento y comparación con su equivalente en software
47
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
48
el algoritmo de entrenamiento y comparación con su equivalente en software
48
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
49
el algoritmo de entrenamiento y comparación con su equivalente en software
Aquí se describen las funciones que realizan los estados de la máquina de estados de la
Figura 4.6 para realizar el entrenamiento de un perceptrón
init_value: En este estado se inicializan las todas las variables (pesos, polarización, errores,
alpha de aprendizaje, contadores, etc.).
49
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
50
el algoritmo de entrenamiento y comparación con su equivalente en software
ek_calc: Se calcula el error actual entre el resultado de la salida actual y el valor de salida
deseado.
ek_eval: Se evalúa el error actual para decidir si es necesario recalcular los pesos o no.
También controla el contador con el que se seleccionan los patrones de entrada y salida, si es que
este ha alcanzado el último patrón de entradas y salidas el contador es reiniciado.
weigh_calc: Cálculo de los nuevos pesos y del error total de la época de entrenamiento.
et_eval: Evaluación del error total, si se encuentra fuera del valor de tolerancia se realiza
una nueva época de entrenamiento, reiniciando también el contador que selecciona las parejas de
patrones entrada/salida.
others: Este es un estado que debe ser incluido por defecto dentro del proceso de
máquina de estados en VHDL, sirve para considerar todas aquellas posibilidades que aunque
tengan poca probabilidad de suceder, deben ser especificadas para no caer en una incertidumbre,
en este caso si hay una transición incorrecta por una mala actualización de las variables que
controlan las transiciones de estados, la máquina de estados se reinicia.
La evaluación de la función sigmoidal por medio de una tabla de valores se usa ya que el
cálculo de operaciones que involucran funciones exponenciales es complicado de implementar en
VHDL.
50
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
51
el algoritmo de entrenamiento y comparación con su equivalente en software
función de activación sigmoidal evaluada por medio de una tabla de valores, los cálculos pierden
un poco de precisión y es probable que el error tarde más en converger u oscile.
others: Este es un estado que debe ser incluido por defecto dentro del proceso de
máquina de estados en VHDL, sirve para considerar todas aquellas posibilidades que aunque
tengan poca probabilidad de suceder, deben ser especificadas para no caer en una incertidumbre,
en este caso si hay una transición incorrecta por una mala actualización de las variables que
controlan las transiciones de estados, la máquina de estados se reinicia.
51
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
52
el algoritmo de entrenamiento y comparación con su equivalente en software
4.2.6. Sintetizabilidad
En VHDL se cuenta con varias instrucciones y sentencias las cuales pueden ser útiles con el
fin de simulación pero no todas las instrucciones del lenguaje son sintetizables. Para crear una
arquitectura sintetizable se deben tener muchos aspectos en cuenta ya que nunca se debe olvidar
que se está describiendo una arquitectura de hardware, interconexiones dentro del FPGA las
cuales están presentes todo el tiempo, muy diferente al modelo de programación al que
usualmente estamos acostumbrados, un modelo secuencial en el que las instrucciones se ejecutan
una tras otra (por ejemplo lenguaje C/C++) y no todas al mismo tiempo, el caso de VHDL.
También es posible que algunas instrucciones sean sintetizables pero solo bajo situaciones
muy bien definidas por lo que es necesario prestar mucha atención a como se utilizan, tal es el
caso de los ciclos for, por mencionar uno.
En el caso del punto flotante la sintetizabilidad es alcanzable pero costosa, el uso de punto
flotante en hardware es una operación que requiere de hasta 3 veces más recursos que el uso de
punto flotante en software. Aun así se puede lograr sintetizar pero es necesario definir muy
claramente las magnitudes de las variables y las operaciones que se realizarán, es posible que se
obtengan algunas advertencias en la sintetización pero en las simulaciones se puede comprobar el
correcto funcionamiento.
52
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
53
el algoritmo de entrenamiento y comparación con su equivalente en software
En la Figura 4.10 se muestra como es notable la diferencia entre la forma de realizar una
misma operación en cada uno de los lenguajes y como es la actualización de los registros en VHDL
haciendo uso de los estados futuros y registrados, la operación realizada es la actualización de
pesos para un perceptrón.
53
Diseño y descripción de la implementación de una unidad de control en hardware para ejecutar
54
el algoritmo de entrenamiento y comparación con su equivalente en software
Figura 4.10 Comparación de las características del código para una misma función
Esta operación tan sencilla en C++ para ser implementada en VHDL tiene que ser realizada
en un estado dedicado a la misma operación y después, con el flanco de subida del reloj, el valor
del registro futuro (next) será almacenado en el registro actual o registrado (reg).
VHDL cuenta con una instrucción de ciclo for pero en un caso como este no es práctico
implementarla ya que no será sintetizable dentro de una máquina de estados.
54
Simulación y resultados 55
55
Simulación y resultados 56
Para simular el entrenamiento se hizo uso de la herramienta integrada a Xilinx ISE Design
Suit 13.1, llamada ISE Simulator. En este simulador se puede observar cómo se comportan los
registros con respecto al tiempo y el paso de los pulsos de reloj del sistema.
Los resultados son comparados con los programas de implementación en C++ con fines de
comprobación del correcto funcionamiento así como, una vez más, encontrar diferencias en el
rendimiento de las 2 diferentes formas de implementación (hardware y software) de un mismo
algoritmo de entrenamiento.
Antes de poder simular una arquitectura diseñada en VHDL es necesario que se haga una
revisión de sintaxis utilizando las herramientas integradas del entorno de desarrollo. Es muy
importante notar que a pesar de que se realice la revisión de sintaxis de manera correcta es
posible que la arquitectura no sea sintetizable, esto por que como el nombre del proceso lo
menciona, solo revisa la sintaxis del código desarrollado, esto abarca que las líneas estén bien
escritas y que no hagan falta caracteres como “;” al final de estas, etc.
56
Simulación y resultados 57
Este paso es importante ya que el objetivo de esta tesis es realizar una arquitectura que
sea implementable en el FPGA y no sólo simulable.
57
Simulación y resultados 58
En la columna llamada name se enlistan las diferentes señales y registros que se analizan
en la simulación y las principales son
Pesos: w1, w2
Polarización: b
Errores: ek, et
Reloj: clock
Reset: reset
Esta simulación es de 2 micro segundos y se observa que antes de alcanzar los 2,000 nano
segundos el perceptrón ya alcanzó el estado llamado done, el estado que de acuerdo a la máquina
de estados desarrollada, indica que el entrenamiento ha terminado, también se observa que los
valores de los registros han dejado de variar al alcanzar el estado done. Antes de llegar al estado
done se observa que los estados están realizando la transición, en la Figura 5.5 se muestra un
aumento de la imagen por medio de la herramienta de zoom de ISE Simulator, también se
observa cómo la transferencia de valor de los registros next a los registros reg tienen un pequeño
retraso por que como se mencionó, la actualización de los registros se ejecuta en el flaco de
subida y se puede comprobar en la simulación que también cuenta con la señal clock.
58
Simulación y resultados 59
59
Simulación y resultados 60
60
Simulación y resultados 61
61
Simulación y resultados 62
63
Simulación y resultados 64
64
Simulación y resultados 65
65
Simulación y resultados 66
De las simulaciones (Figura 5.8, Figura 5.11 y Figura 5.12) y haciendo la comparación
(Figura 5.9,Figura 5.10 y Figura 5.13) del entrenamiento se obtuvieron los mismos resultados que
en la versión del programa en lenguaje C++ pero como se puede ver en los diagramas de tiempo,
el entrenamiento concluye rápidamente, en tiempos que no sobrepasan los 3 microsegundos, el
rendimiento del algoritmo implementado en un FPGA se ve mejorado de manera muy notable ya
que el paralelismo de la arquitectura permite que un gran número de operaciones sean realizadas
en un mismo ciclo de reloj.
En la Tabla 5-1 se resumen los valores obtenidos para los entrenamientos del perceptrón, así
como el tiempo que tomaron para concluir.
67
Simulación y resultados 68
Para la red de retropropagación se realizará el entrenamiento de la red como una compuerta XOR.
También se muestra la comparación del mismo entrenamiento realizado en software con C++.
Para el entrenamiento en software se mostrarán los valores obtenidos para entrenamientos de
5,000 y 20,000 épocas para hacer la comparación con los valores que se obtienen por el
entrenamiento en hardware con 5,000 épocas.
Para la red de retropropagación, como se mencionó antes, se hizo uso de las librerías de punto
flotante que se pueden conseguir en www.vhdl.org y cumplen con la norma de la IEEE 754 para el
manejo de variables de punto flotante.
68
Simulación y resultados 69
Figura 5.14 Simulación del entrenamiento de la red de retropropagación como compuerta XOR
69
Simulación y resultados 70
En la Figura 5.14 se observa una parte de la simulación del entrenamiento. Se puede ver que el
entrenamiento de la red termina en 4.4 milisegundos y en este caso como el punto flotante se
implementó por medio de una librería externa solo se puede ver el valor de los registros en bits.
En la Figura 5.15 se muestran los resultados obtenidos para el mismo entrenamiento realizado en
C++ utilizando 5,000 épocas y en la Figura 5.16 se muestran los resultados para 20,000 épocas.
Figura 5.15 Entrenamiento de la red de retropropagación como compuerta XOR en C++ con 5,000 épocas
Figura 5.16 Entrenamiento de la red de retropropagación como compuerta XOR en C++ con 20,000 épocas.
Para facilitar la comparación de los datos, se resumen en la Tabla 5-2 junto a los valores obtenidos
por el entrenamiento en hardware convertidos a valor decimal.
70
Simulación y resultados 71
Los valores obtenidos por el entrenamiento realizado con la implementación en VHDL son
cercanos a los que se obtienen por medio de una implementación típica en software con la
ventaja de que el entrenamiento se realiza muy rápido y se puede realizar sobre el mismo FPGA.
También se puede observar que la magnitud del error es pequeña así entonces se nota que este
método de entrenamiento por hardware es confiable.
71
Simulación y resultados 72
72
Conclusiones y futuras posibilidades de desarrollo 73
73
Conclusiones y futuras posibilidades de desarrollo 74
6.1. Conclusiones
El paralelismo del FPGA es uno de los factores clave que permite que el entrenamiento se
realice tan rápido. Al incrementar el número de neuronas y capas el entrenamiento tomará más
tiempo pero seguirá siendo muy rápido.
Tener un hardware dedicado a una tarea específica es una de las maneras de incrementar
la eficiencia de un sistema, la implementación de redes neuronales en hardware permite una alta
eficiencia la cual mejorará notablemente el desempeño de un sistema que requiera control
neuronal de alto rendimiento.
La implementación de una red neuronal con un paralelismo real hace que las redes
neuronales electrónicas se asemejen más al modelo de las redes neuronales biológicas, de las
cuales se busca imitar el comportamiento de aprendizaje y son la base de la analogía utilizada en
esta área de la computación.
Los sistemas digitales complejos están conformados por varios módulos más pequeños y
simples y una característica de VHDL es que permite este tipo de integración de entidades
pequeñas y sencillas en la arquitectura principal, así como su interconexión para poder generar un
sistema digital más grande y complejo. Al tener una neurona funcionando en VHDL, es posible
realizar redes neuronales de mayores dimensiones.
74
Conclusiones y futuras posibilidades de desarrollo 75
75
Conclusiones y futuras posibilidades de desarrollo 76
76
Bibliografía 77
Bibliografía
[1] Fausett, Laurene. Fundamentals of neural networks.
[3] Timothy Masters. Practical neural network necipes in C++. Academic Press, Inc.
[5+ Stephen Brown, Zvonko Vranesic. “Fundamentals of Digital Logic with VHDL Design”, McGraw-
Hill
[10] Mare, Harston & Pap. Handbook of Neural Computing Applications. Academic Press,
San Diego, 1990
[15]http://www.xilinx.com/support/documentation/
userguides/ug230.pdf
77
Bibliografía 78
[19] J.A. Freeman y D.M. Skapura, "Redes Neuronales: Algoritmos, Aplicaciones y Técnicas de
Programación", Addison-Wesley, 1993.
[20] Bonifacio Martín y Alfredo Sanz, “Redes Neuronales y Sistemas Difusos”, Alfaomega-
Rama, 2002
*21+ David G. Maxines, Jessica Alcalá, “VHDL el arte de programar sistemas digitales”, CECSA
Tecnologico de Monterrey, continental primera edición 2002
[22] Pong P. Chu, “FPGA PROTOTYPING BY VHDL EXAMPLES Xilinx Spartan” TM-3 Version
Cleveland State University, 2008 by John Wiley & Sons, Inc
78
Anexos 79
Anexos
Especificaciones generales de la familia de FPGA Spartan-3E
79
Anexos 80
80
Anexos 81
entity neuralnetwork is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
z : out STD_LOGIC;
clock : in STD_LOGIC;
reset : in STD_LOGIC);
end neuralnetwork;
--==============SIGNALS DECLARATION====================
begin
82
Anexos 83
begin
--next values are stored in the current signal
state_next <= state_reg;
input1_next <= input1_reg;
input2_next <= input2_reg;
target_next <= target_reg;
hidden1_next <= hidden1_reg;
hidden2_next <= hidden2_reg;
output1_next <= output1_reg;
weight_i1_h1_next <= weight_i1_h1_reg;
weight_i1_h2_next <= weight_i1_h2_reg;
weight_i2_h1_next <= weight_i2_h1_reg;
weight_i2_h2_next <= weight_i2_h2_reg;
weight_h1_o1_next <= weight_h1_o1_reg;
weight_h2_o1_next <= weight_h2_o1_reg;
output_hidden1_next <= output_hidden1_reg;
output_hidden2_next <= output_hidden2_reg;
output_output1_next <= output_output1_reg;
output1_adjustment_next <= output1_adjustment_reg;
hidden1_adjustment_next <= hidden1_adjustment_reg;
hidden2_adjustment_next <= hidden2_adjustment_reg;
i_next <= i_reg;
LEARNRATE <= to_float(0.5,LEARNRATE);
83
Anexos 84
84
Anexos 85
--F[-6]=0.0
--F[-5]=0.0066
--F[-4]=0.0179
--F[-3]=0.0474
--F[-2]=0.1192
--F[-1]=0.2689
--F[0]=0.5
--F[1]=0.7310
--F[2]=0.8807
--F[3]=0.9525
--F[4]=0.9820
--F[5]=0.9933
--F[6]=1.0
85
Anexos 86
else
if output_hidden1_reg >= to_float(6.0, output_hidden1_reg) then --x>6
output_hidden1_next <= to_float(1.0, output_hidden1_next);
else
if output_hidden1_reg >= to_float(5.0, output_hidden1_reg) then --x < 5
output_hidden1_next <= to_float(0.9933, output_hidden1_next);
else
if output_hidden1_reg >= to_float(4.0, output_hidden1_reg) then --x<4
output_hidden1_next <= to_float(0.9820, output_hidden1_next);
else
if output_hidden1_reg >= to_float(3.0, output_hidden1_reg) then --x < 3
output_hidden1_next <= to_float(0.9525, output_hidden1_next);
else
if output_hidden1_reg >= to_float(2.0, output_hidden1_reg) then --x>2
output_hidden1_next <= to_float(0.8807, output_hidden1_next);
else
if output_hidden1_reg >= to_float(1.0, output_hidden1_reg) then --x>=1
output_hidden1_next <= to_float(0.7310, output_hidden1_next);
else --x<0
output_hidden1_next <= to_float(0.5, output_hidden1_next);
end if;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
state_next <= calc_hidden_sig2;
86
Anexos 87
87
Anexos 88
88
Anexos 89
89
Anexos 90
end case;
end process;
z <= a xor b;
end training;
90
Anexos 91
entity perceptron is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
z : out STD_LOGIC;
clock : in STD_LOGIC;
reset : in STD_LOGIC);
end perceptron;
--=================STATE MACHINE============================
process(state_reg,w1_reg, w2_reg, b_reg,net_reg,i_reg,
ak_reg, dk_reg, ek_reg, et_reg, p0_reg, p1_reg, p2_reg)
begin
--=====signals initialization=====
state_next <= state_reg;
w1_next <= w1_reg;
w2_next <= w2_reg;
b_next <= b_reg;
net_next <= net_reg;
ak_next <= ak_reg;
dk_next <= dk_reg;
ek_next <= ek_reg;
et_next <= et_reg;
p0_next <= p0_reg;
p1_next <= p1_reg;
92
Anexos 93
93
Anexos 94
94
Anexos 95
end if;
end case;
end process;
z<=a and b;
end neurona;
95
Anexos 96
96
Anexos 97
#include "stdafx.h"
// Function declaratation
void Train(float a, float b, float result);
void Run(float a, float b);
float Sigmoid(float num);
// Variable declaration
float input1; // The XOR input
float input2; // The XOR input
float target; // The desired XOR output
/*
* The main function
*/
int _tmain(int argc, _TCHAR* argv[]) {
// Train
for(int i=0; i<ITER; i++){
Train(1.0,1.0,0.0);
Train(1.0,0.0,1.0);
Train(0.0,0.0,0.0);
Train(0.0,1.0,1.0);
97
Anexos 98
// Show results
Run(0.0,0.0);
Run(0.0,1.0);
Run(1.0,0.0);
Run(1.0,1.0);
system("PAUSE");
return 0;
}
/*
* Name: Train
* Input: Two inputs and the desired result
* Pre: The inputs and results are floats in the range 0.0 -
1.0
* Post: The weight of the neural network are adjusted
(trained..)
*/
void Train(float a, float b, float result){
input1 = a;
input2 = b;
target = result;
float output_hidden1;
float output_hidden2;
float output_output1;
/*
* Name: Run
* Input: Two inputs
* Pre: The inputs are floats in the range 0.0 - 1.0
* Post: Shows the output of the neural network
*/
void Run(float a, float b){
input1 = a;
input2 = b;
float output_hidden1;
float output_hidden2;
float output_output1;
99
Anexos 100
/*
* Name: Sigmoid
* Input: One input
* Pre: The input is a float (positive or negative)
* Post: Returns the result of the sigmoid function
*/
float Sigmoid(float num) {
return (float)(1/(1+exp(-num)));
}
100
Anexos 101
#include "stdafx.h"
//#include "stdio.h"
#include "conio.h"
#include "iostream"
#include "math.h"
//#include <stdlib.h>
//#include <time.h>
using namespace std;
int z[4],selec,p[3];
int i=0,j=0;
float net=0.0,ak=0.0,err[4],errt=1.0,d[4],w[3],alpha=1.0,h[4];
void calcnet(void)
{
while(errt!=0.0)
{
err[0]=0.0;
err[1]=0.0;
err[2]=0.0;
err[3]=0.0;
errt=0.0;
for(j=0;j<=3;j++)
{
err[j]=0.0;
if(j==0)
{
p[1]=0;
p[2]=0;
}
else if(j==1)
{
p[1]=0;
p[2]=1;
}
else if(j==2)
{
p[1]=1;
p[2]=0;
}
else if(j==3)
{
p[1]=1;
p[2]=1;
}
ak=0.0;
101
Anexos 102
net=0.0;
for(i=0;i<=2;i++)
{
net=net+p[i]*w[i];
}
cout<<"net="<<net<<" ";
if(net>0)
{
ak=1.0;
}
err[j]=d[j]-ak;
if(err[j]!=0.0)
{
cout<<"error="<<err[j]<<"\n";
cout<<"Nueva iteracion,recalcular W\n";
errt=1.0;
for(i=0;i<=2;i++)
{
w[i]=w[i]+alpha*err[j]*p[i];
}
}
}
}
}
d[0]=0.0;
d[1]=1.0;
d[2]=1.0;
d[3]=1.0;
}
if(selec==2)
{
d[0]=1.0;
d[1]=0.0;
d[2]=0.0;
d[3]=0.0;
}
if(selec==3)
{
d[0]=0.0;
d[1]=0.0;
d[2]=0.0;
d[3]=1.0;
}
if(selec==4)
{
d[0]=1.0;
d[1]=1.0;
d[2]=1.0;
d[3]=0.0;
}
calcnet();
cout<<"\nLa neurona ha sido entrenada\n";
cout<<"W(1)="<<w[1]<<"\n";
cout<<"W(2)="<<w[2]<<"\n";
cout<<"b="<<w[0]<<"\n\n";
cout<<"Evaluacion de la funcion de la neurona\n";
h[0]=0*w[1]+0*w[2]+w[0];
if(h[0]>0) z[0]=1;
h[1]=0*w[1]+1*w[2]+w[0];
if(h[1]>0) z[1]=1;
h[2]=1*w[1]+0*w[2]+w[0];
if(h[2]>0) z[2]=1;
h[3]=1*w[1]+1*w[2]+w[0];
if(h[3]>0) z[3]=1;
cout<<"Entradas Salida\n";
cout<<"X1 X2 Z\n";
cout<<"0 0"<<" "<<z[0]<<"\n";
cout<<"0 1"<<" "<<z[1]<<"\n";
cout<<"1 0"<<" "<<z[2]<<"\n";
cout<<"1 1"<<" "<<z[3]<<"\n";
//cout<<errt;
system("PAUSE");
return 0;
}
103