Você está na página 1de 30

Voc

êé
Ainda da tempo de cap
o
aprender tudo! az!
r e d
Eu c ocê!
it Vo

em v Revisão conse
gu
e!
t a ! Pré-Prova 1
e s i s
o d
N ã

é
Introdução à
n ã o
!
ar Inteligência
o c ê s a
V f
uma
t e !
l Artificial 1
i g e n
i n t e
é
V ocê
Não se auto sabote, você chegou
até aqui porque é parte do curso,
o seu lugar é aqui!
Com carinho,
Jaque
1) Descreva os três tipos de busca cega e como funcionam:
Resposta:
As estratégias de busca se dividem em dois ramos: percurso em largura e percurso em profundidade. Para
ajudar a entender melhor os dois percursos vamos observar uma árvore, pense em árvore de família:

Pronto! Agora para entendermos percurso em largura observe a próxima imagem, ele analisa tudo da mesma
linha para depois ir para a próxima.

A próxima imagem relata a busca em profundidade, observe que em vez da busca seguir linha por linha ela
segue por “coluna”, ou seja, ela vai até o nível mais baixo daquela bolinha até não ter mais para poder seguir para a
próxima “coluna”:

A direção da busca pode ser feita de três maneiras diferentes:

 Do estado início para o objetivo;


 Do objetivo para o estado inicial;
 Os dois ao mesmo tempo.
Como já falado anteriormente há dois tipos de busca que pode ser realizada: a busca cega e a busca heurística. Iremos
falar inicialmente sobre a busca cega que dá-se por meio de 5 alternativas distintas:
 Busca em largura: busca o próximo (pode ser esquerda ou direita) de forma horizontal. É uma estratégia em
que o nó raiz é expandido primeiro, em seguida todos os sucessores do nó raiz são expandidos, depois os
sucessores desses nós e assim por diante. Os requisitos de memória são um problema maior para a busca em
largura do que o tempo de execução, e também os problemas de busca de complexidade exponencial não
podem ser resolvidos por métodos sem informação para qualquer instância (exceto as menores). Solução
completa e ótima.
 Busca com custo uniforme: utiliza o mesmo procedimento da busca em largura, porém procura a menor
distância próxima. Expande o nó “x” com o custo de caminho (g(x)) mais baixo, ou seja, busca a menor distância
próxima.
 Busca em profundidade: realiza a busca de forma vertical, sempre continuando até o último “filho” do ramo da
árvore que se está procurando. Expande o nó mais profundo na borda atual da árvore de busca, a busca
prossegue imediatamente até o nível mais profundo da árvores de busca, onde os nós não tem sucessores; a
medida que esses nós são expandidos eles são retirados da borta e então a busca retorna ao nó seguinte mais
profundo que ainda tem sucessores inexplorados. Solução não completa e não ótima.
 Busca com profundidade limitada: executa a busca em profundidade até certo “filho” da árvore, por exemplo:
é realizado a busca até o filho letra C (considere uma árvore nomeada alfabeticamente).
 Busca com aprofundamento iterativo: combina busca em largura e busca em profundidade. Expande um nó
até certa profundidade e analisa em profundidade o nível aberto, caso não encontre aprofunda-se mais
incrementando o limite de abertura do grafo.

2) Explique a busca heurística e faça a execução da busca gulosa, busca A*


e busca por custo uniforme:

Resposta:
Busca heurística nada mais é que uma busca informada, ou seja, ela utiliza conhecimento de um problema específico além da definição
do problema em si. Ela pode encontrar soluções de forma mais eficiente do que uma estratégia de busca sem informação. Iremos falar dos três
de busca heurística e como elas funcionam.

Infelizmente esse resumo será um pouco mais de 1 folha pois acho impossível explicar com detalhes cada busca usando apenas uma
folha, o objetivo do resumo é que fique bem claro dúvidas que talvez tenham surgido ao longo da aula, eu preciso ter certeza que todos
entendam e por isso vou precisar usar mais de uma folha (perdoa nóis e não desiste de mim)

