Hugging Face: Blog
85

Thủ thuật

Hugging Face hướng dẫn huấn luyện AI vẽ tranh màu nước bằng code thông qua TRL và OpenEnv

(giờ Việt Nam)

Tóm tắt AI

Hugging Face chia sẻ quy trình mã nguồn mở sử dụng TRL, OpenEnv và mô hình Qwen3.5 để huấn luyện AI viết code JavaScript vẽ tranh màu nước, kèm theo toàn bộ dữ liệu và môi trường thực thi.

Bản dịch AI

Training a coding model to paint watercolours with TRL and OpenEnvTraining a coding model to paint watercolours

Vào ngày 23 tháng 8, Surya Narreddi đã đăng một video tuyệt đẹp về những bức tranh màu nước được vẽ bởi một mô hình ngôn ngữ. Mô hình này viết mã JavaScript thông qua p5.brush, một thư viện "bổ sung các công cụ vẽ tự nhiên vào p5.js". Video này nhanh chóng trở nên lan truyền, đạt hơn 1,5 triệu lượt xem tại thời điểm viết bài.

Video đi kèm với một bài blog giải thích quá trình huấn luyện đằng sau một giai đoạn sớm và hẹp hơn của dự án, tập trung vào các bông hoa cận cảnh thay vì các bố cục đầy đủ như trong video, đáng tiếc là chưa có các tài nguyên mở. Trang web của anh ấy cho biết một báo cáo kỹ thuật đầy đủ sắp ra mắt, vì vậy hãy đảm bảo bạn theo dõi anh ấy. Ý tưởng ban đầu là của anh ấy, xuất phát từ khía cạnh nghệ thuật và thiết kế, nơi mà kỹ năng của anh ấy vượt xa tôi. Nỗ lực của tôi nằm ở khía cạnh kỹ thuật, tái tạo công thức này dưới dạng mã nguồn mở với mọi thành phần được công bố.

Lưu ý: để biết bối cảnh đằng sau dự án, được chính Surya kể lại, hãy xem video về luận văn của anh ấy.

Trong bài viết này, tôi cố gắng tái tạo ý tưởng của anh ấy với TRL và OpenEnv. Tập dữ liệu tham chiếu, môi trường RL, các tập lệnh huấn luyện và các mô hình đã huấn luyện, tất cả đều là mã nguồn mở.

Toàn bộ quy trình chạy trên Hugging Face, từ đầu đến cuối:

Khi hai Spaces đã sẵn sàng, công thức chỉ cần một lệnh. Sao chép môi trường và mô hình chấm điểm, thiết lập hai biến môi trường cho sự kết hợp phần thưởng, và khởi chạy:

Phần còn lại của bài viết này là câu chuyện về quá trình thực hiện, và mọi thành phần đều nằm trong kho lưu trữ.

Tôi đã làm theo blog gốc từng bước một và chỉ thay đổi khi thực sự cần thiết. Mọi ý tưởng của riêng tôi đều được đưa vào một danh sách thay vì đưa vào thử nghiệm, và danh sách đó đã trở thành "Những điều tôi sẽ thử tiếp theo" ở cuối bài, bên cạnh danh sách đầy đủ các tài nguyên đã công bố. Nếu bạn đã đọc bài viết của anh ấy, cách thiết lập và thiết kế phần thưởng sẽ rất quen thuộc. Nội dung mới là bản triển khai mở, tập hợp các hình ảnh được đánh giá thủ công, và ba sự kết hợp phần thưởng đã được huấn luyện và so sánh, bắt đầu từ phần "Môi trường RL bạn cần xây dựng".

Tại sao mọi người lại yêu thích nó

Các bức tranh trông phóng khoáng, không hoàn hảo, mang tính thủ công, trong thời điểm mà các mô hình hình ảnh tạo ra những bức tranh hoàn hảo (trung bình về mặt thống kê). Tôi đoán rằng sự tương phản này là một phần lớn lý do khiến video trở nên lan truyền. Nó làm tôi nhớ đến những ngày đầu của nghệ thuật AI tạo sinh, khi mục đích là khám phá phương tiện. DeepDream (2015) là một công cụ gỡ lỗi mà mọi người đã biến thành nghệ thuật, các tác phẩm như Edmond de Belamy (2018) đến từ những nghệ sĩ thăm dò khả năng của GAN, và những nghệ sĩ như Mario Klingemann đã dành những năm đó để tạo ra những bức chân dung đầy mơ mộng với mạng thần kinh.

