• Nenhum resultado encontrado

3.5 Algoritmo de retro-propaga¸c˜ ao

3.5.3 Trabalhando com a retro-propaga¸c˜ ao

A aplica¸c˜ao da regra delta envolve duas fases. Na primeira fase uma entrada ´e propagada para frente pela rede para computar os valores yp

o de cada n´o de sa´ıda. Essa sa´ıda ´e comparada com o valor desejado do, resultando em um sinal de erro δop para cada n´o de sa´ıda. Na segunda fase, o sinal de erro ´e passado pela rede de tr´as para frente de tal forma que seja poss´ıvel determinar as mudan¸cas nos pesos da rede [7].

Ajustes de pesos com fun¸c˜ao de ativa¸c˜ao sigm´oide

Os resultados da se¸c˜ao anterior podem ser resumidos em trˆes equa¸c˜oes [7]:

ˆ O peso de uma conex˜ao ´e ajustado por uma quantidade proporcional ao produto de um sinal de erro δ, para um n´o k recebendo uma entrada e uma sa´ıda do n´o j enviando esse sinal ao longo da conex˜ao:

∆pwjk = γδ p ky

p

j. (3.24)

ˆ Se o n´o ´e um n´o de sa´ıda, o sinal de erro ser´a dado por δpo = (dpo− yp

o)F 0

(spo). (3.25)

Para o caso de uma fun¸c˜ao de ativa¸c˜ao F do tipo sigmoide, tem-se:

yp = F (Sp) = 1

A derivada ser´a igual a F0(sp) = ∂ ∂Sp 1 1 + esp = 1 (1 + e−sp )2(−e −sp ) = 1 (1 + e−sp ) e−sp (1 + e−sP ) = yp(1 − yp). (3.27)

Portanto, o sinal de erro para um n´o de sa´ıda pode ser escrito como: δop = (dpo− yp o)y p o(1 − y p o). (3.28)

ˆ O sinal de erro para um n´o escondido ´e determinado recursivamente em termos termos dos sinais de erros dos n´os diretamente conectados a eles. Para a fun¸c˜ao de ativa¸c˜ao sigm´oide:

δhp = F0(sph) No X o=1 δopwho = y p h(1 − y p h) No X o=1 δopwho. (3.29)

Taxa de aprendizagem e momento

O aprendizado de uma rede requer mudan¸cas nos pesos proporcionais a ∂EP/∂w. O gradiente descendente requer passos infinitesimais. A taxa de aprendizagem γ ´e uma constante de aprendizado. Para fins pr´aticos, escolhe-se uma taxa de aprendizado que seja a maior poss´ıvel afim de evitar oscila¸c˜oes. Um caminho para evitar oscila¸c˜oes com um γ grande, ´e fazer mudan¸cas nos pesos dependendo das mudan¸cas passadas pela adi¸c˜ao de um momento [7]:

∆wjk(t + 1) = γδkpy p

j + α∆wjk(t), (3.30)

onde t indexa a apresenta¸c˜ao num´erica e α ´e uma constante que determina o efeito das mudan¸cas de peso anteriores.

Quando n˜ao se usa momentos, leva um tempo maior para que o m´ınimo seja atingido com uma taxa de aprendizagem baixa, por outro lado, se forem usadas taxas de aprendizagem muito altas, o m´ınimo nunca ser´a atingido devido as oscila¸c˜oes. Ao adicionar-se o momento, o m´ınimo poder´a ser atingido mais r´apido [7].

Aprendizagem por padr˜oes

Embora, teoricamente, o algoritmo de retro-propaga¸c˜ao realize o gradiente descendente do erro total somente se os pesos tenham sidos ajustados depois de um conjunto completo de padr˜oes, geralmente a regra de aprendizagem ´e aplicada para cada padr˜ao separadamente. Por exemplo, se um padr˜ao p ´e aplicado, Ep ´e calculado e os pesos s˜ao adaptados. Existem indica¸c˜oes emp´ıricas que isso resulta em uma convergˆencia mais r´apida. Outro exemplo, quando usa-se a mesma sequˆencia para treinamento, a rede pode se ater mais nos primeiros padr˜oes. Esse problema pode ser superado pela utiliza¸c˜ao de um m´etodo de treinamento por permuta [7].

