• Nenhum resultado encontrado

Exemplo de Implementação do Algoritmo de Treinamento

4 Perceptrons de Camada Única

4.1 O Perceptron

4.1.2 Exemplo de Implementação do Algoritmo de Treinamento

Pode-se descrever o algoritmo de treinamento para um perceptron de camada única da seguinte forma (Braga, et al., 2000):

1. Inicializar 𝜂 e o vetor de pesos 𝑤⃗;

2. Para cada par do conjunto de treinamento Γ = 𝑥⃗ , 𝑑 , atualizar o vetor de pesos para cada um dos nodos da rede segundo a regra 𝑤⃗(𝑡 + 1) = 𝑤⃗(𝑡) − 𝜂𝑒𝑥⃗;

3. Repetir o procedimento (2) até 𝑒 = 0 para todos os 𝑝 elementos do conjunto de treinamento em todos os nodos da rede.

Seja um perceptron de um único nodo e quatro entradas: como possui apenas um neurônio, é capaz de lidar somente com problemas

linearmente separáveis com duas classes de dados. Alimenta-se a RNA com dois vetores, 𝑥⃗ = [1 − 0,1 0,4 − 0,7 − 1,8] e 𝑥⃗ = [1 − 0,1 0,2 − 0,3 − 0,9] . Iniciam-se os parâmetros da rede, de forma arbitrária, com 𝜂 = 0,05 e 𝑤⃗(0) = [0 0 0 0 0] . A aplicação do algoritmo de treinamento do perceptron dá como solução final 𝑤⃗(5) = [−0,050 − 0,025 0,010 − 0,025 − 0,045] , onde 𝑡 = 5 é o número de iterações, ou tempo discreto.

O hiperplano que é a solução para o problema proposto (divide o espaço das entradas de tal forma que estabeleça classes de dados) é dado por

𝑤⃗(5) ∙ 𝑥⃗ = 0 (4.2)

0,025 𝑥 − 0,010𝑥 + 0,025𝑥 + 0,045𝑥 = −0,050 (4.3) e pode-se perceber facilmente que 𝑤⃗(5) ∙ 𝑥⃗ = 1 e 𝑤⃗(5) ∙ 𝑥⃗ = 0, ou seja, as saídas promovem a classificação pretendida das entradas.

Com o perceptron nasceu o conceito de Rede Neural Artificial pluripotente, que pode ser treinada (ou se treinar) para desempenhar diversas tarefas (no caso, separação de dados em um número maior ou menor de classes, dependendo da dimensão da rede neural). Foi visto um breve histórico de sua concepção, sua regra clássica de treinamento - uma das primeiras a serem implementadas com tal primor – e um breve exemplo de sua implementação. Mas o perceptron não é capaz de lidar com todo tipo de problema, a implementação de uma classificação do tipo XOR é um deles: para esses casos foi desenhada uma arquitetura nova, o perceptron multicamada, que será a base para a arquitetura das Redes Neurais Convolucionais.

5 Perceptrons Multicamadas

Foi demonstrado (Minsky, et al., 1972) que o perceptron de camada única resolve somente problemas linearmente separáveis: para o tratamento de problemas não-linearmente separáveis, demanda-se o uso de perceptrons multicamadas, ou seja, aqueles que possuem as chamadas camadas ocultas, intermediárias. Essa RNA consiste, então, de uma camada de entrada (sensores, nós fonte), uma ou mais camadas ocultas (nós computacionais) e uma camada de saída (nós computacionais), e o sinal de entrada percorre a rede até a saída, camada por camada (chamada então de rede alimentada adiante ou feedforward).

George Cybenko formulou e provou uma das primeiras versões do Teorema Universal da Aproximação em 1989, usando funções de ativação do tipo sigmoide (Cybenko, 1989). Esse teorema estabelece que uma RNA alimentada adiante com uma única camada oculta e número finito de nodos pode aproximar (ou seja, implementar) funções contínuas em subconjuntos compactos de ℝ (espaço real de n dimensões, ao qual pertencem vetores reais de n entradas), sob suposições moderadas sobre a função de ativação – contudo, a possibilidade provada para o aprendizado de uma função, incorporada em parâmetros da rede, não implica necessariamente a capacidade algorítmica de aprendizado desses mesmos parâmetros: pode haver necessidade de um tempo “infinito” para que determinado algoritmo convirja, ou pode esse priorizar um mínimo local na superfície de erro. Em 1991 Kurt Hornik, matemático austríaco, provou que não é a função de ativação, mas sim a arquitetura da rede multicamada alimentada adiante que dá a esse tipo de RNA o potencial de serem aproximadores universais, ou seja, simular qualquer função (Hornik, 1991).

A pergunta passa a ser “como treinar uma rede perceptron multicamada?”. Em primeira abordagem pode-se tentar treinar sub-redes, e.g., camada por camada independentemente: neste caso poder-se-ia formar cada uma por conjuntos de redes perceptron monocamada, uma para cada conjunto de entradas linearmente separável, no caso da camada de entrada, e que tratem as saídas das camadas anteriores nos demais casos. Tal solução,

subdivisão de um problema maior em subproblemas, em geral não é prática ou sequer factível (Braga, et al., 2000).

Resta promover o treino da rede como um todo. A atenção deve ser voltada para o problema que não foi ainda abordado: “como lidar com nodos intermediários?” – isso envolve redefinir apropriadamente o erro associado a esses neurônios. Pode-se propor nodos com funções de ativação do tipo limiar (threshold): contudo, a rigidez dos resultados deve tornar complexo e restrito o tratamento da função erro acumulada. O uso de funções de ativação do tipo linear deve ser descartado: uma rede multicamada que use funções de ativação lineares é equivalente a uma rede monocamada, como se pode constatar na prova na sequência (Braga, et al., 2000).

Seja uma Rede Neural com uma camada intermediária e funções de ativação lineares. Sejam 𝑥 o vetor de entrada e 𝑊 e 𝑊 as matrizes de pesos para os nodos das primeira e segunda camadas, respectivamente. O vetor de saída da rede é gerado de acordo com a seguinte equação:

𝑦⃗ = (𝑥⃗𝑊 ) ∙ 𝑊

Utilizando propriedades da álgebra linear, tem-se que: ∀(𝑊 , 𝑊 )∃𝑊 | 𝑊 = 𝑊 ∙ 𝑊 Logo:

𝑦⃗ = 𝑥⃗ ∙ 𝑊

onde 𝑥⃗ é o vetor de entrada, 𝑦⃗ o vetor de saída e 𝑊 , 𝑊 e 𝑊 são matrizes de pesos de dimensões 𝑀x𝑁, 𝑁x𝐿 e 𝑀x𝐿, respectivamente. Em meados da década de 1980 foi proposto um algoritmo de aprendizado que fornece um método computacional eficiente para o treinamento supervisionado de perceptrons multicamadas (Rumelhart, et al., 1986) (embora não necessariamente gere a solução ótima a todos os problemas): é o algoritmo backpropagation ou de retropropagação de erros, que é baseado no método de gradientes descendentes da superfície de erro. Como condições para a executabilidade do algoritmo, demanda-se que a função de ativação seja não-linear, contínua, diferenciável e preferencialmente não-decrescente (chamadas funções semilineares): as funções do tipo sigmoide foram identificadas como ideias para o fim pretendido. Todas essas conclusões a que se chegou para o perceptron multicamada permanecem

válidas para várias arquiteturas de muitas camadas, incluindo as ConvNets que serão abordadas no Capítulo 6.

Documentos relacionados