Bỏ qua đến nội dung chính

Let LLMs Wander: Engineering RL Environments — Stefano Fiorucci

TL;DR

  • Học tăng cường (RL) với phần thưởng có thể kiểm chứng đang nổi lên như một phương pháp quan trọng để vượt qua giới hạn của huấn luyện LLM truyền thống (như tinh chỉnh có giám sát), cho phép mô hình học các chiến lược suy luận phức tạp và sử dụng công cụ một cách hiệu quả.
  • Thay vì chỉ bắt chước dữ liệu có sẵn, RL cho phép các LLM hoạt động như "tác nhân" tương tác với "môi trường" động, khám phá và cải thiện hành vi thông qua thử và sai để tối đa hóa phần thưởng.
  • Thư viện mã nguồn mở như Verifiers giúp xây dựng và tiêu chuẩn hóa các môi trường RL này, hỗ trợ từ các tác vụ đơn giản đến các kịch bản nhiều lượt và sử dụng công cụ phức tạp, tạo nền tảng cho việc huấn luyện và đánh giá LLM quy mô lớn.

Điểm chính

  • Hạn chế của huấn luyện LLM truyền thống: Huấn luyện trước và tinh chỉnh có giám sát (SFT) đang dần bộc lộ giới hạn, đặc biệt trong việc dạy LLM các chuỗi suy nghĩ phức tạp hoặc sử dụng công cụ hiệu quả ở quy mô lớn do chi phí tạo dữ liệu cao.
  • Học tăng cường với phần thưởng có thể kiểm chứng: Đây là phương pháp cốt lõi cho phép mô hình học từ các kết quả có thể tự động xác minh (ví dụ: câu trả lời đúng, thắng cuộc chơi, gọi công cụ thành công), thay vì chỉ dựa vào các ví dụ huấn luyện của con người.
  • Mô hình tác nhân-môi trường: LLM được coi là "tác nhân" thực hiện "hành động" và học hỏi từ "phần thưởng" nhận được từ "môi trường", bao gồm tác vụ, dữ liệu, phân tích và quy tắc tính điểm.
  • Khung Verifiers: Một thư viện mã nguồn mở giúp xây dựng môi trường RL cho LLM dưới dạng các artifact phần mềm mô-đun, hỗ trợ cả đánh giá và huấn luyện. Nó trừu tượng hóa việc phân phát mô hình và tương tác không đồng bộ.
  • Các loại môi trường trong Verifiers: Hỗ trợ môi trường một lượt (single-turn), nhiều lượt (multi-turn) với khái niệm trạng thái (state) và điều kiện dừng (stopping condition), và môi trường công cụ (tool environments) nơi LLM có thể gọi các hàm Python hoặc API.
  • Quy trình đánh giá và huấn luyện: Môi trường tạo ra nhiều "lần chạy thử" (rollout), gửi yêu cầu đến mô hình, phân tích phản hồi, tính toán phần thưởng và lưu kết quả. Huấn luyện thêm bước cập nhật tham số mô hình dựa trên phần thưởng.
  • Tầm quan trọng của môi trường nhiều lượt và công cụ: Các môi trường này rất cần thiết để LLM có thể thực hiện các tác vụ phức tạp, nhiều bước, tương tác với thế giới bên ngoài hoặc sử dụng các công cụ hỗ trợ suy luận.
  • Chống phân mảnh môi trường: Các sáng kiến mã nguồn mở như Verifiers và Environments Hub nhằm tạo ra một không gian cộng đồng để chia sẻ và tái sử dụng các môi trường RL, đảm bảo các mô hình mã nguồn mở có đủ "sân chơi" để huấn luyện.

Từ vựng

  • orchestration — điều phối/điều hành
  • LLM framework — khung làm việc LLM
  • Reinforcement Learning (RL) — Học tăng cường
  • Agent — Tác nhân
  • Environment — Môi trường
  • Reward — Phần thưởng
  • Supervised Fine-Tuning (SFT) — Tinh chỉnh có giám sát
  • Chain-of-Thought — Chuỗi suy nghĩ
  • Verifiable Rewards — Phần thưởng có thể kiểm chứng
  • Rollout — Lần chạy thử / Quỹ đạo

Nội dung chi tiết

Giới thiệu về Reinforcement Learning cho Mô hình Ngôn ngữ Lớn

Chào mừng tất cả mọi người đến với LatinLampsWonder: Môi trường Kỹ thuật và Học tăng cường. Tôi là Stefan von Ruchi, một kỹ sư phần mềm chính. Ban ngày, tôi làm về orchestration AI tại Deepset, nơi tôi phát triển Haystack, một khung làm việc LLM mã nguồn mở. Ban đêm, tôi thích vọc vạch với các mô hình ngôn ngữ nhỏ, tinh chỉnhhọc tăng cường. Hôm nay, tôi sẽ nói về môi trường học tăng cường cho mô hình ngôn ngữ, đánh giáhuấn luyện.

Đây là một chủ đề nóng trong năm qua và tôi thấy nó hấp dẫn vì nhiều lý do. Các môi trường này cho phép mô hình học hỏi bằng cách tương tác, khám phá và cải thiện từ phản hồi. Chúng là những "phòng tập" tự nhiên cho các tác nhân LLM có thể sử dụng công cụ, chạy , và giải quyết các tác vụ nhiều bước. Ngoài ra, các startup xây dựng môi trường song song đang nhận được nguồn tài trợ lớn và làm việc trực tiếp với các phòng thí nghiệm AI lớn. Các báo cáo kỹ thuật gần đây của DeepSeek và Minimax cho thấy họ đang sử dụng hiệu quả hàng nghìn môi trường học tăng cường để cải thiện hiệu suất mô hình trên các tác vụ đầy thách thứcmở rộng quy mô trí tuệ. Đừng lo lắng nếu bạn chưa biết gì về môi trường song song; tôi sẽ đề cập đến chúng sớm thôi.

Nội dung chính của bài nói

