AULA04 PERCEPTRON MULTI-CAMADAS MULTI-LAYER PERCEPTRON (MLP) ALGORITMO DE RETRO-PROPAGAÇÃO INTRODUÇÃO O perceptron de múltiplas camadas (Multi-Layer Perceptron – MLP) é uma rede do tipo perceptron com pelo menos uma camada intermediária. Apesar desse tipo de rede apresentar soluções para funções linearmente não-separáveis, como visto anteriormente, torna-se necessário um algoritmo de treinamento capaz de definir de forma automática os pesos. O algoritmo desta rede é uma generalização da regra delta de Widrow & Hoff para o treinamento da Adaline, e denomina-se backpropagation. Este algoritmo consiste basicamente dos passos: - propagação positiva do sinal: durante este processo todos os pesos são mantidos fixos; e - retropropagação do erro: durante este processo os pesos da rede são ajustados baseados na regra de correção de erro. Como a propagação do erro é calculado no sentido inverso do sinal, o algoritmo é denominado de retropropagação do erro. Características Uma rede MLP típica possui as seguintes características: - os neurônios possuem uma função de ativação não-linear, diferenciável, do tipo sigmoidal (por exemplo, função logística e tangente-hiperbólica); - a rede possui uma ou mais camadas intermediárias; e - a rede possui uma alta conectividade. 1 1 1 x1 y1 propagação do sinal x2 y0 xm camada de entrada primeira camada escondida segunda camada escondida camada de saída propagação do erro treinamento A generalização da regra delta de Widrow &Hoff é usada para ajustar os pesos e bias da rede de forma a minimizar o erro entre a saída da rede e a saída desejada. Para isso é calculado o gradiente da função de erro em relação aos pesos e bias, pois atualizando os pesos e bias na direção oposta a esse gradiente minimiza-se o erro. Como o erro é calculado apenas para a camada de saída, o algoritmo de backpropagation responde como determinar a influência do erro nas camadas intermediárias da rede. wijm (t 1) wijm (t ) (t ) (t ) m m , b ( t 1 ) b ( t ) i i wijm bim Cálculo da saída No algoritmo de backpropagation a saída de cada camada da rede é calculada por: y m1 f m1 (Wm1y m b m1 ), para m 0,1,...,M 1 onde M é o número de camadas da rede, y0 = x, a entrada da primeira camada é o vetor de entradas, e y = yM, a saída da rede é a saída da última camada. Cálculo da retropropagação do erro Para o cálculo do gradiente, como o erro é função indireta dos pesos nas camadas escondidas, deve ser usada a regra de cadeia: uim m m, m wij ui wij uim m m m bi ui bi O segundo termo das equações pode ser calculado considerando que a entrada líquida (soma ponderada dos pesos) da camada m é função dos pesos e bias (Sm é a quantidade de neurônios na camada m): u im S m 1 m m 1 m w y b ij j i j 1 Entrada líquida portanto u im m 1 y j m wij e u im 1 m bi Sensibilidade m u i Vimos que: m m, m wij ui wij u im m 1 y j wijm e uim m m m bi ui bi u im 1 m bi Definindo a sensibilidade de a mudanças na entrada líquida do i-ésimo neurônio da camada m como: m i m ui m m1 então e i yj m wij m i bim As atualizações de pesos e bias em qualquer camada são dadas por: w (t 1) w (t ) y m ij m ij m i m1 j e b (t 1) b (t ) m i m i m i Representação matricial Matricialmente tem-se: W m (t 1) W m (t ) δ m (y m 1 ) T b m (t 1) b m (t ) δ m e onde δ m m ... m m u u S m u1 u 2 m T m m m 1 2 ... S m T Cálculo da sensibilidade É necessário calcular a sensibilidade para camadas escondidas anteriores e isso requer a aplicação da regra de cadeia. • calcular a sensibilidade na camada m a partir da sensibilidade na camada m + 1. Para tanto é usada a seguinte matriz: m 1 u u m u1m 1 m u 1 u m 1 2 u m 1 u mm11 S u1m u1m 1 u 2m u 2m 1 u 2m u Smm11 u m 2 ... ... ... ... u1m 1 u Smm u 2m 1 m u S m u Smm11 m u S m Sensibilidade (cont.) m 1 i m j u u m 1 ij w y mj u matricialmente m j m m f ( u j ) m 1 wij u m j . f . m . m u m1 m 1 m m W F ( u ) onde F ( u ) u m portanto T m 1 ij w . m m j f (u ) m m 1 (u ) 0 ... . m 0 0 f (u 2m ) ... 0 ... 0 0 . m f (u Smm ) m 1 . m . m u m m 1 T m m 1 T m 1 δ m m F ( u )( W ) F ( u )( W ) δ m m 1 m 1 u u u u Cálculo de sensibilidades (cont.) As sensibilidades são calculadas da última para a primeira camada: δ M δ M1 ... δ 2 δ1 Para calcular a primeira sensibilidade (camada de saída): SM M i (d y) T (d y) M M ui ui onde (d j y j ) 2 j 1 uiM yi yiM f M (u iM ) . M f M M u i ui ui M ( uiM ) . M portanto iM 2(d i yi ) f (uiM ) . M Matricialmente: δ M 2 F (u M )(d y) yi 2(d i yi ) M ui Ilustração gráfica Propagação progressiva dos sinais x y1 W1 1 u1 W2 f1 1 b1 y2 u2 .F f3 .F 2 (W 2)T u3 b3 .F 1 W3 f2 1 b2 y3 3 (W 3)T 2 1 2 Retro-propagação das sensibilidades 3 3 (y - s) Algoritmo backpropagation (ajuste local) Procedure [W] = backprop (max_it, min_err, , X, D) for m from 1 to M do inicializa Wm e bm // valores pequenos escolhidos aleatoriamente end // for t1 while t < max_it & MSE > min_err do for i from 1 to N do // para cada padrão de treinamento // propagação progressiva do sinal y i0 xi y im1 f m1(Wm1y im bm1 ), m 0,1,...,M 1 Mi m i .M - F (uiM ) (di - y i) .m F // retro-propagação das sensibilidades (umi ) (W m+1)Tm+1 i , m = M-1, …, 2,1 Wm Wm - mi (yim-1)T, m = 1, …, M // atualização dos pesos bm bm - mi , m = 1, …, M i ei T ei = (di - yi )T (di - yi ) end // for MSE sum(i )/N t t+1 end // while end // procedure // cálculo do erro para o padrão i Capacidade de aproximação universal O teorema de aproximação universal é descrito a seguir: Teorema: seja f(.) uma função contínua não-constante, limitada, e monotonicamente crescente. Seja Im um hipercubo unitário m-dimensional (0,1)m. O espaço das funções contínuas em Im é denominado C(Im). Então, g C( I m ) e 0 para qualquer função , existe um inteiro M e conjuntos de constantes reais i e wij, onde i = 1,..., M e j = 1,...,m, tais que pode-se definir m F ( x1 , x2 ,...,xm ) i f wij x j woi i 1 j 1 M como uma aproximação da função g(.) tal que, F ( x1 , x2 ,...,xm ) g ( x1 , x2 ,...,xm ) Para todo {x1 ,..., xm } Im O teorema afirma que o perceptron de múltiplas camadas com uma única camada intermediária realiza uma aproximação uniforme, dado um conjunto de treinamento suficiente para representar a função. Porém, não garante que um MLP com uma única camada é a melhor solução, quanto ao tempo de processamento e facilidade de implementação. Aspectos do treinamento de redes MLP O aprendizado é resultado de apresentação repetitiva de todas as amostras do conjunto de treinamento. Cada apresentação de todo o conjunto de treinamento é denominada época. O processo de aprendizagem é repetido época após época, até que um critério de parada seja satisfeito. É recomendável que a ordem de apresentação das amostras seja aleatória de uma época para outra. Isso tende a fazer com que o ajuste de pesos tenha um caráter estocástico ao longo do treinamento. Atualização local ou por lote. Atualização pode ser de duas maneiras básicas: local e por lote. Local: a atualização é feita imediatamente após a apresentação de cada amostra de treinamento. - é também chamado de método de atualização on-line ou padrão a padrão. - requer um menor armazenamento para cada conexão, e apresenta menos possibilidade de convergência para um mínimo local. Lote: a atualização dos pesos só é feita após a apresentação de todas as amostras de treinamento que constituem uma época. - é também conhecido como método de atualização off-line ou batch. - o ajuste relativo a cada apresentação de uma amostra é acumulado. - fornece uma melhor estimativa do vetor gradiente. Critérios de parada O processo de minimização do MSE (função custo) não apresenta convergência garantida e não possui um critério de parada bem definido. Um critério de parada não muito recomendável, que não leva em conta o estado do processo iterativo é o da pré-definição do número total de iterações. Apresenta-se a seguir um critério de parada que leva em conta o processo iterativo. Critérios de parada (cont.) Consideremos um critério que leva em conta informações a respeito do estado iterativo. Considera-se nesse caso a possibilidade de existência de mínimos locais. Seja * o vetor de pesos que denota um ponto mínimo, local ou global. Uma condição para que * seja um mínimo é que o gradiente da função custo, seja zero em *. ( ) , Como critério tem-se as seguintes alternativas de parada: 1 - quando a norma euclidiana da estimativa do vetor gradiente atinge um valor suficientemente pequeno. ( ) 2 - quando a variação do erro quadrático médio (MSE) de uma época para outra atingir um valor suficientemente pequeno. 3 - quando o erro quadrático médio atingir um valor suficientemente pequeno ou seja, med ( ) onde é um valor suficientemente pequeno. Critérios de parada (cont.) • Nota-se que se o critério é de valor mínimo de MSE então não se garante que o algoritmo irá atingir esse valor. • Por outro lado, se o critério é o mínimo valor do vetor gradiente deve-se considerar que o algoritmo termina no mínimo local mais próximo. MSE Mínimo local Mínimo Global Critérios de parada (cont.) Outro critério de parada, que pode ser usado em conjunto com um dos critérios anteriores é a avaliação da capacidade de generalização da rede após cada época de treinamento. O processo de treinamento é interrompido antes que a capacidade de generalização da rede fique restrita. Arquitetura da rede A quantidade de neurônios na camada de entrada é dada pelo problema a ser abordado. No entanto, a quantidade de neurônios nas camadas de processamento são características do projeto. Aumentando-se o número de neurônios na camada escondida aumenta-se a capacidade de mapeamento não-linear da rede. No entanto, quando esse número for muito grande, o modelo pode se sobreajustar aos dados, na presença de ruído nas amostras de treinamento. Diz-se que a rede está sujeito ao sobre-treinamento (overfitting). Por outro lado, uma rede com poucos neurônios na camada escondida pode não ser capaz de realizar o mapeamento desejado, o que é denominado de underfitting. O underfitting também pode ser causado quando o treinamento é interropido de forma prematura. Normalização dos dados de entrada Uma característica das funções sigmoidais é a saturação, ou seja, para valores grandes de argumento, a função opera numa região de saturação. É importante portanto trabalhar com valores de entrada que estejam contidos num intervalo que não atinjam a saturação, por exemplo, [0,1] ou [-1,1]. Inicialização dos vetores de pesos e bias A eficiência do aprendizado em redes multicamadas depende da: - especificação de arquitetura da rede, - função de ativação, - regra de aprendizagem e - valores iniciais dos vetores de pesos e bias. Considerando-se que os três primeiros itens já foram definidos, verifica-se agora a inicialização dos vetores de pesos e bias. Inicialização aleatória dos pesos A atualização de um peso entre duas unidades depende da derivada da função de ativação da unidade posterior e função de ativação da unidade anterior. Por esta razão, é importante evitar escolhas de pesos iniciais que tornem as funções de ativação ou suas derivadas iguais a zero. Os valores para os pesos iniciais não devem ser muito grandes, tal que as derivadas das funções de ativação tenham valores muito pequenos (região de saturação). Por outro lado, se os pesos iniciais são muito pequenos, a soma pode cair perto de zero, onde o aprendizado é muito lento. Um procedimento comum é inicializar os pesos e bias a valores randômicos entre 0.5 e 0.5, ou entre -1 e 1. Os valores podem ser positivos ou negativos porque os pesos finais após o treinamento também podem ser positivos ou negativos Inicialização de Nguyen-Widrow (1990) • Os pesos e bias para os neurônios de saída são inicializados com valores randômicos entre -0.5 e 0.5, como é o caso comumente usado. • A inicialização dos pesos para os neurônios das camadas escondidas é projetada para melhorar a habilidade de aprendizado desses neurônios. • Isso é realizado distribuindo os pesos e bias iniciais tais que, para cada padrão de entrada, seja provável que a entrada líquida para cada um dos neurônios da camada escondida esteja no intervalo em que aquele neurônio aprenda mais rapidamente. • Inicialmente para calcula-se: n número de entradas p número de neurônios da camada escondida b fator de escala 1 n b 0.7( p) 0.7n p Procedimento de Nguyen-Widrow • O procedimento consiste dos seguintes passos: – Para cada neurônio da camada escondida (j = 1,...,p): • Inicializa-se o vetor peso dos neurônios da camada escondida: wji (0) = número randômico entre -0.5 e 0.5 • Computa-se a norma euclidiana • Reinicializa-se os pesos w ji w j ( 0) b w ji (0) w j (0) – Inicializa-se os bias: bj = número randômico entre – b e b . de todos os pesos de j Quantos padrões de treinamento devem existir (Baum-Haussler, 1989) • • Qual a relação entre o número de padrões de treinamento disponíveis, N, o número de pesos a serem treinados, W, e a acuidade da classificação esperada dada pela fração e, (acuidade máxima = 1, que corresponde a 100%)? Segundo Baum & Haussler, dada a equação W e N uma rede treinada para classificar a fração 1- e/2 dos padrões de treinamento corretamente, irá classificar a fração 1- e dos padrões de teste corretamente. • Exemplo: Com e = 0.1, uma rede com W = 80 pesos irá requerer N = 800 padrões de treinamento para assegurar a classificação de 1- e = 0.9 (90% ) dos padrões de teste corretamente, assumindo que a rede é treinada para classificar 1- e/2 = 0.95 (95%) dos padrões de treinamento corretamente.