Redes Neurais Artificiais
As redes neurais artificiais (RNA) são modelos computacionais que buscam simular o comportamento de como o cérebro humano processa informações. O cérebro humano pode ser comparado à uma central de processamento altamente complexa, abstrata, paralela e extremamente eficiente, realizando atividades que um computador convencional poderia levar muito mais tempo e muito mais energia.
O conceito formal de RNA elegido neste artigo é definido por HAYKIN (2001) a seguir:
“Uma rede neural é um processador maciçamente paralelamente distribuído constituído de unidades de processamento simples, que tem a propensão natural para armazenar conhecimento experimental e torná-lo disponível para uso”.
Marcos na evolução das RNA’s
Abaixo temos um breve resumo contendo os principais marcos das RNA’s até chegarmos ao Deep Learning:
- 1943: Warren Mcculloch e Watter Pitts criam um modelo computacional baseado em matemática e lógica intitulado de logica de limiar.
- 1958: Frank Rosenblatt cria o perceptron
- 1980: Kunihiko Fukushima apresenta o Neococitron uma RNA de hierarquia.
- 1989: Surge algoritmos que conseguem utilizar RNA profundas, mas o tempo de treinamento (em dias) torna impraticável seu uso.
- 1992: Juyang Weng publica o Cresceptron capaz de realizar o reconhecimento de objetos em cenas desordenadas.
- 2000: Geoffrey Hinton e Ruslan Salakhutdinov publicam um artigo mostrando como uma RNA de várias camadas poderia ser pré-treinada cunhando o termo “aprendizagem profunda” (DEEP, 2018).
Neurônios
Uma RNA é composta por neurônios, assim como os biológicos, simulando desta maneira o cérebro humano, eles são principal unidade de processamento das RNA’s.
[…] O cérebro humano possui cerca de 100 bilhões de neurônios, cada um com uns mil dendritos, formando 100 trilhões de sinapses. O cérebro opera a cerca de 100 hertz (cada neurônio pode disparar um pulso 100 vezes por segundo) — muito lento pelos padrões dos computadores onde, por exemplo, um chip Intel 80486 opera a até 100 megahertz, ou a milhões de ciclos por segundo, executando uma instrução por vez. Mas os neurônios do cérebro operam em paralelo e o cérebro humano pode acionar cerca de 10 quatrilhões de interconexões por segundo. Isto excede de longe a capacidade de qualquer máquina hoje conhecida, ou de qualquer máquina já planejada, ou até mesmo de alguma ainda a ser desenvolvida com a tecnologia atual (Laudon & Laudon, 1996).
Dado este fato, reconhecemos que ainda existe uma longa e talvez impossível jornada até que simule de fato o poder computacional do cérebro humano.
A figura 2, ilustra a estrutura básica de como é constituído um neurônio biológico onde temos basicamente:
- Dentritos (inputs): São as várias conexões dos neurônios que atuam na recepção dos estímulos nervosos, transmitindo-os para o corpo da célula.
- Sinapse: Processo de ligação entre o dentrito e o axônio.
- Axônio (Outputs): Os impulsos eletroquímicos, passam pelo axônio, que esta ligado ao corpo celular. O impulso só chegará ao núcleo se for forte o suficiente para superar o limite (do inglês Threshold) imposto pela sinapse, um tipo de resistência química. Caso passe, este sinal pode ter em sua saída seu peso multiplicado. Este valor dos pesos é a memória, e estes pesos são reforçados através das experiências de vida.
De acordo com Laudon & Laudon (1996):
[…] cada região do cérebro é especializada em uma dada função, como processamento de sinais auditivos, sonoros, elaboração de pensamentos, desejos etc. Esse processamento se dá através de redes particulares. Cada região do cérebro possui uma arquitetura de rede diferente: varia o número de neurônios, de sinapses por neurônio, valor dos thresholds e dos pesos.
Perceptron
O perceptron é um classificador binário que pode aprender através de instancias de treinamento, ele é capaz de aprender qualquer problema de classificação de dados linearmente separáveis, na figura 3 temos os dois exemplos, onde hipoteticamente o problema é a simulação de uma porta lógica “OR” (linearmente separável) e “XOR” (não linearmente separável). Seus atributos estão representados pelos eixos X1 e X2. Perceba que no caso da simulação da porta “OR” é possível separar as classes (Y) por uma reta gerada pelo perceptron com sucesso, entretanto o segundo exemplo da figura 3 simulando a porta lógica “XOR”, uma reta não conseguiria separar as classes com sucesso.
“O perceptron é um tipo simples de RNA direta (Feedfoward), ele foi criado por Frank Rosenblatt no Cornell Aeronautical Laboratory em 1957 […]” (MÁSSON,1990, p.47).
O perceptron funciona basicamente como um neurônio, recebendo um vetor de sinais de entrada (X1, X2 … Xn), aplicando e ajustando os respectivos pesos sinápticos (W1, W2 …Wn), processando-os em uma função de ativação (f(x)) e devolvendo um sinal de saída (Y).
O Perceptron (RNA com apenas uma camada de neurônio) esta exemplificado na figura 4:
As entradas (X1, X2 … Xn) são os sinais de entrada. Cada entrada representa um atributo ou característica do dado. Estes sinais de entrada são ponderados pelos pesos (W1,W2 …Wn), ou seja, existe um produto dos sinais de entrada pelos seus respectivos pesos antes de serem integrados pela Junção aditiva ou função agregadora (∑) constituindo um combinador linear. A inteligência do perceptron, ou de qualquer RNA, esta nos pesos de suas conexões.
Outro sinal adicional bastante comum nos perceptrons é o Bias, uma constante de ativação também ponderada que tem como papel aumentar ou diminuir a influencia das entradas, aprimorando a flexibilidade do modelo, (g(u)) é o potencial de ativação ou função de transferência, permitindo ou não a passagem do sinal que é recebido para função de ativação.
O cálculo da função agregadora se dá pelo somatório dos produtos das entradas menos o valor do Viés.
Funções de transferência
A função de transferência representada por g(u) é responsável pela saída do neurônio, limitando assim as saídas introduzindo a não-linearidade ao modelo.A função de transferência retrata quando um neurônio deve ou não ser ativado dado o valor de entrada. Existem três tipos básicos de funções de transferência:
- Função limiar: É basicamente um “if” matemático, onde se o resultado da função agregadora for menor que zero, retorna zero, caso contrário retornará 1. Conforme abaixo:
2. Função linear por partes: Assume-se que o fator de amplificação dentro da região linear de operação é a unidade. Esta forma de ativação pode ser vista como uma aproximação de um amplificador não-linear. As duas situações a seguir podem ser vistas como formas especiais da função linear por partes:
- Se a região de operação é mantida sem entrar em saturação, surge um combinador linear.
- A função linear por partes se reduz à função linear, se o fator de amplificação da região linear é feito infinitamente grande.
3. Função Sigmoide: A função mais utilizada na construção de RNA’s é a função sigmoide, que tem com característica a formação de um “s” suave em seu gráfico. É uma função crescente bastante balanceada em seu comportamento linear e não-linear. A principal diferença entre função sigmoide e a limiar se dá por que a sigmoide assume um intervalo contínuo de valores entre 0 até 1, enquanto que a limiar retorna somente 0 e 1. A função abaixo exemplifica a função sigmoide:
Processo de aprendizagem
Aprendizagem no contexto das RNA:
“É um processo pelo qual os parâmetros livres de uma RNA são adaptados através de um processo de estimulação pelo ambiente no qual a rede está inserida. O tipo de aprendizagem é determinado pela maneira pela qual a modificação de parâmetros ocorre […]” (HAYKIN, 2001, p.75).
O processo de aprendizagem de uma RNA é ajustar os pesos. Um algoritmo é executado iterativamente até que os pesos corretos sejam atingidos;
O processo de aprendizagem de um perceptron é definido basicamente e 3 passos:
1. A rede neural é estimulada.
a. Inputs de entradas e inicialização dos pesos sinápticos com valores aleatórios, geralmente entre 0 e 1(0 < x < 1).
2. A rede neural sofre alterações.
a. Função agregadora: Unificando as entradas ponderadas retornando um único sinal.
b. Função de transferência: Permitindo ou não a continuidade do sinal recebido através de uma função de ativação.
c. Calculo de erro: É a diferença entre classe real e a classe predita pelo perceptron, caso a diferença seja zero, então o perceptron acertou a classe predita, caso seja diferente de zero, errou. Nos dois casos após o cálculo do erro se faz necessário o ajuste dos pesos sinápticos.
d. Atualização dos pesos sinápticos: De acordo com HAYKIN (2001) “Uma RNA aprende através dos ajustes aplicado a seus pesos sinápticos e níveis de bia”. Existem inúmeros algoritmos utilizados para ajustar os pesos sinápticos, a Regra delta é o algoritmo de aprendizagem por correção de erros padrão do perceptron mais usado para atualizar os pesos sinápticos.
b. O peso anterior somado a taxa de aprendizagem que é uma constante positiva que determina a taxa de aprendizado, multiplicado pelo produto do sinal do erro pela respectiva entrada da sinapse, conforme a equação abaixo.
Conforme figura 8 este processo é um ciclo iterativo. Cada ciclo é chamado de Época. As épocas são repetidas até que se alcance 100% de acerto, ou à algum critério de parada que é definido computacionalmente.
Se os padrões de entrada forem linearmente separáveis, o algoritmo de treinamento terá resultância garantida, ou seja, em algum momento ele irá acertar as classes.
Perceptron Multicamada e Arquitetura de RNA
A arquitetura de uma RNA, define a sua especialidade e qual tipo de problema poderá ser utilizada para resolvê-lo. O que define a arquitetura de uma RNA basicamente são as camadas (camada única ou múltiplas camadas), número de nós em cada camada e o tipo de conexão entre os nós (Feedforward ou Feedback).
Abaixo, é ressaltado os principais tipos de arquitetura de RNA, e como é possível de várias maneiras conectar neurônios, assim como criar níveis de camadas.
Redes de camada única: Redes de camada única, possuem apenas uma camada de múltiplos neurônios interligados recebendo os estímulos externos.
Redes de múltiplas camadas: Destaca-se por ter uma ou mais camadas ocultas. As camadas ocultas extraem estatísticas de ordem elevada o que é particularmente valioso, quando o tamanho da camada de entrada é grande (HAYKIN, 2001, p.47).
Redes Conexão Feedforward: A rede é alimentada ciclicamente, ou seja, os sinais de entradas se propagam para frente através da rede, camada por camada sempre adiante.
Redes Conexão Feedback: Uma rede feedback se distingue de uma Feedforward pelo fato de ter retro estimulação, HAYKIN (2001) explana que em uma rede feedback o sinal de saída de cada neurônio voltar como entrada estimulando outros neurônios.
Existem diversas arquiteturas, usadas para resolver diferentes tipos de problemas, como por exemplo as arquiteturas de redes neurais convolucionais usadas em problemas de Visão Computacional e as redes neurais recorrentes usadas em problemas de Processamento de Linguagem Natural;
Estes são os exemplos mais comuns de arquitetura, existem muitas outras arquiteturas como conforme ilustrado na figura 12:
Perceptron Multicamada
Uma das limitações do perceptron de única camada, são os problemas não separáveis linearmente, conforme explanado neste artigo anteriormente. Com a evolução o uso do perceptron multicamada (MLP, Multlayer Perceptron), torno possível a solução dos problemas nãos separáveis linearmente.
Backpropagation
Em 1986 David E.Rumelhart e James L. McClelland publicaram o livro intitulado: Parallel Distributed Processing, onde apresentaram um modelo matemático e computacional de treinamento supervisionado de neurônios chamado retropropagação (do inglês backpropagation).
“Os perceptrons de múltiplas camadas tem sido aplicado com sucesso para resolver diversos problemas, através do seu treinamento de forma supervisionada com um algoritmo muito popular conhecido como algoritmo de retropropagação de erro (error backpropagation) ” (Haykin, 2001, p.183).
O backpropagation é uma técnica para calcular derivadas rapidamente, o que torna o treinamento com gradiente descendente (Ferramenta padrão para otimizar funções complexas iterativamente dentro de um programa de computador) muito mais veloz.
“Essa é a diferença entre um modelo que leva algumas horas ou dias para treinar e outro que poderia levar anos (sem exagero)” (Deep, 2018).
A retropropagação consiste em dois passos:
1. Propagação: Recebimento dos estímulos que é aplicado aos nós sensoriais da rede, onde seu efeito se propaga camada por camada até produzir uma saída como resposta da rede. Neste passo não há alteração nos pesos sinápticos.
2. Retropropagação: Após a saída os pesos sinápticos são ajustados de acordo com a regra de correção de erro. Este sinal é propagado então para toda rede da saída para o entrada (caminho inverso), ou seja, o erro é retropropagado.
Resilient Propagation
Resiliente Propagation (RPROP) é um algoritmo de aprendizagem assim como o Backpropagation que foi desenvolvido por pesquisadores em 1993 na tentativa de melhorar o algoritmo backpropagation.
De acordo com MCCAFFREY (2015), a principal diferença entre este algoritmo e as outras heurísticas de aprendizagem baseadas em variações do “backpropagation” são pesos ( e a taxa de aprendizado que são ajustados apenas uma única vez em cada época de treinamento, isso garante duas vantagens: o treino da RPROP normalmente é mais rápido quando comparado ao backpropagation, e a segunda vantagem, não é requerido valores de taxa de aprendizado. A sua desvantagem é ser um algoritmo mais complexo de se implementar quando comparado ao backpropagation.
Conclusões
Muitos temas aqui considero que foram tratados superficialmente, por exemplo: não realizamos os cálculos, existem inúmeras funções de ativação que não foram apresentadas, não implementamos nenhum tipo de algoritmo.
Muitos dos exemplos aqui foram retirado do livro “Redes Neurais: Princípio e Prática” do HAYKIN (2001) que considero uma das melhores obras em português sobre redes neurais.
Se você chegou até aqui, meus parabéns, agora você sabe o funcionamento básico de uma RNA.
“O que sabemos é uma gota; o que ignoramos é um oceano” (Isaac Newton).
Referências
- HAYKIN, Simon (2001). Redes Neurais: Princípios e Prática (P27). Kindle Edition
- Laudon & Laudon. Management Information Systems, Prentice Hall, USA, 1996, p. 661
- MÁSSON, Egill; WANG, Yih-Jeou. Introduction to Computation and Learning in Artificial Neural Networks. European Journal of Operational Research, North-Holand , 47, 1990.
- MCCAFFREY, James. How To Use Resilient Back Propagation To Train Neural Networks. 2015. Disponível em: <https://visualstudiomagazine.com/articles/2015/03/01/resilient-back-propagation.aspx>. Acesso em: 09 out. 2018.
- DEEP Learning Book: Capítulo 2 — Uma Breve História das Redes Neurais Artificiais. 2018. Disponível em: <http://deeplearningbook.com.br/uma-breve-historia-das-redes-neurais-artificiais/>. Acesso em: 12 out. 2018.
Originally published at https://www.linkedin.com/pulse/redes-neurais-artificiais-john-costa?