Implementação de uma arquitetura de Redes Neurais MLP utilizando FPGA Antonyus Pyetro [email protected] Orientadoras: Edna Barros - [email protected] Teresa Ludermir - [email protected] Roteiro • • • • • • Motivação Rede neural artificial Projeto de RNAs em FPGA Análise dos Resultados Trabalhos relacionados Trabalhos futuros Motivação 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 artificial 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) } RNA - topologia 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 Comparação Método erro médio erro max Suave Rápido 1ª ordem otimizado 1.4539e-017 0.0194 sim não 1ª ordem simples 8.9214e-018 0.0189 não sim 2ª ordem simples 8.5910e-018 0.0215 sim sim Implementação do Neurônio • Cálculo do estado de ativação ▫ Um somador e um multiplicador Nº entradas Função 2 X1 x W1 + X2 x W2 + W0 3 X1xW1 + X2xW2 + X3xW3 + W0 4 X1xW1 + X2xW2 + X3xW3 + X4xW4 +W0 Operações XX+ + XXX+ ++ XXXX+ ++ + 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 Rede neural - XOR 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 Perguntas!