Logo Passei Direto
Buscar

AIMA - Seção 18_7

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

A derivada g′ da função logística satisfaz g′(z) = g(z) (1 – g (z)), então temos
assim, a atualização de peso para minimizar a perda é
Repetindo os experimentos da Figura 18.16 com regressão logística em vez de classificador de
limiar linear, obtemos os resultados mostrados na Figura 18.18. Em (a), como o caso é separável
linearmente, a regressão logística é um pouco mais lenta para convergir, mas tem um comportamento
muito mais previsível. Em (b) e (c), onde os dados são ruidosos e não separáveis, a regressão
logística converge muito mais rápido e confiavelmente. Essas vantagens tendem a se manter em
aplicações do mundo real, e a regressão logística tornou-se uma das técnicas de classificação mais
populares para problemas de medicina, marketing e análise de dados, pontuação de crédito, saúde
pública e outras aplicações.
Figura 18.18 Repetição dos experimentos na Figura 18.16 por regressão logística e erro quadrático.
A representação gráfica em (a) abrange 5.000 iterações em vez de 1.000, enquanto (b) e (c) utilizam
a mesma escala.
18.7 REDES NEURAIS ARTIFICIAIS
Passaremos agora ao que parece ser um tema um tanto independente: o cérebro. Na verdade, como
veremos, as ideias técnicas que discutimos até agora neste capítulo serão úteis na construção de
modelos matemáticos da atividade do cérebro e, de forma inversa, pensar sobre o cérebro tem
ajudado a estender o âmbito das ideias técnicas.
O Capítulo 1 passou brevemente pelos resultados básicos da neurociência — em particular, a
hipótese de que a atividade mental consiste basicamente na atividade eletroquímica em redes de
células cerebrais chamadas neurônios (a Figura 1.2 mostrou um diagrama esquemático de um
neurônio típico). Inspirado por essa hipótese, alguns dos trabalhos mais antigos de IA tiveram o
objetivo de criar redes neurais artificiais (outros nomes do campo incluem conexionismo,
processamento distribuído em paralelo e computação neural). A Figura 18.19 apresenta um
modelo matemático simples do neurônio desenvolvido por McCulloch e Pitts (1943). Grosseiramente
falando, ele “dispara” quando uma combinação linear de suas entradas excede algum limiar (rígido
ou suave), ou seja, ele implementa um classificador linear do tipo descrito na seção anterior. Uma
rede neural é apenas uma coleção de unidades conectadas; as propriedades da rede são determinadas
pela sua topologia e pelas propriedades dos “neurônios”.
Figura 18.19 Modelo matemático simples de um neurônio. A ativação de saída da unidade é 
, onde ai é a ativação de saída da unidade i e wi,j é o peso sobre a ligação da
unidade i com essa unidade.
Desde 1943, têm sido desenvolvidos modelos muito mais detalhados e realistas, tanto de
neurônios como de sistemas maiores no cérebro, levando ao campo moderno da neurociência
computacional. Por outro lado, os pesquisadores de IA e os estatísticos tornaram-se interessados nas
propriedades mais abstratas das redes neurais, tais como sua capacidade de realizar computação
distribuída, de tolerar entradas ruidosas e aprender. Embora entendamos agora que outros tipos de
sistemas — incluindo redes bayesianas — têm essas propriedades, as redes neurais permanecem uma
das formas mais populares e eficazes de aprendizagem do sistema e são dignos de estudo.
18.7.1 Estrutura das redes neurais
As redes neurais são compostas por nós ou unidades (ver Figura 18.19) conectadas por ligações
direcionadas. Uma ligação da unidade i para a unidade j serve para propagar a ativação ai de i para
j.8 Cada ligação também tem um peso numérico wi,j associado a ele, que determina a força e o sinal
de conexão. Assim como em modelos de regressão linear, cada unidade tem uma entrada fictícia a0 =
1 com peso associado w0,j. Cada unidade j primeiro calcula uma soma ponderada de suas entradas:
Em seguida, aplica uma função de ativação g a essa soma para obter a saída:
A ativação da função g tipicamente é tanto um limiar rígido (Figura 18.17(a)), caso em que a
unidade é chamada de perceptron, como uma função logística (Figura 18.17 (b)), caso em que por
vezes é utilizado o termo perceptron sigmoide. Ambas as funções de ativação não linear garantem a
propriedade importante de que toda a rede de unidades pode representar uma função não linear (veja
o Exercício 18.22). Como mencionado na discussão de regressão logística, a função de ativação
logística tem a vantagem adicional de ser diferenciável.
Tendo decidido sobre o modelo matemático para “neurônios” individuais, a próxima tarefa é
conectá-los para formar uma rede. Existem duas formas fundamentalmente distintas para fazer isso.
Uma rede com alimentação para a frente tem conexões somente em uma direção, isto é, forma um
grafo acíclico dirigido. Cada nó recebe a entrada de nós “para cima” e libera a saída de nós “para
baixo”; não há laços. Uma rede com alimentação para a frente representa uma função de sua entrada
atual; portanto, não tem estado interno que não seja os próprios pesos. A rede recorrente, por outro
lado, alimenta suas saídas de volta às suas próprias entradas. Isso significa que os níveis de ativação
da rede formam um sistema dinâmico que pode atingir um estado estável ou apresentar oscilações ou
até mesmo um comportamento caótico. Além disso, a resposta da rede para determinada entrada
depende do seu estado inicial, que pode depender de entradas anteriores. Portanto, as redes
recorrentes (ao contrário das redes com alimentação para a frente) podem suportar memória de curto
prazo. Isso as torna mais interessantes como modelos de cérebro, mas também mais difícil de
entender. Esta seção vai se concentrar em redes com alimentação para a frente; algumas dicas para
mais informação sobre redes recorrentes são dadas ao final do capítulo.
As redes com alimentação para a frente normalmente estão dispostas em camadas, de tal forma
que cada unidade recebe a entrada somente a partir de unidades na camada imediatamente anterior.
Nas duas próximas subseções, analisaremos as redes de camada única, em que cada unidade se
conecta diretamente a partir de entradas da rede para suas saídas, e as redes de camadas múltiplas,
que têm uma ou mais camadas de unidades ocultas que não são conectadas às saídas da rede. Até
agora, neste capítulo, consideramos apenas problemas de aprendizagem com uma variável única de
saída y, mas as redes neurais são frequentemente usadas em casos em que são adequadas saídas
múltiplas. Por exemplo, se quisermos formar uma rede para adicionar dois bits de entrada, cada 0 ou
1, precisaremos de uma saída para o bit de soma e uma para o bit de vai-um. Além disso, quando o
problema de aprendizagem envolve classificação em mais que duas classes — por exemplo, quando
aprendemos a categorizar imagens de dígitos manuscritos —, é comum o uso de uma unidade de
saída para cada classe.
18.7.2 Redes neurais de camada única com alimentação para a frente
(perceptrons)
Uma rede com todas as entradas conectadas diretamente com as saídas é chamada de rede neural
de camada única ou rede perceptron. A Figura 18.20 mostra uma rede perceptron simples de duas
entradas e duas saídas. Com uma rede desse tipo, podemos ter a esperança de aprender a função
adicionador de dois bits, por exemplo. Aqui estão todos os dados de treinamento de que
precisaremos:
x1 x2 y3 (transporte) y4 (soma)
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
A primeira coisa a notar é que uma rede perceptron com m saídas é realmente m redes separadas,
pois cada peso afeta apenas uma das saídas. Assim, haverá m processos de treinamento separados.
Além disso, dependendo do tipo de função de ativação utilizada, o processo de treinamento será
tanto a regra de aprendizagem perceptron (Equação 18.7) como a regra de descida pelo gradiente
por regressão logística (Equação 18.8).
Figura 18.20 (a) Rede perceptron com duas unidades de entrada e duas unidades de saída. (b) Rede
neural com duas entradas, uma camada oculta de duas unidades e uma unidade de saída. As entradas
fictícias e seus pesos associados não são mostrados.
Se você tentar qualquer método nos dadossomadores de dois bits, algo interessante acontecerá. A
unidade 3 aprende a função vai-um com facilidade, mas a unidade 4 falha completamente em
aprender a função soma. Não, a unidade 4 não está com defeito! O problema é com a função de soma
em si. Vimos na Seção 18.6 que classificadores lineares (rígidos ou suaves) podem representar
limiares de decisão linear no espaço de entrada. Isso funciona bem para a função vai-um, que é uma
lógica E (ver Figura 18.21(a)). A função soma, porém, é um XOR (OU exclusivo) das duas entradas.
Como a Figura 18.21(c) ilustra, essa função não é linearmente separável de modo que o perceptron
não pode aprendê-la.
Figura 18.21 Separabilidade linear em limiar de perceptrons. Os pontos pretos indicam um ponto no
espaço de entrada onde o valor da função é 1, e pontos brancos indicam um ponto onde o valor é 0. O
perceptron retorna 1 na região do lado não sombreado da linha. Em (c), não existe essa linha que
classifica corretamente as entradas.
As funções linearmente separáveis constituem apenas uma pequena fração de todas as funções
booleanas; o Exercício 18.20 pede para quantificar essa fração. A incapacidade dos perceptrons de
aprender mesmo tais funções simples como XOR foi um revés significativo para a comunidade
nascente de redes neurais na década de 1960. No entanto, os perceptrons estão longe de ser inúteis.
A Seção 18.6.4 observou que a regressão logística (ou seja, o treinamento de um perceptron
sigmoide) ainda é hoje muito popular e uma ferramenta eficaz. Além disso, um perceptron pode
representar uma função booleana bastante “complexa” de forma compacta. Por exemplo, a função da
maioria, que gera um 1 apenas se mais da metade de suas entradas n forem 1, pode ser representada
por um perceptron com cada wi = 1 e com w0 = −n/2. Uma árvore de decisão precisaria
exponencialmente de muitos mais nós para representar essa função.
A Figura 18.22 mostra a curva de aprendizagem para um perceptron em dois problemas diferentes.
À esquerda, mostramos a curva de aprendizagem da função maioria com 11 entradas booleanas (ou
seja, a função de saída 1, se seis ou mais entradas forem 1). Como seria de esperar, o perceptron
aprende a função de forma rápida porque a função da maioria é linearmente separável. Por outro
lado, o aprendiz de árvore de decisão não faz nenhum progresso porque a função da maioria é muito
difícil (embora não seja impossível) para ser representada como árvore de decisão. À direita, temos
o exemplo do restaurante. A solução do problema é facilmente representada como uma árvore de
decisão, mas não é linearmente separável. O melhor plano utilizando dados classifica corretamente
apenas 65%.
Figura 18.22 Comparação do desempenho dos perceptrons e das árvores de decisão. (a) Os
perceptrons são melhores em aprender a função de maioria de 11 entradas. (b) As árvores de decisão
são melhores em aprender o predicado VamosEsperar no exemplo do restaurante.
18.7.3 Redes neurais com alimentação para a frente multicamada
McCulloch e Pitts (1943) sabiam que uma única unidade de limiar não resolveria todos os seus
problemas. De fato, suas teses provam que tal unidade pode representar funções booleanas básicas E,
OU e NÃO, e depois continuam a argumentar que qualquer funcionalidade desejada pode ser obtida
ligando grande número de unidades em redes de profundidade arbitrária (possivelmente recorrentes).
O problema era que ninguém sabia como treinar tais redes.
Isso acaba por ser um problema fácil se pensarmos em uma rede da maneira certa: como uma
função hw(x) parametrizada pelos pesos w. Considere a rede simples mostrada na Figura 18.20 (b),
que tem duas unidades de entrada, duas unidades ocultas e duas unidades de saída (além disso, cada
unidade tem uma entrada fictícia fixada em 1). Dado um vetor de entrada x = (x1, x2), as ativações
das unidades de entrada são definidas como (a1, a2) = (x1, x2). A saída da unidade 5 é dada por
Assim, temos a saída expressa como uma função das entradas e dos pesos. Uma expressão similar
vale para a unidade 6. Enquanto podemos calcular as derivadas de tais expressões com relação aos
pesos, podemos usar o método de minimização de perda da descida pelo gradiente para treinar a
rede. A Seção 18.7.4 mostra exatamente como fazer isso. E, como a função representada por uma
rede pode ser altamente não linear — composta por funções de limiar suave não lineares aninhadas
— pode-se ver as redes neurais como ferramenta para fazer regressão não linear.
Antes de nos aprofundar em regras de aprendizagem, vamos observar como as redes geram
funções complicadas. Primeiro, lembre-se de que cada unidade em uma rede sigmoide representa um
limiar suave em seu espaço de entrada, como mostrado na Figura 18.17(c). Com uma camada oculta e
uma camada de saída, como na Figura 18.20(b), cada unidade de saída calcula uma combinação
linear de limiar suave dessas várias funções. Por exemplo, pela adição de duas funções de limiar
suave opostas e limitando o resultado, podemos obter uma função “cume” como mostrado na Figura
18.23(a). A combinação das duas cristas em ângulos corretos entre si (ou seja, combinando as saídas
de quatro unidades ocultas), obtém um “sobressalto”, como mostrado na Figura 18.23(b).
Figura 18.23 (a) Resultado da combinação de duas funções de limiar suave opostas para produzir um
cume. (b) Rresultado da combinação de duas cristas para produzir um sobressalto.
Com mais unidades ocultas, podemos produzir outros sobressaltos de tamanhos diferentes em
outros lugares. Na verdade, com uma camada oculta única, suficientemente grande, é possível
representar qualquer função contínua de entrada com precisão arbitrária; com duas camadas, podem
ser representadas até mesmo funções descontínuas.9 Infelizmente, para qualquer estrutura de rede
particular, é mais difícil caracterizar exatamente as funções que podem ser representadas e as que
não podem.
18.7.4 Aprendizagem em redes multicamadas
Primeiro, vamos tratar de uma complicação menor decorrente de redes multicamadas: interações
entre os problemas de aprendizagem quando a rede tem várias saídas. Nesses casos, devemos pensar
na rede como uma função vetorial hw de implementação, em vez de uma função escalar hw; por
exemplo, a rede na Figura 18.20(b) retorna um vetor [a5, a6]. Da mesma forma, a saída de destino
será um vetor y. Considerando que uma rede perceptron se decompõe em m problemas de
aprendizagem em separado para um problema de m saídas, essa decomposição falha em uma rede de
múltiplas camadas. Por exemplo, tanto a5 como a6 na Figura 18.20(b) dependem de todos os pesos
da camada de entrada, de modo que as atualizações desses pesos dependerão de erros tanto em a5
como em a6. Felizmente, essa dependência é muito simples, no caso de qualquer função de perda que
seja aditiva entre os componentes do vetor de erro y − hw(x). Pela perda L2, temos, para qualquer
peso w,
onde o índice k varia no intervalo dos nós na camada de saída. Cada termo, no somatório final, é
apenas o gradiente de perda para a k-ésima saída, calculado como se outras saídas não existissem.
Assim, podemos decompor um problema de aprendizagem com m-saídas em m problemas de
aprendizagem, desde que não esqueçamos de somar as contribuições do gradiente de cada um deles
ao atualizar os pesos.
A principal complicação vem da adição de camadas ocultas da rede. Enquanto que o erro y − hw
na camada de saída é claro, o erro nas camadas ocultas parece misterioso porque os dados de
treinamento não dizem que valor os nós ocultos devem ter. Felizmente, verifica-se que podemos
retropropagar o erro da camada de saída para as camadas ocultas. O processo de retropropagação
emerge diretamente de uma derivação do gradiente de erro geral. Primeiro, descreveremos o
processo com uma justificação intuitiva; depois, mostraremos a derivação.
Na camada de saída, a regra de atualização do peso é idêntica à Equação 18.8. Temos unidades de
saída múltiplas; assim, façamos Errk o componente do erro k-ésimo do vetor de erro y − hw.
Também é convenientedefinir um erro modificado , para que a regra de atualização de
peso torne-se
Para atualizar as conexões entre as unidades de entrada e as unidades ocultas, precisamos definir
uma quantidade análoga ao termo de erro dos nós de saída. Aqui fazemos a retropropagação do erro.
A ideia é que o nó oculto j seja “responsável” por uma fração do erro ∆k em cada um dos nós de
saída aos quais ele se conecta. Assim, os valores ∆k são divididos de acordo com a força de ligação
entre o nó oculto e o nó de saída e são retropropagados para fornecer os valores ∆j para a camada
oculta. A regra para a propagação dos valores ∆ é a seguinte:
Agora a regra de atualização de peso para os pesos entre as entradas e a camada oculta é
essencialmente idêntica à regra de atualização para a camada de saída:
O processo de retropropagação pode ser resumido da seguinte forma:
• Calcule valores ∆ para as unidades de saída usando o erro observado.
• A partir da camada de saída, repita o seguinte para cada camada da rede até que a primeira
camada oculta seja alcançada:
– Propague os valores ∆ de volta à camada anterior.
– Atualize os pesos entre as duas camadas.
O algoritmo detalhado é mostrado na Figura 18.24.
Figura 18.24 Algoritmo de retropropagação para o aprendizagem em redes multicamadas.
Para quem gosta de matemática, vamos agora derivar as equações de retropropagação dos
primeiros princípios. A derivação é bastante semelhante ao cálculo de gradiente de regressão
logística (que conduziu à Equação 18.8), exceto que temos de usar a regra de cadeia mais de uma
vez.
A partir da Equação 18.10, calculamos apenas o gradiente de Perdak = (yk − ak)2 na k-ésima
saída. O gradiente dessa perda com relação aos pesos de conexão com a camada oculta até a camada
de saída será zero, exceto para os pesos wj,k que se unem à k-ésima unidade de saída.
Para aqueles pesos, temos
com ∆k definido como antes. Para obter o gradiente com relação aos pesos wi,j em conexão com a
camada de entrada até aj camada oculta temos que expandir as ativações aj e reaplicar a regra da
cadeia. Vamos mostrar a derivação em pormenores porque é interessante ver como o operador de
derivada retropropaga através da rede:
onde ∆j foi definido como antes. Assim, obtemos as regras de atualização obtidas anteriormente a
partir de considerações intuitivas. Também fica claro que o processo pode ser continuado para redes
com mais de uma camada oculta, o que justifica o algoritmo geral dado na Figura 18.24.
Passando por toda essa matemática, vamos ver o desempenho de uma rede de camada oculta única
no problema do restaurante. Primeiro, precisamos determinar a estrutura da rede. Temos 10 atributos
que descrevem cada exemplo, então precisaremos de 10 unidades de entrada. Deveríamos ter uma
camada oculta ou duas? Quantos nós em cada camada? Devem estar totalmente conectados? Não há
nenhuma boa teoria que nos forneça a resposta (veja a próxima seção). Como sempre, podemos usar
a validação cruzada: tentar várias estruturas diferentes e ver qual funciona melhor. Acontece que uma
rede com uma camada oculta contendo quatro nós parece razoável para esse problema. Na Figura
18.25, apresentamos duas curvas. A primeira é uma curva de treinamento mostrando o erro
quadrático médio, dado um conjunto de treinamento de 100 exemplos de restaurante durante o
processo de atualização de peso. Isso demonstra que a rede, de fato, converge para um ajuste perfeito
aos dados de treinamento. A segunda curva é a curva de aprendizagem padrão para os dados do
restaurante. A rede neural aprende bem, embora não tão rápido quanto a aprendizagem em árvore de
decisão, o que não é surpreendente, em primeiro lugar porque os dados foram gerados a partir de
uma árvore de decisão simples.
Figura 18.25 (a) A curva de treinamento mostra a redução gradual do erro à medida que os pesos são
modificados ao longo de diversas épocas, para um conjunto de exemplos determinados do domínio
do restaurante. (b) Curvas de aprendizagem comparativas mostrando que a aprendizagem em árvore
de decisão é um pouco melhor para o problema do restaurante do que a retropropagação em uma rede
de múltiplas camadas.
Certamente as redes neurais são capazes de tarefas muito mais complexas de aprendizagem,
embora deva ser dito que é necessário certa quantidade de esforço para obter a estrutura da rede
correta e alcançar a convergência para algo próximo ao ótimo global no espaço de peso. Há
literalmente dezenas de milhares de aplicações publicadas de redes neurais. A Seção 18.11.1
apresentará um aplicativo, com mais profundidade.
18.7.5 Aprendendo as estruturas de redes neurais
Até agora, consideramos o problema de pesos de aprendizagem, dada uma estrutura de rede fixa;
assim como com redes bayesianas, também precisamos entender como encontrar a melhor estrutura
de rede. Se escolhermos uma rede muito grande, ela será capaz de memorizar todos os exemplos,
formando uma tabela grande de pesquisa, mas não generalizará bem necessariamente as entradas que
nunca foram vistas antes.10 Em outras palavras, como todos os modelos estatísticos, as redes neurais
estão sujeitas a superadaptações quando existem muitos parâmetros no modelo. Vimos isso na
Figura 18.1, onde os modelos de muitos parâmetros em (b) e (c) ajustam todos os dados, mas podem
não generalizar, assim como os modelos de poucos parâmetros em (a) e (d).
Se nos ativermos a redes totalmente conectadas, as únicas escolhas a serem feitas dizem respeito
ao número de camadas ocultas e seus tamanhos. A abordagem usual é tentar várias mantendo as
melhores. Será necessária a técnica de validação cruzada se quisermos evitar espreitar o conjunto
de teste. Ou seja, escolhemos a arquitetura de rede que oferece a maior previsão de precisão nos
conjuntos de validação.
Se quisermos considerar redes que não estejam totalmente conectadas, precisamos encontrar algum
método de busca eficaz através do espaço muito grande de topologias possíveis de conexão. O
algoritmo de dano cerebral ótimo começa com uma rede totalmente conectada e remove as
conexões dela. Depois que a rede é instruída pela primeira vez, uma abordagem teórica de
informação identifica uma seleção ideal de conexões que podem ser descartadas. A rede é, então,
reciclada, e se seu desempenho não diminuir, o processo será repetido. Além de remover as
conexões, também é possível remover as unidades que não estão contribuindo muito para o resultado.
Vários algoritmos têm sido propostos para produzir uma rede maior de uma menor. Um deles, o
algoritmo de ladrilhamento, assemelha-se à aprendizagem com lista de decisão. A ideia é iniciar com
uma unidade única que faz o melhor para produzir a saída correta para tantos exemplos de
treinamento quanto possível. As unidades subsequentes são adicionadas para cuidar dos exemplos
que a primeira unidade obteve errado. O algoritmo adiciona apenas tantas unidades quantas forem
necessárias para abranger todos os exemplos.
18.8 MODELOS NÃO PARAMÉTRICOS
A regressão linear e as redes neurais utilizam dados de treinamento para estimar um conjunto fixo
de parâmetros w. Isso define a nossa hipótese hw(x), e nesse ponto podemos jogar fora os dados de
treinamento porque todos eles estão resumidos por w. Um modelo de aprendizagem que resume os
dados com um conjunto de parâmetros de tamanho fixo (independentemente do número de exemplos
de treinamento) é chamado de modelo paramétrico.
Não importa a quantidade de dados que você jogue em um modelo paramétrico, não muda a ideia
sobre quantos parâmetros são necessários. Quando os conjuntos de dados são pequenos, faz sentido
ter uma restrição forte nas hipóteses permitidas, para evitar a superadaptação. Mas, quando há
milhares ou milhões ou bilhões de exemplos para aprender, parece que uma ideia melhor é permitir
que os dados falem por si em vez de forçá-los a falar através de um vetor de parâmetros minúsculos.
Se os dados informam que a resposta correta é uma função muito sinuosa, não devemos nos restringir
às funções lineares ou às ligeiramente sinuosas.Um modelo paramétrico é aquele que não pode ser caracterizado por um conjunto limitado de
parâmetros. Por exemplo, suponha que cada hipótese que geramos simplesmente mantenha dentro de
si todos os exemplos de treinamento e os use para prever o próximo exemplo. Tal grupo de hipótese
será não paramétrico, pois o número efetivo de parâmetros é ilimitado — cresce com o número de
exemplos. Essa abordagem é chamada de aprendizagem baseada em exemplos ou aprendizagem
baseada em memória. O método mais simples de aprendizagem baseada em exemplo é a pesquisa
em tabelas: tome todos os exemplos de treinamento, coloque-os em uma tabela e, depois, quando
h(x) for solicitado, veja se x está na tabela; se estiver, devolva o y correspondente. O problema com
esse método é que ele não generaliza bem: quando x não está na tabela, tudo o que faz é retornar

Mais conteúdos dessa disciplina