CS50x em Português - Inteligência Artificial
CS50
O patinho de borracha do CS50 0:43
A palestra começa lembrando a tradição do CS50 de dar aos alunos um patinho de borracha físico para colocar na mesa, servindo de interlocutor quando surgem dúvidas ou erros no código. A ideia é que, ao verbalizar a própria confusão para esse objeto inanimado, o aluno muitas vezes encontra a resposta por conta própria. Com o tempo, esse patinho foi virtualizado dentro do Visual Studio Code, disponível em cs50.dev, primeiro como um chat que apenas respondia com grasnidos, e depois, a partir de 2023, como uma ferramenta baseada em IA que orienta o aluno para a solução em vez de simplesmente entregar a resposta, como um bom tutor faria.
Jogo de adivinhar o que é IA 3:33
Usando dados publicados pelo The New York Times, o público participa de uma votação por celular para tentar distinguir imagens e textos criados por IA de conteúdo real. Em um dos exemplos, mais de 70% do público apontou corretamente a foto gerada por IA, mas em outro caso ambas as fotos eram sintéticas, mostrando rostos que não existem na realidade. No exemplo com textos, a maioria do público errou ao tentar identificar qual redação sobre o almoço escolar havia sido escrita por um chatbot e qual por uma criança da quarta ou quinta série, evidenciando o quanto essa tecnologia já imita bem a linguagem humana.
Como o pato do CS50 é construído 7:31
O patinho virtual funciona sobre uma arquitetura que combina o site cs50.ai com APIs de empresas como Microsoft e OpenAI, que fazem o trabalho pesado de desenvolver os modelos de IA, enquanto a equipe do CS50 adiciona ingredientes próprios por meio da chamada engenharia de prompts. Essa técnica consiste em fazer perguntas detalhadas e fornecer contexto para a IA, usando dois elementos principais: o prompt do sistema, escrito pelos professores para dar à IA uma personalidade e um domínio de especialização, como instruir a IA a ser um assistente de ensino simpático que se comporta como um patinho e só responde perguntas sobre o curso; e o prompt do usuário, que é simplesmente a pergunta digitada pelo aluno. Esse mesmo mecanismo já havia sido demonstrado em código Python na semana 0 do curso, usando a biblioteca da OpenAI, uma variável client, e a função client.responses.create para gerar respostas com base em três argumentos: a entrada do usuário, as instruções do sistema e o modelo de IA escolhido.
IA escrevendo código no Copilot 11:01
No Visual Studio Code, a palestra mostra o Copilot, ferramenta da Microsoft e do GitHub normalmente desativada para os alunos do CS50, sendo usada para implementar funções de um corretor ortográfico em C que normalmente levaria de cinco a quinze horas para ser feito manualmente. Ao pedir para implementar a função de verificação usando uma tabela hash, o Copilot sugere código com base no arquivo aberto e nos comentários já presentes, e o mesmo se repete para a função de carregamento do dicionário. Em outro exemplo, ao descrever em inglês o problema de desenhar uma pirâmide de tijolos com o símbolo de cerquilha usando a biblioteca do CS50, a ferramenta gera um programa em C equivalente ao exercício Mario do curso, usando um loop do-while e a estrutura básica que os alunos já reconhecem. A palestra ressalta que essa amplificação de capacidades só é realmente útil depois que o aluno já desenvolveu a própria memória motora e o olho treinado para entender, ajustar e explicar o código gerado.
Exemplos cotidianos de inteligência artificial 17:30
Antes de entrar nos fundamentos técnicos, a palestra lista aplicações já familiares de IA: a filtragem de spam nas caixas de entrada de e-mail, que não depende de humanos rotulando mensagens manualmente; o reconhecimento de caligrafia treinado com amostras de muitas pessoas; as recomendações de filmes e séries em serviços como a Netflix, baseadas em padrões de gosto e não em blocos fixos de regras; e os assistentes de voz como Siri, Alexa e Google Assistant, que geram respostas dinamicamente em vez de consultar uma lista enorme de perguntas previstas.
Árvores de decisão em jogos clássicos 19:31
A explicação recua até jogos antigos como Pong e Breakout para mostrar que a IA de um adversário virtual não precisa ser sofisticada: pode ser implementada como uma árvore de decisão simples, do tipo se a bola está à esquerda da raquete, mova a raquete para a esquerda, senão, se estiver à direita, mova para a direita, senão, fique parado. Esse tipo de lógica determinística se traduz diretamente em pseudocódigo com estruturas de loop e condicionais, exatamente como os programadores originais desses jogos provavelmente fizeram. A palestra então avança para o jogo da velha, propondo pensar em como um computador decidiria sua jogada perguntando primeiro se pode completar três em linha naquele turno e, caso não possa, se o adversário poderia fazê-lo no turno seguinte.
O algoritmo minimax no jogo da velha 23:01
O jogo da velha parece simples, mas só existe motivo para perder uma partida se você não jogar da melhor forma possível, já que o pior resultado esperado é um empate. O algoritmo minimax resolve isso transformando o jogo em matemática: cada tabuleiro recebe uma pontuação, -1 quando O vence, +1 quando X vence e 0 em caso de empate. A partir daí, X tenta sempre maximizar essa pontuação e O tenta sempre minimizá-la, e analisando as jogadas possíveis dá para escolher com certeza o melhor movimento em vez de confiar apenas no instinto.
Por que o xadrez e o Go pedem outra abordagem 27:00
O jogo da velha tem 255.168 formas possíveis de ser jogado, um número grande mas ainda tratável por um computador que testa todas as possibilidades. Já nos primeiros quatro lances do xadrez existem 85 bilhões de combinações, e nos primeiros quatro lances do Go esse número sobe para 266 quintilhões. Diante de volumes assim, testar exaustivamente cada possibilidade deixa de ser viável, e é exatamente nesse ponto que a inteligência artificial entra: em vez de escrever instruções diretas para resolver o problema, você escreve código que ensina o computador a descobrir sozinho como vencer, mostrando a ele configurações promissoras e configurações a evitar.
Aprendizado por reforço com panquecas e labirintos 30:00
Aprendizado por reforço é a ideia de treinar uma máquina por meio de recompensas e punições, da mesma forma que pais ensinam filhos a repetir ou evitar certos comportamentos. Um exemplo mostrado é um robô de laboratório aprendendo a virar panquecas: depois de ver o pesquisador algumas vezes e passar por cerca de 50 tentativas, recebendo pontos quando acerta e um tipo de correção quando erra, o robô melhora bastante. O mesmo princípio aparece num labirinto simples com um ponto amarelo que precisa chegar a uma saída verde evitando poços de lava, aprendendo a cada tentativa quais caminhos levam a punição e quais levam a recompensa, até conseguir repetir o trajeto vencedor.
O equilíbrio entre explorar e aproveitar 33:30
Seguir sempre o primeiro caminho que deu certo, como pedir o mesmo prato favorito num restaurante ou repetir a mesma rota de sempre no Super Mario Bros., impede encontrar soluções melhores que talvez existam. Esse é o princípio de exploração versus aproveitamento: usando uma variável chamada epsilon, o sistema pode, por exemplo em dez por cento das vezes, tomar uma decisão aleatória em vez da que já sabe que funciona, na esperança de descobrir um caminho ainda mais curto ou uma pontuação ainda maior. No jogo Breakout, uma inteligência artificial treinada dessa forma passa de movimentos aleatórios a um desempenho cada vez melhor depois de centenas de tentativas, chegando a descobrir sozinha, sem ninguém ensinar, um truque que deixa a bola quicar sozinha maximizando a pontuação sem precisar tocar nela.
Aprendizado supervisionado e não supervisionado 37:31
Marcar e-mails como spam é um exemplo de aprendizado supervisionado, porque envolve pessoas rotulando manualmente os dados. Mas rotular manualmente bilhões de dados não é viável em escala, o que leva ao aprendizado não supervisionado e ao aprendizado profundo, baseado em redes neurais inspiradas nos neurônios biológicos. Uma rede neural simples, com poucos neurônios representados como círculos ligados por linhas, pode aprender a separar pontos azuis e vermelhos num plano encontrando os parâmetros de uma fórmula matemática simples, e o mesmo princípio, multiplicado por bilhões de conexões, está por trás de sistemas como o assistente de estudos do CS50 e de grandes modelos de linguagem como ChatGPT, Claude e Gemini, construídos sobre a arquitetura chamada de transformador generativo pré-treinado.
Representando palavras como vetores 44:30
Para resolver problemas de linguagem, o processo começa dividindo uma frase em uma lista de palavras e criando uma representação numérica para cada uma. A palavra Massachusetts, por exemplo, pode ser codificada por um vetor de 1.536 números de ponto flutuante, posicionando-a em um espaço de muitas dimensões, não apenas em um plano simples.
Atenção entre palavras nos GPTs 45:02
A chave desses modelos GPT é calcular a atenção entre as palavras a partir desses dados: relações mais fortes, como entre Massachusetts e state, são representadas por linhas mais grossas, enquanto palavras como a, is e the recebem linhas mais finas por carregarem menos sinal para responder à pergunta feita.
Modelos estatísticos e alucinações 46:02
No fundo, os grandes modelos de linguagem são apenas modelos estatísticos que preveem a palavra mais provável, com base em textos como posts do Reddit, buscas do Google e enciclopédias. Por isso, cerca de 1% das vezes a resposta pode estar errada, o que chamamos de alucinação, algo que ocorre até com o pato do CS50.
Poema da máquina de lição de casa 46:30
Para encerrar, é lido um poema de Shel Silverstein sobre uma máquina de fazer lição de casa que promete respostas perfeitas em dez segundos, mas erra ao somar 9 mais 4, dando 3 como resultado, uma imagem que antecipou as falhas das máquinas de IA de hoje.
AI-generated summary. It can be wrong or incomplete - check anything that matters against the original.
