• Nenhum resultado encontrado

Algoritmo de Retropropagação Backpropagation

Nas camadas ocultas de uma MLP, o ajuste dos pesos é realizado através de aprendizado supervisionado, onde, para um conjunto de amostra de entrada espera-se a respectiva saída. Cada neurônio de uma camada oculta ou de saída é projetado para calcular a saída de um sinal por meio de uma função não linear e calcular o valor do gradiente para minimizar o erro. O cálculo do valor do gradiente é realizado através do algoritmo de retropropagação (backpropagation), sendo o principal algoritmo utilizado para o treinamento das redes de múltiplas camadas.

3.4

Algoritmo de Retropropagação - Backpropagation

O algoritmo de retropropagação é um dos principais algoritmos utilizados para o treinar redes neurais. Ele busca se aproximar do mínimo global através da descida do gradiente. O algoritmo pode ser entendido como uma generalização do least mean square - (LMS) (Leung & Haykin,1991).

A retropropagação é baseada na regra de aprendizagem de correção de erro. O algoritmo aplica dois passos fundamentais durante o processo de aprendizagem: um passo para frente (feedforward), denominado propagação e um passo para trás (backward), no sentido inverso da rede, denominado retropropagação.

Dado um conjunto de dados de entrada da rede, os mesmos são passados camada a camada até gerarem um padrão de saída correspondente a resposta da rede. No passo seguinte, durante a retropropagação, os pesos dos neurônios de cada camada são reajustados consoante a regra de correção de erro. O cálculo do erro ocorre quando o resultado de resposta produzido na saída da rede é subtraído da resposta alvo. Por fim, o erro é propagado no sentido inverso das conexões sinápticas. (Haykin,2001).

A regra da cadeia de cálculo é utilizada para calcular as derivadas de funções formadas pela composição de outras funções onde os valores derivados já são conhecidos. O backpropagation calcula a regra da cadeia com uma ordem específica e de maneira eficiente (Goodfellow et al.,2016).

O sinal de erro na saída de um neurônio j, é calculada através da diferença entre a saída desejada ydj(n) e a resposta da rede yj(n). O cálculo do erro ej(n) é obtido através

da Equação3-1.

ej(n) = ydj(n) − yj(n) (3-1) O valor da energia do erro quadrático para o neurônio j é definido por 12(ej(n))2. Somando-se os termos de todos os neurônios da camada de saída, obtém-se o valor instantâneo da energia total do erro. A Equação3-2apresenta a equação deste processo.

3.4 Algoritmo de Retropropagação - Backpropagation 37

ε(n) =1

2

j (ej(n))

2 (3-2)

Considerando que N seja o número total do conjunto de treinamento. A energia do erro quadrático médio é obtido pela soma do erro ε(n) para todos os n e então, normalizado em relação ao tamanho do conjunto N, conforme a Equação3-3.

E = 1 N N

n=1 ε(n) (3-3)

O processo de treinamento têm por objetivo, ajustar os pesos da rede para minimizar a função de custo. Considerando um nerônio j, vj(n), que possui como entrada

um conjunto de sinais oriundos de uma camada anterior, a ativação interna deste neurônio é dada pela função de ativação da saída dos neurônios que estão conectados ao neurônio jpor meios dos pesos w[ ji] conforme a Equação3-4, onde p é o número de neurônios da

camada anterior ao neurônio j.

vj(n) =

p

i=0

wji(n)yi(n) (3-4)

Posteriormente, a saída do neurônio j é um valor real produzido através de uma função não linear, como mostrado na Equação3-5.

yj(n) = fj(vj(n)) (3-5) Para realizar o reajuste do peso wi j(n) e minimizar e função de custo, o backpro-

pagationaplica o método do gradiente descendente. O ajuste a ser realizado é proporcio- nal a derivada parcial ∂ε(n)

∂wi j(n) em relação a cada peso da rede. De acordo com da regra da

cadeia de cálculo, o gradiente pode ser obtido através da seguinte Equação3-6. ∂ε(n) ∂wi j(n) = ∂ε(n) ∂ej(n) ∂ej(n) ∂yj(n) ∂yj(n) ∂vj(n) ∂vj(n) ∂wj(n) (3-6) Aplicando a diferenciação da Equação3-1em relação a yj(n), (3-2) em relação

a ej(n),3-4em relação a wji(n), (3-5) em relação a vj(n) e substituindo na Equação3-6,

obtém-se como resultando a Equação3-7. ∂ε(n) ∂wi j(n)