Cap´ıtulo 4

Algoritmos Gen´eticos

Neste cap´ıtulo ´e apresentada a teoria dos algoritmos gen´eticos. O cap´ıtulo est´a dividido em introdu¸c˜ao, hist´orico, terminologia, funcionamento e fundamenta¸c˜ao te´orica dos algoritmos gen´eticos.

4.1

Introdu¸c˜ao

Os mecanismos da evolu¸c˜ao aparentam ser adequados para a resolu¸c˜ao de muitos problemas computacionais. Em alguns problemas faz-se necess´ario uma busca em um n´umero grande de poss´ıveis solu¸c˜oes. J´a em outros, ´e necess´ario que o programa seja adaptativo, ou seja, ´e necess´ario que o programa continue funcionando bem, mesmo que o ambiente esteja em constante mudan¸ca. Al´em desses, tamb´em existem problemas em que ´e necess´ario que o programa seja inovativo afim de se obter uma solu¸c˜ao nova e original, como no caso de uma nova descoberta cient´ıfica. Esses v´arios tipos de problemas fizeram com que os pesquisadores buscassem solu¸c˜oes do tipo bottom-up em que um conjunto de regras simples podem fazer com que comportamentos inteligentes emerjam [43, 44].

A evolu¸c˜ao ´e um m´etodo de busca com uma enorme quantidade de poss´ıveis solu¸c˜oes. Na Biologia, o conjunto de possibilidades ´e o conjunto das poss´ıveis sequˆencias gen´eticas e as solu¸c˜oes desejadas s˜ao os organismos mais adaptados. A evolu¸c˜ao tamb´em pode ser vista como um meio de encontrar solu¸c˜oes inovadores para problemas complexos. Visto por esse lado, os mecanismos de evolu¸c˜ao podem inspirar m´etodos de busca computacionais. Al´em disso, a evolu¸c˜ao ´e um m´etodo de busca massivamente paralelo: ao inv´es de trabalhar com uma esp´ecie por vez, a evolu¸c˜ao testa e modifica milh˜oes de esp´ecies em paralelo. Por fim, as regras da evolu¸c˜ao s˜ao simples: esp´ecies evoluem por meio de uma varia¸c˜ao randˆomica, seguida pela sele¸c˜ao natural em que o mais adaptados tendem a sobreviver e reproduzir. Apesar de simples, essas regras s˜ao respons´aveis pela grande variedade e complexidade da vida na terra [43, 44].

Portanto, pode-se dizer que os algoritmos gen´eticos tem como objetivo a realiza¸c˜ao de buscas, por exemplo: busca de uma solu¸c˜ao num´erica, busca do significado de uma express˜ao lingu´ıstica, busca de uma previs˜ao de carga ou busca de qualquer outro elemento que tenha significado em uma determinada circunstˆancia. Esse tipo de algoritmo ´e uma t´ecnica de busca extremamente eficiente no seu objetivo de varrer o espa¸co de solu¸c˜oes e encontrar solu¸c˜oes pr´oximas da solu¸c˜ao ´

otima. Em outras palavras, os algoritmos gen´eticos s˜ao t´ecnicas heur´ısticas de otimiza¸c˜ao global

baseados nos mecanismos de sele¸c˜ao natural e gen´etica [8].

Nos algoritmos gen´eticos, popula¸c˜oes de indiv´ıduos s˜ao criadas e submetidas aos operadores gen´eticos: sele¸c˜ao, crossover e muta¸c˜ao. Estes operadores utilizam uma caracteriza¸c˜ao da qualidade de cada indiv´ıduo como solu¸c˜ao do problema em quest˜ao e v˜ao gerar um processo de evolu¸c˜ao natural destes indiv´ıduos, que eventualmente gerar´a um indiv´ıduo que caracterizar´a uma boa solu¸c˜ao para o problema [8].

