19 điểm bởi GN⁺ 2025-01-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • Hoàn toàn không có ý định làm việc trong lĩnh vực AI/ML
  • Chỉ đơn giản là trong quá trình dùng các công cụ cần cho công việc, tôi dần dần sử dụng AI và ML một cách tự nhiên, và cuối cùng bước chân vào lĩnh vực này (phó giáo sư tại CMU)
  • Nhân dịp năm mới, tác giả nhìn lại những dự án AI/ML quan trọng mà mình đã tham gia kể từ năm 2000

Câu lệnh if và số ngẫu nhiên: trải nghiệm lập trình ban đầu

  • Bắt đầu với trò chơi điện tử:
    • Lấy cảm hứng từ Tamagotchi, tác giả thử phát triển một game thú cưng ảo bằng VB6.
    • Triển khai logic đơn giản bằng timer và câu lệnh điều kiện:
      • Cứ mỗi 10 giây, chỉ số đói tăng lên.
      • Nếu mức đói vượt quá một ngưỡng nhất định, máu giảm mỗi 3 giây.
      • Khi máu về 0, thú cưng gục xuống.
    • Kết quả: trò chơi đơn điệu và không thú vị.
  • Làm game thời trung học:
    • Phát triển một game bắn súng không gian 2D:
      • Người chơi chống lại từng đợt kẻ địch (waves) và thu thập power-up.
    • Mẫu xuất hiện của kẻ địch được triển khai bằng một câu lệnh if dài, tận dụng số ngẫu nhiên và thống kê gameplay như thời gian chơi, số lần bắn, HP, v.v.
    • Kết quả:
      • Trò chơi tạo cảm giác có phần động và khó đoán.
      • Tuy vậy, độ hứng thú không kéo dài nên người chơi nhanh chóng bỏ cuộc.
  • Tìm hiểu khái niệm AI:
    • Vào giữa những năm 2000, tác giả mua cuốn Programming Game AI by Example để học cách triển khai AI vào game.
    • Ban đầu chưa áp dụng được, nhưng về sau nó giúp ích rất nhiều cho các dự án tiếp theo.
  • Những trải nghiệm trong giai đoạn này đã trở thành nền tảng để thử nghiệm các cơ chế game phức tạp và hấp dẫn hơn

Máy trạng thái và hàm bậc cao: làm game thời đại học

  • Sự tiến hóa của game:
    • Trong thời đại học, tác giả nâng trình độ làm game lên một bậc và tạo ra các trò chơi được hàng triệu người chơi.
    • Một số game thậm chí còn kiếm được doanh thu.
    • Khi kỹ năng lập trình trưởng thành hơn, tác giả có thể áp dụng những gì học từ sách vào thực tế.
  • Ứng dụng kỹ thuật:
    • Máy trạng thái hữu hạn (Finite State Machine):
      • Dùng để triển khai mẫu hành vi của kẻ địch.
    • Factory pattern:
      • Tạo và quản lý object.
    • Hàm bậc cao (Higher-order Functions):
      • Thiết kế để có thể kết hợp hành vi của kẻ địch và vũ khí.
      • Ví dụ:
        • Vũ khí dao động trái phải với biên độ 25 độ và bắn đạn theo hình nón hẹp.
        • Đạn hơi tự dẫn về mục tiêu gần đó, và có 1% xác suất ricochet (nảy bật).
  • Độ sống động của game:
    • Dần dần thêm các yếu tố động (dynamism) dựa trên trạng thái game và input của người chơi.
    • Tạo thêm biến hóa bằng tính ngẫu nhiên và khả năng tổ hợp.
    • Cách tiếp cận này được áp dụng theo kiểu nhiều lớp không chỉ cho hành vi kẻ địch mà còn cho sprite, particle effect, hiệu ứng âm thanh, đạn, animation và toàn bộ game.
  • Kết quả:
    • Trò chơi trở nên sống động và vui hơn.
    • Nhưng rồi tác giả nhận ra đây không phải AI, mà chỉ là sự kết hợp giữa các câu lệnh if được thiết kế tốt và các lời gọi hàm.
  • Dù game có thể tạo cảm giác như đang “sống”, tác giả hiểu rằng ở giai đoạn này đó vẫn chỉ là logic và hàm được thiết kế thủ công.