Busca Gulosa

Esta busca tenta expandir o nó que está mais próximo do objetivo, com o fundamento de que isso pode conduzir a uma solução rapidamente.
Para entendermos melhor vamos ver como isso funciona para problemas de roteamento na Romênia, nosso objetivo é sair de Arad e ir para
Buscareste, temos as seguintes distâncias:
Se usarmos a heurística de distância em linha reta (DLR) precisaremos necessáriamente observar as distâncias apresentadas na figura acima. Por
exemplo h(dlr) (Em (Arad)) = 366. Observe que os valores de hdlr não não podem ser calculados da descrição do problema em si. Além disso, é
preciso certa experiência para saber que hdlr está correlacionado com as distâncias reais da estrada, e portanto, é uma heurística útil.
Para resolução desse problema será necessário expandir o nó mais perto de Arad (no caso Sibiu, porque é mais porque é mais perto de
Bucareste do que Zerind ou Timisoara).
O próximo nó a ser expandido será Fagaras porque é o mais próximo. Fagaras, por sua vez, vai gerar Bucareste, que é o objetivo.
Para esse problema particular, a busca gulosa de melhor escolha utilizando hdlr encontra uma solução, sem nunca expandir um nó que não
estiver no caminho da solução; portanto, seu custo de busca é mínimo.
Não é ótimo, no entanto: o caminho via Sibiu e Fagaras para Bucareste é 32 quilômetros mais longo que o caminho através de Rimnicu
Vilcea e Pitesti. Isso mostra por que o algoritmo é chamado de “guloso”; a cada passo ele tenta chegar o mais próximo do objetivo que puder.

Para visualizarmos melhor o exercício não basta escrever, é necessário demonstrar conforme figura a seguir:

Etapas de uma busca gulosa de melhor escolha em árvore para Bucareste com a heurística de distância em linha reta hdlr. Os nós são rotulados
com os seus valores h.
Uma dica para quem está tendo dificuldade de entender: pegue a imagem e vai lendo junto com a descrição da resolução, pedaço por
pedaço e depois tente fazer sozinho (tente primeiro descrever e depois desenhar por meio de árvore). Assim fica mais fácil de sanar as
dúvidas ou então identificar com precisão qual é a parte que está com dúvida.

Busca A*

A forma de solução mais amplamente conhecida da busca de melhor escolha é chamada de busca A* (pronuncia-se “busca A estrela”).
Ela avalia os nós através da combinação de g(n), o custo para alcançar o nó, e h(n), o custo para ir do nó ao objetivo:
f(n) = g(n) + h(n).

Uma vez que g(n) dá o custo do caminho desde o nó inicial até o nó n e h(n) é o custo estimado do caminho de menor custo de n até o
objetivo, teremos f(n) = custo estimado da solução de menor custo através de n.

Assim, se estamos tentando encontrar a solução de menor custo, algo razoável para tentar em primeiro lugar, seria o nó com o menor
valor de g(n) + h(n).

Acontece que essa estratégia é mais do que apenas razoável: desde que a função heurística h(n) satisfaça certas condições, a busca A*
será completa e ótima. O algoritmo é idêntico à busca de custo uniforme, exceto que A* usa usa g + h em vez de g.

Agora vamos utilizar o mesmo exemplo da Busca Gulosa em que temos o roteamento na Romênia, nosso objetivo é sair de Arad e ir para
Buscareste. Ainda utilizaremos as distâncias contidas nessa tabela:
Observe na imagem abaixo que, particularmente, Bucareste aparece pela primeira vez na borda na etapa (e), mas não é selecionada para expansão
porque seu f-custo (450) é maior que o de Pitesti (417). Ou seja, pode haver uma solução através de Pitesti, cujo custo seja tão baixo quanto 417,
de modo que o algoritmo nao vai se contentar com uma solução que custe 450. A imagem abaixo irá demonstrar as etapas em uma busca A* para
Bucareste, os nós são rotulados com f = g + h. Os valores de h são as distâncias em linha reta para Bucareste tomadas a partir da nossa tabela de
distâncias.
Busca com Custo Uniforme