Dưới đây là chương trình nghị sự cho buổi nói chuyện này. Đầu tiên, chúng ta sẽ xem xét các khái niệm học tăng cường cổ điển và cách chúng ánh xạ vào miền mô hình ngôn ngữ. Sau đó, chúng ta sẽ giới thiệu Verifiers, một thư viện mã nguồn mở để xây dựng các môi trường dưới dạng các artifcat phần mềm và khám phá một số mô hình phổ biến để triển khai chúng. Cuối cùng, tôi sẽ hướng dẫn các bạn qua một thí nghiệm mà chúng ta lấy một mô hình nhỏ hầu như không thể chơi Tic-Tac-Toe với một người chơi ngẫu nhiên và biến nó thành một cao thủ sử dụng môi trường học tăng cường.

Ôn tập về Reinforcement Learning

Hãy bắt đầu. Đầu tiên, một ôn tập nhanh về học tăng cường. Trong học tăng cường, có hai nhân vật chính: tác nhânmôi trường. Môi trường là thế giới mà tác nhân tương tác. Ở mỗi bước, tác nhân quan sát trạng thái hiện tại của thế giới và thực hiện một hành động. Trạng thái của môi trường sau đó thay đổi để phản ứng lại hành động đó. Tác nhân cũng nhận được một phần thưởng từ môi trường, một con số cho biết trạng thái đó tốt hay xấu. Mục tiêu của tác nhân là tối đa hóa phần thưởng tích lũy của nó theo thời gian. Và để làm được điều này, nó phải cân bằng giữa khám phá (thử các hành động mới để khám phá các chiến lược tốt hơn) và khai thác (sử dụng các hành động đã biết là hiệu quả). Bằng cách tương tác với môi trường, tác nhân học hỏi từ kinh nghiệm và cải thiện hành vi của mình. Một quỹ đạo hoặc lần chạy thử (rollout) là chuỗi trạng thái, hành độngphần thưởngtác nhân trải qua khi tương tác với môi trường. Đó là một bản ghi về kinh nghiệm. Trong bài thuyết trình này, tôi sẽ dùng quỹ đạo để chỉ một tập hoàn chỉnh, như một trò chơi toàn bộ.

Huấn luyện Mô hình Ngôn ngữ Lớn truyền thống

Hãy cùng xem xét huấn luyện LLM. Một mô hình ngôn ngữ là một mô hình thống kê mà, khi được cung cấp một văn bản (lời nhắc), sẽ trả về một hoàn thành văn bản. Công thức huấn luyện tiêu chuẩn được chia thành ba giai đoạn. Huấn luyện trước (pre-training) trên một lượng lớn văn bản Internet. Tại đây, mô hình học cách tạo hoàn thành văn bản. Mô hình cơ sở có kiến thức nhưng không thể tuân theo hướng dẫn và khó sử dụng trong các ứng dụng. Trong quá trình tinh chỉnh có giám sát (SFT) trên các ví dụ đàm thoại, mô hình được huấn luyện để tuân theo hướng dẫn và có thể học các tác vụ mới. Ở bước thứ ba, học tăng cường thường được sử dụng với các kỹ thuật như Proximal Policy Optimization (PPO) để căn chỉnh mô hình với sở thích của con người. Cần phải trình bày một ví dụ về dữ liệu tinh chỉnh có giám sát (SFT), vì sau này chúng ta sẽ thường xuyên so sánh học tinh chỉnh có giám sát với các phương pháp học tăng cường mới. Như bạn có thể thấy, chúng ta có các cặp lời nhắcphản hồi. Trong giai đoạn này, mô hình học bằng bắt chước thống kê. Về cơ bản, nó cố gắng bắt chước các ví dụ được cung cấp.

Giới hạn của mô hình truyền thống và tầm quan trọng của RL

Bạn có thể nhớ bài nói chuyện của Ilya Sutskever tại NeurIPS 2024. Ông đã chỉ ra rằng mô hình huấn luyện LLM mà chúng ta vừa xem xét đang bắt đầu bộc lộ những giới hạn của nó. Cụ thể, huấn luyện trước (pre-training) một mình dường như không còn đủ để tiếp tục cải thiện chất lượng mô hình với cùng tốc độ nữa. Chúng ta cần một cách mới để mở rộng quy mô. Sau đó, OpenAI đã công bố chuỗi mô hình O1 của mình. Trong bài đăng trên blog phát hành, họ đề cập đến huấn luyện học tăng cường để làm cho các mô hình sử dụng chuỗi suy nghĩ (chain-of-thought) một cách hiệu quả. Họ nhấn mạnh rằng hiệu suất của O1 liên tục được cải thiện với thời gian tính toán huấn luyện học tăng cường nhiều hơn và với nhiều thời gian dành để suy nghĩ (tính toán thời gian kiểm thử) hơn. Thật không may, họ không chia sẻ nhiều chi tiết về cách mô hình này thực sự được huấn luyện.

Học tăng cường với phần thưởng có thể kiểm chứng

Báo cáo kỹ thuật gần đây của DeepSeek đã làm sáng tỏ cách chúng ta có thể đạt được những kết quả đó. Đầu tiên, họ nhận ra rằng suy luậnchuỗi suy nghĩ (chain-of-thought) có thể cải thiện hiệu suất của mô hình, nhưng việc dạy hành vi này cho mô hình bằng tinh chỉnh có giám sát (SFT) đòi hỏi dữ liệu sáng tạo quá tốn kém để sản xuất ở quy mô lớn. Họ đã sử dụng học tăng cường với phần thưởng có thể kiểm chứng, điều mà chúng ta sẽ xem xét trong giây lát. Và DeepSeek cũng đã sử dụng GIPO, một thuật toán học tăng cường mới cung cấp một thiết lập đơn giản, nhẹ nhàng hơn so với các kỹ thuật như PPO.

Vậy, học tăng cường với phần thưởng có thể kiểm chứng là gì? Với mô hình này, mô hình được hỏi một câu hỏi và tạo ra cả dấu vết suy luận (reasoning trace) và một câu trả lời. Câu trả lời sau đó được kiểm tra so với câu trả lời đúng đã biết. Phần thưởng được sử dụng cho huấn luyện học tăng cường. Ý tưởng cơ bản mang tính tổng quát hơn và nó áp dụng trong các trường hợp mà kết quả có thể được kiểm chứng tự động, chẳng hạn như một câu trả lời đúng, một chiến thắng trong trò chơi, một lời gọi công cụ thành công, được coi là một tín hiệu huấn luyện.