Logic bậc nhất, biểu diễn tri thức, SVM và mạng nơ-ron: trải nghiệm đầu thời cao học

  • Bắt đầu chương trình thạc sĩ:
    • Sau khi tốt nghiệp, tác giả đăng ký học thạc sĩ sát hạn chót.
    • Các lớp có thể chọn khá hạn chế, nên đã học các môn AI và mạng nơ-ron.
    • Tác giả thất vọng với các môn mình chọn thay cho môn compiler vốn mong muốn ban đầu:
      • Tập trung vào lý thuyết cấp cao, không có thực hành hay triển khai.
      • Có rất nhiều thảo luận xoay quanh định nghĩa.
  • Môn AI:
    • Sử dụng giáo trình Artificial Intelligence: A Modern Approach (Third Edition).
    • Học các khái niệm như planning, agent, logic bậc nhất, biểu diễn tri thức, v.v.
    • Tác giả học được một hệ từ vựng mới để suy nghĩ về vấn đề, nhưng gặp khó khăn khi áp dụng thực tế.
  • Môn mạng nơ-ron:
    • Học lý thuyết về perceptron, support vector machine (SVM), feedforward network, mô hình Hopfield, backpropagation, v.v.
    • Thiếu hướng dẫn rõ ràng cho phần thực hành:
      • Tác giả cảm thấy nản khi giáo sư trả lời rằng hãy “tìm một gói MATLAB mà dùng”.
  • Phát triển chương trình chat video băng thông thấp:
    • Dùng OpenCV để phát hiện khuôn mặt và trích xuất vùng:
      • Phân loại trạng thái khóe miệng, vị trí lông mày trái, mắt phải có mở hay không, v.v.
      • Thu thập hàng trăm ảnh khuôn mặt đã gán nhãn từ cơ sở dữ liệu.
      • Truyền các trạng thái nhị phân đã phân loại qua socket và render avatar bằng OpenGL.
    • Kết quả:
      • Rất nhạy với thay đổi ánh sáng, khó chỉnh tham số và việc huấn luyện mất nhiều thời gian.
      • OpenCV khó dùng và việc sửa chương trình cũng khá phiền phức.
  • Thành quả:
    • Tác giả học được rất nhiều qua hàng loạt lần thử và sai.
    • Tháng 1/2013, tác giả tải lên và chia sẻ video demo ban đầu:
      • Video demo tuy còn nghiệp dư nhưng đã đạt hơn 1000 lượt xem.
  • Đây là một giai đoạn trưởng thành quan trọng, khi tác giả học cách hiện thực hóa lý thuyết và giải quyết vấn đề trong thực tế

Cây quyết định, phân cụm, thuật toán gợi ý: trải nghiệm trong chương trình tiến sĩ

  • Mục tiêu nghiên cứu:
    • Tác giả cố gắng giải quyết các vấn đề sau bằng cách phân tích dữ liệu log từ trình soạn thảo mã:
      • Xác định liệu lập trình viên có đang bị mắc kẹt hoặc lạc hướng trong code hay không.
      • Dự đoán file mà lập trình viên sẽ khám phá tiếp theo.
      • Gợi ý chính xác đoạn code mà họ quan tâm.
  • Các phương pháp thống kê được sử dụng:
    • Thuật toán C4.5: tạo cây quyết định.
    • K-means và DBSCAN: phân cụm sự kiện.
    • Apriori và collaborative filtering: tìm liên hệ giữa các sự kiện.
    • Kết quả:
      • Dù là các phương pháp đơn giản, chúng cho hiệu năng mạnh đến bất ngờ.
      • Trong đa số trường hợp, chúng đã đủ hiệu quả hơn là dùng mạng nơ-ron phức tạp.
  • Thành quả:
    • Công bố bài báo, tham gia nhiều kỳ thực tập và xây dựng các công cụ cho lập trình viên.
    • Tác giả đã tốt nghiệp tiến sĩ thành công.
  • Tài liệu liên quan:
    1. Bài báo: phân tích dữ liệu về cách lập trình viên tìm kiếm thông tin
      Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
    2. Báo cáo thực tập tại Microsoft: trải nghiệm xây dựng bot review code
      When users never use the features they asked for
  • Trong thời gian làm tiến sĩ, tác giả đã dùng các kỹ thuật thống kê để giải quyết các vấn đề thực tế và đạt được những kết quả có ý nghĩa cả trong học thuật lẫn thực tiễn

