Bỏ qua nội dung

Bắt đầu với RLMatrix

Giới thiệu

Khi viết các chương trình truyền thống, chúng ta nói cho máy tính biết chính xác điều cần làm trong mọi tình huống. Ví dụ, nếu chúng ta muốn viết một chương trình so khớp số, chúng ta có thể viết:

if (input == pattern)
{
return "Đúng!";
}
else
{
return "Thử lại!";
}

Nhưng nếu chúng ta muốn chương trình tự học? Nếu các quy tắc quá phức tạp để viết ra, hoặc chúng ta thậm chí không biết các quy tắc đó? Đây là lúc học tăng cường phát huy tác dụng.

Thiết lập dự án của bạn

Bạn có thể làm theo hoặc sao chép kho GitHub này. Đầu tiên, hãy cài đặt mọi thứ:

Cài đặt RLMatrix qua NuGet
dotnet add package RLMatrix
dotnet add package RLMatrix.Toolkit

Môi trường học tập đầu tiên của bạn

Hãy tạo một thứ đơn giản nhưng có ý nghĩa - một môi trường nơi AI của chúng ta sẽ học cách khớp mẫu. Mặc dù điều này có vẻ cơ bản (và sẽ rất đơn giản nếu lập trình trực tiếp), nhưng nó giới thiệu tất cả các khái niệm chính mà chúng ta cần.

Đây là môi trường hoàn chỉnh của chúng ta:

PatternMatchingEnvironment.cs
using RLMatrix.Toolkit;
namespace PatternMatchingExample;
[RLMatrixEnvironment]
public partial class PatternMatchingEnvironment
{
private int pattern = 0;
private int aiChoice = 0;
private bool roundFinished = false;
// Bộ đếm đơn giản cho 50 bước cuối cùng
private int correct = 0;
private int total = 0;
// Tính toán độ chính xác đơn giản
public float RecentAccuracy => total > 0 ? (float)correct / total * 100 : 0;
[RLMatrixObservation]
public float SeePattern() => pattern;
[RLMatrixActionDiscrete(2)]
public void MakeChoice(int choice)
{
aiChoice = choice;
roundFinished = true;
// Cập nhật bộ đếm
total++;
if (aiChoice == pattern) correct++;
}
[RLMatrixReward]
public float GiveReward() => aiChoice == pattern ? 1.0f : -1.0f;
[RLMatrixDone]
public bool IsRoundOver() => roundFinished;
[RLMatrixReset]
public void StartNewRound()
{
pattern = Random.Shared.Next(2);
aiChoice = 0;
roundFinished = false;
}
public void ResetStats()
{
correct = 0;
total = 0;
}
}

Huấn luyện AI của bạn

Bây giờ đến phần thú vị - dạy AI của chúng ta cách khớp mẫu. Chúng ta sẽ sử dụng một thuật toán gọi là DQN (Deep Q-Network). Đừng lo lắng quá nhiều về tên - đó chỉ là một cách để dạy AI đưa ra quyết định.

Đây là cách chúng ta thiết lập huấn luyện:

Program.cs
using RLMatrix.Agents.Common;
using RLMatrix;
using PatternMatchingExample;
Console.WriteLine("Bắt đầu huấn luyện khớp mẫu...\n");
// Thiết lập cách AI sẽ học
var learningSetup = new DQNAgentOptions(
batchSize: 32, // Học từ 32 kinh nghiệm cùng một lúc
memorySize: 1000, // Nhớ 1000 lần thử cuối cùng
gamma: 0.99f, // Quan tâm nhiều đến phần thưởng tương lai
epsStart: 1f, // Bắt đầu bằng cách thử mọi thứ
epsEnd: 0.05f, // Cuối cùng gắn bó với những gì hoạt động
epsDecay: 150f // Tốc độ chuyển đổi nhanh như thế nào
);
// Tạo môi trường của chúng ta
var environment = new PatternMatchingEnvironment().RLInit();
var env = new List<IEnvironmentAsync<float[]>> {
environment,
//new PatternMatchingEnvironment().RLInit() //bạn có thể thêm nhiều hơn để huấn luyện song song
};
// Tạo agent học tập
var agent = new LocalDiscreteRolloutAgent<float[]>(learningSetup, env);
// Để nó học!
for (int i = 0; i < 1000; i++)
{
await agent.Step();
if ((i + 1) % 50 == 0)
{
Console.WriteLine($"Bước {i + 1}/1000 - Độ chính xác 50 bước cuối: {environment.RecentAccuracy:F1}%");
environment.ResetStats();
Console.WriteLine("\nNhấn Enter để tiếp tục...");
Console.ReadLine();
}
}
Console.WriteLine("\nHuấn luyện hoàn tất!");
Console.ReadLine();

Khi bạn chạy mã này, bạn sẽ thấy tiến trình huấn luyện được hiển thị mỗi 50 bước:

Tiến trình huấn luyện
Bắt đầu huấn luyện khớp mẫu...
Bước 50/1000 - Độ chính xác 50 bước cuối: 48.0%
Nhấn Enter để tiếp tục...
Bước 100/1000 - Độ chính xác 50 bước cuối: 68.0%
Nhấn Enter để tiếp tục...
Bước 150/1000 - Độ chính xác 50 bước cuối: 86.0%
Nhấn Enter để tiếp tục...
Bước 200/1000 - Độ chính xác 50 bước cuối: 82.0%
Nhấn Enter để tiếp tục...

Vượt ra ngoài khớp mẫu đơn giản

Mặc dù ví dụ của chúng ta khá đơn giản, nhưng cùng một nguyên tắc áp dụng cho các vấn đề phức tạp hơn nhiều:

Kiểm tra sự hiểu biết của bạn

Hiểu về Cơ bản của Học tăng cường

Các bước tiếp theo

Sẵn sàng đi xa hơn? Các bước tiếp theo của bạn có thể là:

Chúng ta có hai thuật toán chính có sẵn:

  • DQN: Những gì chúng ta vừa sử dụng, tốt cho các lựa chọn đơn giản, hưởng lợi từ bộ nhớ replay lớn.
  • PPO: Nâng cao hơn, xử lý các hành động liên tục (như kiểm soát tốc độ hoặc hướng)