• Nenhum resultado encontrado

Perceptron de Múltiplas Camadas (Multilayer Perceptron MLP)

4.1 ESTRUTURA

4.1.4 Perceptron de Múltiplas Camadas (Multilayer Perceptron MLP)

única. Essa rede tem uma camada de entrada, uma camada de saída e uma ou mais camadas escondidas. A função de ativação é uma função suave diferenciável em todo seu domínio.

A Figura 4.1, apresentada no início do capítulo, é um exemplo de perceptron de múltiplas camadas. As camadas escondidas possibilitam ao perceptron de múltiplas camadas resolver problemas mais complexos e não lineares, como o do OU Exclusivo, os quais o perceptron de camada única não pode resolver (HAYKIN, 2001).

4.1.5 Backpropagation

O método utilizado para treinamento da rede perceptron de múltiplas camadas é chamado de backpropagation (retropropagação do erro). O treinamento é realizado apresentando um conjunto de N vetores de entrada e suas respectivas saídas desejadas (conjunto de exemplos de treinamento). Os pesos são ajustados de forma a diminuir a função de custo (ou função de perda) εmed. A função de custo, tal como o erro quadrático e a entropia cruzada, calcula o erro na saída da rede, ou seja, estima quão diferente é o valor apresentado na saída do valor desejado para ela.

A cada vetor de entrada apresentado à rede, são feitos dois passos: a propagação direta, na qual é calculada a saída de cada neurônio de camada para camada desde a entrada até a saída; e a retropropagação, onde, após o cálculo do erro entre a saída desejada e a real, este é propagado no sentido reverso, isto é, da saída para a entrada, calculando-se um ajuste para cada peso de cada neurônio em cada camada, sendo este ajuste proporcional à derivada parcial do erro em relação ao peso a ser ajustado, isto é

∆𝑤𝑗𝑖(𝑛) = −𝜂

𝜕𝜀(𝑛)

𝜕𝑤𝑗𝑖(𝑛) , (4.5)

onde:

n é o índice do exemplo de treinamento (1 a N) η é a taxa de aprendizagem;

ε(n) é a o erro na camada de saída estimado pela função de custo; wji é o peso sináptico que conecta a saída de um neurônio da camada anterior (índice i) ao neurônio da camada para o qual está sendo feito o ajuste dos pesos sinápticos (índice j);

∆wji é o ajuste do peso wji.

Podem ser utilizadas três estratégias de treinamento diferentes. O modo sequencial, no qual os pesos são atualizados a cada exemplo de treinamento apresentado à rede com base no erro individual; o modo por lote, no qual os pesos são atualizados somente ao final da apresentação de todos os N exemplos de treinamento com base no erro médio εmed; e o modo por mini-batches, que é um intermediário entre os outros dois, que atualiza os pesos após um determinado número de exemplos (menor que N), chamado mini-batch.

O primeiro método é o mais simples, pois não é necessário armazenar os resultados de cada exemplo até o final da apresentação dos N exemplos de treinamento, exigindo menos memória.

A média aritmética dos ajustes realizados em cada exemplo de treinamento apresentado à rede é uma estimativa da alteração que seria realizada para minimizar εmed, isto é, o erro médio de todos os N exemplos de treinamento apresentados à rede para treinamento.

A apresentação de todo o conjunto de treinamento com a propagação, retropropagação e ajuste dos pesos para cada vetor de entrada é chamado de época.

Para demonstrar o desenvolvimento das equações do algoritmo de retropropagação, é padronizada a notação onde o índice j se refere a um dos neurônios da camada em processamento. O índice i se refere a um dos neurônios da camada anterior, cujas saídas estão conectadas às entradas do neurônio j, o índice k se refere a um dos neurônios da camada posterior cujas entradas estão conectadas à saída do neurônio j e o índice n se refere a cada um dos vetores de entrada e saída desejada apresentados à rede, para os quais são feitos a propagação e a retropropagação.

A seguir, é feita a demonstração do equacionamento para o modo sequencial e função de perda erro quadrático. A começar pelo erro ej (n) em cada neurônio da

última camada, dado por