Điều này khác biệt cơ bản so với tinh chỉnh có giám sát (SFT). Trong SFT, mô hình học từ các ví dụ đã được tuyển chọn, và các hoàn thành của nó có xu hướng giữ gần với phân phối của các ví dụ đó. Với học tăng cường kèm phần thưởng có thể kiểm chứng, mô hình khám phá các quỹ đạo khác nhau từ huấn luyện trước của nó và học cách ưa chuộng những quỹ đạo tối đa hóa phần thưởng. Và điều này thật thú vịmô hình không còn bị giới hạn bởi chất lượng của ví dụ từ con người nữa; thông qua thử và sai, nó có thể khám phá các chiến lược suy luận hiệu quả hơn.

Ánh xạ RL cổ điển sang LLM

Cuối cùng, chúng ta có thể ánh xạ các khái niệm học tăng cường cổ điển sang LLM. Mô hình ngôn ngữ đóng vai trò là tác nhân. Môi trường bao gồm bất kỳ tác vụ nào, bao gồm dữ liệu, phân tíchquy tắc tính điểm—bất cứ điều gì cần thiết để kiểm tra và có thể huấn luyện mô hình về tác vụ đó. Từ góc độ phần mềm, điều này đánh dấu một sự chuyển đổi từ tinh chỉnh có giám sát sang học tăng cường với phần thưởng có thể kiểm chứng. Trong khi SFT chủ yếu dựa vào tập dữ liệu đàm thoại, mô hình mới này thường yêu cầu một môi trường, một hệ thống độngmô hình có thể tương tác với.

Ví dụ minh họa: Huấn luyện LLM chơi Tic-Tac-Toe

Định nghĩa về tác nhân cũng đang mở rộng. Các mô hình ngôn ngữ giờ đây có thể được cung cấp các công cụ (từ API thời tiết đến terminal), và điều này làm cho các môi trường cho huấn luyệnđánh giá trở nên phức tạpquan trọng hơn. Để làm cho điều này trở nên cụ thể hơn, hãy xem xét việc dạy một mô hình chơi Tic-Tac-Toe. Tác nhânmô hình ngôn ngữ; hành động của nó là tạo ra một phản hồi văn bản với một nước đi cụ thể. Môi trường hoạt động như công cụ trò chơi (game engine); nó xử lý việc nhắc nhở (prompting) mô hình, theo dõi trạng thái thế giới (world state), tạo nước đi của đối thủ, và quyết định khi nào trò chơi kết thúc. Phần thưởngtín hiệu từ môi trường (ví dụ, +1 cho một chiến thắng0 cho một thua cuộc). Phần thưởng này hướng dẫn mô hình tìm ra các chiến lược thắng cuộc thông qua thử và sai. Thiết lập này cho phép tác nhân khám phá các chiến lược tối đa hóa điểm số của nó mà không cần ví dụ từ con người có sẵn trước.

Bạn có thể đã hiểu rằng tôi rất nhiệt tình với chủ đề này, nhưng hãy cùng sử dụng lời của André Karpathy để mô tả môi trường. Chúng mang lại cho LLM một cơ hội để thực sự tương tác, thực hiện hành động và thấy kết quả. Điều này có nghĩa là bạn có thể hy vọng làm tốt hơn nhiều so với bắt chước chuyên gia thống kê.

Xây dựng môi trường với Verifiers

Bây giờ, hãy xem cách xây dựng các môi trường này. Để xây dựng các môi trường dưới dạng artifcat phần mềm, chúng ta có thể sử dụng Verifiers, một thư viện mã nguồn mở của Prompting the Future. Verifiers cung cấp các thành phần mô-đun để tạo môi trường học tăng cường cho các tác nhân LLM. Điều này có thể được sử dụng cho cả đánh giáhuấn luyện. Các môi trường là các gói Python có thể dễ dàng cài đặtphân phối. Thư viện này cung cấp các lớp cơ sở cho một số thiết lập: môi trường một lượt (single-turn environments) (chỉ với một tương tác giữa mô hìnhmôi trường), môi trường nhiều lượt (multi-turn environments), môi trường công cụ (tool environments) (nơi mô hình được trang bị công cụ), và một số loại khác. Nó cũng bao gồm các khái niệm trừu tượng (abstractions) để phân tích cú pháp phản hồi của mô hình và định nghĩa hàm phần thưởng.

Verifiers trừu tượng hóa phân phát mô hình (model serving). Nó mong đợi một điểm cuối API tương thích với OpenAI, vì vậy bạn có thể kết nối OpenAI, OpenRouter hoặc các mô hình cục bộ thông qua LLM. Nó cho phép tương tác không đồng bộquỹ đạo song song, để bạn có thể tập trung vào logic môi trường. Để huấn luyện, Verifiers đi kèm với bộ huấn luyện của riêng nó và tích hợp với các khung làm việc khác như Pribarral, TinkerSkyral. Tóm lại, Verifiers cho phép chúng ta tập trung vào tác vụphần thưởng, thay vì cơ sở hạ tầng.

Ví dụ về môi trường một lượt: Đảo ngược văn bản

Hãy bắt đầu với một môi trường một lượt. Reverse Text là một môi trường đơn giản để đánh giá hoặc huấn luyện mô hình ngôn ngữ về khả năng đảo ngược một chuỗi văn bản của chúng. Điều gì đang diễn ra ở đây? LLMEnvironmentđiểm vào cho mọi môi trường Verifiers. Nó chứa tất cả logic thiết lập. Đầu tiên, tập dữ liệu được tảiánh xạ. Tập dữ liệu mặc định chứa một nghìn đoạn văn bản được lưu trữ trong cột lời nhắc. Trong bước ánh xạ, chúng ta chỉ lưu trữ tập dữ liệu gốc. Câu hỏiđoạn văn bản, trong khi Câu trả lờivăn bản đã đảo ngược. Tiếp theo, một bộ phân tích cú pháp trích xuất (extraction parser) được khởi tạo. Nó trích xuất văn bản (văn bản đã đảo ngược) như được chỉ định trong lời nhắc hệ thống. Sau đó, chúng ta định nghĩa hàm phần thưởng. Điều này so sánh đầu ra của mô hình với sự thật gốc (ground truth) và trả về tỷ lệ chuỗi con chung dài nhất (longest common subsequence ratio). Cuối cùng, chúng ta gói gọn điều này thành một rubric (một tập hợp phần thưởng có trọng số) và khởi tạo môi trường một lượt.

