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).