Dự án này mang lại cảm giác gần gũi với những ngày đầu đó. Trong luận văn của mình, Surya mô tả con đường dẫn đến đây. Anh ấy bắt đầu bằng việc viết câu lệnh (prompt) cho các mô hình văn bản-thành-hình ảnh, nơi câu lệnh là đòn bẩy duy nhất bạn có thể sử dụng, và thêm chi tiết chỉ mang lại quyền kiểm soát đến một mức độ nhất định. Việc tự huấn luyện mô hình còn tiến xa hơn thế. Một nửa còn lại của ý tưởng là phương tiện. Mô hình viết một chương trình khoảng 150 dòng JavaScript để vẽ hình ảnh. Đầu ra của mô hình đó là mã. Bạn có thể đọc, chỉnh sửa và chạy lại nó, và quyết định đằng sau mỗi nét cọ đều có thể nhìn thấy được. Và phong cách đến từ một sự hạn chế khi mô hình chỉ được phép sử dụng mười phương thức của thư viện. Xem thêm chi tiết bên dưới.

Trong cùng thời kỳ đó, Anna Ridler đã chụp hàng ngàn bông hoa tulip, dán nhãn thủ công từng bông một, triển lãm chính tập dữ liệu đó như một tác phẩm nghệ thuật, và sau đó huấn luyện một mô hình trên đó. Tôi tìm thấy tác phẩm của cô ấy thông qua các tài liệu tham khảo mà các tác nhân AI mang lại trong khi xây dựng dự án này và rất yêu thích nó vì dự án này làm điều tương tự bằng cách tuyển chọn một tập hợp hình ảnh bằng tay, và sau đó huấn luyện dựa trên chúng.

RL dựa trên thị hiếu

Hầu hết các công trình RL gần đây trên các mô hình ngôn ngữ sử dụng các phần thưởng mà bạn có thể xác minh. Ví dụ, các bài toán toán học với đáp án đã biết, mã vượt qua các bài kiểm tra, hoặc các bộ chấm điểm đúng/sai và chạy với chi phí thấp. Dự án này gần hơn với ngoại lệ cũ, RLHF, nơi mô hình học một mô hình phần thưởng từ sở thích của con người.

Ở đây, phần thưởng là sở thích thẩm mỹ. Không có câu trả lời đúng. Câu hỏi thực sự của dự án là liệu bạn có thể thực hiện RL dựa trên thị hiếu hay không.

Phần thưởng, như blog của anh ấy định nghĩa và như môi trường RL mà tôi đã xây dựng thực hiện:

HPSv3 là một mô hình sở thích 7B mã nguồn mở. Cung cấp cho nó một hình ảnh và một mô tả văn bản, nó sẽ trả về điểm số về mức độ một người sẽ thích hình ảnh đó. Nó được huấn luyện trên một tập hợp lớn các lựa chọn của con người giữa các cặp hình ảnh, vì vậy điểm số của nó là mức trung bình về thị hiếu của nhiều người. Bộ đánh giá theo cặp là Qwen3-VL-30B-A3B-Instruct, một mô hình thị giác tổng quát được gọi thông qua HF Inference Providers. Bộ đánh giá theo cặp nhìn thấy bức tranh ứng viên bên cạnh bốn tài liệu tham khảo được chọn ngẫu nhiên từ tập hợp, được hướng dẫn bởi mô tả bằng văn bản về những gì cần cân nhắc (độ loang màu, các lớp màu trong suốt, các cạnh mềm), mỗi lần so sánh đều ở cả hai thứ tự trình bày, và điểm số của nó là tỷ lệ các lần so sánh mà ứng viên giành chiến thắng. Tiêu chuẩn duy nhất của nó là tập hợp tham chiếu, vì vậy điểm số của nó chính là thị hiếu của tôi, được mã hóa trong các đánh giá đó.

