• Nenhum resultado encontrado

2.2 Redes Neurais Artificiais

2.2.5 Multi-Layer Perceptron e Back-propagation

O trabalho de Minsky e Papert (1969) causou um grande impacto na comunidade cientí- fica, fazendo com que o interesse no estudo de RNA diminuísse muito durante a década de 70. Entretanto, após a publicação dos dois volumes do livro Parallel distributed processing

(Rumelhart e McClelland, 1986;McClelland et al., 1986) propondo a utilização do algoritmo

Back-propagationem tarefas de Aprendizado de Máquina (AM) e demonstrando seu funciona- mento, o interesse emRNAvoltou a crescer na comunidade científica.

wji wj0 y = +10 yi . . . . . . vj φ yj -1 dj ej

Figura 2.10: Fluxo do sinal em um neurônio j. Adaptado de (Haykin,1999).

Considere a Figura2.10, na qual vj é a saída do neurônio j, dada como entrada à função de

ativação associada ao neurônio, e yj é a saída do neurônio j após a aplicação da função de ati-

vação ϕ. A ideia básica do processo de aprendizado do Back-propagation é a repetida aplicação da regra da cadeia do Cálculo, de modo a calcular a influência de cada peso sináptico da rede no processo de aprendizagem. Essa influência é calculada com relação a uma função de erro E de todos os parâmetros livres da rede (pesos sinápticos e bias). Assim, a função E é uma medida de desempenho, e o objetivo do aprendizado do Back-propagation é ajustar esses parâmetros livres com o objetivo de minimizar a função E. Os pesos da rede são ajustados proporcionalmente ao valor da derivada parcial ∂E/∂wji. Essa derivada parcial é dada na Equação2.5.

∂E ∂wji = ∂E ∂ej ∂ej ∂yj ∂yj ∂vj ∂vj ∂wji (2.5) A derivada parcial representa um fator de sensibilidade, e determina a direção da busca pelo peso sináptico wji no espaço de pesos. Acompanhando o fluxo do sinal em um neurônio j

(Figura2.10), pode-se obter os valores das derivadas da Equação2.5(Haykin,1999):

∂E ∂ej =ej ∂ej ∂yj = −1 (2.6) ∂yj ∂vj =ϕ′ j(vj) ∂vj ∂wji =yi

Uma vez conhecidas as derivadas parciais de cada peso sináptico, o objetivo do aprendizado é minimizar a função de erro E por meio da regra delta, dada pela Equação2.7. Na Equação, η representa a taxa de aprendizado do algoritmo Back-propagation. A utilização do sinal de menos indica a execução do gradiente descendente no espaço de busca, ou seja, a procura por uma direção para a mudança do peso sináptico que reduza o erro E(t) (Haykin,1999).

wji(t + 1) = wji(t) − η ∂E(t)

∂wji(t)

(2.7) Basicamente, o processo de aprendizado do algoritmo Back-propagation consiste de dois passos: uma fase de propagação e uma fase de retropropagação. Na fase de propagação, um exemplo de entrada é aplicado aos neurônios de entrada da rede, e os sinais produzidos por esses neurônios são propagados camada a camada até que uma saída seja produzida pela rede. Após essa fase, o erro da rede é calculado subtraindo-se a saída desejada (d) da saída obtida (o) pela rede. Esse erro é então retropropagado pela rede camada a camada, e os pesos da rede são ajustados para tornar a saída da rede próxima da saída desejada. O algoritmo Back-propagation pode ser descrito da seguinte maneira (Haykin,1999):

1. Inicialização: inicializar os pesos sinápticos com valores pequenos provenientes de uma distribuição uniforme;

2. Apresentação dos exemplos de treinamento: misturar os exemplos aleatoriamente e apresentá-los à rede. Para cada exemplo do conjunto de treinamento, executar as fases de propagação e retropropagação descritas nos passos 3 e 4;

3. Fase de propagação: seja um exemplo de treinamento denotado por uma tupla (x(t), d(t)), com x sendo um vetor de atributos de um exemplo de entrada e d um vetor com as saídas desejadas do exemplo. Os sinais de saída de cada neurônio devem ser calculados e propa- gados camada a camada. A saída v(l)j (t) de um neurônio j na camada l é obtida por meio da Equação (2.8):

v(l)j (t) =

m

X

i=0

w(l)ji(t)y(l−1)i (t) (2.8)