Para melhor entendimento por favor assista o vídeo que está no Aprender 3 ou no drive da turma sobre essa busca! O vídeo tem apenas 6 min
3) Algoritmo A*: Use a função de heurística h1 ou h2 para resolver o
problema de oito números, mostre a função de f(n) = g(n) + h(n) em cada
etapa
2 8 3
1 6 4
7 5

Opção Final:

1 2 3
8 4
7 6 5

Resposta:

A* - completa / ótima

É garantido que o A* sempre encontra um caminho entre origem e destino, caso haja um, e caso haja
mais que isso, ele sempre encontra o caminho com menor custo. A* utiliza grafos para buscar novos
possíveis nós a cada nó visitado.

A avaliação de cada nó percorrido se dá pelo custo de caminho desde a raíz. Este algoritmo garante
sempre encontrar a melhor solução.

f(n) = g(n) + h(n)

- g(n) = distância de n ao nó inicial e

- h(n) = função heurística, depende do problema, por ex no problema de viajar na Romênia, h(n) era a
distância em linha reta de n ao objetivo.

A* expande o nó de menor valor de f:


- Olha o futuro sem esquecer do passado!
- Se h é admissível, f(n) nunca irá superestimar o custo real da melhor solução através de n
Jogo dos 8 números:
hdd: distância direta entre dois pontos - no mapa das cidades, seria a "distância voando de avião" de
uma cidade a outra

Em um jogo de Tabuleiro (ex. aquele dos números desordenados) - existe um Tabuleiro com Estado
Inicial (formação aleatória) e um Tabuleiro representando o Estado Final (formação ordenada, onde
queremos chegar).

Analisando o tabuleiro, procuramos descobrir se os números estão na posição desejada, a partir daí
podemos tirar dois fatores:

h1 - o número de elementos "fora do lugar" (h1 = 3)

h2 - a soma das distâncias de cada número à posição final

(h2 = 1 + 1 + 0 + 0 + 0 + 1 + 0 + 2 = 5)

Podemos então fazer uma "árvore de tabuleiros" mostrando o caminho de movimentação dos números
para atingir-se o Estado Final.

Os critérios para caminhar nesta árvore podem ser: escolher o menor h1 ou escolher o menor h2.
Outra maneira de explicar é a seguinte:
4) Explique o algoritmo Poda Alfa-Beta, por que não foi necessário explorar
os ramos com X na figura?

Resposta:
O algoritmo Poda Alfa-Beta é uma técnica utilizada em problemas de min/max em que ela é aplicada a
uma árvore minmax padrão, ela retorna o mesmo movimento que minimax retornaria, mas poda as
ramificação que não terão influência possível sobre a decisão final. Ou seja, a busca alfa-beta atualiza
os valores de α e β à medida que prossegue e poda as ramificações restantes em um nó (isto é, encerra
a chamada recursiva) tão logo se sabe que o valor do nó corrente é pior que o valor corrente de α ou β
para MAX ou MIN, respectivamente.
E não foi necessário explorar os primeiros 2 x (triangulo do meio) porque era necessário achar um valor
igual ou menor que 2, e no primeiro triangulo já achou o valor igual a 2.
Não foi necessário explorar o último x pois era necessárioa char um valor igual ou menor que 2, no
primeiro triângulo o valor era maior que 2 então se seguiu para o próximo triangulo que é o triangulo
com valor igual a 2, logo a busca podia parar.
5) Explique como definir a função de avaliação para o Jogo de Velha nos casos
de Min/Max.

Resposta:
Conseguimos identificar qual caminho seguir para ganhar o jogo de uma maneira que o inimigo não consiga
interferir.