Quy trình đánh giá và huấn luyện

Nhưng điều này hoạt động như thế nào? Hãy để tôi chỉ cho bạn một lần chạy đánh giá. Đây là những gì xảy ra dưới lớp vỏ (under the hood). Môi trường được triệu gọi. Năm ví dụ được lấy từ tập dữ liệu, và mỗi ví dụ được sử dụng ba lần cho ba lần chạy thử. Mỗi lần chạy thử nhận cùng một câu hỏi, nhưng có thể tạo ra các hoàn thành khác nhau do tính ngẫu nhiên của mô hình. Chúng ta có tổng cộng 15 lần chạy thử. Đối với mỗi lần chạy thử, một cuộc hội thoại được chuẩn bị với lời nhắc hệ thốngcâu hỏi. Cuộc hội thoại được gửi đến mô hình. Mô hình tạo ra một phản hồi. Phản hồi được phân tích cú pháp, trích xuất câu trả lời. Phần thưởng được tính toán, và kết quả được lưu. Khi kết thúc đánh giá, bạn sẽ nhận được số liệu thống kê tóm tắt và, ngoài ra, các biểu đồ về phân phối phần thưởng. Huấn luyện tuân theo cùng một cơ chế cốt lõi với bước bổ sung là cập nhật tham số mô hình. Chúng ta sẽ xem xét chi tiết hơn về điều đó sau.

Môi trường nhiều lượt: Ví dụ Double Check

Hãy xem một ví dụ khác từ Verifiers: môi trường Double Check. Ở đây, mô hình trả lời một câu hỏi, và môi trường sau đó hỏi, "Bạn có chắc không?". Đây là một môi trường nhiều lượt (tương tự như Tic-Tac-Toe), trong đó mỗi quỹ đạo liên quan đến nhiều tương tác giữa mô hìnhmôi trường. Hãy cùng xem các môi trường nhiều lượt giới thiệu những gì. Trạng thái (State) xuất hiện lần đầu ở đây.

Nó là một từ điển theo dõi thông tin trong suốt một lần chạy thử. Chúng ta có thể đặt trạng thái ban đầu thông qua phương thức setup_state (không được sử dụng trong ví dụ này). Là phản hồi, thay vì tương tác kết thúc sau một lượt, môi trường có thể trả lời bằng một danh sách tin nhắn. Ở đây, nó chỉ nói, "Bạn có chắc không?". Trong các môi trường phức tạp hơn, phản hồi có thể được tạo động dựa trên trạng thái. Thứ năm, môi trường bao gồm một phương thức điều kiện dừng (stopping condition). Phương thức này chạy ở mỗi lượt tương tác giữa tác nhân và môi trường. Khi nó trả về True, lần chạy thử sẽ kết thúc. Tại đây, dưới lớp vỏ, Verifiers chạy một vòng lặp trong đó mô hìnhmôi trường thay phiên nhau, trao đổi tin nhắn, cập nhật trạng thái chia sẻ cho đến khi điều kiện dừng được đáp ứng và quỹ đạo hoàn chỉnh có thể được đánh giá. Một loại môi trường thú vị khác là môi trường công cụ.

Các Loại Môi Trường trong Verifiers

Tất cả các loại môi trường trong Verifiers đều được xây dựng trên multi-turn, trong đó triển khai vòng lặp rollout cốt lõi của một Tác nhân đơn lẻ. Để phù hợp với nền tảng này, như bạn có thể thấy, các công cụ được định nghĩa dưới dạng các hàm Python. Trong quá trình rollout, mô hình có thể gọi các công cụ, nhận kết quả và tiếp tục suy luận cho đến khi tạo ra một phản hồi mà không cần các mục tiêu công cụ. Mỗi lượt bao gồm một phản hồi của mô hình theo sau là quá trình thực thi công cụ của môi trường. Để có một ví dụ thực tế hơn, tôi khuyên bạn nên xem môi trường tác nhân nghiên cứu web.

Ngoài các môi trường cơ bản mà tôi vừa trình bày, Verifiers cung cấp nhiều lớp trừu tượng hơn để xây dựng trên các môi trường. Môi trường NCPM tự động kết nối với các protocol ngữ cảnh của mô hình, các máy chủ để phơi bày các công cụ của chúng. Một tính năng công cụ quan trọng là dành cho các công cụ cần trạng thái song song, được duy trì như kết nối cơ sở dữ liệu hoặc ID phiên. Cũng có một lớp triển khai các mô hình ngôn ngữ đệ quy, và tất cả các ý tưởng mà bạn có thể đã nghe nói đến. Đó là một chiến lược suy luận nơi các mô hình ngôn ngữ có thể phân tách và tương tác đệ quy với cửa sổ ngữ cảnh đầu vào hoặc dữ liệu không giới hạn thông qua các môi trường RAPL.

Verifiers cũng hoạt động tốt với các bên khác, tích hợp với một số thư viện môi trường của bên thứ ba. Verifiers được tích hợp chặt chẽ với Environments Hub, một không gian cộng đồng để chia sẻ các môi trường RL này. Verifiers và các môi trường là các giai đoạn khác nhau của cùng một nỗ lực. Chúng nhằm mục đích chống lại sự phân mảnh môi trường. Quá thường xuyên, các môi trường bị khóa vào các stack huấn luyện cụ thể, khiến chúng khó tái sử dụng. Và khi một thị trường cho các môi trường mã nguồn đóng xuất hiện, những sáng kiến mã nguồn mở này đảm bảo chúng ta có một giải pháp thay thế mạnh mẽ. Chúng ta không muốn các mô hình mã nguồn mở bị tụt lại phía sau chỉ vì chúng thiếu sân chơi phù hợp để huấn luyện. Thêm vào đó, ngoài khía cạnh nghiêm túc, việc khám phá trung tâm và xem mọi người đang xây dựng gì cũng rất thú vị.

