I- INTRODUCAO : Este trabalho simula uma rede neuronal backpropagation de duas camadas, com a primeira camada com dois neuronios e a segunda podendo ter ate' cinco neuronios que representam classes a serem separadas. Os neuronios sao nao lineares com a funcao tipo tangente hiperbolica, podendo ser definido durante a simulacao da rede o ganho dos neuronios de cada camada. O objetivo principal do programa e' analisar o efeito da primeira camada, visualizando a separacao das classes no plano (Z1,Z2). Onde Z1 e Z2 sao as saidas dos neuronios da primeira camada, e para ser possivel a projecao num plano esta camada e' limitada a dois neuronios. A segunda camada pode facilmente ter o limite de cinco neuronios extendido, tendo como limitacao apenas a quantidade de cores que diferenciam as classes. Tambem, e' possivel operar apenas com a segunda camada, tornando-se uma rede neuronal backpropagation de uma camada com ate' cinco neuronios. II- PROGRAMA : O programa foi implementado tendo como base o programa SARN, procurou-se ao maximo preservar a estrutura do programa origem mantendo os mesmos nomes de variaveis, janelas de apresentacao, entrada de dados e a mesma tela grafica, sendo apenas as escalas alteradas e acrescentadas algumas opcoes. No mais, o programa teve que ser totalmente alterado. Durante a implementacao tomou-se o cuidado de tornar o programa o mais versatil possivel, dando mais opcoes para o usuario poder pesquisar a rede mais profundamente. Outras alteracoes feitas foram no sentido de facilitar e agilizar a entrada de dados. No SARN era necessario entrar com todos os dados via teclado, neste as definicoes das classes podem serem salvas em disco e recuperadas posteriormente. Outra dificuldade do SARN e' a impossibilidade de gerar aleatoriamente os dados, tendo que defini-los todos antes de iniciar a simulacao. Neste programa toda informacao nao definida antes da iniciacao da simulacao e' automaticamente definida aleatoriamente. Com execao apenas das probabilidades de ocorrencia de cada classe, que caso nao seja definida pelo usuario, serao todas automaticamente definidas iquais a 100/(numero de classes). III- OPCOES DO MENU PRINCIPAL : Ao executar o programa, e' mostrado a tela de apresentacao e e' perguntado a quantidade de camadas (1 ou 2). Apos entrar com o numero de camadas, que pode ser alterado durante a simulacao ou na opcao Parametros Inicias, o menu principal e' acessado e sempre se retorna a ele ao final de cada operacao. Para acessar as suas opcoes basta teclar a letra em efidencia. -[C]lasses : O usuario tem a opcao de escolher entre definicao por teclado ou leitura em disco. Para se ler a definicao em disco basta teclar 'S', caso contrario, sera' acessada a definicao por teclado. - Leitura em disco : E' perguntado o nome do arguivo sem extensao, e se desejar ver o diretorio corrente, basta entrar com '?'. Caso o arquivo nao seja encontrado, e' mostrado uma tela de advertencia e se retorna ao menu principal. - Definicao por teclado : E' perguntado o numero de classes que deve ser entre 1 e 5, e em seguida e' mostrado um submenu com as seguintes opcoes: - [T]ipo : Onde deve ser definido o tipo, circulo ou retangulo, as coordenadas do ponto central da classe, o raio no caso da classe ser circulo e a altura e largura no caso da classe ser retangulo. Caso se tecle [ Esc] e' assumido o tipo anteriormente definido, e caso se tecle [Return] durante a entrada de dados, e' assumido o valor previamente definido, que e' mostrado. - [P]robabilidade : E' perguntado a probabilidade de cada classe, sendo que a ultima e' o complemento para 100. Caso a ultima classe venha ter probabilidade nula ou negativa, as probabilidades nao serao aceitas. Neste caso e' mostrado uma tela de advertencia e se retorna ao submenu de definicao por teclado. - Escolha [A]leatoria : Os tipos e as suas respectivas localizacoes e definicoes sao escolhidas aleatoriamente seguindo regras descritas no item SIMULACAO. -[P]arametros iniciais : Caso as classes nao tenham sido previamente definidas, e' mostrado uma tela de advertencia e se retorna ao menu principal. Do contrario, entra no submenu de definicao dos parametros e dos valores iniciais das sinapses e dos bias. - [S]inapses : Entra na tela de definicao das sinapses de todos os neuronios, a onde as duas primeiras sao dos neuronios da primeira camada e as demais correspondem aos neuronios da segunda camada. Por sinapses se entende todas as ligacoes entre as entradas e os neuronios da primeira camada, e entre as saidas dos neuronios da primeira camada e os neuronios da segunda camada. E' mostrado o valor definido anteriormente, e caso de tecle [Return], este e' assumido. - [B]ias : Entra na tela de definicao dos bias de todos os neuronios, a onde os dois primeiros sao dos neuronios da primeira camada e os demais correspondem aos neuronios da segunda camada. Por bias se entende todas as ligacoes dos neuronios referentes a entrada de polarizacao. E' mostrado o valor definido anteriormente, e caso se tecle [Return], este e' assumido. - [P]arametros : Entra na tela de definicao dos valores iniciais dos parametros que controlam o desempenho do treinamento. Durante a simulacao podem serem alterados os valores correntes destes parametros, sendo que, os valores assumidos inicialmente so' podem serem alterados nesta opcao. E' mostrado o valor definido anteriormente, basta teclar [Return] para que o valor nao seje alterado. Os parametros que podem serem alterados sao os seguintes: - Taxa de aprendizado; - Fator de amortecimento; - Taxa de momento; - Ganho dos neuronios da primeira camada; - Ganho dos neuronios da segunda camada; - Numero de camadas (1 ou 2); -[S]imulacao : Inicia o processo de simulacao da rede neuronal backpropagation de uma ou duas camadas. Todos os parametros previamente definidos pelo usuario sao assumidos, os que nao forem definidos pelo usuario serao definidos aleatoriamente seguindo regras predeterminadas, que sao as seguintes : - Caso o numero de classes nao seje definido, sera' determinado aleatoriamente um numero inteiro entre 2 e 5; - Caso as classes nao forem definidas, terao os tipos escolhidos aleatoriamente entre circulo e retangulo. No caso da escolha ser circulo, o raio e' determinado aleatoriamente na faixa de 0,03 a 0,1. Sendo a escolha um retangulo, a altura e a largura serao determinadas aleatoriamente na faixa de 0,03 a 0,1. O ponto central das classes terao as suas coordenadas escolhidas aleatoriamente no plano (X,Y) dentro da faixa de (-0,9 a +0,9 ; -0,9 a +0,9), de forma que as classes nao se interceptam. - Nao sendo definido os valores para as probabilidades de cada classe, todas as probabilidades serao definidas iquais a 100/(numero de classes); - Os pesos e/ou as sinapses nao definidos, serao determinados aleatoriamente dentro da faixa de -0,1 a +0,1; - Se os parametros nao forem definidos pelo usuario, serao assumidos os valores defaults; - Taxa de aprendizado = 0,1; - Fator de amortecimento = 1; - Taxa de momento = 0,9; - Ganho da camada 1 = 1; - Ganho da camada 2 = 1; - O numero de camadas assumido e' o definido pelo usuario na tela de apresentacao; -[V]isual : Nesta opcao e' possivel visualizar o posicionamento das classes e das sinapses iniciais, caso tenham sido previamente definidos. -[F]im : Entra no seguinte submenu : -[S]alva : Salva as informacoes definidas em disco e volta para o menu principal. -[R]einiciar : Inicializa todas as variaveis com os valores defaults e entra na tela de apresentacao. -[F]im : Caso as informacoes definidas nao tenham sido salvas, pergunta se quer salva-las em disco. Caso afirmativo, salva e sai do programa, do contrario apenas sai do programa. - OBS : Na opcao de salvar em disco, e' perguntado o nome do arguivo, para ver o diretorio corrente basta entrar com '?'. Caso o arquivo ja' exista, e' perguntado se deseja continuar a operacao perdendo as informacoes contidas no arquivo, caso afimativo tecle 'S', do contrario qualqer outra tecla aborta a operacao retornando ao menu principal. IV - OPCOES DURANTE A SIMULACAO : Ha' quatro opcoes de telas graficas que podem serem alteradas durante a simulacao da rede backpropagation de 2 camadas : - Tela [1] : Mostra as classes no plano (X,Y), os pontos escolhidos e as retas que separam as classes no plano (X,Y). - Tela [2] : Mostra as classes simuladas no plano (Z1,Z2) e as retas que separam as classes no plano (Z1,Z2). - Tela [3] : Mostra as classes no plano (X,Y), os pontos escolhidos, as classes simuladas no plano (Z1,Z2) e as retas que separam as classes no plano (Z1,Z2). - Tela [4] : Mostra as classes projetadas no plano (Z1,Z2) e as retas que separam as classes no plano (Z1,Z2). Na simulacao da rede backpropagation de uma camada so' ha' uma tela grafica, nesta e' mostrado as classes no campo (X,Y), os pontos escolhidos e as retas que separam as classes no plano (X,Y). Todos os valores definidos no submenu de PESOS INICIAIS na opcao PARAMETROS, podem serem alterados durante a simulacao. [T] - Altera o valor da taxa de aprendizado; [F] - Altera o valor do fator de amortecimento; [M] - Altera o valor da taxa de momento; [A] - Altera o valor do ganho dos neuronios da primeira camada; [B] - Altera o valor do ganho dos neuronios da segunda camada; [C] - Alterna entre uma e duas camadas; Outras opcoes e facilidades : - Para parar a tela basta teclar [P], para voltar a simulacao normalmente basta pressionar qualquer outra tecla. Para realizar a a simulacao PASSO A PASSO, e so' teclar [P] para cada passo. - E' mostrado o erro medio e alterado a cada iteracao; - E' mostrado o numero de iteracoes a cada iteracao; - Para voltar ao menu principal, basta teclar [Esc]; - Ao se reiniciar uma simulacao, o usuario tem a opcao de comecar a partir do ponto de parada ou do inicio; - Para se digitar '0.', basta entrar com '.' que automaticamente e' interpretado como '0.'; V - FORMULAS E TEORIA : A teoria basica do treinamento backpropagation foi retirada do WASSERMAN. Primeiro se calcula as saidas dos neuronios, Forward Pass, em seguida se ajusta os pesos das sinapses e dos bias atraves da propagacao do erro, Reverse Pass. O calculo das saidas dos neuronios e a propagacao do erro, difere da referencia proposta apenas na funcao utilizada. Pois, no WASSERMAN, se utiliza a funcao sigmoide, enquanto no presente trabalho, a funcao usada e' a tangente hiperbolica com ganho ajustavel. O ajuste dos pesos das sinapses e dos bias sao feitos atraves da regra do momento, podendo ajustar a taxa de momento. A taxa de treinamento pode ter como opcao o seu decaimento exponencial durante o treinamento, ou ser constante. Este decaimento e' controlado pelo fator de amortecimento, se for iqual a 1 nao havera' alteracao da taxa de amostragem. OUT = F(NET); F(NET) = TANH(GANHO*NET); TANH(GANHO*NET) = (1 - EXP(-2*GANHO*NET)) / (1 + EXP(-2*GANHO*NET)); F'(NET) = (1 - OUT^2)*GANHO; D(Wi+1) = TM*D(Wi) + (1-TM)*d*ENT; Wi+1 = Wi + TT*D(Wi); TTi+1 = TTi*FA; Erro Medio(i+1) = 0.9 * Erro Medio(i) + Erro Iteracao; onde, NET : somatorio de todas as entradas do neuronio multiplicadas pelas respectivas sinapses ou bias; F() : funcao do neuronio; F'() : derivada da funcao do neuronio; GANHO : ganho do neuronio; TM : taxa de momento; TT : taxa de treinamento; FA : fator de amortecimento; d : erro propagado na entrada do neuronio; W : peso da sinapse ou bias; OUT : valor na saida do neuronio; ENT : valor na entrada do neuronio antes da sinapse; D(W) : taxa de variacao da sinpse; i+1 : valor atual; i : valor anterior; Erro Medio : media dos erros das ultimas iteracoes; Erro Iteracao : media dos erros da iteracao; VI - RESULTADOS E CONCLUSOES : O programa mostrou ser bastante versatil, permitindo realizar diversas experiencias com rede backpropagation de uma ou duas camadas. As varias telas graficas e a possibilidade de muda-las durante a simulacao, possibilita visualizar melhor o desenvolvimento do treinamento. Assim como, e' possivel verificar o desempenho da rede em funcao dos parametros de treinamento. A comparacao do treinamento com uma ou duas camadas pode ser feita utilizando o mesmo arquivo de definicao. Alem disso, e' possivel permutar entre duas ou uma camada durante a simulacao. Foi observado que a primeira camada apenas realiza transformacoes lineares acomodadas na faixa de -1 a 1. Realizando assim, rotacoes e afastamento das classes mantendo as suas posicoes relativas.