Conforme demonstrado na imagem acima, o resultado (Terminal) pode ser -1 (Perder), 0 (Empatar) ou 1
(Ganhar). Basta a inteligência artificial seguir caminhos que o levam para um +1 que terá uma vitória
certeira.
Para isso, precisamos de alguma maneira informar o nosso agente qual o caminho mais seguro. E aí
entra o papel do Algoritmo Minimax.

O princípio do Minimax é descer os ‘nós’ da árvore até chegar no término do jogo, identificando se o jogador
perdeu, empatou ou ganhou.

Após isso, o algoritmo sobe um ‘nó’ e identifica de quem é o turno (jogador ou oponente). Caso for o turno
do oponente, o algoritmo guarda o menor (Min) resultado de suas respectivas ramificações.

Caso for o turno do jogador, o algoritmo guarda o maior (Max) resultado de suas respectivas
ramificações.
Este processo se repete até chegar no primeiro ‘nó’ da Árvore.
Isso significa que, caso a decisão do jogador ganhar ou perder esteja nas mãos do oponente,
o Minimax atribui como não sendo seguro entrar por este caminho, indicando somente como ‘1’ os
caminhos em que o jogador possa vencer a partida mesmo que o oponente jogue da melhor forma
possível.
6) Explique o funcionamento de redes neurais com entradas [1,1] e pesos
iniciais [0.0]:

7) Explique os conceitos da função de ativação, as vantagens de utilizar a


logística Sigmoidal, e o algoritmo de retropropagação (backpropagation):
8) Explique quais são as funções do algoritmo de Back Propagation:
9) Defina o que é uma rede neural. Descreva e exemplifique seus elementos
fundamentais:
a. A função das unidades de processamento (e os três elementos
básicos
b. A topologia da rede (feedfoward,recorrentes, construtivas)
c. A estratégia ou algoritmo de aprendizagem (supervisionada, por
reforço, não supervisionada)
Resposta:

1. Defina o que é uma Rede Neural.


Redes neurais são sistemas computacionais baseados numa aproximação à computação baseada em
ligações. Nós simples são interligados para formar uma rede de nós - daí o termo "rede neural".

A inspiração original para esta técnica advém do exame das estruturas paralelas do cérebro, em particular
do exame de neurônios e que as redes neurais tentam reter algumas de suas propriedades. Ou seja, são
sistemas paralelos distribuídos compostos por unidades de processamento simples, interligadas entre si e com
o ambiente por um número de conexões.

As conexões estão associadas a pesos que armazenam conhecimento da rede. Uma rede neural pode
ser interpretada como um esquema de processamento capaz de armazenar conhecimento baseado em
aprendizagem (experiência) e disponibilizar este conhecimento.

Além disso, redes neurais possuem a habilidade de lidar com problemas complexos, imprecisos e ruidosos.

2. Quais os elementos fundamentais de uma Rede Neural? Ilustre e exemplifique.


Os elementos fundamentais de uma rede neural são:

2.1 - A função das unidades de processamento

2.2 - A topologia da rede

2.3 - A estratégia ou algoritmo de aprendizagem

A função das unidades de processamento é caracterizada por três elementos básicos:

2.1.1 – Um conjunto de conexões de entradas

2.1.2 – Um estado de ativação

2.1.3 – Um valor de saída (resposta)


Desta forma, o neurônio se comporta da seguinte maneira: Ocorre um estímulo de entrada. Ocorre uma
computação do estado de ativação em função do estímulo. Ocorre uma resposta em função da ativação. A definição
da unidade de processamento caracteriza-se por: Regra de propagação (estado de ativação) e Função de ativação
(resposta do neurônio). As principais funções de ativação são:

Função limiar

Função sinal

Função rampa

Função linear

Funções sigmoids (logística e tangente hiperbólica)


Além disso, existem as seguintes topologias de rede:

2.2.1 – FeedForward

2.2.2 – Recorrentes

2.2.3 – Construtivas

E as seguintes estratégias de aprendizagem são utilizadas:

2.3.1 – Supervisionada – “Um professor diz quanto a resposta fornecida pelo sistema
se aproxima da resposta desejada. Exemplo: nota de um aluno numa prova.

2.3.2 – Por reforço – um “crítico” diz apenas se a resposta fornecida está certa ou
errada. Exemplo: punição / recompensa no treinamento de animais

2.3.3 – Não-Supervisionada – o sistema tenta se auto-organizar baseado nas similaridades entre os


exemplos apresentados. Exemplo: desenvolvimento das células simples do córtex visual estriado.
10) Explique o que é o Back Propagation nas redes neurais.
Resposta:
Temos vários tipos de respostas, aqui seguem três exemplos corretos:
1) 1ª Maneira