Xây Dựng Môi Trường Cờ Caro với Verifiers

Bây giờ, chúng ta hãy chuyển sang trò Cờ caro (Tic-Tac-Toe). Chúng ta sẽ sử dụng Verifiers để tạo môi trường Cờ caro nhằm huấn luyện và đánh giá các mô hình ngôn ngữ trên trò chơi này. Vậy tại sao lại là Cờ caro? Đây là một trò chơi đơn giản, nhưng đòi hỏi tương tác multi-turn và việc nắm bắt động lực của nó bằng tập dữ liệu tĩnh là một thách thức. Mặc dù có không gian trạng thái nhỏ và các giải pháp xác định, hầu hết các mô hình ngôn ngữ thường gặp khó khăn với nó. Hãy xem liệu học tăng cường có thể thu hẹp khoảng cách đó không. Tốt nhất là bắt đầu với một phiên bản đơn giản, chạy đánh giá để xác minh nó hoạt động và sau đó lặp lại.

Để bắt đầu, chúng ta đưa ra một vài giả định. Mô hình luôn chơi X và đi trước. Nó phải xuất ra một nước đi trong khoảng từ 0 đến 8 bên trong các thẻ Move, và đối thủ chỉ chơi ngẫu nhiên. Trong một môi trường LLM, chúng ta tạo một tập dữ liệu chứa thông báo người dùng ban đầu bắt đầu mỗi trò chơi. Đối với mỗi rollout, setup state điền trạng thái kỹ thuật số với thông tin được sử dụng và cập nhật trong trò chơi, chẳng hạn như bảng cờ và người chiến thắng. Hàm respond chứa logic trò chơi cốt lõi. Nó phân tích nước đi cuối cùng của mô hình. Nó kiểm tra xem nước đi có hợp lệ không (các nước đi không hợp lệ sẽ dẫn đến thua ngay lập tức), và áp dụng nó vào bảng cờ. Sau đó, nó áp dụng một nước đi ngẫu nhiên của đối thủ và kiểm tra xem có thắng hay hòa không. Nếu trò chơi chưa kết thúc, nó trả về một thông báo người dùng với trạng thái bảng cờ hiện tại và nhắc nhở cho nước đi tiếp theo. Chúng ta sử dụng hàm thưởng chính (true reward function) với trọng số thắng là 1, và hàm thưởng định dạng (format reward function) với trọng số 0.2, nhằm thưởng cho mô hình vì đã tuân thủ định dạng XML.

Cải Thiện Môi Trường và Kỹ Năng Đối Thủ

Bây giờ chúng ta có thể làm cho môi trường của mình linh hoạt hơn, thực tế hơn và phù hợp cho cả việc đánh giá lẫn huấn luyện. Tôi đã thực hiện một số cải tiến này một cách dễ dàng, nhưng chúng lại không hiệu quả trong quá trình huấn luyện. Đầu tiên, chúng ta muốn mô hình đôi khi đi trước và đôi khi đi sau.

Bây giờ hãy đề cập đến kỹ năng của đối thủ. Luôn chơi với một đối thủ ngẫu nhiên là không thực tế, vì vậy chúng ta giới thiệu một đối thủ tối ưu sử dụng thuật toán minimax. Khi đối đầu với đối thủ này, một trận hòa là kết quả tốt nhất có thể đạt được. Tuy nhiên, để huấn luyện, chúng ta muốn kỹ năng của đối thủ có thể kiểm soát được. Nếu đối thủ quá hoàn hảo quá sớm, mô hình có thể không bao giờ thấy một chiến thắng và không học được gì. Chúng ta có thể làm điều đó bằng cách đưa ra một xác suất để đối thủ chọn một nước đi ngẫu nhiên thay vì nước đi tối ưu. Trong các môi trường của chúng ta, chúng ta giới thiệu min random move prob (xác suất di chuyển ngẫu nhiên tối thiểu) và max random move prob (xác suất di chuyển ngẫu nhiên tối đa) thay đổi từ 0 đến 1. Nếu chúng ta đặt cả hai giá trị này bằng 0, tất cả các trò chơi sẽ diễn ra với một đối thủ tối ưu. Nếu chúng ta đặt cả hai giá trị này bằng 1, tất cả các trò chơi sẽ diễn ra với một đối thủ ngẫu nhiên. Sử dụng các tham số này cho phép chúng ta kiểm soát kỹ năng của đối thủ qua tất cả các trò chơi. Đối với các rollout khác nhau bắt nguồn từ cùng một ví dụ trong tập dữ liệu, đối thủ sẽ luôn có cùng xác suất chọn các nước đi ngẫu nhiên, đảm bảo so sánh công bằng.

Suy Luận và Giảm Nhiễu trong Học Tăng Cường

Bây giờ, về khả năng suy luận. Thông thường, chúng ta yêu cầu các mô hình tạo ra một trace suy nghĩ trước câu trả lời cuối cùng. Điều này có thể cải thiện hiệu suất tại thời điểm suy luận, nhưng nó cũng rất quan trọng trong việc giúp các mô hình tốt hơn trong quá trình huấn luyện. Chúng ta định nghĩa một dạng hàm thưởng mới sử dụng biểu thức chính quy để kiểm tra sự hiện diện của các thẻ think.

Điều này chưa được bao quát đầy đủ trong các nước đi hợp lệ, nhưng khi thử nghiệm với nhiều mô hình mã nguồn mở hơn, tôi đã quan sát thấy nhiều trường hợp [chúng mắc lỗi]. Đôi khi nước đi được thực hiện không chính xác, đôi khi ô đã chọn bị chiếm đóng, và kết thúc trò chơi ngay lập tức là quá khắc nghiệt. Nó có thể ngăn các mô hình nhỏ hơn nhận được một tín hiệu học tập hữu ích. Thay vào đó, chúng ta cho phép trò chơi tiếp tục và áp dụng một hình phạt cố định -0.1, giới hạn mức phạt.

