AN IMPLEMENTATION OF FLEXIBLE RBF NEURAL NETWORKS - Martins, Fernando Manuel Pires (2010)
Sempre que o trabalho de investigação resulta numa nova descoberta, a comunidade científica, e o mundo em geral, enriquece. Mas a descoberta científica per se não é suficiente. Para beneficio de todos, é necessário tornar estas inovações acessíveis através da sua fácil utilização e permitindo a sua melhoria, potenciando assim o progresso científico. Uma nova abordagem na modelação de núcleos em redes neuronais com Funções de Base Radial (RBF) foi proposta por Falcão et al. em Flexible Kernels for RBF Networks [14]. Esta abordagem define um algoritmo de aprendizagem para classificação, inovador na área da aprendizagem das redes neuronais RBF. Os testes efectuados mostraram que os resultados estão ao nível dos melhores nesta área, tornando como um dever óbvio para com a comunidade científica a sua disponibilização de forma aberta. Neste contexto, a motivação da implementação do algoritmo de núcleos flexíveis para redes neuronais RBF (FRBF) ganhou novos contornos, resultando num conjunto de objectivos bem definidos: (i) integração, o FRBF deveria ser integrado, ou integrável, numa plataforma facilmente acessível à comunidade científica; (ii) abertura, o código fonte deveria ser aberto para potenciar a expansão e melhoria do FRBF; (iii) documentação, imprescindível para uma fácil utilização e compreensão; e (iv) melhorias, melhorar o algoritmo original, no procedimento de cálculo das distâncias e no suporte de parâmetros de configuração. Foi com estes objectivos em mente que se iniciou o trabalho de implementação do FRBF. O FRBF segue a tradicional abordagem de redes neuronais RBF, com duas camadas, dos algoritmos de aprendizagem para classificação. A camada escondida, que contém os núcleos, calcula a distância entre o ponto e uma classe, sendo o ponto atribuído à classe com menor distância. Este algoritmo foca-se num método de ajuste de parâmetros para uma rede de funções Gaussianas multi-variáveis com formas elípticas, conferindo um grau de flexibilidade extra à estrutura do núcleo. Esta flexibilidade é obtida através da utilização de funções de modificação aplicadas ao procedimento de cálculo da distância, que é essencial na avaliação dos núcleos. É precisamente nesta flexibilidade e na sua aproximação ao Classificador Bayeseano óptimo (BOC), com independência dos núcleos em relação ás classes, que reside a invocação deste algoritmo. O FRBF divide-se em duas fases, aprendizagem e classificação, sendo ambas semelhantes em relação ás tradicionais redes neuronais RBF. A aprendizagem faz-se em dois passos distintos. No primeiro passo: (i) o número de núcleos para cada classe é definido vii através da proporção da variância do conjunto de treino associado a cada classe; (ii) o conjunto de treino é separado de acordo com cada classe e os centros dos núcleos são determinados através do algoritmo K-Means; e (iii) é efectuada uma decomposição espectral para as matrizes de covariância para cada núcleo, determinando assim a matriz de vectores próprios e os valores próprios correspondentes. No segundo passo são encontrados os valores dos parâmetros de ajuste de expansão para cada núcleo. Após a conclusão da fase de aprendizagem, obtém-se uma rede neuronal que representa um modelo de classificação para dados do mesmo domínio do conjunto de treino. A classificação é bastante simples, bastando aplicar o modelo aos pontos a classificar, obtendo-se o valor da probabilidade do ponto pertencer a uma determinada classe. As melhorias introduzidas ao algoritmo original, definidas após análise do protótipo, centram-se: (i) na parametrização, permitindo a especificação de mais parâmetros, como por exemplo o algoritmo a utilizar pelo K-Means; (ii) no teste dos valores dos parâmetros de ajuste de expansão dos núcleos, testando sempre as variações acima e abaixo; (iii) na indicação de utilização, ou não, da escala na PCA; e (iv) na possibilidade do cálculo da distância ser feito ao centróide ou à classe. A análise à plataforma para desenvolvimento do FRBF, e das suas melhorias, resultou na escolha do R. O R é, ao mesmo tempo, uma linguagem de programação, uma plataforma de desenvolvimento e um ambiente. O R foi seleccionado por várias razões, de onde se destacam: (i) abertura e expansibilidade, permitindo a sua utilização e expansão por qualquer pessoa; (ii) repositório CRAN, que permite a distribuição de pacotes de expansão; e (iii) largamente usado para desenvolvimento de aplicações estatísticas e análise de dados, sendo mesmo o standard de facto na comunidade científica estatística. Uma vez escolhida a plataforma, iniciou-se a implementação do FRBF e das suas melhorias. Um dos primeiros desafios a ultrapassar foi a inexistência de documentação para desenvolvimento. Tal facto implicou a definição de boas práticas e padrões de desenvolvimento específicos, tais como documentação e definição de variáveis. O desenvolvimento do FRBF dividiu-se em duas funções principais, frbf que efectua o procedimento de aprendizagem e retorna o modelo, e predict uma função base do R que foi redefinida para suportar o modelo gerado e que é responsável pela classificação. As primeiras versões do FRBF tinham uma velocidade de execução lenta, mas tal não foi inicialmente considerado preocupante. No entanto, alguns testes ao procedimento de aprendizagem eram demasiado morosos, passando a velocidade de execução a ser um problema crítico. Para o resolver, foi efectuada uma análise para identificar os pontos de lentidão. Esta acção revelou que os procedimentos de manipulação de objectos eram bastante lentos. Assim, aprofundou-se o conhecimento das funções e operadores do R que permitissem efectuar essa manipulação de forma mais eficiente e rápida. A aplicação desta acção correctiva resultou numa redução drástica no tempo de execução. O processo de qualidade do FRBF passou por três tipos de testes: (i) unitários, verificando as funções individualmente; (ii) de caixa negra, testando as funções de aprendizagem e classificação; e (iii) de precisão, aferindo a qualidade dos resultados. Considerando a complexidade do FRBF e o número de configurações possíveis, os resultados obtidos foram bastante satisfatórios, mostrando uma implementação sólida. A precisão foi alvo de atenção especial, sendo precisamente aqui onde não foi plena a satisfação com os resultados obtidos. Tal facto advém das discrepâncias obtidas entre os resultados do FRBF e do protótipo, onde comparação dos resultados beneficiou sempre este último. Uma análise cuidada a esta situação revelou que a divergência acontecia na PCA, que é efectuada de forma distinta. O próprio R possui formas distintas de obter os vectores próprios e os valores próprios, tendo essas formas sido testadas, mas nenhuma delas suplantou os resultados do protótipo. Uma vez certificado o algoritmo, este foi empacotado e submetido ao CRAN. Este processo implicou a escrita da documentação do pacote, das funções e classes envolvidas. O pacote é distribuído sob a licença LGPL, permitindo uma utilização bastante livre do FRBF e, espera-se, potenciando a sua exploração e inovação. O trabalho desenvolvido cumpre plenamente os objectivos inicialmente definidos. O algoritmo original foi melhorado e implementado na plataforma standard usada pela comunidade científica estatística. A sua disponibilização através de um pacote no CRAN sob uma licença de código aberto permite a sua exploração e inovação. No entanto, a implementação do FRBF não se esgota aqui, existindo espaço para trabalho futuro na redução do tempo de execução e na melhoria dos resultados de classificação.