Quando nós estamos com redes neurais, nós usamos entrada e saída e saída desejada e assim calculou erro,
e usa esse peso para corrigir saída, para fazer porta de and, se peso não é bem treinado, ele não vai como
and, mas se peso for bem ajustado vai ser feito a porta and.
As redes neurais de peception neurais só tem 1 entrada e 1 saída e logo não tem problemas. Só que quando
nós temos duas camadas: vantagem aumentou o grau de não linear e com isso aumentou o grau de
dificuldade, porque com duas camadas não sabemos qual a saída desejada do segundo e não da pra calcular
peso final e por isso inventou um algoritmo pra propagar os erros para poder modificar os pesos. Sinais está
passando para frente, porque você usa entrada para calcular peso, e assim por diante fazendo com que o
sinal passe para frente
Segunda fase: quando você consegue calcular o erro, você possui um erro e ele é muito grande, você pode
modificar os pesos pro erro baixar(nosso objetivo), vai usar o erro para modificar o peso, agora não tem
saída desejada e não tem como calcular o segundo "ramo", aí como você já tem o resultado do primeiro
você relaciona com esse que você não tem a saída desejada, e assim você modifica os pesos. Erros estão
propagando para trás, para modificar pesos. Sinais modificam peso pra frente, e aí você modifica mais uma
vez pra trás de pesos, e faz varias vezes até parar quando o erro tiver muito pequeno aí para.
2) 2ª Maneira
Temos vários neurônios e a dificuldade é fazer o treinamento, realizamos as fórmulas do quadro para
encontrar as entradas. Assim consegue fazer treinamento supervisionado e assim consegue mudar os pesos,
exatamente por conta da fórmula que ele apontou. Durante o treinamento com o algoritmo
backpropagation, a rede opera em uma sequência de dois passos. Primeiro, um padrão é apresentado à
camada de entrada da rede. A atividade resultante flui através da rede, camada por camada, até que a
resposta seja produzida pela camada de saída. No segundo passo, a saída obtida é comparada à saída
desejada para esse padrão particular. Se esta não estiver correta, o erro é calculado. O erro é propagado a
partir da camada de saída até a camada de entrada, e os pesos das conexões das unidades das camadas
internas vão sendo modificados conforme o erro é retropropagado.

3) 3ª Maneira

O termo backpropagation se refere ao tipo de treinamento da rede neural. Neste caso, o treinamento é do
tipo supervisionado, com o erro sendo calculado e minimizado a cada interação por meio de modificações
nos pesos sinápticos. Para que isso ocorra, precisamos de uma função ativação diferençável. O método
utilizado na minimização do erro é conhecido por descida do gradiente. Este método aplica o operador
gradiente na última camada da rede neural, formando um vetor de derivadas parciais. A partir deste vetor,
os pesos são atualizados em um processo conhecido por backward pass.
11) Explique o que é o Self Organizing Map (SOM)
Resposta:

Self Organizing Map (SOM) é uma Rede Neural de aprendizado não supervisionado. SOM é muito utilizada quando se
tem datasets com muitos atributos porque é possível que a saída produzida tenha um número muito menor de
dimensões, geralmente duas. Essa saída, chamada de map (ou feature map), é uma representação discreta dos dados
de entrada.

