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:
dotnet add package RLMatrixdotnet 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:
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:
using RLMatrix.Agents.Common;using RLMatrix;using PatternMatchingExample;
Console.WriteLine("Starte Musterabgleich-Training...\n");
// Einrichten, wie unsere KI lernen wirdvar 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 erstellenvar 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 erstellenvar 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:
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)