Inteligência Artificial
3.6 Redes Clássicas – Percpetron e Adaline
3.6.1 Redes com funções de ativação de
limiar
Uma rede simples de uma camada consiste em um ou mais neurônios de saída j, conectados às entradas i, através de pesos W . No caso mais simples, a rede ij
possui um só neurônio k, como indicado na Figura 3.11.
FIGURA 3.11 Neurônio simples com duas entradas e uma saída.
A saída y do neurônio é dada pela expressão abaixo. k
A função de ativação proposta originalmente por McCullock e Pitts é uma
função de limiar:
Para este caso, o limiar de ativação do neurônio é zero, mas o modelo
permite estabelecer um limiar de ativação diferente de zero. Uma modificação introduzida nesse modelo de neurônio foi a introdução de um parâmetro
polarizador (bias ou offset) b (Figura 3.12), cuja finalidade é deslocar o valor k
da informação referente à entrada líquida u , de forma a transladar a função de k ativação no eixo correspondente ao valor de u . k
FIGURA 3.12 Adição de um offset no modelo do neurônio.
O polarizador pode ser tratado como mais um peso da rede. Para isso, basta
considerarmos uma nova entrada do tipo x = 1, com um peso associado w = 0 0 b , assim a representação fica sendo: k
Esse neurônio pode ser empregado para separar classes distintas de padrões
de entradas para aplicações de classificações de padrões. Se a entrada líquida for maior que o limiar, o padrão dessa entrada pertence à classe 1, caso contrário, pertence à classe 0. Portanto, podemos usá-lo para emular o comportamento de uma porta lógica, por exemplo.
Veja os dados típicos de uma porta lógica “OU”, cuja tabela-verdade está
indicada a seguir.
Poderíamos usar para representá-la uma rede neural similar a da Figura
3.12, com um neurônio de duas entradas (E1 = x1, E2 = x2) e uma saída (yk) Assumindo os valores dos pesos e bias w = 1, w = 1 e b = −0,5. A rede de 1 2 k fato modela uma função discriminante linear que separa as classes do problema, como ilustrado a seguir.
A separação entre as duas classes é dada pela equação
, que é a equação de uma família de retas que
podem separar as classes em questão. Resta o questionamento de como foram encontrados os valores dos pesos para o exemplo dado. Ou seja, como treina a rede para obter a característica de classificação desejada. A seguir, veremos dois métodos de treinamento básicos.
3.6.2 Regra de treinamento de Hebb Os algoritmos de treinamento basicamente calculam, a cada passo, um novo valor para os pesos dos nós, ou seja: w = w + A . Hebb propôs uma novo antigo w regra de cálculo para cada acréscimo A que é proporcional à entrada w, associada, mais uma função de transferência (ou de ativação), que é ligeiramente diferente da função de limiar vista anteriormente. Esta função é conhecida como função de limiar bipolar, e está representada na expressão abaixo.
O algoritmo de treinamento proposto está indicado a seguir:
1. Inicie todos os pesos em zero.
2. Para cada padrão de entrada e saída fornecido faça os passos a seguir.
2.1 Para cada conexão faça: (onde d é a saída desejada do nó)
2.1.1 ; (considerar w = b, x = 1 e ); 0 o 2.1.2 .
Ao final do treinamento, espera-se que y = d, ou seja, a saída obtida seja
igual à desejada. Vamos exemplificar aplicando o procedimento para uma função AND, com dados bipolares representados pela tabela seguinte.
Aplicando o algoritmo e realizando os cálculos correspondentes, a tabela
abaixo ilustra os resultados obtidos.
Ou seja, a rede resultante está ilustrada a seguir.
3.6.3 Regra de treinamento do Perceptron
Esta regra foi proposta por Rosemblatt (1958) e apresenta algumas mudanças em relação à regra de Hebb. A função de ativação passou a ter um limiar diferente de zero. Foi introduzido um fator de aprendizado η (0 < η ≤ 1), que regula a velocidade de modificação dos pesos. O algoritmo de treinamento fo modificado, de forma que não são realizadas correções nos pesos quando a rede responde corretamente a um padrão desejado. O algoritmo completo é o seguinte:
1. Inicie aleatoriamente os pesos da rede.
2. Repita para cada padrão se y ≠ d:
Como exemplificação, veja a figura a seguir.
Os pontos marcados com “+” pertencem a uma classe, e os pontos
marcados com círculo, pertencem a outra. O Perceptron deve ser capaz de achar a função separadora das classes em questão. Uma tabela com os valores das entradas, saídas e pesos encontra-se abaixo, onde os pesos foram iniciados com valores arbitrários diferentes de zero, e correspondem à reta separadora inicial (reta pontilhada na figura). A taxa de aprendizado é unitária e o valor do limiar da função de ativação é nulo.
Como houve uma mudança na época de treinamento, o algoritmo ainda
calcularia os pesos uma segunda vez, e só então, como não haveria mudanças o algoritmo pararia. A reta separadora (linha cheia) correspondente aos novos parâmetros de pesos e bias encontrados. Na prática, pode acontecer de a convergência para todos os padrões não seja possível, isto é, o erro não tender a zero. Assim, pode-se modificar o algoritmo para parar quando um percentua desejado (de respostas corretas) atingir uma tolerância especificada.
3.6.4 Redes Adaline
Uma importante alteração no procedimento de treinamento foi proposta po
Widrow e Hoff (1960). A rede por eles proposta é uma rede adaptativa (ADAptative Linear Element), treinada por um algoritmo baseado no método dos mínimos quadrados, que ficou conhecido como Regra Delta. A arquitetura do neurônio tem a mesma forma do Perceptron.
Do mesmo modo que em um Perceptron, a rede pode ter vários neurônios
recebendo as mesmas entradas em uma única camada de saída. Entretanto, se os nós são combinados de forma que a saída de um esteja conectada à entrada de outro, temos uma rede de múltiplas camadas, chamada rede Madaline (Many ADAptative Linear Elements). A saída de cada nó da rede é dada po
(3.5), onde M é o número de entradas da rede.
(3.5)
A ideia básica da regra Delta é ajustar os pesos a partir do erro na saída da
rede. O erro (também chamado custo) para um nó (referente a um determinado
padrão p) é expresso por (3.6).
(3.6)
Onde d k é a saída desejada (fornecida no padrão p de entrada/saída) e yk é a
saída realmente obtida (fornecida pela rede quando é apresentado o padrão p) Se existir mais de um nó na saída, é preciso considerar todos os erros dos diferentes nós. Entretanto, se simplesmente somarmos os erros, a tendência é que valores de erros positivos anulem os negativos, fornecendo uma informação inadequada do erro total. Assim, a proposta é minimizar o valor de
erro dado pela somatória quadrática dos erros (3.7).
(3.7)
O fator ½ na equação é usado com a finalidade de simplificar o algoritmo
de treinamento. Como o erro E é função da saída da rede y e esta é função k dos pesos w , pode-se dizer que o erro E é uma função que varia com os pesos ki
da rede, ou seja, E = f(w , w , w , ... w ). Assim, a ideia é minimizar o erro k1 k2 k3 kN ajustando os pesos, ou seja, encontrar o mínimo da função relativa ao erro Este mínimo é dado pela derivada parcial da função em questão em relação a cada peso.
O gradiente da função do erro é o vetor composto por , que representa
as derivadas parciais da função em relação a cada peso, apontando para a direção de crescimento da função. Assim, a ideia é variar os pesos de forma a caminhar na direção contrária ao gradiente, que é a direção de maior diminuição do valor da função de erro, ou seja:
(3.8)
Onde η é uma constante de proporcionalidade, também chamada de taxa de
treinamento. A derivada parcial da equação (3.8) pode ser decomposta pela
regra da cadeia na forma de (3.9).
(3.9)
Sabe-se que , o que resulta em (3.10).
(3.10)
A regra Delta para atualização dos pesos é capaz de atualizar corretamente
os pesos a cada iteração, seja com entradas binárias ou contínuas. O algoritmo de treinamento pode ser assim resumido:
1. Inicie os pesos com valores aleatórios pequenos. 2. Para cada padrão de entrada e saída fornecido:
Calcule yp;
Para cada conexão faça:
Até que um erro pequeno tenha sido atingido.
Caso desejemos obter saídas binárias, podemos introduzir uma função de
limiar na saída do nó. Um exemplo seria a emulação de uma porta ou função lógica como a OR, definindo uma saída bipolar, com os dados representados pela tabela abaixo.
Entrada E Entrada E 12 Saída
1 1 1
1 −1 1
−1 1 1
−1 −1 −1
Aplicando o algoritmo proposto e realizando os cálculos correspondentes, a
tabela a seguir ilustra os resultados obtidos, onde no segundo passo do treinamento a saída da rede já está com o valor correto de classificação.
3.6.5 Redes Madaline
Nas redes com múltiplas estruturas Adaline (Many Adaline), as mesmas estão conectadas em uma ou mais camadas, de forma a combiná-las de alguma forma, como ilustrado na figura abaixo.
Esta combinação pode ser uma “regra da maioria”, em que o Adaline da
saída não possui pesos e somente propaga a informação das saídas dos Adalines ocultos. Pode ser também uma combinação lógica dos Adalines ocultos, em que o Adaline de saída possui pesos fixos responsáveis por essa função lógica. Por exemplo, com w = 0,5, w = 0,5 e b = 0,5 temos uma 31 32 k3 combinação correspondente a uma porta OU. Já com w31 = 0,5, w32 = 0,5 e bk = −0,5 temos uma combinação correspondente a uma função AND.
Widrow e Hoff (1960) desenvolveram o algoritmo MR1 para o treinamento
de redes Madaline com entradas bipolares. Uma extensão desse algoritmo conhecida como MRII, foi desenvolvida por Widrow, Winter e Baxter (1987) possibilitando mais flexibilidade ao algoritmo de treinamento. Entretanto, o melhor algoritmo para treinamento de redes com múltiplas camadas é o conhecido como backpropagation, que será explicado na próxima sessão.
A versão do algoritmo de treinamento MR1 possui a seguinte forma:
1. Inicie os pesos e bias com valores aleatórios pequenos para os nós ocultos e
com valores fixos para o nó de saída.
2. Para cada padrão de entrada e saída fornecido:
Calcule up (entrada líquida) e yp para todos os nós Se y ≠ d, então: nó de saída
Caso a função do nó de saída seja OR:
Se d = 1, então, para cada conexão do nó k, cujo valor da entrada
líquida u é o mais próximo de k
zero, faça:
Caso a função do nó seja AND:
Se d = 1, então, para cada conexão de nó k, cujo valor da entrada líquida
u seja negativo, faça: k
Se d = −1, então, para cada conexão do nó k, cujo valor da entrada
líquida u é o mais próximo de zero, faça: k
(até que um erro pequeno tenha sido atingido, que os pesos não estejam
mais variando, ou executar o algoritmo um número de vezes).
Como exemplo, empregar uma rede Madaline para emular uma porta lógica
XOR que não pode ser representada com uma rede de uma só camada, dado que a função não é linearmente separável. Podemos definir uma função de saída bipolar com limiar nulo e aplicar a tabela-verdade de uma função XOR com valores bipolares no procedimento de treinamento, como a ilustrada a seguir.
Entrada E Entrada E 12 Saída
1 1 −1
1 −1 1
−1 1 1
−1 −1 −1
Usaremos uma rede com dois nós ocultos e um nó de saída com uma função
de combinação OR. Como a função do nó de saída é OR, temos que W = 0,5 31 W = 0,5 e b = 0,5. 32 k3
Como é necessário iniciar os pesos (inclusive o bias) para os demais nós
com valores pequenos e aleatórios, vamos escolher arbitrariamente W = b = 10 ki 0,30, W = 0,05, W = 0,20, W = b = 0,15, W = 0,10 e W = 0,20 n11 12 20 k2 21 22 Como taxa de aprendizado escolhemos η = 0,5. Os cálculos do procedimento de treinamento estão ilustrados na tabela seguinte, onde após quatro épocas de treinamento os pesos assumiram os valores W = b = −0,99, W = −0,73 10 k1 11 W = 1,27, W = b = −1,09, W = 1,53 e W = −1,33. 12 20 k2 21 22