Um ponto interessante sobre a SOM é que seu sistema é baseado em aprendizado competitivo. Os neurônios (ou nós)
competem para decidir quem responderá (será ativado) com um conjunto de entradas e esse neurônio será chamado
de winner. SOM pode ser implementada tendo conexões com inibições laterais, ou seja, uma capacidade do neurônio
winner de reduzir a atividade dos seus vizinhos dando um feedback negativo a eles. Outro conceito que a SOM trabalha
é o chamado mapa topográfico. A informação gerada de um input é representada por alguns neurônios vizinhos e
contam com uma interação com conexões curtas. Um neurônio do output de um mapa topográfico é uma
característica dos dados de entrada.

Como a SOM funciona?


Os pontos no espaço dos dados de entrada têm pontos correspondentes no espaço de saída. Na Kohonen Networks,
um tipo de SOM, há uma única camada computacional com duas dimensões e os pontos da entrada são totalmente
conectados com os neurônios nessa camada.

No começo do processo de organização os pesos são inicializados com valores aleatórios. Após esse procedimento,
para a competição, todos os neurônios calculam a função de discriminação, apresentada abaixo, sobre as
características do dataset. O neurônio de menor valor é considerado o campeão (winner).
D = dimensão do espaço de entrada; x = as entradas; w = os pesos
Essa função mostra qual neurônio tem mais similaridade com o vetor de entradas.
Quando um neurônio é ativado seus vizinhos ficarão mais excitados comparados com neurônios que estão mais
distantes. Esse processo é chamado de vizinhança topológica e é calculada como mostrado abaixo:

Onde S é a distância lateral entre os neurônios, I(x) é o índice do neurônio winner e o σ é o número de vizinhos que
decresce com o tempo. A vizinhança topográfica irá diminuir, tendendo a zero quando um neurônio estiver muito
distante do winner.
Com t sendo a quantidade de épocas e η(t) o learning rate no tempo, os pesos são atualizados dessa forma:

Como pode-se ver, os pesos são movidos de acordo com a vizinhança topológica, fazendo com que os neurônios mais
distantes tenham atualizações menores. Isso produz um efeito como se o neurônio winner "puxasse" os outros
neurônios.

O algoritmo da SOM termina quando a feature map para de mudar.

12) Classifique os dados da tabela abaixo, utilizando a regra delta pela rede
Perceptron da figura.

Sendo θ=0,5 (Recomendo o uso do EXCEL, ou pela linguagem Python), em que


y=1 se s>; y=-1, se s.
Resposta:
O treinamento da rede neural foi feito com taxa de aprendizagem=0.5 e 10 épocas, a função de ativação utilizada
foi:
𝑓(𝑥) = 1 se x >= 0
𝑓(𝑥) = -1 se x < 0
A estrutura da rede está ilustrada abaixo e os pesos finais encontrados pelo algoritmo:

Ao final do treinamento a rede foi capaz de classificar corretamente todos os exemplos da tabela.

Taxa de aprendizado: 0.5


Fator de correção: F = c*X*E, onde c = 0.5, X é a entrada, E é o erro.

Aplicar função de transferência, quando θ = 0.5


13) Utilizando regra competitiva pela rede SOM, na figura e com os dados da
tabela.
A equação Euclidean distância ||X-Wi|| = SQRT (X-Wi)2, e maneira de
modificação de peso: ΔWt = c (Xt-1 – Wt-1), c = 0,5 é taxa de aprendizagem
(Recomendo uso EXCEL ou pelo Python).

Resposta:

Foram utilizadas 10 épocas de treinamento e taxa de aprendizado = 0.5, o método para


definição do neurônio vencedor foi o menor valor de a distância euclidiana.

A estrutura da rede utilizada foi similar à Figura 2 do enunciado e os pesos finais encontrados
após o treinamento foram:

Wa1 = 1, Wa2 = 1, Wb1 = 7, Wb2 = 6

Ao final todos os exemplos da tabela 1 foram classificados corretamente.

Você também pode gostar