Hãy thảo luận về việc giảm nhiễu trong học tăng cường dựa trên nhóm. Trong học GRPO, chúng ta so sánh một số rollout từ cùng một điểm khởi đầu để xem nên tăng cường cái nào dựa trên phần thưởng. Để điều này hoạt động, sự khác biệt về phần thưởng phải đến từ những gì mô hình đã chơi, chứ không phải từ sự ngẫu nhiên của môi trường. Và làm thế nào chúng ta có thể giảm nhiễu trong thiết lập này? Chúng ta đặt một seed ví dụ cho mỗi ví dụ trong tập dữ liệu để chọn người chơi bắt đầu. Sau đó, đối với mỗi lượt, chúng ta suy ra một seed lượt cụ thể dựa trên seed ví dụtrạng thái bảng cờ. Điều này đảm bảo rằng nếu hai rollout đạt đến cùng một vị trí trên bảng cờ, đối thủ sẽ luôn phản ứng theo cùng một cách.

Điểm cuối cùng: giảm nhiễu giữa các batch. Đối với quá trình huấn luyện của chúng ta, kích thước batch là số lượng trò chơi được xem xét trước khi trọng số của mô hình được cập nhật. Trong thiết lập của chúng ta, kỹ năng của đối thủ thay đổi trong tập dữ liệu tùy theo min random move probmax random move prob. Nếu chúng ta huấn luyện với kích thước batch nhỏ và xác suất di chuyển ngẫu nhiên không cố định, chúng ta có thể lấy mẫu một batch trong đó nhiều đối thủ rất khó hoặc rất dễ. Điều này làm cho phần thưởng trung bình biến động rất nhiều, khiến quá trình huấn luyện không ổn định. Để chống lại điều này, tôi đã thêm lấy mẫu phân tầng (stratified sampling). Điều này buộc mỗi batch phải chứa một sự kết hợp cân bằng hoàn hảo về độ khó của đối thủ trải dài trên phạm vi đã chọn.

Tôi biết slide này rất cô đọng, nhưng bạn có thể tìm thấy tất cả mã và thông tin chi tiết hơn trong kho lưu trữ GitHub.

Đánh Giá và Huấn Luyện Mô hình Cờ Caro

Để đánh giá các mô hình hiện có, chúng tôi đã chọn GPT-5 MiniLFM 2 của LiquidAI làm một mô hình mã nguồn mở nhanh. Sử dụng Verifiers để đánh giá các mô hình chỉ yêu cầu vài lệnh. Cùng với một số biến thiên thống kê, GPT-5 Mini rất xuất sắc trong việc tuân thủ định dạng và là một người chơi Cờ caro giỏi, nhưng không hoàn hảo. Mô hình mã nguồn mở nhỏ của LiquidAI gặp khó khăn trong việc tuân thủ định dạng và thực hiện các nước đi hợp lệ. Đó là một người chơi Cờ caro yếu, đôi khi thắng đối thủ ngẫu nhiên, nhưng hiếm khi sống sót khi đối đầu với đối thủ tối ưu. Có một khoảng cách đáng kể.

Chúng ta quyết định huấn luyện LFM 2 vì một số lý do. Đây là một mô hình tốt so với kích thước của nó, và nó là một mô hình có khả năng mở rộng, lý tưởng để biến nó thành một mô hình suy luận. Làm thế nào chúng ta có thể cải thiện nó? Chúng ta thấy rằng mô hình này gặp khó khăn trong việc tuân thủ định dạng và thường đưa ra các nước đi không hợp lệ. Chúng ta có thể sử dụng fine-tuning có giám sát cho giai đoạn khởi động (warm-up phase) nơi chúng ta dạy mô hình định dạng và cú pháp nước đi hợp lệ. Sau đó, chúng ta có thể sử dụng học tăng cường để xây dựng các khả năng sâu sắc hơn.

Bước đầu tiên là tạo dữ liệu tổng hợp cho fine-tuning có giám sát. Khi bạn có một môi trường tốt, việc tạo dữ liệu huấn luyện chỉ yêu cầu một lệnh duy nhất. Ở đây chúng ta sử dụng GPT-5 Mini vì nó tuân thủ định dạng một cách hoàn hảo. Và chúng ta không cần nhiều ví dụ. Chúng ta tạo ra 200 ví dụ và lọc bỏ các trò chơi kết thúc sớm để tránh đưa ra các giả định về các chiến lược cao cấp (master strategies). Với dữ liệu tổng hợp này trong tay, chúng ta có thể dễ dàng khởi tạo một quá trình fine-tuning có giám sát bằng cách sử dụng Prime Array. Trong ví dụ này, tôi đang sử dụng GPU NVIDIA A100 96GB nhưng bạn có thể sử dụng một GPU nhỏ hơn. Quá trình huấn luyện chỉ mất vài phút.

Kết Quả Fine-tuning và Học Tăng Cường

Đã đến lúc đánh giá mô hình đã được fine-tune của chúng ta. So với mô hình gốc, nó đã học định dạng gần như hoàn hảo và giảm số lượng nước đi không hợp lệ. Nó cũng cải thiện hiệu suất trò chơi nhưng vẫn còn nhiều việc phải làm. Ví dụ, khi chúng ta đi sâu vào quá trình huấn luyện, hãy tóm tắt nhanh về Group Relative Policy Optimization được áp dụng cho Cờ caro. Bắt đầu từ cùng một bảng cờ ban đầu, mô hình chơi một số trò chơi thông qua lấy mẫu LLM. Mỗi rollout được đánh giá bằng một hàm thưởng xác định. Trong trường hợp của chúng ta: thắng, định dạngnước đi không hợp lệ. Một điểm số trung bình được tính trên nhóm các rollout. Và mỗi rollout sau đó được so sánh với phép tính lợi thế trung bình này. Mô hình được cập nhật để ưu tiên các quỹ đạo hoạt động tốt hơn so với baseline nhóm. Chúng ta sẽ sử dụng CISPO, đây là một cải tiến so với GRPO.

