Gravatar

Pedro Sant'Ana

Fez estágio na Infosimples, estuda Engenharia de Computação na Universidade de São Paulo. Gosta muito de música, jogos e programação. Pretente aprofundar os estudos em Inteligência Artificial.

Leia os últimos artigos publicados por Pedro Sant'Ana.



Inteligência Artificial para Jogo da Velha
Gravatar publicou em

Ciência de Dados Programação

O uso de aprendizado por reforço para programar a inteligência artificial de jogos tem como destaque a criação nos anos 90 de um programa de conseguia jogar gamão a um nível profissional, por Gary Tesauro da IBM. A primeira tentativa foi construir um modelo dos diversos estados do jogo a partir de alguns exemplos e generalizar com aprendizado supervisionado. Além de ter sido um trabalho tedioso enumerar centenas de estados para depois poder generalizar, a performance do programa não foi satisfatória.

A segunda abordagem foi utilizar aprendizado por reforço e fazer duas versões do programa jogarem entre si. Ao final de cada partida, atribuía-se uma pontuação positiva para o vencedor e uma negativa para o perdedor. Após 200.000 jogos, o programa conseguia jogar como os melhores jogadores do mundo, sem precisar da experiência de jogadores profissionais ou descrever todos os mais de 1 trilhão de estados possíveis em uma partida.      

Com o objetivo de recriar o experimento para um jogo mais simples, propôs-se o desenvolvimento de um agente inteligente para o Jogo da Velha (tic-tac-toe em inglês), sem precisar escrever um algoritmo com as melhores estratégias ou enumerar todos os possíveis estados.

Continue a ler...










Segmentação de Strings com Aprendizado de Máquina
Gravatar publicou em

Ciência de Dados Programação

O uso de inteligência artificial na linguagem vêm apresentando interessantes resultados, principalmente na área de tradução. Outros exemplos incluem sugestões de correção em erros ortográficos e até mesmo o reconhecimento de fala.

Para testar um algoritmo simples que trabalha com elementos de uma linguagem, foi desenvolvido um programa com o objetivo de conseguir separar as palavras de uma string que não contenha espaços. Por exemplo, ao receber "thisishowitshouldwork", o programa deveria retornar "this is how it should work". 

O problema consiste em determinar o que deve ser considerado uma palavra, visto que é impossível listar todas as palavras conhecidas em Inglês e não há como construir um modelo eficiente que consiga generalizar sua estrutura.

A abordagem foi utilizar aprendizado supervisionado e uma grande quantidade de texto como base de treinamento para que o programa conseguisse passar a identificar as diversas palavras que compõem a língua inglesa. A vantagem de utilizar textos ao invés de uma simples lista contendo todas as palavras conhecidas é a possibilidade de verificar a frequência com que cada uma aparece. Conhecendo a probabilidade de aparição de cada palavra, pode-se calcular a mais provável divisão da string recebida.

Portanto, é possível determinar que a probabilidade de uma certa divisão da string é função das probabilidades de cada palavra obtida na divisão. Para aumentar a qualidade dos resultados, poderia ser considerada a probabilidade de uma palavra ocorrer após outra certa palavra, mas devido à relativa pequena quantidade de texto utilizado na etapa de treinamento, foi considerada apenas a probabilidade individual de cada palavra.

Outra questão a ser considerada é como lidar com palavras que nunca apareceram na base de treinamento. É impossível garantir, por maior que seja seu texto, que ele contém todas as palavras existentes na língua. Foi utilizada Suavização de Laplace para o cálculo das probabilidades, de modo a evitar que palavras não encontradas tenham probabilidade zero. Por fim, foi realizada uma normalização para possibilitar a comparação entre divisões da string de diferentes números de palavras.

Continue a ler...










Introdução a Aprendizado de Máquina
Gravatar publicou em

Ciência de Dados

De maio a agosto de 2014, estagiei na Infosimples e tive a oportunidade de estudar o curso de Introdução à Inteligência Artificial oferecido pelos professores Sebastian Thrun e Peter Norvig, disponível na Udacity. Abrangendo uma grande variedade de assuntos, suas aulas sobre aprendizado de máquina são sem dúvida as mais empolgantes. Esse artigo de três partes busca repassar alguns dos conhecimentos adquiridos e demonstrar algumas aplicações de técnicas de aprendizado de máquina apresentadas no curso.

Inteligência Artificial e Aprendizado de Máquina

Presentes atualmente em diversos campos de atuação, programas de inteligência artificial vêm apresentando avanços surpreendentes nos últimos anos e são cada vez mais parte do dia-a-dia. Seja na medicina, robótica, internet ou até mesmo na área de finanças, podem ser identificados diversos exemplos de programas que utilizam inteligência artificial para realizar o trabalho adequadamente. Além de grandes marcos como o computador Deep Blue da IBM, que em 1997 derrotou o então campeão mundial de xadrez Garry Kasparov, até o recém anunciado carro que dispensa motorista pelo Google, há milhares de outras aplicações para técnicas dessa área.

Um agente inteligente, como podem ser chamados esses programas, é capaz de interagir com o ambiente e, a partir das informações recebidas, determinar qual ação deve ser realizada a seguir. Construir um bom programa de inteligência artificial está diretamente relacionado a encontrar a melhor função que mapeie os diversos dados de entrada com os de saída.

Na grande maioria dos casos, o agente trabalha com espaços em que não há uma maneira eficiente de se programar manualmente uma função que lide com todos os casos possíveis, seja porque o ambiente em que atua não é discreto, por possuir uma certa aleatoriedade ou por não ser possível observá-lo completamente.   

Diante de problemas como esse, a utilização de aprendizado de máquina em aplicações de inteligência artificial muitas vezes destaca-se pela eficiência nos resultados e por permitir que se cubra um grande número de estados sem ser necessário programar individualmente cada um deles. Essas aplicações passam por um período de "aprendizado", em que recebem as informações necessárias para determinar como devem se comportar em situações futuras.

As aplicações de aprendizado de máquina podem ser divididas em três categorias: 

Aprendizado supervisionado é utilizado quando se conhece o modelo que o programa deve seguir e a partir dele generaliza-se de modo a conseguir aplicá-lo a qualquer entrada. Um exemplo é a classificação de e-mails como spam: a partir de alguns spams como referência, determina-se uma função que procura por certas características em um e-mail qualquer e verifica a probabilidade de se tratar de um spam.

Já em aprendizado não supervisionado, não há conhecimento adequado de como os dados se comportam, e são utilizados algoritmos que tentam organizá-los de modo a classificá-los. Procura-se um certo padrão que consiga descrever um comportamento aproximado dos dados recebidos.

Por fim, em aprendizado por reforço realiza-se um feedback sobre os resultados obtidos, atribuindo pontuações positivas a resultados considerados corretos e penalizando os incorretos. Diante dessa pontuação, o agente consegue ajustar seu comportamento de modo a buscar o melhor resultado.

Nas próximas partes desse artigo, planeja-se demonstrar duas aplicações simples de aprendizado de máquina, uma de aprendizado supervisionado e outra de aprendizado por reforço.

Segmentação de Strings com Aprendizado de Máquina

Inteligência Artificial para Jogo da Velha











Leia mais sobre: