Khuếch tán trên cây cú pháp cho tổng hợp chương trình
Tổng quan
- Vấn đề: Mô hình ngôn ngữ lớn (LLM) tạo mã theo từng token một. Trong quá trình này, phản hồi từ việc quan sát kết quả thực thi của chương trình còn thiếu.
- Giải pháp: Đề xuất một mô hình khuếch tán thần kinh hoạt động trên cây cú pháp. Tương tự như mô hình khuếch tán cho ảnh, nó đảo ngược nhiễu đã được áp vào cây cú pháp.
- Phương pháp: Thay vì sinh mã, hệ thống chỉnh sửa lặp đi lặp lại để duy trì tính hợp lệ về cú pháp. Nhờ đó dễ kết hợp với tìm kiếm hơn.
- Ứng dụng: Áp dụng cho bài toán đồ họa nghịch đảo để chuyển đổi hình ảnh thành chương trình tạo ra chính hình ảnh đó. Kết hợp với tìm kiếm để viết chương trình đồ họa, kiểm tra kết quả thực thi và gỡ lỗi.
Thêm nhiễu vào chương trình là gì?
- Thêm nhiễu: Chọn một nút ngẫu nhiên trong cây cú pháp và thay thế nút đó bằng một nút khác có kiểu phù hợp.
- Đảo ngược nhiễu: Sau khi thêm nhiễu, xử lý ngược lại để đưa về trạng thái ban đầu.
Tạo chương trình thông qua tìm kiếm
- Sử dụng tìm kiếm: Mô hình dùng tìm kiếm để tìm chương trình tối ưu nhằm tạo ra hình ảnh mục tiêu đã cho.
- Hiệu quả: Chỉ với một vài lớp tìm kiếm đã có thể tìm ra chương trình đúng.
Trích dẫn
- Bài báo: "Diffusion On Syntax Trees For Program Synthesis"
- Tác giả: Shreyas Kapur, Erik Jenner, Stuart Russell
- Xuất bản: arXiv, 2024
Lời cảm ơn
- Hỗ trợ kỹ thuật: Kathy Jang, David Wu, Cam Allen, Sam Toyer, Eli Bronstein, Koushik Sen, Pieter Abbeel
Giấy phép
- Creative Commons Attribution-ShareAlike 4.0 International License: Có thể tự do sử dụng mã nguồn của trang web này, nhưng phải thêm liên kết ở cuối trang.
Ý kiến của GN⁺
- Điểm thú vị: Cách chỉnh sửa mã bằng cách phản ánh kết quả thực thi của chương trình trực quan hơn so với cách sinh mã tuần tự truyền thống.
- Lý do hữu ích: Hữu dụng cho bài toán đồ họa nghịch đảo, đặc biệt có thể trở thành công cụ mạnh để chuyển các bản phác thảo vẽ tay thành chương trình.
- Góc nhìn phê bình: Quá trình thêm và đảo ngược nhiễu có thể phức tạp, và cần được kiểm chứng thêm về hiệu năng cũng như hiệu quả khi áp dụng thực tế.
- Đề xuất sản phẩm liên quan: Một dự án khác cung cấp chức năng tương tự là các mô hình sinh mã như Codex của OpenAI.
- Các điểm cần cân nhắc khi áp dụng công nghệ: Khi áp dụng công nghệ này, cần xem xét kỹ dữ liệu huấn luyện của mô hình và hiệu năng trong môi trường triển khai thực tế.
1 bình luận
Ý kiến trên Hacker News
Racket và tạo gợi ý cho MOOC: Cách này giống với Racket và phương pháp tạo gợi ý cho MOOC. Nó biến đổi và phân tích cây cú pháp để đi đến lời giải mục tiêu. Tôi tự hỏi liệu có thể kết hợp điều này với các cách tiếp cận học máy hiện đại hay không.
Thuật toán di truyền và biến đổi cây con: Trong thập niên 90, Koza và Adami đã nghiên cứu sâu về biến đổi cây con như một phần của thuật toán di truyền. Hàm tối ưu hóa có hơi khác một chút.
Tạo cây chương trình: Có tài liệu tham khảo từ năm 2000 về việc tạo cây chương trình bằng thuật toán di truyền. Nội dung chính thì còn thiếu.
Markov Chain Monte Carlo: Việc dùng Markov Chain Monte Carlo cho tổng hợp chương trình không phải là mới. Nghiên cứu của Josh Tenenbaum lập tức hiện ra trong đầu.
Bản demo WebPPL: Có nhiều bản demo trong WebPPL, bao gồm cả tổng hợp tàu vũ trụ 3D. Cũng đề xuất các đầu sách liên quan và các ấn phẩm của MIT Probabilistic Computing Project.
Tối ưu hóa compiler/interpreter: Tôi tò mò không biết điều này sẽ được áp dụng thế nào vào tối ưu hóa compiler/interpreter. Liệu có thể phân tích phần thực thi ở mức assembly và suy ra các tối ưu hóa hay không.
Thay đổi token chương trình: Trong cách tiếp cận truyền thống, người ta tạo ảnh ngẫu nhiên và dùng phương pháp tối ưu hóa. Thật khó hiểu làm sao việc thay đổi token chương trình lại có thể khả vi.
Tích hợp GitHub và công cụ build: GitHub có thể được tích hợp với các công cụ build thông thường. Tôi tự hỏi liệu có thể biên dịch mọi dự án được biên dịch bằng llvm và áp dụng mô hình diffusion lên biểu diễn trung gian hay không.
Mô hình diffusion và binary: Tôi tò mò liệu mô hình diffusion có thể hoạt động ở mức binary hay không. Nếu đưa một prompt, liệu nó có thể tạo ra binary cuối cùng của chương trình không.
Tích hợp với SDF: Tôi muốn thấy sự tích hợp với SDF.
Tốc độ render PDF: PDF render chậm vì các lệnh vẽ được tạo ra bằng chương trình. Điều đó gợi cảm giác như một bài báo học thuật, thật đáng nhớ.
Beam search và reverse diffusion: Ý tưởng beam search khá thú vị. Tôi tò mò không biết họ tích hợp reverse diffusion và beam search như thế nào. Có phải ở bước reverse diffusion họ lấy mẫu m > k nút rồi chỉ mở rộng top k nút hay không.