Để huấn luyện học tăng cường, tôi đã sử dụng RL Simple Trainer của Verifiers. Tại đây, chúng ta sử dụng một GPU cho suy luận và một GPU cho huấn luyện. Hãy nhận xét về một số tham số trong cấu hình huấn luyện. Trong lần huấn luyện này, xác suất di chuyển ngẫu nhiên dao động từ 20% đến 70%, không có người chơi hoàn toàn ngẫu nhiên và không có người chơi tối ưu. Đây là một sân chơi tốt để nhận tín hiệu và học cả tấn công lẫn phòng thủ. Tham số num_groups được sử dụng để thiết lập mẫu phân tầng. Khi nói đến các đối số huấn luyện viên, chúng ta muốn mô hình của mình học ổn định trong khi tận dụng tối đa các GPU mà không bị lỗi. Để biết mẹo về cách sử dụng GPU mà không bị tràn bộ nhớ, tôi khuyên bạn nên xem GRPO.

Ở đây, tôi muốn nhấn mạnh rằng quá trình huấn luyện học tăng cường rất nhạy cảm với các siêu tham số và có thể không ổn định. Tôi đã tự mình nhận ra rằng kích thước batch là một tham số then chốt. Trong môi trường này, tôi đã gặp phải quá trình huấn luyện không ổn định và sự sụp đổ của mô hình, đồng thời đã thử nghiệm với nhiều kích thước batch nhỏ hơn 256. Giải thích khá trực quan. Kích thước batch là số lượng trò chơi được sử dụng để cập nhật trọng số của mô hình. Nếu con số này thấp, điều đó có nghĩa là học cách chơi từ một số lượng trận đấu và loại đối thủ rất nhỏ cùng một lúc. Và điều này có thể dẫn đến các chiến lược không tối ưu.

Hãy cùng xem các biểu đồ huấn luyện. Hàm thưởng chiến thắngtổng phần thưởng liên tục được cải thiện. Hàm thưởng định dạng đã gần như hoàn hảo và không thay đổi đáng kể. Hàm phạt cho nước đi không hợp lệ khởi đầu tốt và hội tụ về 0 vào cuối quá trình huấn luyện. Đây là một lần huấn luyện tốt, nhưng hãy chạy đánh giá chính xác. Ấn tượng. Nhờ học tăng cường, mô hình của chúng ta đã trở thành một người chơi Cờ caro rất cạnh tranh. Nó thống trị những người chơi ngẫu nhiên và hòa 85% thời gian khi đối đầu với đối thủ tối ưu. Các nước đi không hợp lệ đã giảm xuống gần bằng không. Những kết quả này đã khá thỏa mãn. Và có thể nói rằng không còn nhiều điều nữa mà chúng ta có thể học được từ ví dụ này.

Nâng Cao Khả Năng của Người Chơi AI

Tôi là một người cầu toàn, và tôi muốn hoàn thiện người chơi AI. Khi xem lại các rollout, tôi đã tìm thấy một số sai lầm nghiêm trọng lặp lại, đặc biệt là mô hình của chúng ta đôi khi rơi vào các bẫy tạo nĩa (fork traps). Ví dụ này cho thấy kết thúc của trò chơi. Mô hình của chúng ta không chơi tệ ở đây, nhưng nó đã thua trò chơi bằng cách cho phép đối thủ có hai ô liên tiếp. Chỉ vậy thôi. Không đủ để sử dụng môi trường RL của chúng ta để đẩy mô hình tiến xa hơn tới sự hoàn hảo. Đúng vậy. Chúng ta phải thực hiện một số thay đổi. Trong lần chạy này, tôi đã sử dụng các GPU lớn hơn chỉ để thử nghiệm nhanh chóng. Điều đó có lẽ không bắt buộc.

Đầu tiên, hãy thảo luận về kỹ năng của đối thủ. Chúng tôi đã tăng kỹ năng của đối thủ bằng cách đặt xác suất nước đi ngẫu nhiên dao động từ 0% đến 25%. Tôi cũng đã thử cho mô hình chơi hoàn toàn với đối thủ hoàn hảo, nhưng nó không hiệu quả. Mô hình trở nên quá phòng thủ và không tận dụng được lỗi khi kiểm tra trò chơi với những người chơi ngẫu nhiên.

Khám phá Mô hình và Tùy chỉnh Temperature

Làm thế nào để mô hình của chúng ta khám phá vượt ra ngoài các chiến lược học được? Tôi đã thực hiện một số thử nghiệm mà mô hình này không thể cải thiện và quên đi các chiến lược sub-optimal. Chúng ta muốn mô hình thử nghiệm các phương pháp tiếp cận mới, và temperatureparameter phù hợp để điều chỉnh. Tuy nhiên, điều này khá rủi ro. Nếu temperature quá cao, mô hình có thể bắt đầu tạo ra những điều vô nghĩa. Hãy thử xem. Mọi thứ trở nên thực sự thú vị. Ban đầu, có một sự sụt giảm đáng kể trong win-reward functiontotal reward. Tôi suy đoán rằng đây là một giai đoạn khám phá, nơi mô hình đã thử các chiến lược mới và ngẫu nhiên, điều này ban đầu dẫn đến hiệu suất kém hơn. Nhưng theo thời gian, nó đã phục hồi và cải thiện lên mức cao mới. Ngoài ra, four-match reward functioninvalid move penalty function cũng chứng kiến sự sụt giảm ban đầu, nhưng nhìn chung, luôn duy trì ở mức giá trị tối đa của chúng.

Đánh giá Hiệu suất và So sánh Mô hình

Hãy chuyển sang đánh giá thích hợp. Ồ, cuối cùng chúng ta đã có một bậc thầy Tic-Tac-Toe! Nhưng tại sao không chơi lại? Tôi đoán vậy. Được rồi, hãy thực hiện một nước đi không hoàn hảo. Bây giờ chúng ta cần chặn mô hình. Hãy chặn nó một lần nữa. Ồ không, chúng ta thua rồi! Bây giờ sẽ rất thú vị nếu so sánh hiệu suất của mô hình chúng ta với GIGGY 5 Mini, mô hình Tic-Tac-Toe mà chúng ta đã sử dụng để tạo ra synthetic data. Đối với đối thủ ngẫu nhiên, hiệu suất rất giống nhau. Hãy xem xét khi đối đầu với một đối thủ tối ưu. Ồ, trong trường hợp này, mô hình của chúng ta vượt trội hơn. Đây là một thành tựu rất đáng kể.

Các Bài học từ Những Thử nghiệm Thất bại

Bài học 1: Kích thước Batch size

Để đạt được những kết quả này, tôi đã trải qua nhiều thử nghiệm thất bại và tôi muốn chia sẻ những phát hiện này với bạn. Trước hết, về batch size. Nếu giá trị này lớn, mô hình của bạn có vẻ học chậm, nhưng bù lại, bạn sẽ có quá trình huấn luyện ổn định. Nếu batch size nhỏ, và môi trường của bạn tạo ra các trận đấu đa dạng cùng kỹ năng đối thủ, mô hình có thể học từ một số lượng lớn trò chơi cùng lúc. Điều này có thể củng cố các sub-optimal strategies và bạn có thể quan sát thấy quá trình huấn luyện không ổn định hoặc model collapse.

Bài học 2: Phân tích Item Biases trong Môi trường

Bài học thứ hai: Hãy chú ý đến item biases trong môi trường. Trong một thử nghiệm trước đây, tôi đã sử dụng một Mini Max algorithm khác cho đối thủ tối ưu. Tôi nghĩ đây là một chi tiết triển khai và đã để LLM xử lý nó. Tôi đã nhận được kết quả benchmark tuyệt vời, nhưng sau đó khi chơi với mô hình, tôi nhận ra nó quá dễ đoán. Khi kiểm tra kỹ hơn Mini Max, tôi đã tìm thấy một sai lệch: với nhiều nước đi mang lại cùng một điểm số tối ưu, nước đi đầu tiên có sẵn luôn được chọn. Về cơ bản, tôi đã huấn luyện mô hình của mình chống lại một loại người chơi tối ưu cụ thể. Qua nhiều trò chơi, mô hình chỉ đơn giản là ghi nhớ nó.

Lựa chọn và Đánh giá Mô hình

Lựa chọn Mô hình Ban đầu

Bây giờ về model choice. Bạn có thể bắt đầu từ một mô hình đã được huấn luyện cho reasoning, nhưng những mô hình này có xu hướng xuất ra các thinking traces dài. Nếu bạn có tài nguyên GPU và thời gian hạn chế, bạn có thể phải cắt bớt hầu hết các completions dài hơn ở phần đầu để phù hợp với giới hạn context window. Điều này có nghĩa là lãng phí ngân sách và cũng có nguy cơ làm giảm trí thông minh của mô hình. Có lẽ sẽ hợp lý hơn nếu bắt đầu từ một instruct model và biến đổi nó thành một reasoning model cho nhiệm vụ của bạn.

Thử thách với Mô hình Nhỏ

Một điểm khác về mô hình: có thể khó để đẩy các mô hình rất nhỏ đạt đến mức độ thành thạo. Điều này, tất nhiên, phụ thuộc vào nhiệm vụ. Tôi khuyến nghị nên đánh giá mô hình cơ sở trong môi trường của bạn, xem xét một vài completions, và chọn một mô hình cho thấy những lĩnh vực tiềm năng, ngay cả khi các con số chưa thực sự thỏa mãn. Nói chung, luôn là một ý hay khi chấp nhận một số loss để thấy mô hình phát triển. Ngoài ra, sau khi huấn luyện, đừng dừng lại ở programmatic evaluation; hãy thử mô hình trong nhiệm vụ thực tế.

Giám sát Quá trình Huấn luyện và Sự Kiên nhẫn

Khuyến nghị cuối cùng của tôi: không phải lúc nào cũng đúng khi theo dõi ám ảnh các logsplots của bạn khi bạn bắt đầu huấn luyện, đặc biệt là để xác định sớm các out of memory errors hoặc sự không ổn định. Điều này cũng khó đối với tôi, nhưng một khi quá trình huấn luyện bắt đầu, thường tốt nhất là ngừng nhìn chằm chằm vào các plots một lúc. Reinforcement learning chậm và cần thời gian để thấy tiến độ. Nếu bạn liên tục giám sát nó, bạn sẽ có xu hướng dừng lại và điều chỉnh mọi thứ quá sớm. Mặc dù tiến bộ thực sự của nó trong RL có thể đáng ngạc nhiên, nhưng nó cần đủ thời gian. Vì vậy, hãy bắt đầu huấn luyện và đi dạo.

Tổng kết và Hướng đi Tương lai

Trong bài thuyết trình này, chúng ta đã ánh xạ khái niệm reinforcement learning vào lĩnh vực language models. Sau đó, tôi đã giới thiệu nhiều tệp và thư viện mã nguồn mở để xây dựng các environments như các software artifacts. Cuối cùng, tôi đã trình bày các thử nghiệm của mình, nơi tôi đã lấy một mô hình nhỏ và biến nó thành một bậc thầy Tic-Tac-Toe bằng cách sử dụng supervised fine-tuningreinforcement learning với các rewards đã được xác minh. Chúng ta không chỉ cho mô hình biết cách chơi; chúng ta đã cung cấp cho nó một không gian để chơi và hướng dẫn nó thông qua các rewards. Ngày nay, reinforcement learning bổ sung cho supervised fine-tuning trong language models để huấn luyện. Bạn cũng có thể làm điều này. Nếu bạn có thể định nghĩa một reward signal rõ ràng, bạn có thể xây dựng một môi trường và huấn luyện một mô hình chuyên biệt nhỏ để vượt trội hơn một closed model lớn trong một nhiệm vụ cụ thể với chi phí chỉ bằng một phần nhỏ.

Ý tưởng và Tài nguyên

Tôi muốn để lại cho bạn một vài ý tưởng và tài nguyên về chủ đề này. Mọi thứ tôi đã chia sẻ hôm nay có thể được tìm thấy trong khóa học trực tuyến miễn phí LLM RL Environment của tôi, nơi tôi đi sâu vào giải thích các chi tiết. Hãy xem và tặng một ngôi sao. Để tìm hiểu những gì người khác đã xây dựng, hãy khám phá environment's hub. Và điều gì tiếp theo? Điều mà tôi rất hào hứng là đây: Huấn luyện một language model nhỏ trên hai hoặc ba tools mà bạn thường sử dụng, và cố gắng vượt trội hơn một mô hình lớn trong nhiệm vụ cụ thể đó. Tôi khuyến nghị ví dụ Wiki search example trong priming RL repository làm điểm khởi đầu. Cảm ơn bạn.

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?