- Ich hatte ursprünglich überhaupt nicht vor, im Bereich AI/ML zu arbeiten.
- Ich nutzte einfach die Werkzeuge, die ich für meine Arbeit brauchte, und kam so ganz natürlich mit AI und ML in Berührung – am Ende bin ich in diesem Feld gelandet (Associate Professor an der CMU).
- Zum Jahreswechsel blicke ich zurück ins Jahr 2000 und auf die wichtigsten AI/ML-Projekte, an denen ich beteiligt war.
if-Anweisungen und Zufallszahlen: frühe Programmiererfahrungen
- Beginn mit Videospielen:
- Inspiriert von Tamagotchi versuchte ich, mit VB6 ein virtuelles Haustierspiel zu entwickeln.
- Mit Timern und Bedingungen wurde einfache Logik umgesetzt:
- Alle 10 Sekunden steigt der Hungerwert.
- Wenn der Hunger einen bestimmten Wert überschreitet, sinkt alle 3 Sekunden die Gesundheit.
- Wenn die Gesundheit 0 erreicht, bricht das Haustier zusammen.
- Ergebnis: ein monotones und langweiliges Spiel.
- Spieleentwicklung in der Highschool:
- Entwicklung eines 2D-Weltraum-Shooters:
- Der Spieler verteidigt sich gegen gegnerische Wellen und sammelt Power-ups.
- Das Auftreten der Gegner wurde mit langen
if-Anweisungen umgesetzt, die Zufallszahlen und Gameplay-Statistiken nutzten (Spielzeit, Anzahl der Schüsse, HP usw.).
- Ergebnis:
- Das Spiel wirkte etwas dynamischer und unvorhersehbarer.
- Trotzdem hielt das Interesse nicht lange an, und die Spieler hörten schnell wieder auf.
- Erkundung von AI-Konzepten:
- Mitte der 2000er kaufte ich das Buch Programming Game AI by Example, um zu lernen, wie man AI in Spiele einbaut.
- Zunächst konnte ich das Wissen nicht einsetzen, später half es mir jedoch in vielen Projekten.
- Die Erfahrungen aus dieser Zeit bildeten die Grundlage, um mit komplexeren und interessanteren Spielmechaniken zu experimentieren.
Zustandsmaschinen und Higher-Order Functions: Spieleentwicklung im Studium
- Weiterentwicklung der Spiele:
- Im Studium hob ich meine Spieleentwicklung auf die nächste Stufe und entwickelte Spiele, die von Millionen Menschen gespielt wurden.
- Einige Spiele waren sogar kommerziell erfolgreich.
- Mit wachsender Programmiererfahrung konnte ich das Wissen aus Büchern in der Praxis anwenden.
- Technischer Einsatz:
- Finite State Machines:
- Eingesetzt zur Umsetzung von Verhaltensmustern für Gegner.
- Factory Pattern:
- Für die Erzeugung und Verwaltung von Objekten.
- Higher-Order Functions:
- So entworfen, dass sich Verhaltensweisen von Gegnern und Waffen kombinieren ließen.
- Beispiel:
- Eine Waffe schwingt mit einer Amplitude von 25 Grad nach links und rechts und feuert Geschosse in einem schmalen Kegel ab.
- Die Geschosse steuern leicht auf nahe Ziele zu und prallen mit einer Wahrscheinlichkeit von 1 % ab.
- Lebendigkeit der Spiele:
- Auf Basis von Spielzustand und Eingaben der Spieler wurden nach und nach dynamische Elemente ergänzt.
- Zufälligkeit und Kombinierbarkeit sorgten für zusätzliche Variation.
- Dieser Ansatz wurde nicht nur für das Verhalten der Gegner verwendet, sondern als Schichtsystem im ganzen Spiel angewandt – etwa bei Sprites, Partikeleffekten, Soundeffekten, Geschossen und Animationen.
- Ergebnis:
- Die Spiele wurden lebendiger und unterhaltsamer.
- Gleichzeitig wurde mir klar, dass das keine AI war, sondern nur eine gut entworfene Kombination aus
if-Anweisungen und Funktionsaufrufen.
- Die Spiele konnten zwar den Eindruck von etwas „Lebendigem“ vermitteln, doch in dieser Phase war es immer noch handgefertigte Logik in Kombination mit Funktionen.
Aussagenlogik erster Stufe, Wissensrepräsentation, Support Vector Machines und neuronale Netze: frühe Erfahrungen im Masterstudium
- Beginn des Masterstudiums:
- Nach dem Abschluss schrieb ich mich in letzter Minute für ein Masterstudium ein.
- Die Auswahl an Kursen war begrenzt, daher belegte ich Veranstaltungen zu AI und neuronalen Netzen.
- Statt der eigentlich gewünschten Compiler-Vorlesung wählte ich diese Kurse und war enttäuscht:
- Sie waren stark theoretisch und abstrakt, ohne Praxis oder Implementierung.
- Viel Zeit wurde auf Diskussionen über Definitionen verwendet.
- AI-Kurs:
- Verwendet wurde das Lehrbuch Artificial Intelligence: A Modern Approach (Third Edition).
- Ich lernte Konzepte wie Planung, Agenten, Logik erster Stufe und Wissensrepräsentation.
- Ich gewann ein neues Vokabular, um über Probleme nachzudenken, hatte aber Schwierigkeiten mit der praktischen Anwendung.
- Kurs zu neuronalen Netzen:
- Behandelt wurden unter anderem Perzeptron, Support Vector Machines (SVM), Feedforward-Netze, Hopfield-Modelle und Backpropagation.
- Es fehlten klare Hinweise zur praktischen Umsetzung:
- Die Antwort des Professors, ich solle „ein MATLAB-Paket suchen“, war frustrierend.
- Entwicklung eines Low-Bandwidth-Videochat-Programms:
- Mit OpenCV wurden Gesichter erkannt und Regionen extrahiert:
- Etwa der Zustand der Mundwinkel, die Position der linken Augenbraue oder ob das rechte Auge geöffnet ist.
- Hunderte gelabelte Gesichtsaufnahmen wurden aus einer Datenbank gesammelt.
- Die klassifizierten binären Zustände wurden über Sockets übertragen und ein Avatar mit OpenGL gerendert.
- Ergebnis:
- Das System reagierte empfindlich auf Beleuchtungsänderungen, Parameter waren schwer anzupassen und das Training dauerte lange.
- OpenCV war mühsam zu verwenden, und Änderungen am Programm waren umständlich.
- Erkenntnisse:
- Durch viele Versuche und Irrtümer lernte ich eine Menge.
- Im Januar 2013 lud ich ein frühes Demo-Video hoch und teilte es:
- Das Demo-Video war zwar amateurhaft, erreichte aber mehr als 1000 Aufrufe.
- Diese Phase war ein wichtiger Entwicklungsschritt, in dem ich lernte, Theorie praktisch umzusetzen und Probleme zu lösen.
Entscheidungsbäume, Clustering und Empfehlungssysteme: Erfahrungen im Promotionsstudium
- Forschungsziel:
- Ich versuchte, anhand von Logdaten aus Code-Editoren folgende Probleme zu lösen:
- Festzustellen, ob Programmierer im Code feststecken oder die Orientierung verlieren.
- Vorherzusagen, welche Datei ein Programmierer als Nächstes untersuchen wird.
- Relevanten Code gezielt zu empfehlen.
- Eingesetzte statistische Methoden:
- C4.5-Algorithmus: Erstellung von Entscheidungsbäumen.
- K-means und DBSCAN: Clustering von Ereignissen.
- Apriori und kollaboratives Filtern: Auffinden von Zusammenhängen zwischen Ereignissen.
- Ergebnis:
- Diese einfachen Methoden erwiesen sich als überraschend leistungsfähig.
- In den meisten Fällen waren sie ausreichend effektiv und komplexen neuronalen Netzen nicht unterlegen.
- Ergebnisse:
- Veröffentlichung von Papers, mehrere Praktika und die Entwicklung von Tools für Entwickler.
- Erfolgreicher Abschluss der Promotion.
- Verwandte Materialien:
- Paper: Datenanalyse darüber, wie Entwickler nach Informationen suchen
Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
- Bericht über ein Microsoft-Praktikum: Erfahrungen beim Bau eines Code-Review-Bots
When users never use the features they asked for
- Während der Promotion erzielte ich mit statistischen Verfahren bedeutsame Ergebnisse sowohl in der Forschung als auch in der Praxis, indem ich reale Probleme löste.
Intelligente Benutzeroberflächen: Beginn der Forschung als Professor
- Neue Forschungsrichtung:
- 2018 wählte ich als Tenure-Track-Professor Intelligent Developer Tools als Forschungsschwerpunkt.
- Anfangs war das Konzept noch unscharf, doch ich begann mit Projekten, die Vorhersagemodelle nutzen, um Missverständnisse von Programmierern frühzeitig zu erkennen und zu korrigieren.
- Erster Forschungsantrag:
- Projektziel:
- Einsatz von Programmanalyse-Techniken und Vorhersagemodellen, um Missverständnisse von Programmieranfängern über das Verhalten ihrer Programme zu identifizieren.
- Diese Missverständnisse korrigieren und die Logik erklären, ohne die Programmierenden zu stören.
- Testcode erzeugen, der unbeabsichtigte Änderungen im Programmverhalten erkennt und so zukünftige Missverständnisse verhindert.
- Zusammenfassung:
- Zweites Projekt:
- Forschung zur Vorhersage des Informationsbedarfs von Programmierern und zur Echtzeit-Erzeugung passender Benutzeroberflächen.
- Beispiel:
- Einem Programmierer, der den Git-Verlauf untersucht, wird eine visualisierte Empfehlung relevanter Commits angezeigt.
- Zusammenführung der Forschung:
- Ich schlug die größere Vision "Inquisitive Programming Environments as Learning Environments for Novices and Experts" vor.
- Verwandte Materialien:
- Erfolge und Grenzen:
- Das Projekt startete erfolgreich mit Fördergeldern, doch bevor die Forschung richtig Fahrt aufnahm, trat ich von meiner Professur zurück.
- Diese Phase war ein wichtiger Wendepunkt, an dem ich meine Forschung zu intelligenten Benutzeroberflächen konkretisierte und eine große Vision entwarf.
Program Synthesis und Large Language Models (LLMs): Erfahrungen bei Microsoft
- Wechsel zu Microsoft:
- Im Januar 2022 trat ich dem Team für Program Synthesis bei Microsoft bei.
- Im selben Jahr erschien ChatGPT, und AI-Technologien begannen, in allen Bereichen eingesetzt zu werden – ein idealer Zeitpunkt, um tief in AI-Arbeit einzutauchen.
- Vorsichtiger Ansatz beim Einsatz von AI:
- Obwohl ich in einem AI-Team arbeitete, war ich gegen den Einsatz von AI ohne triftigen Grund:
- Gibt es ein klares Ziel, ein Problem der Nutzer zu lösen?
- Lässt sich das nicht einfach durch eine
if-Anweisung ersetzen?
- Ist eine natürlichsprachliche Schnittstelle wirklich die richtige Wahl?
- Verwandte Texte:
- Wichtige Projekte
-
- Forschung mit Attention-Gewichten von LLMs:
-
- AI-Tutor für Data Science:
- Verbesserung der IntelliCode User Experience:
- LLM-basierte Tools für Data Scientists:
- Motivierender Blogpost:
- Zentrale Tools:
- LLM-basierte Tools für Studierende:
- Motivierender Blogpost:
- Zentrale Tools:
- Forschung zum Bau von Copilots in Unternehmen:
- Aktuelle und künftige Aktivitäten
- Entwicklung unabhängiger AI-Tools:
- Nach meinem Ausscheiden bei Microsoft konzentriere ich mich auf persönliche AI-Projekte.
- Wichtige Tools:
- Über vielfältige Projekte rund um AI und LLMs entwickle ich innovative Lösungen und setze Forschung und Entwicklung von AI-Tools bis heute fort.
Schluss
- Es waren wunderbare 25 Jahre.
- Was kommt als Nächstes? Ich werde weiter lehren, lernen und bauen.
1 Kommentare
Hacker-News-Kommentare
if-Anweisungen ausreichen. Man muss sicher sein, dass natürliche Sprache die passende Schnittstelle ist.