Redes Neurais para Inferência Estatística                                      -F E A / U S P J u n / 2 0 0 2             ...
Introdução: Redes Neurais, Matlab e NetlabRedes NeuraisRede Neural é um nome fantasia para modelos de inferência multidime...
É possível 1 mostrar que Redes Neurais Multicamada com um número N suficientementegrande de unidades na mamada interna (ou...
MatlabMatlab (M a t r i x L a b o r a t o r y ) é uma linguagem para computação científica com estruturaotimizada para a r...
As propriedades do quadadro mágico podem ser analisadas utilizando funções do Matlab.Por exemplo, a função abaixo soma cad...
> sum (diag(A))ans =  34Ou> trace(A)ans =  34Curiosamente continuamos obtendo 34. Somemos agora a antidiagonal da matriz A...
O Matlab possui uma função específica para a criação de quadrados mágicos de qualquerdimensão, esta função é> B=magic(4)B=...
Aqui utilizamos alguns recursos novos. Utilizamos ao final de cada linha ";" , estainstrução faz com que o Matlab omita re...
unidades na camada escondida seja adequada. No Netlab podemos definir umaarquitetura de rede em uma única linha de comando...
5          options=foptions;A seguir personalizamos algumas destas opções:6          options(1) = 0;Este comando evita que...
O quarto passo consiste em utilizarmos a rede recém treinada. Para isso utilizamos afunção m l p f w d do Netlab, assim se...
Toda a seção de Matlab, utilizada neste problema pode ser armazenada na forma de umarquivo .m como o exibido a seguir:Exer...
Algoritmos de OtimizaçãoAprendizado em Redes Neurais: Um Problema de OtimizaçãoComo já dissemos, o problema de regressão u...
O aprendizado consiste em estimarmos a densidade condicional de probabilidade p (t x)que melhor se ajuste ao conjunto D, p...
 ε2  1                               p (ε ) =       exp  − 2  (1.7)                                        2πσ 2     ...
A escolha de diferentes valores para o parâmetro r regula a sensibilidade do modelo avalores com erros grandes, como pode ...
OtimizaçãoHá várias técnicas para otimização de funções multidimensionais e não-lineares como afunção erro que devemos min...
Discutiremos quatro técnicas implementadas pelo Netlab:     1.   Gradient Descent     2.   Gradiente Conjugado     3.   Gr...
Alternativamente, podemos utilizar a seguinte sintaxe menos direta:1 x1=-2:0.01:2;2 x2=-2:0.01:2;3 [sx1, sx2] =meshgrid (x...
Componente a componente teremos> A.^2ans =   0 1   1 0Uma outra forma de avaliarmos a função de Rosenbrock é utilizarmos d...
Os mínimos da função são (-1,1) e (1,-1).As funções de otimização do Netlab utilizam a seguinte sintaxe:> [x, options, err...
options (7): 1 se uma busca em linha é utilizada para minimização na direção dogradiente, 0 (default) se cada passo é dado...
A dinâmica ao redor do ponto fixo será :                                  α j ,t +1 = (1 − ηλ j )α j ,t                   ...
>ezsurfc (10*x1^2+x2,[-1, 1],[0,10] )O gradiente da função acima é ∇E = (10 x1 ,1) , assim, se iniciarmos a otimização for...
Nesta variante a cada passo encontramos a amplitude do deslocamento na direção dogradiente , assim:                       ...
2    options(1) = -1;3    options(3) = 1e-8;4    options(7)=1;5    options(14) = 100;Nada é exibido na tela , a precisão r...
arguments to be passed to F() and GRADF().          The optional parameters have the following interpretations.          O...
A otimização propriamente dita pode ser implementada em uma linha :6 [x,options,errgd,trajgd]=graddesc(rosen,x,options,ros...
Criado por Renato Vicente        10/06/02                            29
Gradiente ConjugadoComo vimos anteriormente o método de gradient descent consiste na escolha donegativo do gradiente da fu...
otimização de uma componente por vez. Desta forma se calcularmos exatamente asdireções conjugadas em cada passo precisarem...
adotarmos como primeira direção o negativo do gradiente no ponto de iníciod1 = −∇E (w1 ) . A seguir construímos cada uma d...
4. Calcule w 2 = w1 + α1d1 ;     5. Pare se os critérios de convergência foram satisfeitos     6. Calcule ∇E (w 2 ) ;     ...
OPTIONS(11) returns the total number of gradient evaluations.          OPTIONS(14) is the maximum number of iterations; de...
Este vetor nos informa que foram utilizadas 526 avaliações da função minimizada e que ogradiente desta função foi avaliado...
>edit rosegradCriado por Renato Vicente        23/06/02                            35
O Netlab oferece uma função que possibilita a verificação de um gradiente:>gradchek([-2,3], rosen, rosegrad);Checking grad...
>l=-10:6;>v=2.^l;>contour(a,b,Z,v);>hold on;>plot(trajgd(:,1),trajgd(:,2),--bs,LineWidth,2,...           MarkerEdgeColor,k...
unidimensionais a cada passo Møller3 criou                 o algoritmo de gradientes conjugadosescalado.A idéia central do...
2. Se 0, 25 < ∆ j < 0, 75 então γ j +1 = γ j ;     3. Se ∆ j < 0, 25 então γ j +1 = 4γ j ;     4. Se ∆ j < 0 então γ j +1 ...
utilizamos o mesmo código utilizado para o algoritmo de gradiente conjugado, masdesta vez salvamos um arquivo .m como exib...
gradiente conjugado escalado exibe o melhor desempenho, no entanto é interessantesempre testar cada um dos algoritmos caso...
Lembremos que na aproximação quadrática:                                   ∇E (w j ) − ∇E (w j −1 ) = H (w j − w j −1 )   ...
>help quasinewQUASINEW Quasi-Newton optimization.          Description          [X, OPTIONS, FLOG, POINTLOG] = QUASINEW(F,...
> options = foptions;> options(1)=-1;>options(3)=1e-8;>options(14)=100;> x=[-2 3];> [x,options,errgd,trajgd]=quasinew(rose...
Estimação de Densidades de ProbabilidadeSimulação e ClusteringNo problema típico de simulação em finanças temos dados hist...
A densidade que observamos é resultado da convolução de um processo com densidadescondicionais de um dia quase-normais, nã...
Os componentes da mistura têm a seguinte forma genérica:                                                  1               ...
N2 + N     •     Completa: A covariância utilizada tem                    parâmetros , ou seja, Ckl , j = σ kl , j .      ...
>help gmminitGMMINIT Initialises Gaussian mixture model from data          Description          MIX = GMMINIT(MIX, X, OPTI...
>help gmmemGMMEM                EM algorithm for Gaussian mixture model.          Description          [MIX, OPTIONS, ERRL...
Os centros são :> mix.centresans =   0.1779     0.1205     0.2443  -0.0056     0.0001    -0.0091   0.0095     0.0246     0...
Se substituirmos a estrutura do GMM em (3.4) teremos:                                                 N                   ...
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Redes neurais com matlab
Próximos SlideShares
Carregando em…5
×

Redes neurais com matlab

9.337 visualizações

Publicada em

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
9.337
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
346
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Redes neurais com matlab

  1. 1. Redes Neurais para Inferência Estatística -F E A / U S P J u n / 2 0 0 2 Renato Vicente∗Programa 1. Introdução: Redes Neurais, Matlab e Netlab 2. Algoritmos de Otimização 3. Estimação de Densidades de Probabilidade 4. Redes Neurais com uma Camada 5. Redes Neurais Multicamada 6. Amostragem 7. Técnicas Bayesianas Opcionalmente: 8. Radial Basis Functions 9. Redução Dimensional e Visualização de dados 10. Processos Gaussianos Referências Básicas: • Using Matlab, The MathWorks Inc. (2000); • Bishop, C.M., Neural Networks for Pattern Recognition, Oxford University Press, Oxford, 1995; • Nabney, I.T., Netlab: Algorithms for Pattern Recognition, Springer, London, 2002.∗ rvicente@usp.brCriado por Renato Vicente 1 27/01/06
  2. 2. Introdução: Redes Neurais, Matlab e NetlabRedes NeuraisRede Neural é um nome fantasia para modelos de inferência multidimensionais e não-lineares. O grande apelo destes modelos está em sua capacidade de “aprender”, generalizarou extrair regras automaticamente de conjuntos de dados complexos.No caso mais simples, temos um conjunto de pares entrada-saída D = {( x(n ) , t (n ) )}n =1 e pqueremos modelar a função t = y = y (x, w ) que produz melhores estimativas para pares ˆfora do conjunto D , dados vetores x. Este problema é denominado r e g r e s s ã o . A RedeNeural consiste simplesmente de uma escolha particular para a família de funções y( x , w ) parametrizada por w, denominados p e s o s s i n á p t i c o s .A importância das Redes Neurais neste contexto está no fato delas representarem umesquema bastante genérico para a representação de famílias de funções não-lineares comvárias variáveis de entrada e saída e controladas por um certo número de parâmetrosajustáveis.Há uma série de famílias, ou arquiteturas, clássicas para Redes Neurais que sãorepresentadas graficamente.P e r c e p t r o n L i n e a r P e r c e p t r o n N ã o -lin e a r N  N  y = ∑ w j x j + w0 y = g  ∑ w j x j + w0  j =1  j =1  1 x 1 xR e d e M u lticam a d a  n  N  y = g  ∑ u l g 1  ∑ w j x j + w0    l =1    j =1 Criado por Renato Vicente 2 27/01/06
  3. 3. É possível 1 mostrar que Redes Neurais Multicamada com um número N suficientementegrande de unidades na mamada interna (ou escondida) podem representar qualquerfunção com erro menor que ε ( N ) . Uma maneira simples e direta para percebermos estefato é ilustrada abaixo: N ∑{ g ( z ) ≈ g ( z0 ) +Θ ( x)gi +1 − gi }Θ ( z − zi ) 1 i =0 0 0 x=0 x=0Na figura uma função arbitrária g(z) é representada por uma soma de funções degrauΘ( z − zi ) sobre uma partição da reta P = {z0 , z1,..., z N }. A medida que refinamos apartição fazendo zi +1 − zi < δ ( N ) , reduzimos o erro ε ( N ) .Quando as saídas consistem de classes discretas t ∈ {1,..., c} o problema de inferência édenominado c l a s s i f i c a ç ã o .1 Hornik, K. (1991). Approximation capabilities of multilayer feedforward networks. Neural Networks 4 (2),251-257.Criado por Renato Vicente 3 27/01/06
  4. 4. MatlabMatlab (M a t r i x L a b o r a t o r y ) é uma linguagem para computação científica com estruturaotimizada para a realização de operações com matrizes. O ambiente Matlab é compostopor uma série de funções pré-definidas para cálculo, leitura e escrita de arquivos evisualização. Este conjunto de funções pode ser facilmente extendido por t o o l b o x e sdedicadas. Há t o o l b o x e s para finanças, tratamento de sinais, econometria e redes neurais.Para ilustrar a forma como matrizes podem ser tratadas pelo Matlab utilizamos oquadrado mágico de Dührer que é utilizado como exemplo no G e t S t a r t que acompanhao software. Na linha de comando do Matlab entramos:> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]A= 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1Após este comando a matriz A fica armazenada no W o r k s p a c e do Matlab conformeilustrado abaixo.Criado por Renato Vicente 4 27/01/06
  5. 5. As propriedades do quadadro mágico podem ser analisadas utilizando funções do Matlab.Por exemplo, a função abaixo soma cada uma das linhas da matriz A.> sum (A)ans = 34 34 34 34Na ausência de definição de variável de saída o Matlab aloca o resultado no W o r k s p a c esob o nome a n s . Assim ao entrarmos> ansans = 34 34 34 34Se quisermos somar as colunas ao invés das linhas temos que transpor a matriz A, issofeito simplesmente pelo comando>Aans = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1Assim podemos realizar a soma das colunas entrando>sum(A)ans = 34 34 34 34Novamente o resultado é 34. Podemos também calcular a soma da diagonal, ou traço,de duas formas:> diag (A)ans = 16 10 7 1Criado por Renato Vicente 5 27/01/06
  6. 6. > sum (diag(A))ans = 34Ou> trace(A)ans = 34Curiosamente continuamos obtendo 34. Somemos agora a antidiagonal da matriz A, paraisso podemos utilizar a função f l i p l r para enviarmos cada coluna da esquerda para adireita da matriz A.> fliplr (A)ans = 13 2 3 16 8 11 10 5 12 7 6 9 1 14 15 4E a seguir> sum(diag(fliplr(A)))ans = 34As somas são sempre iguais a 34 pois quando dividimos números inteiros de 1 a 16 emquatro grupos com somas iguais temos:> t=1:1:16t= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16> sum(t)/4ans = 34Aqui utilizamos ":" para gerarmos números de 1 a 16 em passos de 1.Criado por Renato Vicente 6 27/01/06
  7. 7. O Matlab possui uma função específica para a criação de quadrados mágicos de qualquerdimensão, esta função é> B=magic(4)B= 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1É possível reordenar as colunas de B para reobtermos A utilizando o comando> B(:,[1 3 2 4])ans = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1NetlabO Netlab é uma t o o l b o x para Redes Neurais para Matlab disponibilizada gratuitamenteno site do Neural Computing Research Group da Univerisdade de Aston(www.ncrg.aston.ac.uk). Esta t o o l b o x toran a implementação de modelos baseados emRedes Neurais muito simples. Os códigos produzidos em Matlab podem então serconvertidos em executáveis utilizando o M a t l a b C o m p i l e r . Como um primeiro contatocom o Netlab escreveremos sua versão para o clássico "H e l l o W o r l d ".Começamos por gerar de um conjunto de dados fictícios para treinamento de nossaRede Neural. Para isso vamos supor que a função que queremos inferir é f ( x) = sin (2π x ) . No entanto, só temos acesso a uma versão corrompida por ruídogaussiando desta função assim, nosso conjunto de dados é "gerado" da seguinte forma: tn = sin(2π xn ) + σε n , ε n ~ N (0,1)onde N(0,1) é uma distribuição normal com média nula e variância unitária.No Matlab teremos1 x=[0:1/19:1];2 ndata=size(x,1);3 t=sin(2*pi*x) + 0.15*randn(ndata,1);Criado por Renato Vicente 7 27/01/06
  8. 8. Aqui utilizamos alguns recursos novos. Utilizamos ao final de cada linha ";" , estainstrução faz com que o Matlab omita resultados intermediários dos cálculos sendoexecutados. A primeira instrução gera um vetor coluna x com 20 dimensões contendonúmeros de 0 a 1 em intervalos de 1/19. Na linha 2 utilizamos a função s i z e ( x , 1 ) paraobtermos o tamnho em número de linhas do vetor coluna x, assim, se entrarmos:> size(x)ans = 20 1Ou seja, o vetor x possui 20 linhas e 1 coluna, s i z e ( x , 1 ) nos dá o número de linhas,enquanto s i z e ( x , 2 ) nos dá o número de colunas. Na linha 3 utilizamos a funçãor a n d n ( l i n h a s , c o l s ) para gerarmos um vetor de números aleatórios independentes com distribuição gaussiana com média nula e variância unitária. De forma genérica esta instrução pode ser empregada pra gerar matrizes aleatórias de qualquer tamanho.>ran dn(5,5)ans = 1.3808 0.3908 -1.3745 -1.3454 -0.7826 1.3198 0.0203 -0.8393 1.4819 -0.7673 -0.9094 -0.4060 -0.2086 0.0327 -0.1072 -2.3056 -1.5349 0.7559 1.8705 -0.9771 1.7887 0.2214 0.3757 -1.2090 -0.9640No Matlab, podemos visualizar o vetor t e a função original utilizando:> plot(x,sin(2*pi*x),x,t,k+); 1.5 1 0.5 0 -0.5 -1 -1.5 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1Gerado nosso conjunto fictício de dados, podemos definir uma arquitetura de rede parautilizarmos na inferência. Assumiremos aqui que uma Rede Neural Multicamada com 3Criado por Renato Vicente 8 27/01/06
  9. 9. unidades na camada escondida seja adequada. No Netlab podemos definir umaarquitetura de rede em uma única linha de comando.4 net=mlp (1, 3, 1, linear)net = type: mlp nin: 1 nhidden: 3 nout: 1 nwts: 10 actfn: linear w1: [-1.6823 -0.5927 0.1820] b1: [-0.1300 -0.1185 -0.0827] w2: [3x1 double] b2: 0.2541A função m l p do Netlab cria uma estrutura que especifica completamente a arquiteturae os parâmetros iniciais da Rede Neural. Assim a rede possui n i n = 1 entrada, n h i d d e n = 3unidades na camada interna, n o u t = 1 saída e n w t s = 1 0 parâmetros entre pesos sinápticos elimiares. Os parâmetros são iniciados em valores aleatórios. Graficamente teremos: Cada unidade possui uma entrada extra denotada por uma seta que regula o l i m i a r d ed i s p a r o de cada um dos neurônios. Cada neurônio da camada escondida gerado pela função m l p implementa uma f u n ç ã o d e t r a n s f e r ê n c i a s i g m o i d a l do tipo tanh(b + ∑ w j x j ) . jJá o neurônio da camada de saída implementa a função de transferência especificada nafunção m l p , no caso, uma função linear. Assim, a arquitetura da Rede Neural queutilizaremos representa a seguinte família de funções: 3 y( x, w, b ) = b2 + ∑ w2 l tanh(b1l + w1l x) . l =1O terceiro passo consiste no treinamento desta rede utilizando os dados fictícioscontidos no conjunto de treinamento. Para isso o Netlab utiliza a infra-estrutura dealgoritmos de otimização do Matlab. Primeiro é necessário armazenar as configuraçõespadrão dos otimizadores do Matlab:Criado por Renato Vicente 9 27/01/06
  10. 10. 5 options=foptions;A seguir personalizamos algumas destas opções:6 options(1) = 0;Este comando evita que os algoritmos de otimização exibam na tela a evolução passo apasso da função custo sendo minimizada.7 options(14) =100;Esta instrução limita em 100 passos os ciclos de otimização. Agora podemos treinar nossarede utilizando a função n e t o p t do Netlab:8 [net, options] = netopt(net, options, x, t, scg);Warning: Maximum number of iterations has been exceededA função n e t o p t otimiza os parâmetros da rede definida pela estrutura n e t , utilizando asopções de otimizador defindas em o p t i o n s e utilizando os dados de entrada contidos novetor x e de saída contidos no vetor t . O último argumento em n e t o p t especifica o tipode algoritmo a ser utilizado na otimização, no exemplo, s c g significa s c a l e d g r a d i e n t . Afunção retorna uma mensagem de aviso indicando que a otimização foi terminada devidoao limite de 100 passos de otimização.Neste momento já obtivemos no W o r k s p a c e do Matlab uma estrutura n e t comparâmetros otimizados assim:> net.w1ans = -5.2017 0.8701 1.5318> net.w2ans = 2.6033 1.0716 3.4209> net.b1ans = 2.4785 -0.6179 -0.3766> net.b2ans = -0.7588Criado por Renato Vicente 10 27/01/06
  11. 11. O quarto passo consiste em utilizarmos a rede recém treinada. Para isso utilizamos afunção m l p f w d do Netlab, assim se quisermos saber qual seria a saída para a entradax = 0 . 5 6 5 , calculamos:>mlpfwd(net,0.565)ans = -0.4632Para analisarmos visualmente a qualidade de nosso modelo para os dados representamsoem um gráfico previsões para várias entradas e o valor "real":9 plotvals=[0:0.01:1];10 y=mlpfwd(net,plotvals);11 plot(plotvals, y, ob,plotvals,sin(2*pi*plotvals)); 1.5 1 0.5 0 -0.5 -1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1Na figura acima as previsões aparecem como circunferências e o valor "real" como umalinha cheia. A qualidade da previsão irá depender da Rede Neural empregada e do nívelde ruído dos dados.Criado por Renato Vicente 11 27/01/06
  12. 12. Toda a seção de Matlab, utilizada neste problema pode ser armazenada na forma de umarquivo .m como o exibido a seguir:Exercícios(1) Escreva uma rotina ou função em Matlab que calcule o erro quadrático de predição daRede Neural Multicamada utilizada no exemplo acima no conjunto p l o t v a l . E ( x) = ∑  f ( x j ) − y( x j; w b)  . 2  ,  j(2) Treine Redes Multicamada com número de unidades na camada interna indo den h i d d e n = 1 a n h i d d e n = 30 e construa um gráfico do erro de predição acima contra o número de unidades na camada escondida. Qual é a melhor escolha de arquitetura ?Criado por Renato Vicente 12 27/01/06
  13. 13. Algoritmos de OtimizaçãoAprendizado em Redes Neurais: Um Problema de OtimizaçãoComo já dissemos, o problema de regressão utilizando Redes Neurais consiste emencontrar a função tˆ = y (x, w ) que produz melhores estimativas para a regra implícitaem um conjunto de exemplo de pares entrada-saída D = {(x ( n ) , t ( n ) )}n=1 . pÉ importante ressaltar que a tarefa central de uma regressão não é a memorização doconjunto de exemplos D, mas sim a antecipação de pares novos (ou fora da amostra) quepoderiam ser gerados pelo mesmo processo que gerou D.A descrição completa do processo gerador do conjunto D é fornecida por uma densidade deprobabilidade conjunta p (x, t ) sobre D. Esta densidade de probabilidade pode serdecomposta da seguinte forma: p (x, t ) = p (t x) p (x) (1.1)A densidade p (t x) é conhecida como densidade condicional e representa a probabilidadede uma saída t dada uma entrada com valor específico x. Já a densidade p(x) representa adensidade incondicional de x que pode ser calculada a partir da densidade conjunta porintegração (també conhecida como marginalização): p (x) = ∫ p (t, x) dt (1.2)Uma maneira pictórica de representarmos um modelo para o processo de geração doconjunto de dados D é exibida na figura a seguir: Processo estocástico Processo Saídas de geração determinístico de corrompidas de entradas geração de saídas por ruído x y(x) t ruídoNo modelo acima há dois processos estocásticos: o de geração das entradas x descrito peladensidade p(x) e o de geração de saídas com ruído descrito pela densidade condicional p (t x ) .Criado por Renato Vicente 10/06/02 13
  14. 14. O aprendizado consiste em estimarmos a densidade condicional de probabilidade p (t x)que melhor se ajuste ao conjunto D, possibilitando assim a predição de saídas possíveispara entradas x fora do conjunto D utilizado no treinamento.Ao modelarmos os dados utilizando Redes Neurais supomos uma arquitetura de rede, o queequivale à escolha de uma família de funções y (x; w ) parametrizada por w. Porconseqüência a densidade condicional p (t x; w ) também é parametrizada por w. Paraencontrarmos qual é o vetor w que melhor ajusta os dados em D, podemos maximizar afunção de verossimilhança definida por: p L(w ) = ∏ p(x n , t n ; w ) n =1 p (1.3) = ∏ p (t x ; w ) p ( x ) n n n n =1Alternativamente, e com uma série de vantagens práticas podemos definir uma função erroque deve ser minimizada no aprendizado: E (w ) = − ln L(w ) p p (1.4) = −∑ ln p(t n x n ; w ) − ∑ ln p (x n ) n =1 n =1O segundo somatório não depende do vetor de parâmetros w, podendo ser ignorado naminimização do erro E(w): p E (w ) = −∑ ln p (t n x n ; w ) (1.5) n =1O aprendizado em uma Rede Neural consiste simplemente em uma tarefa de otimização:minimizar E(w) dado o modelo o conjunto de treinamento D e a densidade condicionalp(t x; w ) .Erro quadráticoSuponhamos que o processo real de produção de saídas t consista de uma perturbaçãoestocástica ε sobre uma função determinística h(x) assim: t = h( x) + ε (1.6)Suponhamos agora que a perturbação estocástica (ruído) seja distribuída de formanormal:Criado por Renato Vicente 10/06/02 14
  15. 15.  ε2  1 p (ε ) = exp  − 2  (1.7) 2πσ 2  2σ Se modelarmos a função real com uma Rede Neural cuja arquitetura implemente afamília y (x; w ) a densidade condicional será : 1  (t − y (x; w ) )2  p(t x) = exp  − . (1.8) 2πσ 2   2σ 2  O erro será então : p E (w ) = −∑ ln p (t n x n ; w ) n =1 (1.9) ∑ (t − y (x; w) ) + Np ln σ + 2 ln(2π ) p 1 2 Np = n 2σ 2 n =1Ao omitirmos as constantes e o fator de escala em frente ao somatório teremos aseguinte medida de erro de aprendizado: E ( w ) = ∑ (t n − y ( x n ; w ) ) , 1 p 2 (1.10) 2 n =1que é a distância Euclidiana clássica utilizada em regressões usuais.Erro r-MinkowskiSe supusermos que o ruído ε é distribuído segundo uma generalização de umagaussiana: 1 p (ε ) = rβ r 2Γ(1/ r ) exp − β ε ( r ) (1.11)O erro de treinamento tomará a seguinte forma: ∑ (t − y ( x n ; w ) ) . 1 p n r E (w ) = (1.12) 2 n =1A figura abaixo representa densidades para vários valores de r.Criado por Renato Vicente 10/06/02 15
  16. 16. A escolha de diferentes valores para o parâmetro r regula a sensibilidade do modelo avalores com erros grandes, como pode ser visto na figura abaixo:Conforme r aumenta maior é a penalização para desvios grandes que passam, por serempouco prováveis, a ser considerados incompatíveis com os dados.Exercícios (1) Generalize (1.10) para o caso de saídas t multidimensionais. (2) Demonstre a expressão (1.12) para a função erro r-Minkowski.Criado por Renato Vicente 10/06/02 16
  17. 17. OtimizaçãoHá várias técnicas para otimização de funções multidimensionais e não-lineares como afunção erro que devemos minimizar. Genericamente um algoritmo iterativo deotimização no espaço de parâmetros w consiste em uma busca onde a cada passo sãodeterminados uma direção e um tamanho de passo: w t +1 = w t + α t d t (1.13)Quanto mais informação sobre a geometria da superfície definida pela função erro E(w)for utilizada mais eficiente será o algoritmo. Uma boa idéia de como um algoritmo deotimização pode utilizar a geometria da função erro pode ser obtida utilizando umaaproximação quadrática para a superfície. Consideremos a seguinte expansão em torno deum ponto w :ˆ 1 E (w ) ≅ E (w ) + (w − w ) ⋅∇E (w ) + (w − w ) ⋅ H (w − w ) ˆ ˆ ˆ ˆ ˆ (1.14) 2A matriz H é conhecida como Hessiano sendo definida como: ∂2E H jk = (1.15) ∂w j ∂wk ˆ wSuponha que w = w seja um extremo de E, então: ˆ * 1 E (w ) ≅ E (w* ) + (w − w* ) ⋅ H (w − w* ) (1.16) 2Podemos calcular os autovetores do Hessiano H : Hu k = λk u k , (1.17)onde u j ⋅ u k = δ jk . (1.18)Podemos expandir o vetor w – w* na base dos autovetores de H para escrevermos: w − w* = ∑ α k u k (1.19) kSubstituindo (1.19) em (1.16) e utilizando (1.17) e (1.18) : 1 E (w ) ≅ E (w* ) + ∑ λkα k2 . (1.20) 2 kAssim, os autovetores da Hessiana indicam direções ortogonais que diagonalizam amatriz H. De (1.20) pode-se concluir que para que w* defina um mínimo é necessárioque todos os autovalores sejam positivos, além disso a velocidade de convergência doerro é maior em direções com autovalor maior.Otimização em NetlabCriado por Renato Vicente 10/06/02 17
  18. 18. Discutiremos quatro técnicas implementadas pelo Netlab: 1. Gradient Descent 2. Gradiente Conjugado 3. Gradiente Conjugado Escalado 4. Quase-NewtonPara exemplificarmos como Netlab pode ser usado para otimizar funções utilizaremosum de seus programas de demonstração denominado demopt1. O programa demopt1demonstra a otimização da seguinte função: y ( x1 , x2 ) = 100( x2 − x12 ) 2 + (1 − x1 ) 2 , (1.21)conhecida como função de Rosenbrock utilizando quatro técnicas diferentes.No Matlab podemos visualizar a superfície definida pela função acima com um únicocomando: > ezsurfc (100*(x1-x2^2)^2+(1-x1)^2,[-2, 2],[-2,2] )Criado por Renato Vicente 10/06/02 18
  19. 19. Alternativamente, podemos utilizar a seguinte sintaxe menos direta:1 x1=-2:0.01:2;2 x2=-2:0.01:2;3 [sx1, sx2] =meshgrid (x1,x2);As instruções acima geram matrizes que contém o produto cartesiano dos vetores x1 ex2, assim se digitarmos> [sx1(10,23) sx2(10,23)]ans = -1.7800 -1.9100Veremos um par específico de valores.A função de Rosenbrock pode ser calculada de duas formas:> Y= 100*(sx1-sx2.^2).^2 +(1-sx1).^2;> size(Y)ans = 401 401onde utilizamos ".^ " com um ponto antes da operação para elevarmos cada componentedas matrizes X1 e X2, sem "." teríamos calculado um produto matricial. Note que aresposta é uma discretização da superfície com 401 por 401 pontos.Para exemplificar o cálculo com e sem ".":>A=[0 1; 1 0]A= 0 1 1 0Um produto matricial será:> A^2ans = 1 0 0 1ou> A*Aans = 1 0 0 1Criado por Renato Vicente 10/06/02 19
  20. 20. Componente a componente teremos> A.^2ans = 0 1 1 0Uma outra forma de avaliarmos a função de Rosenbrock é utilizarmos diretamente afunção do Netlab chamada rosen: > Y1=rosen([sx1(:),sx2(:)]);Esta operação retorna um vetor com 401 x 401 valores:> size(Y1)ans = 160801 1Este vetor pode então ser convertido em uma matrz com as dimensões apropriadasutilizando:> Y1=reshape(Y1,length(x1),length(x2));Esta instrução converte um vetor em uma matriz com o número de linhas igual aonúmero de dimensões do vetor x1 (length(x1)) e o número de colunas igual ao númerode dimensões do vetor x2 (length(x2)). A matriz é preenchida coluna a coluna conforme oexemplo a seguir:>A=[1 2 3 4 5 6 7 8 9 10 11 12];>A=reshape(A,4,3)A= 1 5 9 2 6 10 3 7 11 4 8 12Para plotarmos a superfície podemos utilizar a seguinte instrução :>surf(x1,x2,Y)Podemos também plotar curvas de nível da superfície:> l=-1:6;>v=2.^l;>contour(x1,x2,Y,v)Criado por Renato Vicente 10/06/02 20
  21. 21. Os mínimos da função são (-1,1) e (1,-1).As funções de otimização do Netlab utilizam a seguinte sintaxe:> [x, options, errlog, pointlog] = nome (function, x, options, grad);São quatro as funções de otimização: quasinew (Quase-Newton), conjgrad (gradienteconjugado), scg (gradiente conjugado escalado) e graddesc (Gradient Descent). Osargumentos das funções são, respectivamente: a função que se quer otimizar function, oponto inicial x, o vetor de opções de otimização options e o gradiente da função que sequer otimizar grad.As saídas destas funções são, respectivamente: o resultado da otimização x, o vetor deopcções de otimização atualizado após o processo options, os valores de erro após cadaciclo errlog e a trajetória percorrida no espaço dos parâmetros pointlog.O vetor options contém parâmetros para operação da rotina de otimização e parâmetrosespecíficos para cada algoritmo:options(1) : 1 para mostrar na tela os valores de erro, 0 para exibir apenas mensagens deaviso e -1 para não exibir nada;options(2): Valor da precisão absoluta requerida para encerrar o processo de otimização.Se xt +1 − xt < options (2) então esta condição é satisfeita.options(3): Valor da precisão requerida na função otimizada. Se function(xt +1 ) − function(xt ) < options(3) então a condição é satisfeita. Se esta e acondição acima forem satisfeitas a otimização é encerrada.Criado por Renato Vicente 10/06/02 21
  22. 22. options (7): 1 se uma busca em linha é utilizada para minimização na direção dogradiente, 0 (default) se cada passo é dado na direção do negativo do gradiente com umlearning rate definido por options(18).options(9): 1 para que a função verifique o gradiente informado grad contra a funçãofunction.options(10): registra o número total de avaliações de function.options(11): registra o número total de avaliações de grad.options(14): número máximo de iterações.options(18): learning rate. (default=0.01).Gradient DescentO método de gradient descent consiste na escolha do negativo do gradiente da funçãoerro como direção para cada passo de otimização, o tamnho de cada passo é definidopor uma learning rate η assim: w t +1 = w t − η∇E (w t ) (1.22)Os pontos fixos do algoritmo em (1.22) coincidem com os extremos da função erro, noentanto nada garante que ocorra convergência para estes pontos fixos. Analisemos aconvergência do gradient descent em torno de um ponto fixo w* .O gradiente da função erro em torno de um ponto fixo pode ser aproximado (utilizandouma série de Taylor) por : ∇E (w ) ≅ ∇∇E (w* ) (w − w* ) , (1.23)onde H = ∇∇E é o Hessiano da função erro.Sejam λ j os autovalores do Hessiano e u j seus autovetores assim: Hu j = λ j u j (1.24) *Expandindo w-w na base destes autovetores teremos: ∇E ≅ ∑ α j λ j u j e (1.25) j (w t +1 − w* ) − (w t − w* ) = ∑ (α t +1 − α t )u j (1.26) jUtilizando (1.22) podemos escrever uma dinâmica para as componentes do caminhotraçado no espaço dos parâmetros na direção de cada autovetor do Hessiano: ∆α j = −ηλ jα j (1.27)Criado por Renato Vicente 10/06/02 22
  23. 23. A dinâmica ao redor do ponto fixo será : α j ,t +1 = (1 − ηλ j )α j ,t (1.28)Considerando learning rate η fixa, para n passos teremos: α j ,t + n = (1 − ηλ j ) n α j ,t (1.29)De (1.29) fica patente que uma condição necessária para que haja convergência de todasas componentes para o ponto fixo α j = 0 quando n → ∞ é 1 − ηλ j < 1 . (1.30)Esta condição obriga que a learning rate η respeite : 2 η< , (1.31) λmaxonde λmax é o maior autovalor do Hessiano. Note que quanto maior o produto dalearning rate pelo autovalor, menor é o fator multiplicador em (1.29) e, porconseqüência, mais rápida é a convergência. Quando o Hessiano possuir um espectro deautovalores amplo (o que ocorre freqüentemente) as várias direções apresentarão temposde convergência bem diferentes. O processo total de convergência é dominado peladireção com convergência mais lenta, ou seja, a direção com menor autovalor. Aconvergência será então dominada por: λ (1 − 2 min ) . (1.32) λmaxSe na vizinhança de um ponto fixo o Hessiano apresentar autovalores muito diferentes, ou seja, a superfície de erro apresentar curvas de nível elipsoidais bastante alongadas, aconvergência do algoritmo será muito lenta.Em geral gradient descent é bastante ineficiente sendo de pouco interesse prático. Apesardisso este algoritmo recebeu bastante atenção do meio acadêmico devido à facilidade deanálise utilizando técnicas exatas. Várias formas de melhorar seu desempenho forampropostas entre elas: adição de um termo de "momento", redução do número de passosnecessários para convergência pela utilização de um esquema para minimizaçãounidimensional e implementação de learning rates variando com o tempo.O termo de momento é como segue: w t +1 = w t − η∇E (w t ) + µ (w t − w t −1 ) , (1.33)com 0 ≤ µ ≤ 1 .Este termo tem o mesmo sinal da última variação, assim, se uma componente foireduzida ela continuará sendo reduzida. Em geral isto será uma vantagem em trechos dasuperfície de erro em forma de vale, com pouca curvatura na direção do mínimo e muitacurvatura em uma outra direção qualquer como ilustrado a seguir.Criado por Renato Vicente 10/06/02 23
  24. 24. >ezsurfc (10*x1^2+x2,[-1, 1],[0,10] )O gradiente da função acima é ∇E = (10 x1 ,1) , assim, se iniciarmos a otimização fora doeixo x1 = 0 teremos fortes oscilações em decorrência da grande curvatura de uma dasdireções:O termo de momento neste caso adicionará uma certa inércia à direção (0,1)aumentando a taxa de convergência.Uma outra forma de reduzirmos o número de passos necessários para convergência é aredução do número de dimensões do problema apenas à direção do gradiente pelaintrodução de um algoritmo de otimização unidimensional a cada passo de otimização.Criado por Renato Vicente 10/06/02 24
  25. 25. Nesta variante a cada passo encontramos a amplitude do deslocamento na direção dogradiente , assim: w t +1 = w t − λ *∇E (w t ) , (1.34)onde λ * é definido como o mínimo de: E (λ ) = E (w t − λ∇E ( w t )) . (1.35)De forma equivalente, escolhemos λ de forma a termos: dE (λ ) = −∇E (w t +1 ) ⋅∇E (w t ) = 0 , (1.36) dλou seja, gradientes sucessivos ortogonais. A minimização unidimensional em (1.35) podeser realizada utilizando uma busca linear. Utilizando esta forma é possível aumentarconsideravelmente a velocidade de convergência do gradient descent. O incoveniente destealgoritmo está na condição (1.36) que força movimentos em zig-zag no espaço deparâmetros.Neste ponto, vale a pena discutirmos um pouco algoritmos de busca linear. O Netlabutiliza um algoritmo proposto por Brent1 bastante eficiente e robusto que não utiliza ogradiente unidimensional da função na otimização . O algoritmo de Brent consiste em: 1. Encontrar 3 pontos a<b<c, tais que E(b)<E(a) e E(b)<E(a) . 2. Ajustar uma parábola passando pelos pontos a,b e c. 3. Minimizando a parábola para encontrar d. 4. Repetindo o processo para pontos d e escolhendo entre a,b,c os dois com menor erro.Em Netlab uma busca linear é implementada pela função a seguir:> [x, options] = linemin(f, pt, dir, fpt, options);Onde f é a função a ser minimizada, pt é o ponto inicial, dir é a direção que define alinha de busca, fpt é o valor da função no ponto de início e options é o vetor de opções deotimização. O ponto de mínimo é dado por pt+x.*dir.Como exemplo apresentamos a seguir otimização da função de Rosenbrock empregandoGradient Descent seguirá os seguintes passos:1 options = foptions;Para importar configurações padrão para o otimizador.1 Brent, R. 1973, Algorithms for Minimization without Derivatives. Englewood Cliffs, NJ: Prentice-Hall.Criado por Renato Vicente 10/06/02 25
  26. 26. 2 options(1) = -1;3 options(3) = 1e-8;4 options(7)=1;5 options(14) = 100;Nada é exibido na tela , a precisão requerida para as variações na função otimizada é de 10-8 , a otimização empregará a variante com busca linear e o número total de iterações éfixado em 100. O vetor options inicia o processo na seguinte configuração:>options(1) ans = -1>options(2)ans = 1.0000e-004>options(3)ans = 1.0000e-008>options(9)ans = 0>options(10)ans = 0>options(11)ans = 0>options(14)ans = 100Assim a otimização deve encerrar quando as precisões fixadas forem atingidas ou quando onúmero de iterações chegar a 100. Para vermos todas as outras opções disponíveis bastautilizarmos o comando:> help graddescGRADDESC Gradient descent optimization. Description [X, OPTIONS, FLOG, POINTLOG] = GRADDESC(F, X, OPTIONS, GRADF) uses batch gradient descent to find a local minimum of the function F(X) whose gradient is given by GRADF(X). A log of the function values after each cycle is (optionally) returned in ERRLOG, and a log of the points visited is (optionally) returned in POINTLOG. Note that X is a row vector and F returns a scalar value. The point at which F has a local minimum is returned as X. The function value at that point is returned in OPTIONS(8). GRADDESC(F, X, OPTIONS, GRADF, P1, P2, ...) allows additionalCriado por Renato Vicente 10/06/02 26
  27. 27. arguments to be passed to F() and GRADF(). The optional parameters have the following interpretations. OPTIONS(1) is set to 1 to display error values; also logs error values in the return argument ERRLOG, and the points visited in the return argument POINTSLOG. If OPTIONS(1) is set to 0, then only warning messages are displayed. If OPTIONS(1) is -1, then nothing is displayed. OPTIONS(2) is the absolute precision required for the value of X at the solution. If the absolute difference between the values of X between two successive steps is less than OPTIONS(2), then this condition is satisfied. OPTIONS(3) is a measure of the precision required of the objective function at the solution. If the absolute difference between the objective function values between two successive steps is less than OPTIONS(3), then this condition is satisfied. Both this and the previous condition must be satisfied for termination. OPTIONS(7) determines the line minimisation method used. If it is set to 1 then a line minimiser is used (in the direction of the negative gradient). If it is 0 (the default), then each parameter update is a fixed multiple (the learning rate) of the negative gradient added to a fixed multiple (the momentum) of the previous parameter update. OPTIONS(9) should be set to 1 to check the user defined gradient function GRADF with GRADCHEK. This is carried out at the initial parameter vector X. OPTIONS(10) returns the total number of function evaluations (including those in any line searches). OPTIONS(11) returns the total number of gradient evaluations. OPTIONS(14) is the maximum number of iterations; default 100. OPTIONS(15) is the precision in parameter space of the line search; default FOPTIONS(2). OPTIONS(17) is the momentum; default 0.5. It should be scaled by the inverse of the number of data points. OPTIONS(18) is the learning rate; default 0.01. It should be scaled by the inverse of the number of data points. See also CONJGRAD, LINEMIN, OLGD, MINBRACK, QUASINEW, SCGDefinimos o ponto inicial como:5 x = [-2,3];Criado por Renato Vicente 10/06/02 27
  28. 28. A otimização propriamente dita pode ser implementada em uma linha :6 [x,options,errgd,trajgd]=graddesc(rosen,x,options,rosegrad);O resultado final da otimização está longe do valor correto:>xx= -0.5424 0.2886A figura a seguir ilustra a trajetória percorrida durante o processo de otimização:>a = -1.5:.02:1.5;>b = -0.5:.02:2.1;>[A, B] = meshgrid(a, b);> Z = rosen([A(:), B(:)]);> Z = reshape(Z, length(b), length(a));> l = -10:6;> v=2.^l;> contour(a, b, Z, v);> hold on;> plot(trajgd(:,1), trajgd(:,2), b-, MarkerSize, 6)> title(Gradient Descent)Exercícios (1) Repita a otimização acima para o gradient descent sem termo de momento com os seguites valores para learning rate η = 0.001,0.01, 0.5 . Construa o gráfico acima em cada um dos casos. Repita os experimentos adicionando momentos µ = 0.1, 0.5 .Criado por Renato Vicente 10/06/02 28
  29. 29. Criado por Renato Vicente 10/06/02 29
  30. 30. Gradiente ConjugadoComo vimos anteriormente o método de gradient descent consiste na escolha donegativo do gradiente da função erro como direção para cada passo de otimização. Emsua versão mais eficiente o tamanho de cada passo é definido por uma busca linear,assim: w t +1 = w t − λ *∇E (w t ) ,onde λ * = arg min E (w t − λ∇t E ) . (2.1)Esta escolha tem a incoveniência de induzir uma trajetória em zig-zag no espaço dosparâmetros já que: dE = 0 ⇒ ∇E (w t +1 ) ⋅ ∇E (w t ) = 0 , (2.2) d λ λ =λ *o que implica que duas direções de otimização consecutivas são sempre ortogonais. Acondição (2.1) garante que a função seja minimizada na direção do gradiente ∇t E , noentanto o passo seguinte na direção do gradiente ∇t +1 E não garante que (2.2) continuesendo verdade, assim cada passo pode destruir parte do trabalho de otimização do passoanterior. Uma maneira de solucionar este problema é impor que a nova direção dt+1 deotimização seja tal que o gradiente no novo ponto no espaço dos parâmetros não tenhacomponentes na direção dt do último passo de otimização, assim: ∇E (w t+1 + λ d t+1 ) ⋅ d t = 0 . (2.3)Expandindo o gradiente acima ao redor de wt+1 teremos: (∇E (w t +1 ) + Hdt +1 ) ⋅ dt ≅ 0 , (2.4)onde H é o Hessiano e por construção teremos que: dt ⋅ Hdt +1 ≅ 0 . (2.5)As direções acima são mutuamente conjugadas . Vetores mutuamente conjugados formamuma base ortogonal com métrica definida pelo Hessiano H. Suponhamos agora queiniciamos o processo de otimização no ponto w1 do espaço dos parâmetros.Suponhamos que w* seja o mínimo da função erro E. A correção necessária paraatingirmos o mínimo da função erro pode ser expandida em uma base de vetoresmutuamente conjugados: N w * − w1 = ∑ α i d i , (2.6) i =1onde N é a dimensão do espaço de parâmetros. Se definirmos j −1 w j = w1 + ∑ α i d i , (2.7) i =1teremos a correção no componente j do vetor de parâmetros, alternativamente w j +1 = w j + α j d j (2.8)expressa como cada componente do vetor de parâmetros é corrigida a partir dacomponente anterior. Assim a otimização utilizando gradientes conjugados ocorre porCriado por Renato Vicente 23/06/02 29
  31. 31. otimização de uma componente por vez. Desta forma se calcularmos exatamente asdireções conjugadas em cada passo precisaremo de exatos N passos para otimização. Parasuperfícies quadráticas apenas precisamos calcular a Hessiana (segundas derivadas) umaúnica vez. As direções conjugadas são obtidas simplesmente resolvendo um problema deautovalores para H pois : d k ⋅ Hd j = λ j d k ⋅ d j = λ jδ jk , (2.9) Para superfícies genéricas o problema se torna mais complicado pois a Hessiana mudaconforme a posição no espaço dos parâmetros e seria necessário recalcular a Hessiana eresolver o problema de autovalores acima para cada ponto. Para entendermos comopodemos utilizar gradientes conjugados de forma prática, começamos por analisar o casomais simples de uma superfície quadrática.Suponhamos que a superfície de erro que queremos minimizar tenha a seguinte forma: 1 E (w ) = ω ⋅ w + w ⋅ Hw . (2.10) 2O gradiente desta função erro no ponto w será: ∇E (w ) = ω + Hw . (2.11)O ponto de mínimo será: ω + Hw * = 0 . (2.12)Agora, utilizando (2.6) teremos: (2.13)   d j ⋅ H ( w * − w1 ) = d j ⋅ H  ∑ α i d i  , N (2.14)  i =1 onde dj são direções conjugadas.Utilizando (2.12): N −d j ⋅ ω − d j ⋅ Hw1 = ∑ α i d j ⋅ H di = α j d j ⋅ H d j . (2.15) i =1Assim encontramos a correção necessária em cada uma das direções conjugadas: d ⋅ (ω + Hw1 ) αj = − j . (2.16) dj ⋅H djUtilizando (2.7) teremos j −1 d j ⋅ Hw j = d j ⋅ Hw1 + ∑ α i d j ⋅ Hdi = d j ⋅ Hw1 e (2.17) i =1 !#" " $ 0 d j ⋅ (ω + Hw j ) d j ⋅∇E (w j ) αj = − . =− (2.18) dj ⋅H dj dj ⋅H djCalculadas as correções em cada uma das direções conjugadas temos que encontrar umaforma de encontrarmos as próprias direções que seja mais eficiente do que o cálculo deHessianas e a solução de problemas de autovalor. Uma maneira prática consiste emCriado por Renato Vicente 23/06/02 30
  32. 32. adotarmos como primeira direção o negativo do gradiente no ponto de iníciod1 = −∇E (w1 ) . A seguir construímos cada uma das direções iterativamente: d j +1 = −∇E (w j +1 ) + β j d j (2.19)Empregando a condição para direções conjugadas teremos: d j +1 ⋅ Hd j = −∇E (w j +1 ) ⋅ Hd j + β j d j ⋅ Hd j = 0 e (2.20) −∇E (w j +1 ) ⋅ Hd j βj = d j ⋅ Hd jSe assumirmos uma aproximação quadrática em torno de cada ponto do espaçopoderemos empregar (2.20) como algoritmo para qualquer superfície. Nesta aproximaçãopodemos escrever: ∇E (w j +1 ) − ∇E (w j ) = Hw j +1 − Hw j = α j Hd j (2.21)e por conseqüência: −∇E (w j +1 ) ⋅ ∇E (w j +1 ) − ∇E (w j )    βj = (2.22) d j ⋅ ∇E (w j +1 ) − ∇E (w j )   conhecida como equação de Hesteness-Stiefel1. Com algum trabalho de álgebra é possívelmostrar que : ∇E (w j ) ⋅ d k = 0, j ≠ kEmpregando (2.19) teremos também que d j ⋅∇E (w j ) = −∇E (w j ) ⋅∇E (w j ) . (2.23)Substituindo em (2.22) encontramos a equação de Polak-Ribiere 2: (2.24) −∇E (w j +1 ) ⋅ ∇E (w j +1 ) − ∇E (w j )    βj = . (2.25) ∇E (w j ) ⋅∇E (w j )Note que não é necessário calcular o Hessiano para avaliarmos as direções conjugadas, noentanto precisamos desta avaliação para calcularmos o tamanho do passo α j (videexpressão (2.18) ). Para evitarmos o cálculo do Hessiano, muito caro para um númeromuito grande de dimensões, podemos utilizar uma busca linear na direção conjugada domomento. Assim chegamos a uma descrição completa do algoritmo de gradientesconjugados: 1. Escolha um ponto inicial no espaço dos parâmetros w1 ; 2. Calcule o gradiente no ponto inicial e faça a primeira direção de otimização ser d1 = −∇E (w1 ) ; 3. Para descobrir a amplitude do passo na direção d1, utilize uma busca linear encontrando α1 = arg min E (w j + α d1 ) ;1 Hestenes, M.R. e E. Stiefel (1952). Methods of conjugate gradients for solving linear systems. Journal ofResearch of the National Bureau of Standards 49 (6), 409-436.2 Polak, E. (1971). Computational Methods in optimization: A unified Approach. New York: Academic Press.Criado por Renato Vicente 23/06/02 31
  33. 33. 4. Calcule w 2 = w1 + α1d1 ; 5. Pare se os critérios de convergência foram satisfeitos 6. Calcule ∇E (w 2 ) ; 7. A nova direção é dada por d 2 = −∇E (w 2 ) + β1d1 , com β1 definido pela relação de Polak-Ribiere. 8. Vá para o passo 3 para o novo d.Utilizemos agora a implementação em Netlab do algoritmo de gradiente conjugado paraotimizarmos novamente a função de Rosenbrock. Começamos por verificar as opçõesde otimização disponíveis para a função conjgrad:> help conjgradCONJGRAD Conjugate gradients optimization. Description [X, OPTIONS, FLOG, POINTLOG] = CONJGRAD(F, X, OPTIONS, GRADF) uses a conjugate gradients algorithm to find the minimum of the function F(X) whose gradient is given by GRADF(X). Here X is a row vector and F returns a scalar value. The point at which F has a local minimum is returned as X. The function value at that point is returned in OPTIONS(8). A log of the function values after each cycle is (optionally) returned in FLOG, and a log of the points visited is (optionally) returned in POINTLOG. CONJGRAD(F, X, OPTIONS, GRADF, P1, P2, ...) allows additional arguments to be passed to F() and GRADF(). The optional parameters have the following interpretations. OPTIONS(1) is set to 1 to display error values; also logs error values in the return argument ERRLOG, and the points visited in the return argument POINTSLOG. If OPTIONS(1) is set to 0, then only warning messages are displayed. If OPTIONS(1) is -1, then nothing is displayed. OPTIONS(2) is a measure of the absolute precision required for the value of X at the solution. If the absolute difference between the values of X between two successive steps is less than OPTIONS(2), then this condition is satisfied. OPTIONS(3) is a measure of the precision required of the objective function at the solution. If the absolute difference between the objective function values between two successive steps is less than OPTIONS(3), then this condition is satisfied. Both this and the previous condition must be satisfied for termination. OPTIONS(9) is set to 1 to check the user defined gradient function. OPTIONS(10) returns the total number of function evaluations (including those in any line searches).Criado por Renato Vicente 23/06/02 32
  34. 34. OPTIONS(11) returns the total number of gradient evaluations. OPTIONS(14) is the maximum number of iterations; default 100. OPTIONS(15) is the precision in parameter space of the line search; default 1E-4. See also GRADDESC, LINEMIN, MINBRACK, QUASINEW, SCGPrimeiro inicializamos as opções de otimização carregando as opções de default com:> options=foptionsoptions = Columns 1 through 8 0 0.0001 0.0001 0.0000 0 0 0 0 Columns 9 through 16 0 0 0 0 0 0 0 0.0000 Columns 17 through 18 0.1000 0Ajustamos então algumas destas opções:>options(1)=-1;Para não mostrarmos em tela a trajetória de otimização.>options(3)=1e-8; Se em dois passos consecutivos a função erro diferir em menos de 1e-8 e se o vetor deparâmetros diferir em menos de 1e-2 (options(2) ) a otimização deverá ser encerrada.>options(14)=100;A otimização deverá parar se o número de iterações atingir 100.Agora definimos o ponto inicial :> x=[-2 3];A otimização é realizada em uma única linha:> [x,options,errgd,trajgd]=conjgrad(rosen,x,options,rosegrad);As saídas são>xx= 1.0000 1.0000O ponto ótimo, que neste caso está correto !>optionsoptions = Columns 1 through 8 -1.0000 0.0001 0.0000 0.0000 0 0 0 0.0000 Columns 9 through 16 0 526.0000 28.0000 0 0 100.0000 0 0.0000 Columns 17 through 18 0.1000 0Criado por Renato Vicente 23/06/02 33
  35. 35. Este vetor nos informa que foram utilizadas 526 avaliações da função minimizada e que ogradiente desta função foi avaliado 28 vezes ( uma vez a cada iteração).errgd e trajgd nos informam o valor do erro em cada passo e a trajetória noespaço dos parâmetros. Para vermos a evolução do erro podemos utilizar> plot(errgd,b-o);É interessante comentar neste ponto que para passarmos funções como argumentos pararotinas de otimização precisamos criar arquivos .m para a função e para o gradiente dafunção.> edit rosen;Criado por Renato Vicente 23/06/02 34
  36. 36. >edit rosegradCriado por Renato Vicente 23/06/02 35
  37. 37. O Netlab oferece uma função que possibilita a verificação de um gradiente:>gradchek([-2,3], rosen, rosegrad);Checking gradient ... analytic diffs delta-806.0000 -806.0000 0.0000-200.0000 -200.0000 0.0000Na saída analytic fornece o valor calculado pela função rosegrad , diffs calcula o gradientenumericamente utilizando a função rosen e delta mostra a diferença entre as duas formas decálculo.Para visualizarmos a trajetória de otimização repetimos o procedimento utilizado quandodiscutimos gradient descent:>a=-1.5:.02:1.5;>b=-0.5:.02:2.1;> [A,B]=meshgrid(a,b);>Z=rosen([A(:),B(:)]);>Z=reshape(Z,length(b),length(a));Criado por Renato Vicente 23/06/02 36
  38. 38. >l=-10:6;>v=2.^l;>contour(a,b,Z,v);>hold on;>plot(trajgd(:,1),trajgd(:,2),--bs,LineWidth,2,... MarkerEdgeColor,k,... MarkerFaceColor,g,... MarkerSize,10)>title(Gradiente Conjugado)Aqui utilizamos alguns recursos novos para produzirmos o gráfico, as propriedades são: 1. LineWidth : espessura da linha em pontos; 2. MarkerEdgeColor : cor da borda do símbolo utizado; 3. MarkerFaceColor: cor do preenchimento do símbolo; 4. MarkerSize: tamanho dos símbolos em pontos.É fácil perceber o desempenho muito superior deste algoritmo frente ao gradient descent.Gradiente Conjugado EscaladoLembremos que, para uma superfície quadrática, a amplitude de cada passo de otimizaçãoé dada por: d ⋅∇E (w j ) αj = − j . (2.26) dj ⋅H djPara evitar o cálculo da Hessiana acimao algoritmo de gradientes conjugados utiliza acada passo uma otimização linear para . Esta otimização linear tem duas desvantagens: (1)requer um grande número de avaliações de valor da função sendo otimizada e (2) aconvergência do algoritmo de gradientes depende da qualidade de cada otimizaçãounidimensional. Para evitar o cálculo da Hessiana ou o uso de otimizaçõesCriado por Renato Vicente 23/06/02 37
  39. 39. unidimensionais a cada passo Møller3 criou o algoritmo de gradientes conjugadosescalado.A idéia central do algoritmo é utilizar uma aproximação numérica para o termoenvolvendo a Hessiana em (2.26).Suponha ε = ε 0 / d j , onde ε 0 é uma quantidade pequena e positiva, observemos que : ∇E (w j + ε d j ) ≈ ∇E (w j ) + ε Hd j , (2.27)portanto uma aproximação numérica para (2.26) é: ∇E ( w j + ε d j ) − ∇E ( w j ) Hd j ≈ . (2.28) εEsta aproximação funciona se : 1) a função sendo minimizada for quadrática; 2) aHessiana for positiva definida. Para superfícies genéricas nada garantirá que a Hessiana épositiva definida e um passo de otimização utilizando (2.26) poderá aumentar o valor dafunção em algumas direções. Para podermos usar a aproximação numérica (2.28) eminimizar estes efeitos podemos corrigir a equação para: d j ⋅∇E (w j ) αj = − 2 (2.29) dj ⋅ H dj +γ j djO parâmetro γ regula a escala (daí o nome gradiente conjugado escalado) de cada passo e éinicializado como γ 1 = 1 . Quanto maior o parâmetro de escala, menor é a amplitude dopasso de otimização. A escala apropriada depende do quanto a função sendo otimizada élocalmente diferente de uma superfície quadrática. Se a função for exatamente quadráticaγ = 0 , se a função for distante de uma função quadrática γ deve aumentar.Uma medida do grau de similaridade local entre a função e uma superfície quadrática foiintroduzida por Fletcher sendo: E (w j ) − E (w j + α j d j ) ∆j = , (2.30) E (w j ) − EQ (w j + α j d j ) 1onde EQ (w j + α j d j ) = E (w j ) + α j d j ∇E (w j ) + α 2d j ⋅ Hd j . j Utilizando (2.26) 2simplificamos (2.30) e escrevemos: 2  E (w j ) − E (w j + α j d j )  ∆j =  . (2.31) α jd j ⋅ d jCom base neste parâmetro de comparação são feitas escolhas heurísticas para oparâmetro de escala a cada passo da otimização. As escolhas são as seguintes: γj 1. Se ∆ j > 0, 75 então γ j +1 = ; 23 Møller ,M. (1993). A scaled conjugate gradient algorithm for fast supervised learning. Neural Networks6(4), 525-533.Criado por Renato Vicente 23/06/02 38
  40. 40. 2. Se 0, 25 < ∆ j < 0, 75 então γ j +1 = γ j ; 3. Se ∆ j < 0, 25 então γ j +1 = 4γ j ; 4. Se ∆ j < 0 então γ j +1 = 4γ j e o passo de otimização não é efetuado; O algoritmo de gradientes conjugados escalados adquire então a seguinte forma: 1. Escolha um ponto inicial no espaço dos parâmetros w1 ; 2. Inicialize o parâmetro de escala em γ 1 = 1 ; 3. Calcule o gradiente no ponto inicial e faça a primeira direção de otimização ser d1 = −∇E (w1 ) ; 4. Para descobrir a amplitude do passo na direção d1 utilize (2.28) e (2.29); 5. Calcule w 2 = w1 + α1d1 ; 6. Pare se os critérios de convergência foram satisfeitos; 7. Calcule o parâmetro de comparação ∆ ; 8. Atualize o parâmetro de escala γ de acordo com as condições acima; 9. Calcule ∇E (w 2 ) ; 10. A nova direção é dada por d 2 = −∇E (w 2 ) + β1d1 , com β1 definido pela relação de Polak-Ribiere; 11. Vá para o passo 3 para o novo d e para o novo parâmetro de escala γ . A utilização do Netlab para otimização com gradientes conjugados escalados segue exatamente os mesmos passos que utilizamos para gradientes conjugados.> options = foptions;> options(1)=-1;>options(3)=1e-8;>options(14)=100;> x=[-2 3];> [x,options,errgd,trajgd]=scg(rosen,x,options,rosegrad);>xx= 1.0000 0.9999> optionsoptions = Columns 1 through 11 -1.0000 0.0001 0.0000 0.0000 0 0 0 0.0000 0 52.0000 78.0000 Columns 12 through 18 0 0 100.0000 0 0.0000 0.1000 0Note que a qualidade do resultado final é ligeiramente inferior àquela obtida com ogradiente conjugado mas o número de avaliações de função foi reduzido de 526 para 52ao deixarmos de utilizar otimizações unidimensionais. Para exibirmos a trajetóriaCriado por Renato Vicente 23/06/02 39
  41. 41. utilizamos o mesmo código utilizado para o algoritmo de gradiente conjugado, masdesta vez salvamos um arquivo .m como exibido abaixo:>trajetóriaNeste exemplo o desempenho do gradiente conjugado mostrou-se muito similar, e atéum pouco inferior, ao desempenho do gradiente conjugado simples. Em geral oCriado por Renato Vicente 23/06/02 40
  42. 42. gradiente conjugado escalado exibe o melhor desempenho, no entanto é interessantesempre testar cada um dos algoritmos caso a caso.Método de NewtonO método de Newton se baseia em uma idéia muito simples. Retomemos a expansão deTaylor para o gradiente em torno de um ponto wj. ∇E ( w ) ≈ ∇E ( w j ) + H ( w − w j ) . (2.32)Suponhamos agora que w é um mínimo, então: H (w − w j ) = −∇E (w j ) . (2.33)Se resolvermos esta equação em w para qualquer wj, então teremos encontrado omínimo. A solução para a equação é : w = w j − H −1∇E (w j ) . (2.34)Lembrando que (2.34) encontra o mínimo de E , o que equivale a encontrarmos a raiz f (w ) = ∇E(w ) . Ou seja, em uma dimensão, temos o conhecido método de Newton-Raphson. f ( xn ) x = xn − . (2.35) f ′( xn )A direção definida por H −1∇E (w j ) é conhecida como direção de Newton e tem comopropriedade principal apontar para um extremo local da função erro.Quase-NewtonO método de Newton tem uma série de desvantagens que limitam sua utilização práticaem problemas de otimização com muitas dimensões: 1. O algoritmo requer a avaliação e inversão da matriz Hessiana que requerem, respectivamente, O(W2 N) e O(W3) operações, sendo W o número de parâmetros e N o número de pontos. 2. Quando a superfície onde a otimização é realizada não é quadrática é necessário recalcular o Hessiano e seu inverso em cada ponto. 3. Ao redor de alguns pontos o Hessiano pode não ser positivo definido. Uma alternativa para contornar estes problemas intrínsecos ao método de Newton éimplementar um método que produza uma aproximação positiva definida para a inversada matriz Hessiana.Criado por Renato Vicente 23/06/02 41
  43. 43. Lembremos que na aproximação quadrática: ∇E (w j ) − ∇E (w j −1 ) = H (w j − w j −1 ) (2.36)Definindo q j = ∇E (w j ) − ∇E (w j −1 ) e (2.37) v j = w j − w j −1 (2.38) v j = Hq j (2.39)Se quisermos produzir uma aproximação para a inversa da Hessiana podemos exigir quepara cada um dos pontos já excursionados que G j +1 v i = qi ,1 ≤ i ≤ j (2.40)Após N passos com vetores linearmente independentes, com N sendo o número dedimenaões da matriz Hessiana teremos G N = H −1 . Um procedimento para construçãode uma série de matrizes positvas definidas que respeitem (2.40) é conhecido comoalgoritmo BFGS (Broyden-Fletcher-Goldfarb-Shanno)4:  v j ⋅ G j v j  (q j qTj ) (q j vTj ) G j + G j ( v j qTj ) G j +1 = G j + 1 +  − (2.41)  v j ⋅q j  q j ⋅ v j qj ⋅vj  Note que (q j vTj ) significa uma matriz com componentes (q j vTj ) = qi, j vl , j . ilEm geral a superfície que está sendo otimizada não é quadrática assim a aproximação em(2.32) tem validade limitada e a amplitude do passo no método quase-Newton deve sercontrolada: w j +1 = w j + α j G j ∇E (w j ) (2.42)A amplitude α j do passo de otimização pode ser obtida por uma busca linear, mas issosó é necessário se o passo de Newton total ( α j =1) aumentar o valor da função erro.Como fizemos anteriormente, começamos por verificar as instruções no help da funçãoquasinew:4 Press et al., Numerical Recipes in C: The Art of Scientific Computing, Cambridge University Press(disponível gratuitamente em www.nr.com).Criado por Renato Vicente 23/06/02 42
  44. 44. >help quasinewQUASINEW Quasi-Newton optimization. Description [X, OPTIONS, FLOG, POINTLOG] = QUASINEW(F, X, OPTIONS, GRADF) uses a quasi-Newton algorithm to find a local minimum of the function F(X) whose gradient is given by GRADF(X). Here X is a row vector and F returns a scalar value. The point at which F has a local minimum is returned as X. The function value at that point is returned in OPTIONS(8). A log of the function values after each cycle is (optionally) returned in FLOG, and a log of the points visited is (optionally) returned in POINTLOG. QUASINEW(F, X, OPTIONS, GRADF, P1, P2, ...) allows additional arguments to be passed to F() and GRADF(). The optional parameters have the following interpretations. OPTIONS(1) is set to 1 to display error values; also logs error values in the return argument ERRLOG, and the points visited in the return argument POINTSLOG. If OPTIONS(1) is set to 0, then only warning messages are displayed. If OPTIONS(1) is -1, then nothing is displayed. OPTIONS(2) is a measure of the absolute precision required for the value of X at the solution. If the absolute difference between the values of X between two successive steps is less than OPTIONS(2), then this condition is satisfied. OPTIONS(3) is a measure of the precision required of the objective function at the solution. If the absolute difference between the objective function values between two successive steps is less than OPTIONS(3), then this condition is satisfied. Both this and the previous condition must be satisfied for termination. OPTIONS(9) should be set to 1 to check the user defined gradient function. OPTIONS(10) returns the total number of function evaluations (including those in any line searches). OPTIONS(11) returns the total number of gradient evaluations. OPTIONS(14) is the maximum number of iterations; default 100. OPTIONS(15) is the precision in parameter space of the line search; default 1E-2. See also CONJGRAD, GRADDESC, LINEMIN, MINBRACK, SCGCriado por Renato Vicente 23/06/02 43
  45. 45. > options = foptions;> options(1)=-1;>options(3)=1e-8;>options(14)=100;> x=[-2 3];> [x,options,errgd,trajgd]=quasinew(rosen,x,options,rosegrad); >xx= 1.0000 1.0000Utilizando o método trajetoria.m :Criado por Renato Vicente 23/06/02 44
  46. 46. Estimação de Densidades de ProbabilidadeSimulação e ClusteringNo problema típico de simulação em finanças temos dados históricos provenientes deum determinado processo e desejamos gerar cenários futuros que sejam compatíveis como comportamento estatístico observado. Em sua forma mais geral conhecemos umaseqüência de dados x1 , x2 ,..., xt mais uma seqüência de informações de mercado z1 , z2 ,..., zt e queremos estimar uma distribuição condicional do futuro em relação aopassado p ( xt +1 , xt + 2 ,... x1 , z1 ,..., xt , zt ; w) , onde w são parâmetros da distribuição. Asimulação consiste da amostragem de p . Estas simulações são conhecidas como Monte-Carlo e encontram aplicação importante na avaliação de riscos.A versão mais simples do problema de estimação de densidades envolve apenasdistribuições conjuntas (não-condicionadas) p ( x; w) . Neste capítulo exemplificaremoso uso de Netlab na estimação de densidades de probabilidade conjuntas utilizando omodelo conhecido como Mistura de Gaussianas.Nosso problema de exemplo será a estimação da densidade conjunta não-condicional deretornos diários de uma carteira contendo três ações: VALE5, ITAU4 e ELET3.Representando em um gráfico cerca de 700 dias de séries teremos:>x=load(retornos.dat);>plot3(x(:,1),x(:,2),x(:,3),.);Criado por Renato Vicente 23/06/02 45
  47. 47. A densidade que observamos é resultado da convolução de um processo com densidadescondicionais de um dia quase-normais, não-estacionário e com grandes mudanças nascovariâncias. Isso dá origem a uma densidade não-gaussiana.No problema de clustering queremos separar um conjunto de dados x1 , x2 ,..., xt emclasses C1, C2, ...,Cn para isso modelamos a densidade p ( x; w) como uma mistura de nGaussianas p ( x) = ∑ p (C j ) pgauss ( x C j ) e definimos a qual classe pertence um ponto j =1específico x encontrnado a classe que maximiza p (C j x) .Misturas de GaussianasA idéia central por trás da estimação de densidades de porbabilidade utilizando misturasde normais está na utilização de uma combinação de distribuições simples, no casoGaussianas, para modelar distribuições de complexidade arbitrária. É possível mostrarque, com um número suficientemente grande de densidades gaussianas é possívelrepresentar qualquer densidade 1. Uma mistura de gaussianas é a dada por: M p (x) = ∑ P( j ) pgauss (x j ) (3.1) j =1Os coeficiente P( j ) são denominados coeficientes de mistura e as densidades pgauss (x j )são componentes da mistura. Para que (3.1) defina uma densidade de probabilidade asseguintes condições são necessárias: M 1. ∑ P( j ) = 1 j =1 0 ≤ P( j ) ≤ 1 2. ∫ dx p gauss (x j ) = 1 ∀j .Uma representação gráfica para um GMM (Gaussian Mixture Model) é: ∑ P( j ) p(x j) p(x|j)P(j) P(j)1 McLachlan, G.J. e K.E. Basford (1988). Misxture Models: Inference and Applications to Clustering. NewYork: Marcel Dekker.Criado por Renato Vicente 23/06/02 46
  48. 48. Os componentes da mistura têm a seguinte forma genérica: 1  1  p(x j ) = exp  − (x − µ j ) ⋅ C −1 (x − µ j )  j (3.2)  2  1/ 2 (2π ) d /2 CjAs matrizes de covariância Cj podem ter diversas formas que influenciarão o númerode componentes necessário para a representação de uma densidade: • Esférica: Nesta escolha as covariâncias são descritas por apenas um parâmetro C j = σ 2 I . O Netlab trás uma demonstração do uso de GMM com componentes j esféricos. >demgmm2 • Diagonal: Cada matriz de covariância é descrita por N parâmetros, onde N é a dimensão do espaço dos dados, assim Ckl , j = δ klσ k , j . Este caso é exemplificado no Netlab pela demonstração demgmm3.Criado por Renato Vicente 23/06/02 47
  49. 49. N2 + N • Completa: A covariância utilizada tem parâmetros , ou seja, Ckl , j = σ kl , j . 2 2 Utilizando demgmm4.Em Netlab podemos construir um GMM utilizando o comando gmm (dim, comp, covar)que define uma estrutura com dim dimensões, comp componentes de mistura ecovariância de tipo covar. Se quisermos construir um modelo para a distribuiçãoconjunta dos retornos das ações descrita acima utilizando 5 componentes comcovariâncias completas, devemos digitar:> mix= gmm(3,5,full);A estrutura definida tem as seguintes componentes:>mixmix = type: gmm nin: 3 ncentres: 5 covar_type: full priors: [0.2000 0.2000 0.2000 0.2000 0.2000] centres: [5x3 double] covars: [3x3x5 double] nwts: 65Os priors são os componentes de mistura e nwts é o número de parâmetros.A mistura acima precisa ser inicializada, para isso utilizamos o comando gmminit.Criado por Renato Vicente 23/06/02 48
  50. 50. >help gmminitGMMINIT Initialises Gaussian mixture model from data Description MIX = GMMINIT(MIX, X, OPTIONS) uses a dataset X to initialise the parameters of a Gaussian mixture model defined by the data structure MIX. The k-means algorithm is used to determine the centres. The priors are computed from the proportion of examples belonging to each cluster. The covariance matrices are calculated as the sample covariance of the points associated with (i.e. closest to) the corresponding centres. For a mixture of PPCA model, the PPCA decomposition is calculated for the points closest to a given centre. This initialisation can be used as the starting point for training the model using the EM algorithm. See also GMM>options=foptions;>mix=gmminit(mix,x,options);>mixmix = type: gmm nin: 3 ncentres: 5 covar_type: full priors: [0.0639 0.3083 0.0111 0.4264 0.1903] centres: [5x3 double] covars: [3x3x5 double] nwts: 65A função gmminit utiliza um algoritmo não-paramétrico denominado K-médiasimplementado pela função kmeans do Netlab que consiste dos seguintes passos: 1. Os N dados são são divididos em K grupos S1, S2 e SK com o mesmo número de componentes; 1 2. São calculadas médias (centros) para cada grupo: µ j = ∑ xn ; N j n∈S j 3. Calculam-se as distâncias de cada dado em relação a cada um dos centros e reagrupam-se os dados no grupo de centro mais próximo de forma a K minimizar E = ∑ ∑ xn − µ j 2 . j =1 n∈S j 4. Volta ao passo 2.Após inicialização o treinamento do GMM é efetuado utilizando um algoritmo deotimização de verossimilhança denominado EM através da função gmmem.Criado por Renato Vicente 23/06/02 49
  51. 51. >help gmmemGMMEM EM algorithm for Gaussian mixture model. Description [MIX, OPTIONS, ERRLOG] = GMMEM(MIX, X, OPTIONS) uses the Expectation Maximization algorithm of Dempster et al. to estimate the parameters of a Gaussian mixture model defined by a data structure MIX. The matrix X represents the data whose expectation is maximized, with each row corresponding to a vector. The optional parameters have the following interpretations. OPTIONS(1) is set to 1 to display error values; also logs error values in the return argument ERRLOG. If OPTIONS(1) is set to 0, then only warning messages are displayed. If OPTIONS(1) is -1, then nothing is displayed. OPTIONS(3) is a measure of the absolute precision required of the error function at the solution. If the change in log likelihood between two steps of the EM algorithm is less than this value, then the function terminates. OPTIONS(5) is set to 1 if a covariance matrix is reset to its original value when any of its singular values are too small (less than MIN_COVAR which has the value eps). With the default value of 0 no action is taken. OPTIONS(14) is the maximum number of iterations; default 100. The optional return value OPTIONS contains the final error value (i.e. data log likelihood) in OPTIONS(8). See also GMM, GMMINITNote a opção(5) que tem por objetivo evitar que a covariância colapse sobre um ponto,o que corresponde a um overfitting dos dados modelados.>options=foptions;>options(1)=-1;> [mix,options,errlog] =gmmem(mix,x,options);> mixmix = type: gmm nin: 3 ncentres: 5 covar_type: full priors: [0.0063 0.1210 0.2052 0.2196 0.4479] centres: [5x3 double] covars: [3x3x5 double] nwts: 65Criado por Renato Vicente 23/06/02 50
  52. 52. Os centros são :> mix.centresans = 0.1779 0.1205 0.2443 -0.0056 0.0001 -0.0091 0.0095 0.0246 0.0130 0.0051 -0.0100 -0.0060 -0.0052 -0.0049 -0.0046Se quisermos agora simular retornos utilizando nosso modelo recém treinado bastautilizarmos a função [data,label]=gmmsamp(mix,n), com n sendo o número de amostras,data sendo os dados amostrados e label a componente geradora.> [simula,label_sim]=gmmsamp(mix,500);>plot3(simula(:,1),simula(:,2),simula(:,3),rs,LineWidth,2,MarkerEdgeColor,k,MarkerFaceColor,g,MarkerSize,5);Algoritmo EM (Expectation-Maximization)A estimação dos parâmetros em um GMM se baseia em um algoritmo conhecido comoEM (Expectation-Maximization) 2. Para encontrarmos os parâmetros mais adequadospara modelar os dados devemos maximizar a função verossimilhança no conjunto dedados {xn }n =1 : N N L( P, µ , C ) = ∑ ln p ( xn ) , (3.3) n =1Esta função de verossimilhança é função dos coeficientes de mistura das médias e dasmatrizes de covariância. Para simplificar os cálculos podemos, alternativamente,minimizar uma função erro definida como: E = − ln L (3.4)2 Dempster, A. P., N.M. Laird e D.B. Rubin (1977). Maximum likelihood from incomplete data via the EMalgorithm. journal of the Royal Statistical Society, B 39 (1), 1-38.Criado por Renato Vicente 23/06/02 51
  53. 53. Se substituirmos a estrutura do GMM em (3.4) teremos: N M  E = − ∑ ln ∑ p ( xn j ) P( j )  (3.5) n =1  j =1 Poderiamos utilizar os algoritmos estudados no capítulo anterior para otimizarmos afuncção erro em (3.5), no entanto, a experiência mostra que , para misturas de gaussianas,o algoritmo EM converge melhor e mais rápido.Queremos minimizar (3.5). A cada alteração de parâmetros temos : N  p (x )  ∆E = −∑ ln  t +1 n  (3.6) n =1  pt ( xn ) Se utilizarmos a estrutura da mistura e multiplicarmos o numerador e denominador porPt ( j xn ) teremos: M  N  ∑ Pt +1 ( j ) pt +1 ( xn j ) P ( j x )  ∆E = −∑ ln   j =1 t n (3.7) n =1  pt ( xn ) Pt ( j xn )     A manipulação acima teve por objetivo possibilitar o uso da desigualdade de Jensen:   Se λ j ≥ 0 e ∑λ j = 1 , então ln  ∑ λ j x j  ≥ ∑ λ j ln( x j ) . j  j  j MComo ∑ P ( j x ) = 1 podemos escrever uma desigualdade baseada em j =1 t n (3.7): N M  P ( j ) pt +1 ( xn j )  ∆E ≤ −∑∑ Pt ( j xn ) ln  t +1  (3.8) n =1 j =1  Pt ( j x n ) pt ( xn j )   Na otimização queremos minimizar a função erro E. Isso implica em minimizar ∆E aoescolher novos parâmetros. Podemos reescrever (3.8) como : N M N MEt +1 ≤ Et − ∑∑ Pt ( j xn ) ln  Pt +1 ( j ) pt +1 ( xn j )  + ∑∑ Pt ( j xn ) ln  Pt ( j ) pt ( xn j )      (3.9) n =1 j =1 n =1 j =1Note que o último termo acima não depende dos novos parâmetros em t+1 sendo,portanto, uma constante. Já o segundo termo varia com a escolha de novos parâmetros.A propriedade interessante de (3.9) é o fato de que qualquer alteração no segundo termoa direita que reduza o valor da soma dos termos automaticamente implica na redução doerro no novo passo. Chamemos o segundo termo à esquerda de Q e o terceiro de Q0 ,teremos:Criado por Renato Vicente 23/06/02 52

×