- Eu não tinha nenhuma intenção de trabalhar com IA/ML
- Simplesmente, ao usar ferramentas necessárias para o meu trabalho, acabei usando IA e ML naturalmente e, no fim, entrei nessa área (professor associado da CMU)
- Com a chegada do ano novo, faço uma retrospectiva dos principais projetos de IA/ML dos quais participei voltando a 2000
Instruções if e números aleatórios: experiências iniciais com programação
- Começando com videogames:
- Inspirado pelo Tamagotchi, tentei desenvolver um jogo de pet virtual em VB6.
- Implementei uma lógica simples usando timers e condicionais:
- A cada 10 segundos, o nível de fome aumentava.
- Quando a fome passava de certo nível, a saúde diminuía a cada 3 segundos.
- Quando a saúde chegava a 0, o pet desmaiava.
- Resultado: um jogo monótono e sem graça.
- Desenvolvimento de jogos no ensino médio:
- Desenvolvi um jogo 2D de tiro espacial:
- O jogador defendia o mapa contra waves de inimigos enquanto coletava power-ups.
- O padrão de aparição dos inimigos foi implementado com uma longa instrução
if usando números aleatórios e estatísticas de gameplay (tempo de jogo, número de tiros, HP etc.).
- Resultado:
- O jogo parecia um pouco dinâmico e imprevisível.
- Mas o interesse não durava muito, então os jogadores paravam logo.
- Explorando conceitos de IA:
- Em meados dos anos 2000, comprei o livro Programming Game AI by Example para aprender a implementar IA em jogos.
- No começo não consegui aproveitar muito, mas depois ele ajudou bastante em projetos futuros.
- As experiências dessa época serviram de base para experimentar mecânicas de jogo mais complexas e interessantes
Máquinas de estado e funções de ordem superior: desenvolvimento de jogos na faculdade
- A evolução dos jogos:
- Na faculdade, levei o nível do meu desenvolvimento de jogos a outro patamar e produzi jogos jogados por milhões de pessoas.
- Alguns jogos chegaram até a gerar receita.
- À medida que minhas habilidades de programação amadureciam, passei a conseguir aplicar na prática o que havia aprendido no livro.
- Aplicação técnica:
- Máquina de estados finitos (Finite State Machine):
- Usei para implementar padrões de comportamento dos inimigos.
- Factory pattern:
- Para criação e gerenciamento de objetos.
- Funções de ordem superior (Higher-order Functions):
- Projetei inimigos e armas para que seus comportamentos pudessem ser combinados.
- Exemplo:
- A arma oscilava 25 graus para a esquerda e para a direita, disparando balas em um cone estreito.
- As balas tinham uma leve perseguição a alvos próximos e, com 1% de chance, ricocheteavam.
- Vivacidade dos jogos:
- Com base no estado do jogo e nas entradas do jogador, fui adicionando gradualmente elementos de dinamismo.
- Acrescentei variação usando aleatoriedade e combinabilidade.
- Essa abordagem em camadas foi aplicada em todo o jogo, não só ao comportamento dos inimigos, mas também a sprites, efeitos de partículas, efeitos sonoros, projéteis, animações etc.
- Resultado:
- Os jogos ficaram mais vivos e divertidos.
- Mas percebi que isso não era IA, e sim apenas uma combinação de instruções
if bem planejadas e chamadas de função.
- Eu conseguia dar ao jogo a sensação de estar "vivo", mas percebi que, nessa fase, tudo ainda era uso de lógica e funções projetadas manualmente.
Lógica de primeira ordem, representação de conhecimento, máquinas de vetores de suporte e redes neurais: primeiras experiências na pós-graduação
- Início do mestrado:
- Depois de me formar, entrei no mestrado quase no fim do prazo.
- As disciplinas disponíveis eram limitadas, então cursei aulas de IA e de redes neurais.
- Fiquei decepcionado com as disciplinas que escolhi no lugar da aula de compiladores que eu queria originalmente:
- Eram focadas em teoria de alto nível, sem prática nem implementação.
- Havia muita discussão em torno de definições.
- Aula de IA:
- O livro usado foi Artificial Intelligence: A Modern Approach (Third Edition).
- Aprendi conceitos como planejamento, agentes, lógica de primeira ordem e representação de conhecimento.
- Ganhei um novo vocabulário para pensar problemas, mas tive dificuldade em aplicá-lo na prática.
- Aula de redes neurais:
- Estudei a teoria de perceptrons, máquinas de vetores de suporte (SVM), redes feedforward, modelo de Hopfield, backpropagation etc.
- Faltavam orientações claras para a prática:
- Fiquei frustrado quando a resposta do professor foi “procure um pacote de MATLAB”.
- Desenvolvimento de um programa de videochat de baixa largura de banda:
- Usei OpenCV para detectar rostos e extrair regiões:
- Classificando o estado dos cantos da boca, a posição da sobrancelha esquerda, se o olho direito estava aberto etc.
- Reuni centenas de imagens de rostos rotuladas em um banco de dados.
- Enviei os estados binários classificados por socket e renderizei um avatar com OpenGL.
- Resultado:
- O sistema era sensível a mudanças de iluminação, difícil de ajustar parâmetros e levava muito tempo para treinar.
- Usar OpenCV era trabalhoso, e modificar o programa também era incômodo.
- Resultados obtidos:
- Aprendi muito por meio de vários erros e tentativas.
- Em janeiro de 2013, compartilhei um vídeo de demo inicial ao publicá-lo:
- Vídeo de demo que, embora amador, teve mais de 1.000 visualizações.
- Esse período foi um importante processo de crescimento, em que aprendi a implementar teoria na prática e a resolver problemas
Árvores de decisão, clustering e algoritmos de recomendação: experiências no doutorado
- Objetivo da pesquisa:
- Tentei resolver os seguintes problemas analisando dados de log de editores de código:
- Identificar se o programador estava travado ou perdido no código.
- Prever qual arquivo o programador exploraria em seguida.
- Recomendar com precisão o código de interesse.
- Métodos estatísticos utilizados:
- Algoritmo C4.5: geração de árvores de decisão.
- K-means e DBSCAN: clustering de eventos.
- Apriori e filtragem colaborativa: exploração de associações entre eventos.
- Resultado:
- Eram métodos simples, mas mostraram desempenho surpreendentemente forte.
- Na maioria dos casos, esses métodos eram eficazes o suficiente, mais do que redes neurais complexas.
- Resultados alcançados:
- Publiquei artigos, fiz vários estágios e criei ferramentas para desenvolvedores.
- Consegui concluir o doutorado.
- Materiais relacionados:
- Artigo: análise de dados sobre como desenvolvedores buscam informação
Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
- Relato de estágio na Microsoft: experiência criando um bot de code review
When users never use the features they asked for
- Durante o doutorado, resolvi problemas reais com técnicas estatísticas e obtive resultados significativos tanto na academia quanto na prática
Interfaces de usuário inteligentes: início da pesquisa como professor
- Definindo uma nova direção de pesquisa:
- Em 2018, como professor em tenure track, escolhi ferramentas inteligentes para desenvolvedores (Intelligent Developer Tools) como tema de pesquisa.
- No início, o conceito era vago, mas comecei com um projeto para identificar e corrigir antecipadamente mal-entendidos de programadores usando modelos preditivos.
- Primeira proposta de pesquisa:
- Objetivo do projeto:
- Usar técnicas de análise de programas e modelos preditivos para identificar mal-entendidos que programadores iniciantes têm sobre o comportamento de programas.
- Corrigir esses mal-entendidos e explicar a lógica sem atrapalhar o programador.
- Gerar código de teste que capture mudanças não intencionais no comportamento do programa para prevenir mal-entendidos futuros.
- Resumo:
- Segundo projeto:
- Pesquisa para prever as necessidades de informação do programador e gerar interfaces de usuário em tempo real.
- Exemplo:
- Para um programador explorando o histórico do Git, apresentar visualmente um conjunto recomendado de commits.
- Integração da pesquisa:
- Propus uma visão maior chamada "Inquisitive Programming Environments as Learning Environments for Novices and Experts".
- Materiais relacionados:
- Resultados e limites:
- O projeto começou com sucesso após obter financiamento, mas deixei o cargo de professor antes que a pesquisa avançasse de fato.
- Esse período foi um importante ponto de virada, em que concretizei a pesquisa sobre interfaces de usuário inteligentes e desenhei uma grande visão
Síntese de programas e grandes modelos de linguagem (LLMs): experiência na Microsoft
- Entrada na Microsoft:
- Em janeiro de 2022, entrei para a equipe de síntese de programas da Microsoft.
- No mesmo ano, o lançamento do ChatGPT fez a tecnologia de IA começar a ser aplicada em todas as áreas, e acabei mergulhando no trabalho com IA no momento ideal.
- Abordagem cautelosa na aplicação de IA:
- Embora eu estivesse em uma equipe de IA, eu era contra usar IA quando não havia um motivo forte:
- Eu perguntava se havia um objetivo claro de resolver um problema do usuário.
- Verificava se aquilo poderia ser substituído por uma simples instrução
if.
- Refletia se uma interface em linguagem natural era realmente a escolha certa.
- Opiniões relacionadas compartilhadas em:
- Principais projetos
-
- Pesquisa usando pesos de attention de LLMs:
-
- Tutor de IA para ciência de dados:
- Posts de blog de motivação:
- Melhoria da experiência do usuário do IntelliCode:
- Ferramentas baseadas em LLM para cientistas de dados:
- Post de blog de motivação:
- Principais ferramentas:
- Ferramentas baseadas em LLM para estudantes:
- Post de blog de motivação:
- Principais ferramentas:
- Pesquisa sobre a construção de copilots corporativos:
- Atividades atuais e futuras
- Desenvolvimento independente de ferramentas de IA:
- Depois de sair da Microsoft, mergulhei em projetos pessoais de IA.
- Principais ferramentas:
- Por meio de diversos projetos baseados em IA e LLM, desenvolvo soluções inovadoras e continuo pesquisando e criando ferramentas de IA até hoje
Encerramento
- Foram 25 anos muito divertidos
- E o que vem pela frente? Vou continuar ensinando, aprendendo e construindo coisas
1 comentários
Comentários no Hacker News
ifjá seriam suficientes. Também era preciso ter certeza de que linguagem natural era a interface adequada