380 likes | 531 Views
Implementação de uma arquitetura de Redes Neurais MLP utilizando FPGA. Antonyus Pyetro apaf@cin.ufpe.br Orientadoras: Edna Barros - ensb@cin.ufpe.br Teresa Ludermir - tbl@cin.ufpe.br. Roteiro. Motivação Rede neural artificial Projeto de RNAs em FPGA Análise dos Resultados
E N D
Implementação de uma arquitetura de Redes Neurais MLP utilizando FPGA Antonyus Pyetro apaf@cin.ufpe.br Orientadoras: Edna Barros - ensb@cin.ufpe.br Teresa Ludermir - tbl@cin.ufpe.br
Roteiro • Motivação • Rede neural artificial • Projeto de RNAs em FPGA • Análise dos Resultados • Trabalhos relacionados • Trabalhos futuros
Motivação • RNAs – processamento paralelo e distribuído • Usada em muitas áreas do conhecimento • processamento de sinais, análise de imagens médicas, sistemas de diagnóstico e previsões de séries temporais • Implementações em software – seqüenciais • FPGAs – provêm paralelismo de hardware • Paralelismo de processo e dados • Alto poder de processamento e baixo custo
Motivação • Objetivos: • Definição de uma arquitetura de RNAs para hardware (inicialmente sem aprendizado online) • Implementação em FPGA • Validar com um modelo em software • Comparar desempenho
Rede neural artificial • Inspirado no modelo biológico • Processamento do cérebro é inerentemente paralelo e distribuído • Aprendem através de exemplos • Adaptabilidade • Capacidade de generalização • Tolerância a falhas
Neurônio– função de ativação • Algumas funções de limiar usadas são: • Função degrau unitário; • Φ(u) = 1 se u > 0, Φ(u) = 0, caso contrário • Função rampa unitária • Φ(u) = max{0.0, min{1.0, u + 0.5}} • Função sigmóide logística • Φ(u) = a /{ 1 + exp(−bu) }
Exemplo de RNA • Problema: Diabetes • Atributos de entrada: 5 • Classes: 2 • Exemplos de testes: 384 • Topologia: 5:2:2 • Função de transferência • Sigmóide
Projeto de RNAs em FPGA • Desafios: • Aritmética de ponto flutuante Vs Ponto Fixo • Como implementar a sigmóide em FPGA? • Φ(u) = 1 /( 1 + exp(−u) )
Ponto Flutuante Vs Ponto Fixo • Ponto flutuante: • Menor precisão • Range dinâmico • Menor tempo de desenvolvimento • Ponto fixo • Menor custo do produto final • Maior velocidade • Introduz oscilação na fase de aprendizado
Ponto Flutuante Vs Ponto Fixo • Componentes de ponto flutuante da Altera • Padrão IEEE 754 • Reuso • Funcionalidade garantida • Otimizada para FPGA
Implementação da sigmóide • Implementação direta em hardware • Φ(u) = 1 /( 1 + exp(−u) ) • Implementação da expansão em série • Implementação por Look up table • Implementar versão aproximada
Aproximação 1 • Tipo: por partes linear interpolada
Aproximação 1 • Computa a saída em q passos
Aproximação 1 • Erro máximo: 0.0194 • Erro médio: 1.4539e-017
Aproximação 2 • Tipo: por partes linear simples
Aproximação 2 • Erro máximo: 0.0189 • Erro médio: 8.9214e-018
Aproximação 3 • Tipo: por partes de segunda ordem
Aproximação 3 • Erro máximo: 0.0215 • Erro médio: 8.5910e-018
Nº entradas Função Operações 2 X1 x W1 + X2 x W2 + W0 X X + + 3 X1xW1 + X2xW2 + X3xW3 + W0 X X X + ++ 4 X1xW1 + X2xW2 + X3xW3 + X4xW4 +W0 X X X X + ++ + Implementação do Neurônio • Cálculo do estado de ativação • Um somador e um multiplicador
Implementação do Neurônio • Máquina de estados – neurônio 2 entradas
Implementação do Neurônio • Pesos editáveis graficamente
Implementação da Rede Neural • Controle seqüencial 384 exemplos 299,45μs
Implementação da Rede Neural • Controle paralelo 384 exemplos 165,38μs
Implementação da Rede Neural • Dados de entrada colocados em ROMs • Unidade de Controle – ativa as camadas e lê da ROM
Estrutura de teste • Comparação das saídas da rede com as saídas desejadas
Análise de resultados • Estudo de caso: Diabetes • 2 classes, 5 entradas, 384 exemplos de teste • Modelos • Matlab script – sigmóide real, aproximado • Em FPGA • Em software – C++ • Metodologia de teste • Comparar saídas e obter o erro
Análise de resultados • Erro • Matlab sigmóide real Vs sigmóide aproximada • Erro máximo: 0.0239 médio: 0.0160 • Matlab sigmóide real Vs software – C++ • Erro máximo: 0.5042e-006 • Em FPGA Vs Matlab sigmóide aproximada • Erro máximo: 0.01627 • Em FPGA Vs Matlab sigmóide real • Erro máximo: 0.04017
Tempo de execução • implementação em C++ (AMD Athlon 64 3200+ 2.20GHz com 512 MB de memória ) • 23ms • Em FPGA – fmax = 160MHz • Controle sequencial • 299,45μs (76,8 vezes mais rápido) • Controle paralelo • 165,38μs (139 vezes mais rápido)
Área • Área total (FPGA STRATIX II EP2S60F672C5ES): • 16% lógica combinacional do • 5% memória • 11% blocos DSP de 9-bits
Trabalhos relacionados • FPGA implementation of a face detector using neural networks • detector de faces usando rede neural em FPGA • aritmética de ponto flutuante • Aproximação da sigmóide: • Rede 25:6:2 => 1,7ms por imagem a 38MHz
Trabalhos relacionados • FPGA Implementation of a Neural Network for a Real-Time Hand Tracking System • aritmética de ponto fixo • função de ativação: tangente hiperbólica • Aproximação: look up table – 15 níveis • tempo de resposta: • 71ns Vs 43,07ns (médio)
Trabalhos futuros • Introduzir o aprendizado online no FPGA • Abranger outros tipos de redes inclusive as de estrutura dinâmicas (reconfiguração dinâmica). • Framework • Entrada: topologia da rede (treinada ou não); pesos; • Saída: código HDL • Vantagem: encapsula-se todo o projeto da implementação em hardware