Na Equação (2.8), y(l−1)i (t) é a saída do neurônio i na camada anterior l − 1 na iteração t, e w(l)ji(t) é o peso sináptico do neurônio j na camada l conectado ao neurônio i na camada l −1. Para i = 0, têm-se y(l−1)0 (t) = +1 e w(l)j0(t) = b(l)j (t), sendo b(l)j (t) o bias aplicado ao neurônio j na camada l. Com o uso de uma função de ativação ϕ, a saída do neurônio j na camada l é dada pela Equação (2.9):

y(l)j = ϕj(vj(t)) (2.9)

Se o neurônio j estiver localizado na primeira camada intermediária, ou seja, l = 1, então y(0)j (t) = xj(t), em que xj(t) é o j-ésimo elemento do vetor de entrada x(t). Se o neurônio

jestiver na camada de saída, ou seja, l = L, em que L é o número de camadas da rede, então y(L)j = oj(t), e o erro do neurônio (ej) deve ser calculado de acordo com a Equação (2.10), em que dj(t) é o j-ésimo elemento do vetor de saídas desejadas d(t), e oj(t) é o

j-ésimoelemento do vetor de saídas verdadeiras o(t).

ej(t) = dj(t) − oj(t) (2.10)

O valor instantâneo do erro ej(t) de um neurônio j no tempo t é definido por 1/2e2j. O

valor instantâneo Es(t) do erro total obtido pela rede considerando todos os neurônios da

camada de saída é obtido somando os valores 1/2e2

j dos erros de todos os neurônios da

camada. Esses são os únicos neurônios considerados visíveis, pois seus erros podem ser calculados diretamente. Esse cálculo é mostrado na Equação2.11, na qual C é o conjunto de todos os neurônios da camada de saída.

Es(t) = 1 2

X

j∈C

e2j(t) (2.11)

O erro total da rede considerando todos os exemplos, ou erro quadrático médio Em, é

obtido por meio da soma do erro Es(t) obtido em todos os exemplos de treinamento, e

então normalizando essa soma com relação ao número de exemplos N. Esse cálculo é apresentado na Equação2.12. Em = 1 N N X n=1 Es(t) (2.12)

4. Fase de retropropagação: Nessa fase são calculados os gradientes locais da rede (δ), definidos da seguinte maneira:

δ(l)j (t) =      e(L)j (t)ϕ′ j(v (L) j (t)) (1) ϕ′j(v(l)j (t)) Pkδ(l+1)k (t)w(l+1)k j (t) (2) (1) se o neurônio j estiver na camada de saída L.

(2) se o neurônio j estiver na camada intermediária l. No cálculo dos gradientes locais, ϕ′

j(·) denota a derivada da função de ativação com re-

lação ao seu argumento. Os pesos sinápticos da rede na camada l são então ajustados de acordo com a regra apresentada na Equação (2.13), em que η é a taxa de aprendizado e α é a constante momentum.

w(l)ji(t + 1) = w(l)ji(t) + α[w(l)ji(t − 1)] + ηδ(l)j (t)y(l−1)i (t) (2.13) 5. Iteração: as fases de propagação e retropropagação (passos 3 e 4) devem ser repetidas,

até que um critério de parada seja satisfeito. Taxa de Aprendizado e Constante Momentum

A taxa de aprendizado η utilizada tem influência direta na trajetória percorrida pelo gradiente descendente no espaço de busca (espaço de pesos). Quanto menor o valor de η, menores serão as mudanças dos pesos sinápticos de uma iteração para outra do algoritmo Back-propagation, e mais suave será a trajetória percorrida. Entretanto, muitos passos do algoritmo serão necessários até que uma solução aceitável seja encontrada. Se uma taxa de aprendizado muito alta for utilizada, o processo de aprendizado é acelerado. No entanto, essa aceleração é resultado de mudanças grandes nos valores dos pesos sinápticos, o que faz com que a rede se torne instável. Com o objetivo de aumentar a taxa de aprendizado e ainda assim prevenir instabilidade na rede, é utilizada uma constante momentum (Rumelhart e McClelland, 1986). A constante momentumleva em consideração a mudança do peso sináptico no passo anterior do algoritmo para influenciar a mudança do peso no passo atual. O objetivo é acelerar a convergência do algoritmo em direções de declive constante no espaço de busca (derivada parcial com mesmo sinal durante iterações consecutivas), e ter um efeito estabilizador em regiões nas quais o sinal da derivada parcial se mantém oscilando (derivada parcial com sinal oposto durante iterações consecutivas) (Haykin,1999).