𝑒𝑗(𝑛) = 𝑑𝑗(𝑛) − 𝑦𝑗(𝑛) . (4.6)

A energia do erro ε(n) é obtida a partir de 𝜀(𝑛) =1

2∑ 𝑒𝑗 2(𝑛) 𝑗 ∈𝐶

, (4.7)

onde C representa o conjunto dos neurônios da camada de saída.

Se a função de custo escolhida fosse a entropia cruzada, utilizada normalmente quando a rede neural é usada para classificação de mais de duas classes, ε(n) seria descrita por

𝜀(𝑛) = − ∑ 𝑑𝑗(𝑛). log (𝑦𝑗(𝑛)) 𝑗∈𝐶

. (4.8)

O erro médio εmed é a média do erro ε(n) para todos os N exemplos de treinamento apresentados à rede, isto é

𝜀𝑚𝑒𝑑 = 1 𝑁∑ 𝜀(𝑛) 𝑁 𝑛=1 (4.9)

Se a atualização dos pesos for feita a cada exemplo de treinamento (modo sequencial), εmed se torna igual a ε(n).

A derivada parcial ∂ε(n)/∂wji(n) na Equação (4.5) pode ser expressa como 𝜕𝜀(𝑛) 𝜕𝑤𝑗𝑖(𝑛)= 𝜕𝜀(𝑛) 𝜕𝑒𝑗(𝑛) 𝜕𝑒𝑗(𝑛) 𝜕𝑦𝑗(𝑛) 𝜕𝑦𝑗(𝑛) 𝜕𝑢𝑗(𝑛) 𝜕𝑢𝑗(𝑛) 𝜕𝑤𝑗𝑖(𝑛) . (4.10)

Para um neurônio de saída:

- ∂ε(n)/∂ej(n) pode ser calculada derivando a Equação (4.7), obtendo-se

𝜕𝜀(𝑛)

- ∂ej(n)/∂yj(n) pode ser calculada derivando a Equação (4.6), obtendo-se

𝜕𝑒𝑗(𝑛)

𝜕𝑦𝑗(𝑛)= −1 ; (4.12)

- ∂yj(n)/∂uj(n) é a derivada da função de ativação f(uj(n)), isto é

𝜕𝑦𝑗(𝑛)

𝜕𝑢𝑗(𝑛)= 𝑓′(𝑢𝑗(𝑛)) ; (4.13)

- ∂uj(n)/∂wji(n) pode ser derivada da Equação (4.1), e é igual à própria entrada xj

do neurônio j, que é a saída do neurônio i (camada anterior), sendo expressa por 𝜕𝑢𝑗(𝑛)

𝜕𝑤𝑗𝑖(𝑛) = 𝑦𝑖(𝑛) . (4.14)

Substituindo as Equações (4.11), (4.12), (4.13) e (4.14) em (4.10), tem-se 𝜕𝜀(𝑛) 𝜕𝑤𝑗𝑖(𝑛) = 𝑒𝑗(𝑛). −1. 𝑓′(𝑢 𝑗(𝑛)) . 𝑦𝑖(𝑛) . (4.15) Substituindo (4.15) em (4.5), obtém-se ∆𝑤𝑗𝑖(𝑛) = −𝜂. 𝑒𝑗(𝑛). −1. 𝑓′(𝑢 𝑗(𝑛)) . 𝑦𝑖(𝑛) (4.16)

que, ao ser simplificada, é tida como

∆𝑤𝑗𝑖(𝑛) = 𝜂. 𝑒𝑗(𝑛). 𝑓′(𝑢

𝑗(𝑛)) . 𝑦𝑖(𝑛) (4.17)

que, por fim, pode ser expressa como

∆𝑤𝑗𝑖(𝑛) = 𝜂. 𝛿𝑗(𝑛). 𝑦𝑖(𝑛) . (4.18)

A Equação (4.18) é chamada de regra delta, onde δj(n) é o gradiente local, dado por

