19 pontos por GN⁺ 2025-01-07 | 1 comentários | Compartilhar no WhatsApp
  • 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:
    1. Artigo: análise de dados sobre como desenvolvedores buscam informação
      Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
    2. 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:
      1. 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.
      2. Corrigir esses mal-entendidos e explicar a lógica sem atrapalhar o programador.
      3. 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:
  • 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

Encerramento

  • Foram 25 anos muito divertidos
  • E o que vem pela frente? Vou continuar ensinando, aprendendo e construindo coisas

1 comentários

 
GN⁺ 2025-01-07
Comentários no Hacker News
  • Eu estava em uma equipe de IA, mas evitava aplicar IA a menos que houvesse um motivo realmente convincente. Pensava se estávamos tentando resolver um problema do usuário, se um LLM era necessário ou se algumas instruções if já seriam suficientes. Também era preciso ter certeza de que linguagem natural era a interface adequada
    • Essa abordagem prática na área de IA parece revigorante. Já tive a experiência de criar uma ferramenta em que um modelo simples de regressão teve desempenho melhor que uma rede neural. Foi difícil evitar a resistência da equipe por não apostar tudo em IA
  • Passei por uma jornada semelhante durante 14 anos e sempre me perguntei como isso seria diferente hoje
    • Nós crescemos junto com a indústria e pudemos aprender coisas gradualmente mais complexas. Os estudantes que se formam hoje encontram décadas de complexidade já no primeiro emprego
  • Vi recentemente alguém deixar a UTK, e o post de blog que ele escreveu me fez repensar a ida para a academia depois da pós-graduação
  • É revigorante ver uma página da web sem a bagunça de anúncios e pop-ups. Ela tem um texto limpo e bem organizado, com uma estrutura simples
  • Para muitas pessoas, a IA é uma jornada divertida de criar coisas incríveis. Concordo que os resultados são surpreendentes. No entanto, é triste que os cientistas não pensem no impacto mais amplo que seu trabalho tem sobre a sociedade. À medida que seu status social aumenta, suas criações transformam fundamentalmente a estrutura da sociedade. A IA é um dos elementos perigosos, e o fato de grandes empresas atraírem pessoas glorificando a inteligência é um sinal de desastre iminente