- No tenía ninguna intención de trabajar en IA/ML.
- Simplemente, al usar herramientas necesarias para mi trabajo, terminé usando IA y ML de forma natural, y al final acabé entrando en este campo (profesor asociado en CMU).
- Con el inicio del nuevo año, vuelve a 2000 para repasar los principales proyectos de IA/ML en los que participó.
Sentencias if y números aleatorios: primeras experiencias de programación
- Empezó con videojuegos:
- Intentó desarrollar un juego de mascota virtual en VB6 inspirado en Tamagotchi.
- Implementó lógica simple con temporizadores y condicionales:
- Cada 10 segundos aumentaba el nivel de hambre.
- Si el hambre superaba cierto nivel, la salud bajaba cada 3 segundos.
- Si la salud llegaba a 0, la mascota colapsaba.
- Resultado: un juego monótono y poco divertido.
- Desarrollo de juegos en la preparatoria:
- Desarrolló un juego 2D de disparos espaciales:
- El jugador defendía oleadas de enemigos mientras recogía power-ups.
- Los patrones de aparición de enemigos se implementaban con números aleatorios y una larga sentencia
if que usaba estadísticas de la partida (tiempo de juego, número de disparos, HP, etc.).
- Resultado:
- El juego se sentía un poco dinámico e impredecible.
- Pero no mantenía el interés por mucho tiempo y los jugadores lo dejaban pronto.
- Exploración de conceptos de IA:
- A mediados de los 2000, compró el libro Programming Game AI by Example y aprendió cómo implementar IA en juegos.
- Al principio no pudo aprovecharlo, pero después le sirvió mucho en proyectos posteriores.
- La experiencia de esta etapa sentó las bases para experimentar con mecánicas de juego más complejas e interesantes.
Máquinas de estado y funciones de orden superior: desarrollo de juegos en la universidad
- La evolución de los juegos:
- En la universidad, llevó su desarrollo de juegos a otro nivel y creó juegos jugados por millones de personas.
- Algunos incluso lograron generar ingresos.
- A medida que maduró como programador, pudo aplicar en la práctica lo aprendido en los libros.
- Aplicación de técnicas:
- Máquina de estados finitos (Finite State Machine):
- La usó para implementar patrones de comportamiento de enemigos.
- Patrón factory:
- Para crear y gestionar objetos.
- Funciones de orden superior (Higher-order Functions):
- Diseñó comportamientos combinables para enemigos y armas.
- Ejemplo:
- Un arma oscilaba con una amplitud de 25 grados a izquierda y derecha y disparaba balas en un cono estrecho.
- Las balas se guiaban ligeramente hacia objetivos cercanos y, con 1% de probabilidad, hacían ricochet.
- La sensación de vida en el juego:
- Fue agregando gradualmente elementos de dinamismo según el estado del juego y la entrada del jugador.
- Introdujo variación usando aleatoriedad y combinabilidad.
- Este enfoque por capas se aplicó no solo al comportamiento de los enemigos, sino también a sprites, efectos de partículas, efectos de sonido, balas, animaciones y otros elementos del juego.
- Resultado:
- Los juegos se volvieron más vivos y entretenidos.
- Pero se dio cuenta de que eso no era IA, sino solo una combinación de sentencias
if y llamadas a funciones bien diseñadas.
- Aunque podía dar la sensación de que el juego estaba "vivo", en esta etapa seguía siendo lógica diseñada manualmente y uso de funciones.
Lógica de primer orden, representación del conocimiento, máquinas de soporte vectorial y redes neuronales: primeras experiencias en el posgrado
- Inicio de la maestría:
- Después de graduarse, se inscribió en una maestría casi al cierre del plazo.
- Tenía pocas materias para elegir y tomó cursos de IA y redes neuronales.
- Se sintió decepcionado con esas materias, que eligió en lugar del curso de compiladores que realmente quería:
- Estaban centradas en teoría de alto nivel, sin práctica ni implementación.
- Había muchas discusiones sobre definiciones.
- Curso de IA:
- Usó como texto Artificial Intelligence: A Modern Approach (Third Edition).
- Aprendió conceptos como planeación, agentes, lógica de primer orden y representación del conocimiento.
- Adquirió un nuevo vocabulario para pensar los problemas, pero le costó aplicarlo en la práctica.
- Curso de redes neuronales:
- Estudió teoría sobre perceptrones, máquinas de soporte vectorial (SVM), redes feedforward, modelos de Hopfield y backpropagation.
- Faltaban indicaciones claras para la práctica:
- Le frustró que la respuesta del profesor fuera "busca algún paquete de MATLAB".
- Desarrollo de un programa de videollamadas de bajo ancho de banda:
- Usó OpenCV para detectar rostros y extraer regiones:
- Clasificaba el estado de las comisuras de la boca, la posición de la ceja izquierda y si el ojo derecho estaba abierto, entre otras cosas.
- Reunió cientos de imágenes faciales etiquetadas desde una base de datos.
- Enviaba esos estados binarios clasificados por sockets y renderizaba un avatar con OpenGL.
- Resultado:
- Era sensible a cambios de iluminación, difícil de ajustar en parámetros y tardaba mucho en entrenarse.
- OpenCV era complicado de usar y modificar el programa resultaba engorroso.
- Logros:
- Aprendió mucho a través de múltiples pruebas y errores.
- En enero de 2013, compartió un video de demo inicial:
- El video de demo, aunque amateur, superó las 1000 reproducciones.
- Este período fue una etapa importante de crecimiento para aprender a implementar teoría en la práctica y resolver problemas.
Árboles de decisión, clustering y algoritmos de recomendación: experiencia en el doctorado
- Objetivo de investigación:
- Intentó resolver problemas como los siguientes analizando datos de logs de editores de código:
- Identificar si un programador estaba atascado o perdido en el código.
- Predecir qué archivo exploraría después el programador.
- Recomendar con precisión el código que le interesaría.
- Métodos estadísticos utilizados:
- Algoritmo C4.5: generación de árboles de decisión.
- K-means y DBSCAN: clustering de eventos.
- Apriori y filtrado colaborativo: exploración de asociaciones entre eventos.
- Resultado:
- Aunque eran métodos simples, mostraron un rendimiento sorprendentemente potente.
- En la mayoría de los casos, eran suficientemente efectivos sin necesidad de redes neuronales complejas.
- Logros:
- Publicó artículos, pasó por varias pasantías y creó herramientas para desarrolladores.
- Logró terminar el doctorado.
- Material relacionado:
- Artículo: análisis de datos sobre cómo los desarrolladores buscan información
Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
- Reporte de pasantía en Microsoft: experiencia creando un bot de revisión de código
When users never use the features they asked for
- Durante el doctorado, usó técnicas estadísticas para resolver problemas reales y consiguió resultados significativos tanto en la academia como en la práctica.
Interfaces de usuario inteligentes: inicio de la investigación como profesor
- Nuevo rumbo de investigación:
- En 2018, como profesor en tenure track, eligió como tema de investigación las herramientas inteligentes para desarrolladores (Intelligent Developer Tools).
- Al principio la idea era vaga, pero arrancó con un proyecto para identificar y corregir por adelantado malentendidos de programadores usando modelos predictivos.
- Primera propuesta de investigación:
- Objetivo del proyecto:
- Usar técnicas de análisis de programas y modelos predictivos para identificar malentendidos que tienen los programadores principiantes sobre el comportamiento de sus programas.
- Corregir esos malentendidos y explicar la lógica sin interrumpir al programador.
- Generar código de pruebas para detectar cambios no intencionales en el comportamiento del programa y prevenir futuros malentendidos.
- Resumen:
- Segundo proyecto:
- Investigación sobre predecir las necesidades de información del programador y generar en tiempo real interfaces de usuario.
- Ejemplo:
- A un programador que explora el historial de Git, se le ofrece una visualización de un conjunto recomendado de commits.
- Integración de la investigación:
- Propuso una visión amplia llamada "Inquisitive Programming Environments as Learning Environments for Novices and Experts".
- Material relacionado:
- Resultados y límites:
- El proyecto arrancó con éxito al obtener financiamiento, pero renunció a su puesto de profesor antes de que la investigación avanzara de lleno.
- Este período fue un punto de inflexión importante para concretar la investigación sobre interfaces de usuario inteligentes y diseñar una visión más grande.
Síntesis de programas y modelos de lenguaje a gran escala (LLMs): experiencia en Microsoft
- Ingreso a Microsoft:
- En enero de 2022, se unió al equipo de síntesis de programas de Microsoft.
- Ese mismo año se lanzó ChatGPT y la tecnología de IA empezó a aplicarse en todos los ámbitos, así que se metió de lleno en trabajo de IA en el momento ideal.
- Enfoque cauteloso sobre la aplicación de IA:
- Aunque formaba parte de un equipo de IA, se oponía a usar IA cuando no hubiera una razón sólida:
- Se preguntaba si había un objetivo claro de resolver un problema real del usuario.
- Revisaba si podía reemplazarse con una simple sentencia
if.
- Pensaba si una interfaz de lenguaje natural realmente era la elección adecuada.
- Compartió opiniones relacionadas en:
- Proyectos principales
-
- Investigación usando pesos de atención (attention) de LLMs:
-
- Tutor de IA para ciencia de datos:
- Publicaciones de blog de motivación:
- Mejora de la experiencia de usuario de IntelliCode:
- Herramientas basadas en LLM para científicos de datos:
- Publicación de blog de motivación:
- Herramientas principales:
- Herramientas basadas en LLM para estudiantes:
- Publicación de blog de motivación:
- Herramientas principales:
- Investigación sobre construcción de copilots empresariales:
- Actividades actuales y futuras
- Desarrollo independiente de herramientas de IA:
- Tras salir de Microsoft, se dedicó de lleno a proyectos personales de IA.
- Herramientas principales:
- A través de proyectos diversos basados en IA y LLM, ha desarrollado soluciones innovadoras y sigue investigando y construyendo herramientas de IA hasta hoy.
Cierre
- Han sido 25 años muy disfrutables.
- ¿Qué sigue? Seguir enseñando, aprendiendo y construyendo.
1 comentarios
Opiniones de Hacker News
if. También había que asegurarse de que el lenguaje natural fuera una interfaz adecuada.