𝛿𝑗(𝑛) = 𝑒𝑗(𝑛). 𝑓′(𝑢

A energia do erro ε(n) é função das saídas dos neurônios da última camada. Portanto, para calcular o ajuste dos pesos de um neurônio de uma camada oculta, a derivada parcial ∂ε(n)/∂wji(n) na Equação (4.10) precisa ser calculada recursivamente, pois o erro não está na saída do neurônio j, e sim nos neurônios da última camada.

Para um neurônio na última camada oculta, os neurônios de saída estão na camada posterior. Portanto, ej(n) não é definida para os neurônios desta camada,

de modo que a Equação (4.10) é adaptada para 𝜕𝜀(𝑛) 𝜕𝑤𝑗𝑖(𝑛)= 𝜕𝜀(𝑛) 𝜕𝑦𝑗(𝑛) 𝜕𝑦𝑗(𝑛) 𝜕𝑢𝑗(𝑛) 𝜕𝑢𝑗(𝑛) 𝜕𝑤𝑗𝑖(𝑛) . (4.20)

É preciso calcular ∂ε(n)/∂yj(n), onde ε(n) é definida como a soma da energia do erro de cada um dos neurônios da camada de saída com índice k, que é a camada imediatamente posterior à última camada oculta com índice j, isto é

𝜀(𝑛) =1

2∑ 𝑒𝑘 2(𝑛) 𝑘 ∈ 𝐶

, (4.21)

onde C representa o conjunto de neurônios da camada de saída. Diferenciando ε(n) em relação a yj(n), obtém-se

𝜕𝜀(𝑛)

𝜕𝑦𝑗(𝑛) = ∑ 𝑒𝑘(𝑛) 𝑘 ∈𝐶

𝜕𝑒𝑘(𝑛)

𝜕𝑦𝑗(𝑛) (4.22)

que, pela regra da cadeia para a derivada parcial ∂ε(n)/∂yj(n), fica como 𝜕𝜀(𝑛) 𝜕𝑦𝑗(𝑛)= ∑ 𝑒𝑘(𝑛) 𝜕𝑒𝑘(𝑛) 𝜕𝑢𝑘(𝑛) 𝜕𝑢𝑘(𝑛) 𝜕𝑦𝑗(𝑛) 𝑘 ∈𝐶 . (4.23)

O erro nos neurônios da camada de saída, é dado por

A saída dos neurônios da última camada, yk(n), pode ser expressa em função do

sinal de ativação uk(n) a partir de uma função de ativação f, isto é

𝑒𝑘(𝑛) = 𝑑𝑘(𝑛) − 𝑓(𝑢𝑘(𝑛)) . (4.25) A derivada do erro nos neurônios de saída em relação ao sinal de ativação é

𝜕𝑒𝑘(𝑛) 𝜕𝑢𝑘(𝑛)

= −𝑓′(𝑢

𝑘(𝑛)) . (4.26)

O sinal de ativação dos neurônios da última camada uk(n) é

𝑢𝑘(𝑛) = ∑ 𝑤𝑘𝑗(𝑛)𝑦𝑗(𝑛) 𝑚

𝑗=0

. (4.27)

A derivada parcial de uk(n) em relação à saída do neurônio da última camada

escondida é 𝜕𝑢𝑘(𝑛) 𝜕𝑦𝑗(𝑛) = 𝑤𝑘𝑗(𝑛) . (4.28) Substituindo (4.26) e (4.28) em (4.23), obtém-se 𝜕𝜀(𝑛) 𝜕𝑦𝑗(𝑛) = − ∑ 𝑒𝑘(𝑛)𝑓′(𝑢𝑘(𝑛))𝑤𝑘𝑗(𝑛) 𝑘 = − ∑ 𝛿𝑘(𝑛)𝑤𝑘𝑗(𝑛) 𝑘 . (4.29) Substituindo (4.29), (4.13) e (4.14) em (4.20), obtém-se 𝜕𝜀(𝑛) 𝜕𝑤𝑗𝑖(𝑛)= − ∑ 𝛿𝑘(𝑛)𝑤𝑘𝑗(𝑛) 𝑘 . 𝑓′(𝑢 𝑗(𝑛)) . 𝑦𝑖(𝑛) . (4.30) Substituindo (4.30) em (4.5), obtém-se ∆𝑤𝑗𝑖(𝑛) = 𝜂. ∑ 𝛿𝑘(𝑛)𝑤𝑘𝑗(𝑛) 𝑘 . 𝑓′(𝑢 𝑗(𝑛)) . 𝑦𝑖(𝑛) . (4.31)

𝛿𝑗(𝑛) = 𝑓′(𝑢

𝑗(𝑛)) ∑ 𝛿𝑘(𝑛)𝑤𝑘𝑗(𝑛) 𝑘

, (4.32)

pode-se então reescrever (4.31) como

∆𝑤𝑗𝑖(𝑛) = 𝜂. 𝛿𝑗(𝑛). 𝑦𝑖(𝑛) . (4.33)

Em resumo, os ajustes aplicados aos pesos seguem a regra delta da Equação (4.33). Para neurônios da camada de saída, calcula-se 𝛿𝑗(𝑛) usando a Equação (4.19). Para neurônios de uma camada escondida, calcula-se 𝛿𝑗(𝑛) usando a Equação (4.32), que relaciona os gradientes locais, os pesos dos neurônios da camada posterior conectados ao neurônio da camada oculta e a derivada da função de ativação para o argumento do sinal de ativação do neurônio da camada oculta para o qual está sendo calculado o ajuste do peso.

Portanto, para calcular os ajustes dos pesos é necessário apresentar um vetor de entrada, propagá-lo através da rede calculando os sinais de ativação e as saídas de todos os neurônios, calcular o erro em relação à saída desejada e então retropropagar o erro, calculando os gradientes locais e os ajustes dos pesos camada por camada.

É necessário conhecer a derivada da função de ativação para calcular o gradiente local de cada neurônio na rede. A função deve ser contínua para sua derivada existir para qualquer valor do sinal de ativação. Um exemplo de função diferenciável é a sigmoide logística ou unipolar, dada por

𝑓𝑗(𝑢𝑗(𝑛)) = 1 1 + 𝑒−𝑎𝑢𝑗(𝑛) , (4.34) cuja derivada é 𝑓′ 𝑗(𝑢𝑗(𝑛)) = 𝑎𝑒−𝑎𝑢𝑗(𝑛) [1 + 𝑒−𝑎𝑢𝑗(𝑛)]2 . (4.35)

𝑓′

𝑗(𝑢𝑗(𝑛)) = 𝑎𝑦𝑗(𝑛)[1 − 𝑦𝑗(𝑛)] . (4.36)

O parâmetro taxa de aprendizagem η da Equação (4.5) controla o valor dos ajustes dos pesos a cada iteração. Valores altos de η tendem a tornar o processo de aprendizagem instável (oscilatório) devido a ajuste dos pesos muito grandes. Valores baixos de η tornam o processo de aprendizagem mais suave, porém mais demorado, necessitando de um maior número de iterações. Um problema que pode dificultar o processo de treinamento é a ocorrência de mínimos locais na função de custo, que podem impedir a convergência do algoritmo para o mínimo global da função, como ilustrado na Figura 4.4.

Figura 4.4: Problema dos mínimos locais

Fonte: (SAMPAIO, 2020)

Uma forma de aumentar a taxa de aprendizagem, mas reduzindo o risco de instabilidade e do algoritmo ficar preso em um mínimo local, é adicionar um termo de momento ao ajuste, que é uma fração do ajuste realizado na iteração anterior. A regra delta com a inclusão do momento é chamada de regra delta generalizada e é expressa por

Existem vários algoritmos para otimização do processo de treinamento, como

Stochastic Gradient Descent (SGD), RMSprop, Adam, Adagrad Adabound

(RIBEIRO; JUNIOR, 2020) que não serão aprofundados neste estudo.

Para um treinamento eficaz, devem ser apresentados à rede exemplos de treinamento que retratem o ambiente externo nas mais diferentes condições possíveis.

Existem alguns critérios para a finalização do treinamento. Um baixo erro de classificação não é suficiente, pois não é garantia de que a rede está conseguindo generalizar o aprendizado para vetores de entrada não apresentados no treinamento. Normalmente, o critério utiliza a avaliação do erro de validação, que será explicado na Subseção 4.1.7.

Documentos relacionados