The reward pipeline, piece by piece

Đó là những trọng số mà Narreddi đã hội tụ. Tập hợp tham chiếu xác định thị hiếu ở đây. Điều đó chuyển công việc từ việc tinh chỉnh siêu tham số sang việc xây dựng tập hợp quyết định cái gì là đẹp.

Tôi đã huấn luyện ba lần chạy với phần thưởng này. Chúng chỉ khác nhau ở cách phân chia trọng số giữa hai bộ đánh giá mô hình:

Tôi bắt đầu với hps-only để xác nhận rằng quy trình có thể học được. Khi phần thưởng tăng lên và các chỉ số ổn định, không có lý do gì để chạy lâu hơn, vì vậy tôi đã khởi chạy hai lần chạy dài hơn thay thế. Câu hỏi mà các lần chạy dài hơn đặt ra là bạn có thể giao bao nhiêu sức mạnh của HPSv3 cho bộ đánh giá theo cặp? Trọng số của bộ đánh giá càng lớn, phần thưởng càng phản ánh thị hiếu của tôi thay vì của mọi người, và việc đạt được kết quả sẽ càng khó khăn hơn. Ngẫu nhiên, nếu bạn đẩy nó đi quá xa hoặc phong cách của bạn quá khác biệt so với mức trung bình, mô hình có thể dừng hoàn toàn.

May mắn thay, nó không dừng lại và cả hai lần chạy với bộ đánh giá theo cặp cũng đã học được. Tập hợp được đánh giá thủ công có thể điều hướng chính sách, ít nhất là theo các chỉ số và các bức tranh cuối cùng cho thấy. Các con số nằm bên dưới.

Tuyên bố miễn trừ trách nhiệm. Nếu chúng ta sử dụng một mô hình tiên tiến, nó đã có thể tạo ra mã JavaScript vẽ tranh màu nước từ một câu lệnh. Đó là điểm khởi đầu. Công việc ở đây là dạy một mô hình nhỏ hơn thực hiện điều đó kết hợp với sở thích nghệ thuật của riêng một người.

Môi trường RL bạn cần xây dựng

Môi trường bao bọc mọi thứ nằm giữa mô hình và phần thưởng, bao gồm thư viện JavaScript mà mô hình sử dụng để vẽ, câu lệnh hệ thống hạn chế nó, Chromium không đầu hiển thị từng bản phác thảo, và cổng chặn các hành vi gian lận.

Thư viện thực hiện nhiều công việc hơn vẻ ngoài của nó. p5.brush, bởi @acamposuribe, mô phỏng một phương tiện thay vì vẽ các hình khối: sắc tố loang ra ngoài các cạnh của vùng tô, giấy có kết cấu, các nét vẽ có khối lượng, các trường dòng chảy kéo nét cọ xung quanh. Khi mô hình gọi brush.fillBleed(0.25), nó đang quyết định mực sẽ loang xa bao nhiêu.

Lưu ý. Tác giả của p5.brush đã cố gắng dạy máy tính vẽ từ rất lâu trước khi có tất cả những điều này. Năm 2022, anh ấy đã thực hiện một loạt tác phẩm nghệ thuật tạo sinh ẩn chứa một cuốn nhật ký về việc dạy p5.js vẽ như một đứa trẻ: "Nó hầu như không thể sử dụng bút sáp màu [...] Nó không thể làm theo các lệnh đơn giản. Tôi xong việc cho hôm nay rồi, thật bực mình." Loạt tác phẩm dự định có ba phần, và anh ấy đã làm được hai. Khi video của Surya trở nên lan truyền, anh ấy đã trích dẫn nó, chia sẻ cuốn nhật ký đó và nói rằng tác phẩm này là phần thứ ba tự nó xuất hiện.

p5.brush cung cấp 47 phương thức. Câu lệnh cho phép 10 phương thức: scaleBrushes, noStroke, fill, noFill, fillBleed, fillTexture, beginShape, vertex, endShape và circle. Những gì 37 phương thức còn lại thêm vào, như đường kẻ, gạch chéo, cọ tùy chỉnh, sẽ phá vỡ vẻ ngoài của màu nước. Với mười phương thức này, mô hình chỉ có thể vẽ các hình khối được tô màu, và thư viện thêm hiệu ứng loang màu vào mỗi hình trong số đó.

