Zum Inhalt springen

Erste Schritte mit RLMatrix

Einführung

Wenn wir traditionelle Programme schreiben, sagen wir dem Computer genau, was er in jeder Situation tun soll. Zum Beispiel, wenn wir ein Programm schreiben wollten, das Zahlen abgleicht, könnten wir schreiben:

if (input == pattern)
{
return "Korrekt!";
}
else
{
return "Versuche es erneut!";
}

Aber was, wenn wir möchten, dass unser Programm selbstständig lernt? Was, wenn die Regeln zu komplex sind, um sie aufzuschreiben, oder wir die Regeln selbst nicht kennen? Hier kommt Reinforcement Learning ins Spiel.

Einrichten Ihres Projekts

Sie können mitverfolgen oder dieses GitHub-Repository klonen. Lassen Sie uns zunächst alles installieren:

Installation von RLMatrix über NuGet
dotnet add package RLMatrix
dotnet add package RLMatrix.Toolkit

Ihre erste Lernumgebung

Lassen Sie uns etwas Einfaches, aber Sinnvolles erstellen - eine Umgebung, in der unsere KI lernt, Muster abzugleichen. Obwohl dies einfach erscheint (und direkt zu programmieren trivial wäre), führt es alle Schlüsselkonzepte ein, die wir benötigen.

Hier ist unsere vollständige Umgebung:

PatternMatchingEnvironment.cs
using RLMatrix.Toolkit;
namespace PatternMatchingExample;
[RLMatrixEnvironment]
public partial class PatternMatchingEnvironment
{
private int pattern = 0;
private int aiChoice = 0;
private bool roundFinished = false;
// Einfache Zähler für die letzten 50 Schritte
private int correct = 0;
private int total = 0;
// Einfache Genauigkeitsberechnung
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;
// Zähler aktualisieren
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;
}
}

Training Ihrer KI

Jetzt kommt der interessante Teil - unserer KI beibringen, Muster abzugleichen. Wir werden einen Algorithmus namens DQN (Deep Q-Network) verwenden. Machen Sie sich nicht zu viele Gedanken über den Namen - es ist nur eine Methode, KI beizubringen, Entscheidungen zu treffen.

So richten wir das Training ein:

Program.cs
using RLMatrix.Agents.Common;
using RLMatrix;
using PatternMatchingExample;
Console.WriteLine("Starte Musterabgleich-Training...\n");
// Einrichten, wie unsere KI lernen wird
var learningSetup = new DQNAgentOptions(
batchSize: 32, // Von 32 Erfahrungen auf einmal lernen
memorySize: 1000, // Die letzten 1000 Versuche merken
gamma: 0.99f, // Viel Wert auf zukünftige Belohnungen legen
epsStart: 1f, // Zunächst alles ausprobieren
epsEnd: 0.05f, // Schließlich an dem festhalten, was funktioniert
epsDecay: 150f // Wie schnell der Übergang erfolgt
);
// Unsere Umgebung erstellen
var environment = new PatternMatchingEnvironment().RLInit();
var env = new List<IEnvironmentAsync<float[]>> {
environment,
//new PatternMatchingEnvironment().RLInit() //Sie können mehr als eine hinzufügen, um parallel zu trainieren
};
// Unseren Lernagenten erstellen
var agent = new LocalDiscreteRolloutAgent<float[]>(learningSetup, env);
// Lassen wir ihn lernen!
for (int i = 0; i < 1000; i++)
{
await agent.Step();
if ((i + 1) % 50 == 0)
{
Console.WriteLine($"Schritt {i + 1}/1000 - Genauigkeit der letzten 50 Schritte: {environment.RecentAccuracy:F1}%");
environment.ResetStats();
Console.WriteLine("\nDrücken Sie Enter zum Fortfahren...");
Console.ReadLine();
}
}
Console.WriteLine("\nTraining abgeschlossen!");
Console.ReadLine();

Wenn Sie diesen Code ausführen, sehen Sie den Trainingsfortschritt alle 50 Schritte angezeigt:

Trainingsfortschritt
Starte Musterabgleich-Training...
Schritt 50/1000 - Genauigkeit der letzten 50 Schritte: 48.0%
Drücken Sie Enter zum Fortfahren...
Schritt 100/1000 - Genauigkeit der letzten 50 Schritte: 68.0%
Drücken Sie Enter zum Fortfahren...
Schritt 150/1000 - Genauigkeit der letzten 50 Schritte: 86.0%
Drücken Sie Enter zum Fortfahren...
Schritt 200/1000 - Genauigkeit der letzten 50 Schritte: 82.0%
Drücken Sie Enter zum Fortfahren...

Jenseits des einfachen Abgleichens

Obwohl unser Beispiel unkompliziert ist, gelten die gleichen Prinzipien für viel komplexere Probleme:

Testen Sie Ihr Verständnis

Grundlagen des Reinforcement Learning verstehen

Nächste Schritte

Bereit, weiterzugehen? Ihre nächsten Schritte könnten sein:

Wir haben zwei Hauptalgorithmen verfügbar:

  • DQN: Was wir gerade verwendet haben, gut für einfache Entscheidungen, profitiert von großem Replay-Speicher.
  • PPO: Fortgeschrittener, handhabt kontinuierliche Aktionen (wie Steuerung von Geschwindigkeit oder Richtung)