Função de Ativação

O cálculo da derivada parcial ∂E(t)/∂wji(t) requer o cálculo do gradiente δ de cada neurônio,

que por sua vez requer o conhecimento da derivada da função de ativação ϕ′

j(·) associada ao

neurônio. Para que essa derivada exista, a função de ativação deve ser contínua e diferenciável

(Haykin,1999). Uma função não linear, contínua e diferenciável, é a sigmoidal. Duas formas

• Função Logística: nessa função, a saída do neurônio j é dada pela Equação 2.14. De acordo com a equação, o sinal de saída estará sempre na faixa 0 ≤ yj ≤1.

ϕj(vj(t)) =

1

1 + exp(−avj(t))

, a >0 e − ∞ < vj(t) < ∞ (2.14)

A derivada de ϕj(vj(t)) com relação a vj(t) é dada pela Equação2.15.

ϕ′j(vj(t)) = ayj(t)[1 − yj(t)] (2.15)

Quando o neurônio j for um neurônio de saída, tem-se que yj(t) = oj(t), e o gradiente do

neurônio j pode então ser calculado pela Equação2.16.

δj(t) = ej(t)ϕ′j(vj(t)) = a[dj(t) − oj(t)]oj(t)[1 − oj(t)] (2.16)

Se o neurônio j estiver localizado em uma camada escondida, o gradiente é dado pela Equação2.17. δj(t) = ϕ′j(vj(t)) X k δk(t)wk j(t) = ayj(t)[1 − yj(t)] X k δk(t)wk j(t) (2.17)

• Função Tangente Hiperbólica: essa função tem a forma apresentada na Equação2.18, na qual a e b são constantes.

ϕj(vj(t)) = a tanh(bvj(t)), (a, b) > 0 (2.18) A derivada da função com relação a vj(t) é dada pela Equação2.19.

ϕ′j(vj(t)) = b

a[a − yj(t)][a + yj(t)] (2.19)

Se o neurônio j estiver localizado na camada de saída da rede, seu gradiente é calculado utilizando a Equação2.20.

δj(t) = ej(t)ϕ′j(vj(t)) = b

a[dj(t) − oj(t)][a − oj(t)][a + oj(t)] (2.20) Se o neurônio j estiver localizado em uma camada escondida, o gradiente é dado pela Equação2.21. δj(t) = ϕ′j(vj(t)) X k δk(t)wk j(t) = b a[a − yj(t)][a + yj(t)] X k δk(t)wk j(t) (2.21)

Modo de Treinamento

O treinamento de uma rede neural MLP se dá por meio da apresentação de exemplos de treinamento, sendo que para cada exemplo, são executadas as fases de propagação e retropropa- gação. A apresentação de todos os exemplos de treinamento à rede durante a fase de treinamento é chamada de época ou ciclo. O processo de aprendizado dura então um número de ciclos pré- definidos, ou até que os pesos da rede se estabilizem e o erro da mesma diminua até um valor mínimo. Além disso, a ordem de apresentação dos exemplos à rede deve ser aleatória de época para época. Isso faz com que a busca no espaço de pesos torne-se estocástica, melhorando a estabilidade da rede (Haykin,1999). A apresentação dos exemplos para o treinamento de uma rede neural utilizando Back-propagation pode ser feita de duas maneiras: de modo sequencial e de modo batch.

No modo de treinamento sequencial, o ajuste dos pesos sinápticos da rede é feito após a apresentação de cada exemplo. Assim, quando o primeiro exemplo de um ciclo é apresentado à rede, são executadas as fases de propagação e retropropagação para o exemplo, e os pesos são ajustados de acordo com a saída da rede para esse exemplo. O mesmo procedimento é executado para todos os exemplos do conjunto de dados, até o último exemplo do ciclo ser apresentado à rede. Esse processo de apresentação de exemplos continua por vários ciclos, enquanto durar o treinamento da rede. No modo de treinamento batch, diferentemente, os pesos sinápticos são ajustados apenas após a apresentação de todos os exemplos de treinamento à rede (um ciclo).

O modo de treinamento sequencial é preferível ao modo de treinamento batch porque a atualização dos pesos a cada apresentação de um exemplo faz com que a busca no espaço de pesos torne-se naturalmente estocástica, dado que os exemplos são apresentados aleatoriamente à rede. Isso faz com que a busca do algoritmo Back-propagation fique menos suscetível a ficar presa em mínimos locais (Haykin,1999).