A generated sketch and the painting it produces

Bài blog của anh ấy đã giúp tôi tiết kiệm rất nhiều thời gian mà tôi có thể đã lãng phí để lặp lại câu lệnh. Một tài liệu tham khảo API dài khiến mô hình phát minh ra các phương thức không tồn tại, và 200 lần lặp GEPA của anh ấy đã hội tụ về một danh sách cho phép nghiêm ngặt mà không cần tài liệu. Tôi đã thấy những thất bại tương tự và tự tay viết danh sách cho phép. Đóng góp duy nhất của tôi cho công thức đó là một câu: vẽ mỗi cánh hoa hai hoặc ba lần, một lần vẽ lớn trước và một lần nhỏ hơn, đục hơn ở bên trong. Thay đổi nhỏ này làm cho đầu ra của tôi có nhiều màu sắc hơn hẳn.

Lưu ý. Nếu đây là lần đầu tiên bạn nghe về GEPA, đó là một trình tối ưu hóa câu lệnh tự động. Một mô hình ngôn ngữ suy ngẫm bằng ngôn ngữ đơn giản về nơi câu lệnh hiện tại thất bại và đề xuất một câu lệnh tốt hơn, và vòng lặp cứ thế tiếp diễn.

Cổng chặn là mảnh ghép cuối cùng. Bản phác thảo phải biên dịch được, sử dụng thư viện thay vì các lệnh p5 trực tiếp, đặt sắc tố thực lên khung vẽ, và không cố gắng đánh lừa bộ chấm điểm, ví dụ như bằng cách viết văn bản lên khung vẽ.

Tập hợp tham chiếu là hàm phần thưởng

Tập hợp bao gồm 178 bức tranh được chia thành hai cấp độ dựa trên sở thích cá nhân của tôi: yêu thích và ổn. Tất cả chúng thực sự được tạo ra bởi một mô hình. Bốn mô hình mã nguồn mở, được gọi thông qua Inference Providers, đã viết các bản phác thảo p5.brush, mỗi mô hình làm việc từ một bức ảnh thực, có giấy phép mở về hoa dâm bụt từ iNaturalist. Một mô hình thị giác đã đưa ra phản hồi bằng văn bản cho mỗi bản phác thảo, qua ba lần tinh chỉnh. Mỗi bản vẽ cuối cùng sau đó được đánh giá từng cái một bởi tôi, và 178 bức đã được chọn.

Ở đây tôi chọn bốn họ mô hình khác nhau để kiểm tra các phong cách khác nhau của chúng. Bốn mô hình này là các mô hình mở tạo ra bản phác thảo hợp lệ mỗi lần trong một bài kiểm tra độ tin cậy nhanh, và hai ứng viên khác đã bị loại vì không vượt qua được. Nếu bạn muốn tạo tập hợp của riêng mình, bạn có thể chọn những mô hình khác.

A love reference beside an okay one

Các cấp độ thực hiện công việc thực sự trong phần thưởng. Khi bộ đánh giá theo cặp rút ra bốn tài liệu tham khảo, một nửa đến từ nhóm "yêu thích" và một nửa từ nhóm "ổn", vì vậy chính sách luôn đối mặt với một số đối thủ mà nó đôi khi có thể đánh bại, và một chiến thắng mang lại giá trị như nhau đối với bất kỳ cấp độ nào. Đây là một trong số ít những thay đổi có chủ ý của tôi: bản gốc chỉ so sánh với cấp độ cao nhất của nó, và tôi giữ lại cấp độ dễ hơn trong lượt rút để một chính sách yếu ban đầu vẫn nhận được tín hiệu.

Không có bức tranh nào do con người tạo ra ở đó, đó là một hạn chế thực sự. p5.brush là một thư viện ngách, và các tác phẩm của con người tồn tại trong đó với mã nguồn có thể truy cập được chỉ là một vài mảnh, không hề gần với những gì một kho dữ liệu huấn luyện cần, như blog của anh ấy cũng lưu ý.

Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hugging Face: Blog. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.