Giao diện người dùng thông minh: khởi đầu nghiên cứu trên cương vị giảng viên

  • Định hướng nghiên cứu mới:
    • Năm 2018, với vai trò giáo sư tenure-track, tác giả chọn Intelligent Developer Tools làm chủ đề nghiên cứu.
    • Ban đầu khái niệm này còn mơ hồ, nhưng tác giả bắt đầu bằng một dự án dùng mô hình dự đoán để xác định và sửa trước các hiểu nhầm của lập trình viên.
  • Đề xuất nghiên cứu đầu tiên:
    • Mục tiêu dự án:
      1. Sử dụng kỹ thuật phân tích chương trình và mô hình dự đoán để xác định những hiểu nhầm mà lập trình viên mới có về hành vi của chương trình.
      2. Sửa các hiểu nhầm đó và giải thích logic mà không làm gián đoạn lập trình viên.
      3. Tạo mã kiểm thử để phát hiện những thay đổi hành vi chương trình ngoài ý muốn, qua đó ngăn hiểu nhầm trong tương lai.
    • Tóm tắt:
  • Dự án thứ hai:
    • Nghiên cứu dự đoán nhu cầu thông tin của lập trình viên và tạo giao diện người dùng theo thời gian thực.
    • Ví dụ:
      • Với lập trình viên đang duyệt lịch sử Git, hệ thống trực quan hóa và đề xuất một tập commit phù hợp.
  • Tích hợp nghiên cứu:
  • Thành quả và giới hạn:
    • Dự án khởi đầu thành công và nhận được tài trợ, nhưng tác giả đã từ chức giảng viên trước khi nghiên cứu thực sự được triển khai sâu.
  • Đây là một bước ngoặt quan trọng, nơi tác giả cụ thể hóa nghiên cứu về giao diện người dùng thông minh và thiết kế một tầm nhìn lớn

Tổng hợp chương trình và mô hình ngôn ngữ lớn (LLM): trải nghiệm tại Microsoft

Kết

  • Đó là 25 năm đầy niềm vui
  • Kế hoạch tiếp theo là gì? Tiếp tục dạy, tiếp tục học và tiếp tục tạo ra mọi thứ

1 bình luận

 
GN⁺ 2025-01-07
Ý kiến trên Hacker News
  • Tôi từng ở trong một nhóm AI, nhưng đã kiềm chế việc áp dụng AI nếu không có lý do thật sự thuyết phục. Chúng tôi tự hỏi liệu có đang giải quyết vấn đề của người dùng hay không, có thật sự cần LLM hay chỉ vài câu lệnh if là đủ. Cũng cần chắc chắn rằng ngôn ngữ tự nhiên có phải là giao diện phù hợp hay không
    • Cách tiếp cận thực dụng trong lĩnh vực AI này tạo cảm giác mới mẻ. Tôi từng có trải nghiệm xây dựng một công cụ mà mô hình hồi quy đơn giản cho kết quả tốt hơn mạng nơ-ron. Rất khó tránh khỏi phản ứng từ cả nhóm khi không muốn all-in vào AI
  • Tôi đã trải qua một hành trình tương tự suốt 14 năm và luôn tự hỏi ngày nay mọi thứ sẽ khác ra sao
    • Chúng tôi đã trưởng thành cùng ngành và có thể dần dần học những thứ ngày càng phức tạp hơn. Những sinh viên tốt nghiệp ngày nay phải đối mặt với mức độ phức tạp tích lũy qua hàng chục năm ngay từ công việc đầu tiên
  • Gần đây tôi thấy một người rời UTK, và bài blog anh ấy viết khiến tôi suy nghĩ lại về việc theo con đường học thuật sau khi học xong cao học
  • Một trang web không lộn xộn bởi quảng cáo và popup mang lại cảm giác thật mới mẻ. Nội dung gồm văn bản sạch sẽ, được sắp xếp gọn gàng và bố cục đơn giản
  • Với nhiều người, AI là một hành trình thú vị để tạo ra những điều đáng kinh ngạc. Tôi đồng ý rằng các kết quả thật ấn tượng. Tuy nhiên, thật đáng buồn khi các nhà khoa học không nghĩ đến tác động lớn hơn của công việc họ đối với xã hội. Khi vị thế xã hội của họ tăng lên, những gì họ tạo ra làm thay đổi căn bản cấu trúc xã hội. AI là một trong những yếu tố nguy hiểm, và việc các tập đoàn lớn tôn vinh trí tuệ để thu hút con người là dấu hiệu của thảm họa