= −e j(n) f0j(vj(n))yi(n) (3-7)

Os ajustes nos pesos de ∆wi j é realizado em direção oposta ao gradiente através

da Regra Delta. A constante η na Equação3-8representa a taxa de aprendizagem, o sinal de negativo indica a descida do gradiente em relação ao espaço de pesos.

3.4 Algoritmo de Retropropagação - Backpropagation 38

∆wji(n) = −η

∂ε(n) ∂wi j(n)

(3-8) A aplicação da Equação3-7na Equação3-8gera a Equação3-9.

∆wji(n) = ηδ(n)yi(n) (3-9)

Onde o gradiente local δj(n) é definido pela Equação3-10

δj(n) = − ∂ε(n) ∂ej(n) ∂ej(n) ∂yj(n) ∂yj(n) ∂vj(n) = ej(n) f 0 j(vj(n)) (3-10)

Conforme mostrado nas equações 3-9 e 3-10 a atualização dos pesos depende sinal de erro ej(n) para o gradiente local. Para tal, é necessário saber a localização do

neurônio j, sendo que o mesmo pode estar na camada de saída ou na camada oculta. Caso o neurônio j esteja localizado na camada de saída, o erro pode ser calculado através da Equação3-1. Portanto, o δj(n), é igual ao produto da derivada da função de ativação e o

erro ej(n), como pode ser observado na Equação3-11.

δj(n) = ej(n) f

0

j(vj(n)) (3-11)

No entanto, caso o neurônio j esteja localizado na camada intermediária, o sinal de erro e j(n) pode ser calculado em termos dos neurônios em que j esteja conectado. Dessa maneira, para calcular o gradiente local δj(n), a Equação 3-10pode ser reescrita

da seguinte forma. δj(n) = − ∂ε(n) ∂yj(n) ∂yj(n) ∂vj(n) = −∂ε(n) ∂yj(n) f0j(vj(n)) (3-12)

A Equação3-13é utilizada para calcular a derivada parcial ∂ε(n)/∂yj(n) e obter

o erro quadrático do neurônio k.

ε(n) =1

2

k (ek(n))

2

(3-13)

Diferenciando a Equação 3-13 em relação ao sinal yj(n), obtêm-se a Equação

3-14. ∂ε(n) ∂yj(n) =

k ek(n) ∂ek(n) ∂yj(n) (3-14)

Utilizando a regra da cadeia para a derivada parcial ∂ek(n)/∂yj(n), a Equação

3.4 Algoritmo de Retropropagação - Backpropagation 39 ∂ε(n) ∂yj(n) =

k ek(n)∂ek(n) ∂vk(n) ∂vk(n) ∂yj(n) (3-15)

O sinal de erro do ek(n), onde k é o neurônio de saída, pode ser obtido pela

Equação3-16.

ek(n) = ydk(n)yk(n) = ydk(n) fk(vk(n)) (3-16) Já o nível de ativação do neurônio k é calculado através da Equação3-17, onde q, representa o número de entradas conectadas ao neurônio k.

vk(n) =

q

j=0

wk j(n)yj(n) (3-17)

Realizando a diferenciação da Equação3-16em relação a yj(n) e substituindo na

Equação3-14, obtém-se a Equação3-18, onde δj(n), representa o campo local induzido

do neurônio k. ∂ε(n) ∂yj(n) = −

k ek(n) fk0(vk(n))wk j(n) = −

k δk(n)wk j(n) (3-18)

Por fim, substituindo a Equação3-18na Equação3-13, obtemos o gradiente local δj(n) para o neurônio intermediário j, que pode ser calculado através da Equação3-19.

δj(n) = f

0

j(vj(n))

k

δk(n)wk j(n) (3-19)

Como pode ser observado na Equação3-19, caso o neurônio j esteja localizado na camada intermediária, o gradiente local δj(n) será obtido pelo produto da derivada

da função de ativação com a soma ponderada dos gradientes locais calculados para os neurônios conectados ao neurônio j.

Resumidamente, durante a primeira fase, o backpropagation realiza o processo forward sem alterar os pesos das camadas da rede neural. A fase forward inicia com a entrada das informações através da camada de entrada e encerra com o cálculo de erro na camada de saída.

A segunda fase backward inicia através da camada de saída e propaga por todas as camadas da rede até a camada de entrada. Os pesos são ajustados inicialmente na camada de saída, e propagados recursivamente ajustando os pesos de todas as camadas intermediárias até a camada de entrada.

Documentos relacionados