Vale ressaltar que a evolu¸c˜ao natural n˜ao ´e um processo dirigido `a obten¸c˜ao da solu¸c˜ao ´

otima. Na verdade, o processo simplesmente consiste em fazer competir uma s´erie de indiv´ıduos e pelo processo de sobrevivˆencia do mais apto, os melhores indiv´ıduos tendem a sobreviver. Um algoritmo gen´etico tem o mesmo comportamento que a evolu¸c˜ao natural: a competi¸c˜ao entre os indiv´ıduos ´e que determina as solu¸c˜oes obtidas. Eventualmente, devido `a sobrevivˆencia do mais apto, os melhores indiv´ıduos prevalecer˜ao [8].

4.2

Hist´orico

Durante os anos de 1950 e 1960, muitos cientistas da computa¸c˜ao come¸caram a estudar sistemas evolucion´arios com a ideia de que a evolu¸c˜ao poderia ser usada como uma ferramenta de otimiza¸c˜ao em problemas de engenharia. A ideia era evoluir uma popula¸c˜ao de solu¸c˜oes candidatas de um dado problema usando operadores inspirados pela gen´etica e sele¸c˜ao natural [43].

Nos anos de 1960, Rechenberg introduziu as estrat´egias evolutivas, um m´etodo que ele usou em uma otimiza¸c˜ao real. Schwegel desenvolveu ainda mais essa ideia. A ´area de estrat´egias evolutivas continuou como uma ´area de pesquisa com o desenvolvimento independente do campo dos algoritmos gen´eticos. Em 1966, Fogel, Owens e Walsh desenvolveram a programa¸c˜ao evolutiva, uma t´ecnica em que as solu¸c˜oes candidatas de uma dada tarefa s˜ao representadas como m´aquinas de estado finito cujos estados s˜ao evolu´ıdos de forma aleat´oria e, ent˜ao, s˜ao selecionadas os mais adaptados. Estrat´egias evolutivas, programa¸c˜ao evolutiva e algoritmos gen´eticos juntos formam o campo da computa¸c˜ao evolutiva [43].

Muitos outros trabalharam durante os anos de 1950 e 1960 no desenvolvimento de algoritmos inspirados na evolu¸c˜ao para otimiza¸c˜ao e aprendizagem de m´aquina. Box (1957), Friedman (1959), Bledsoe (1961), Bremermann (1962) e Reed, Toombs e Baricelli (1967) s˜ao alguns exemplos. Al´em deles, bi´ologos usaram computadores para simular a evolu¸c˜ao cujos os resultados seriam usados em experimentos controlados. Nos primeiros dias dos computadores eletrˆonicos, os pesquisadores definitivamente tinha interesse na computa¸c˜ao evolutiva [43].

Por fim, os algoritmos gen´eticos como conhecidos atualmente foram desenvolvidos por John Holland na d´ecada de 1960. A ideia de Holland era estudar formalmente os fenˆomenos da adapta¸c˜ao e implementar em um sistema computacional. O livro de Holland de 1975 intitulado Adaptation in Natural and Artificial Systems apresentava os algoritmos gen´eticos como uma abstra¸c˜ao da evolu¸c˜ao biol´ogica originando-se ferramentas para a utiliza¸c˜ao da adapta¸c˜ao em sistemas computacionais. O algoritmo gen´etico de Holland consiste em mover uma popula¸c˜ao de cromossomos para uma nova popula¸c˜ao usando um tipo de sele¸c˜ao natural junto com os operadores gen´eticos de crossover, muta¸c˜ao e invers˜ao. A grande inova¸c˜ao de Holland foi a introdu¸c˜ao de um algoritmo baseado em popula¸c˜oes com crossover, invers˜oes e muta¸c˜oes. Al´em