{"id":23788,"date":"2023-03-09T08:30:47","date_gmt":"2023-03-09T07:30:47","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=23788"},"modified":"2026-02-09T09:44:00","modified_gmt":"2026-02-09T08:44:00","slug":"ki-reinforcement-learning-3","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2023\/03\/ki-reinforcement-learning-3.htm","title":{"rendered":"KI: Reinforcement Learning 3"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2023\/03\/ki-reinforcement-learning-3.htm#comments'>1 Kommentare.<\/a>)<\/small> <\/div>\n<p>(<a href=\"https:\/\/www.herr-rau.de\/wordpress\/2023\/03\/ki-reinforcement-learning-2.htm\">Fortsetzung von hier.<\/a>)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Die L\u00f6sung des Problems, grunds\u00e4tzlich<\/h3>\n\n\n\n<p>Das Problem vom letzten Mal war: Wenn man nur den Zug vor Sieg oder Niederlage bewertet, dann gibt es eben nur eine Lernm\u00f6glichkeit unmittelbar vor Sieg oder Niederlage und sonst nicht. Wenn man das Problem so formuliert, ist die L\u00f6sung einfach: <strong>Man bewertet nicht nur den letzten gemachten Zug, sondern jeden Zug, jedesmal.<\/strong> Es gilt dabei weiter: wenn ein Zug zu einer Niederlage f\u00fchrt, wird er herab-, wenn er zu einem Sieg f\u00fchrt, heraufgewertet. Neu ist: wenn ein Zug zu einer Situation f\u00fchrt, wo es nur <em>schlechte <\/em>Folgez\u00fcge gibt, dann wird er ebenfalls herabgewertet &#8211; hier ein Tic-Tac-Toe-Beispiel, Spieler 2 am Zug, alle Z\u00fcge in dieser Situation f\u00fchren zu einer Niederlage (so dass die KI lernen muss, diese Situation zu vermeiden):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1|2|0     Move 2 (-15.0)\n2|0|0     Move 4 (-13.0)\n1|0|1     Move 5 (-11.0)\n          Move 7 (-15.0)<\/code><\/pre>\n\n\n\n<p>Und wenn andersherum ein Zug zu einer Situation f\u00fchrt, in der es mindestens einen sehr guten Zug gibt, dann wird die Bewertung des ersten Zugs heraufgesetzt.<\/p>\n\n\n\n<p>Kurz: Bei jedem Durchgang wird der letzte Zug im vorhergehenden Zustand bewertet, und zwar abh\u00e4ngig von der Bewertung der M\u00f6glichkeiten im <em>aktuellen <\/em>Zustand (oder eben Sieg\/Niederlage). <\/p>\n\n\n\n<p>Reihenfolge:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Die KI befragt die Q-Tabelle nach der besten Entscheidung in der aktuellen Situation.<\/li>\n\n\n\n<li>Diese Entscheidung wird durchgef\u00fchrt; damit \u00e4ndert sich die Situation.<\/li>\n\n\n\n<li>Das Spiel meldet der KI Erfolg oder Misserfolg oder eine andere Bewertung der Situation zur\u00fcck.<\/li>\n\n\n\n<li>Die KI \u00e4ndert den Eintrag in der Q-Tabelle f\u00fcr die alte, urspr\u00fcngliche Situation, und zwar in Abh\u00e4ngigkeit von der Bewertung  des bestm\u00f6glichen Zugs in der jetzigen Situation. Wenn es in der neuen Situation einen tollen Zug gibt, wird der Wert der alten Zug-Situation-Kombination heraufgesetzt. Wenn es in der neuen Situation nur schlechte Z\u00fcge gibt, wird der Wert der alten Zug-Situation-Kombination herabgesetzt.  <\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Die konkrete Belohnungsfunktion, mit Lernrate und Diskontierung<\/h3>\n\n\n\n<p>Beim letzten Mal habe ich zwei Fragen vorgestellt, die man sich bei jedem solchen Spiel\/Projekt stellt: Was w\u00e4hlt man als Zustand, und was z\u00e4hlt als Gewinn\/Niederlage? Die vorl\u00e4ufigen Antworten waren: als Zustand nehmen wir bei Breakout die Differenz in der x-Position von Ball und Schl\u00e4ger, und Gewinn\/Niederlage ist das Treffen oder Verfehlen des Balles mit dem Schl\u00e4ger. Wir bleiben vorerst bei diesen beiden Antworten, werden sp\u00e4ter aber etwas daran \u00e4ndern m\u00fcssen.<\/p>\n\n\n\n<p>Bi der Funktion, mit der man den neuen Q-Wert f\u00fcr einen Zustand <code>stateOld<\/code> und einen Zug <code>move<\/code> berechnet, spielen neben dem aktuellen Zustand <code>stateNew<\/code> noch zwei Faktoren eine Rolle, deren Wert unterschiedlich eingestellt werden kann, der aber konstant bleibt: Diskontierungsfaktor\/gamma und Lernrate\/learning rate. <\/p>\n\n\n\n<p><strong>Diskontierungsfaktor\/gamma:<\/strong> Kommt von discount\/Nachlass\/Erm\u00e4\u00dfigung\/Skonto. Ist ein Wert zwischen 0 und 1 und bestimmt, wie sehr der h\u00f6chstm\u00f6gliche zuk\u00fcnftige Wert ber\u00fccksichtigt werden soll. Vorschlagswert: 0.5<\/p>\n\n\n\n<p><strong>Lernrate:<\/strong> Ist ein Wert zwischen 0 und 1 und bestimmt, wie sehr der neue Wert (aus Erwartung und Belohnung zusammengesetzt) gegen\u00fcber dem alten dominiert. Vorschlagswert: 0.75<\/p>\n\n\n\n<p>Dann sieht die Funktion so aus (<code>reward<\/code> ist die Belohnung\/Bestrafung f\u00fcr Treffen\/Ball im Aus\/sonstwas):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public void update(String stateOld, String stateNew, double reward, int move)\n{\n  \/\/ (1) increase reward by (discounted) highest value in new state\n  reward = reward + gamma * getHighestValue(stateNew);\n\n  \/\/ (2) reduce reward by old value\n  reward = reward - getValue(stateOld, move);\n\n  \/\/ (3) apply learning rate to modified reward\n  double change = reward * learningRate;\n\n  \/\/ (4) increase value by calculated change\n  increaseValue(stateOld, move, change);\n}<\/code><\/pre>\n\n\n\n<p>Man kann es auch so sehen, dass der alte <em>Wert erh\u00f6ht wird um:<\/em><br><code>lernfaktor * (Belohnung + diskontierter Bestwert - alter Wert)<\/code><\/p>\n\n\n\n<p>Meist sieht man die Formel f\u00fcr den neuen Wert so, was aber genau das gleiche ist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>neuerWert<sub>f\u00fcr Entscheidung e in Zustand z<\/sub> = \n(1-lernrate) * alterWert<sub>f\u00fcr Entscheidung e in Zustand z<\/sub> + \nlernrate * (belohnung + gamma * h\u00f6chstwert<sub>f\u00fcr eine Entscheidung in Zustand z+1<\/sub><\/code><\/pre>\n\n\n\n<p>Wenn der Lernfaktor 0 ist, \u00e4ndert sich gar nichts. Wenn der Lernfaktor 1 ist, wird der neue Wert ganz auf die Belohnung plus diskontierter Bestwert gesetzt, der alte Wert spielt keine Rolle dabei. Bei den Werten dazwischen gilt: Wenn die Summe aus Belohnung f\u00fcr den gemachten Zug und diskontiertem Bestwert im neuen Zustand gr\u00f6\u00dfer ist als der alte Wert, dann erh\u00f6ht sich dieser; wenn sie kleiner ist, verringt er sich.<\/p>\n\n\n\n<p>Wenn der Discount-Faktor 0 ist, geht es einfach nur um die Belohnung, der Bestwert im neuen Zustand spielt keine Rolle. Wenn der Discount-Faktor 1 ist, spielt der Bestwert im neuen Zustand eine gr\u00f6\u00dfere Rolle.<\/p>\n\n\n\n<p>Die Formel kann man nat\u00fcrlich vereinfachen, dann geht das Berechnen vielleicht schneller. Sie reicht bereits, um etwa Nim oder Tic-Tac-Toe und nat\u00fcrlich auch Breakout spielen zu lernen (aber letzteres ging ja bereits halbwegs). Wenn es in Zustand 3 nur Z\u00fcge gibt, die zur Niederlage f\u00fchren, wird der Wert f\u00fcr die Entscheidung, die von Situation 2 zur Zustand 3 gef\u00fchrt hat, verringert. Und wenn es in Zustand 2 dann irgendwann einmal auch sonst nur niedrig bewertete Z\u00fcge gibt, wird auch die Bewertung von einem Zug in Zustand 1, wenn er zu Zustand 2 f\u00fchrt, verringert. Sackgassen sprechen sich sozusagen nach und nach herum, und Strecken, die zum Ziel f\u00fchren, ebenso. Wenn es viele Zust\u00e4nde gibt, dauert das aber sehr, sehr, sehr lange.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Funktioniert das? <\/h4>\n\n\n\n<p>Bei Breakout hat das ja schon im einfachen System geklappt, aber jetzt kann die KI eben auch Tic-Tac-Toe und Nim spielen lenen. Nur l\u00e4sst sich das nicht so gut in einem Bild oder Film zeigen. Ich verspreche aber, dass diese neuen Bewertungen errechnet worden sind:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1|0|0     Move 1 (-0.0776515946578002)\n0|0|0     Move 2 (-0.09491143167204687)\n0|0|0     Move 3 (-0.08783116090423461)\n          Move 4 (2.1469792068679446E-6)\n          Move 5 (-0.09086642291797421)\n          Move 6 (-0.1026154061878333)\n          Move 7 (-0.09468690776157813)\n          Move 8 (-0.09604017243001356)<\/code><\/pre>\n\n\n\n<p>Zug 4 hat keine sehr hohe Bewertung, aber die einzige nichtnegative. Es ist der einzige Zug, der auf diese Er\u00f6ffnung hin bei einer versierten Spielerin 1 nicht zur sp\u00e4teren Niederlage von Agent 2 f\u00fchrt (aber vermutlich auch nicht oft zu einem Sieg, sondern eher zu unentschieden). Die ganz oben gezeigte Situation 120-200-101 wird also nach dem Training nicht mehr entstehen.<\/p>\n\n\n\n<p><strong><font color=\"red\">Neu eingef\u00fchrt:<\/font><\/strong> Lernrate, Diskontierungsfaktor<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Eine wichtige Entscheidung: Das Belohnungssystem<\/h3>\n\n\n\n<p>Das bisherige Belohnungssystem war sehr streng: Pluspunkte f\u00fcr Treffer, Minuspunkte f\u00fcr Aus, und sonst nichts. Ein anderes Belohnungssystem k\u00f6nnte dar\u00fcber hinaus die Erg\u00e4nzung haben: je gr\u00f6\u00dfer die Entfernung Schl\u00e4ger-Kugel, desto gr\u00f6\u00dfer f\u00e4llt die negative Belohnung aus. Das motiviert, diese Entfernung gering zu halten. Damit ist der Agent noch viel schneller trainiert. Aber, finde ich, er ist dann nicht darauf trainiert, Breakout zu spielen, sondern darauf, den Schl\u00e4ger m\u00f6glichst nah am Ball zu halten. Und das ist eine viel leichtere Aufgabe. Wenn man schon wei\u00df, was die L\u00f6sung ist, kann man das Erlernen dieser L\u00f6sung beschleunigen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Die zweite wichtige Entscheidung: Wie die Wahl der Zust\u00e4nde das Ergebnis beeinflusst<\/h3>\n\n\n\n<p>Bisher gab es bei Breakout nur ein paar Dutzend Zust\u00e4nde, die deswegen leicht zu verarbeiten waren; sie kamen immer wieder vor und hatten deshalb reichlich Gelegenheit, sich bei der Bewertung ihrer m\u00f6glichen Z\u00fcge zu wandeln und zu optimieren. Wenn es mehr Zust\u00e4nd gibt, wird das schwieriger. Die Zust\u00e4nde hingen bisher ab von der Differenz in den x-Positionen von Schl\u00e4ger und Ball. <\/p>\n\n\n\n<p>Ich finde das ein bisschen geschummelt. Wenn ich eh schon wei\u00df, dass die Differenz in den x-Positionen wichtig ist und sonst nichts, dann habe ich der KI schon eine Menge Arbeit abgenommen. Wenn ich dagegen nichts vorgebe und als Zustand anbiete: die x-Positionen, aber auch die y-Position des Balls, und seine Flugrichtung noch dazu, dann habe ich, selbst bei grober Zusammenfassung (wo ich etwa nur 12 verschiedene m\u00f6gliche y-Zust\u00e4nde f\u00fcr den Ball ber\u00fccksichtige) immer noch knapp 14000 Zust\u00e4nde, und da dauert es lange, bis die sich oft genug wiederholt haben. Die KI findet dann zwar eine brauchbare L\u00f6sung, es dauert nur deutlich l\u00e4nger. <\/p>\n\n\n\n<p>Die gefundene L\u00f6sung sieht dann aber auch anders aus, unsicherer, wackeliger: Beim einfachen Zustandssystem besteht sie darin, den Schl\u00e4ger immer parallel zum Ball zu f\u00fchren, also die Differenz zwischen den x-Positionen klein zu halten. Beim komplexen Zustandssystem ist das wie im folgenden kurzen Film: Meistens ist es egal, wie der Schl\u00e4ger ein bisschen zappelt, aber wenn der Ball unten ist, wird der Schl\u00e4ger hektisch:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"747\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_breakout_continuous_rewardstrict_statesfull-700x747.gif\" alt=\"\" class=\"wp-image-24153\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_breakout_continuous_rewardstrict_statesfull-700x747.gif 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_breakout_continuous_rewardstrict_statesfull-281x300.gif 281w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_breakout_continuous_rewardstrict_statesfull-141x150.gif 141w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p>(Warum \u00e4ndert sich oben nichts sondern alles bleibt bei 0? Weil der Startwert 0 ist, und wenn die Belohnung auch 0 ist, \u00e4ndert sich selten etwas. Mit 1 als Startwert sieht man zwar st\u00e4ndige Ver\u00e4nderung, der Agent findet aber keine L\u00f6sung.)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00dcberblick \u00fcber die ausprobierten Varianten<\/h3>\n\n\n\n<p>Ich habe verschiedene Kombinationen ausprobiert. Da ist einmal die Unterscheidung zwischen der einmaligen R\u00fcckmeldung vom letzten Blogeintrag (funktioniert nicht bei Tic-Tac-Toe, Nim, \u00fcberhaupt allen schwierigeren Spielen) und der kontinuierlichen R\u00fcckmeldung aus diesem Beitrag. Zweitens kann ich die Berechnung der Belohnung streng halten oder bereits Wissen einflie\u00dfen lassen. Drittens kann ich bei der Wahl der zust\u00e4nde bereits Wissen einflie\u00dfen lassen oder nicht.<\/p>\n\n\n\n<p>F\u00fcr Breakout sieht der Unterschied beim Lernen so aus:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>System der R\u00fcckmeldung<\/th><th>Berechnung der Belohnung via<\/th><th>Zustand:einfach<br>(x-Differenz)<\/th><th>Zustand:schwierig<br>(alle Daten)<\/th><\/tr><\/thead><tbody><tr><td>Einmalig<\/td><td>x-Differenz<br>(sehr leicht)<\/td><td><em>lernt schnell<\/em><\/td><td><em>spielt nach Lernphase nur rudiment\u00e4r (au\u00dfer bei gro\u00dfem Schl\u00e4ger)<\/em><\/td><\/tr><tr><td>Einmalig<\/td><td>Abstand zum Ball<br>(leicht)<\/td><td><em>lernt schnell<\/em><\/td><td><em><em>spielt nach Lernphase allenfalls rudiment\u00e4r (au\u00dfer bei gro\u00dfem Schl\u00e4ger)<\/em><\/em><\/td><\/tr><tr><td>Einmalig<\/td><td>nur Sieg\/Niederlage<br>(schwer)<\/td><td><em>lernt schnell<\/em><\/td><td><em><em>spielt nach Lernphase allenfalls rudiment\u00e4r (au\u00dfer bei gro\u00dfem Schl\u00e4ger)<\/em><\/em><\/td><\/tr><tr><td>Kontinuierlich<\/td><td>x-Differenz<br>(sehr leicht)<\/td><td><em>lernt schnell<\/em><\/td><td><em>lernt schnell<\/em><\/td><\/tr><tr><td>Kontinuierlich<\/td><td>Abstand zum Ball<br>(leicht)<\/td><td><em>lernt schnell<\/em><\/td><td><em>lernt einigerma\u00dfen<\/em><\/td><\/tr><tr><td>Kontinuierlich<\/td><td>nur Sieg\/Niederlage<br>(schwer)<\/td><td><em>lernt schnell<\/em><\/td><td><em>lernt langsam, aber lernt<\/em><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Und noch gar nicht herumgespielt habe ich mit unterschiedlichen Werten f\u00fcr Lernrate oder Diskontierung.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Eine kleinere Neuerung: Exploration<\/h3>\n\n\n\n<p>Das ist einfach! Normalerweise w\u00e4hlt der Agent in einem Zustand nicht einen zuf\u00e4lligen, sondern den qualitativ besten Zug, den mit dem h\u00f6chsten Q-Wert laut Tabelle. Manchmal will man aber, dass der Agent abenteuerlustiger ist. Eine Explorationsrate von 0,05 besagt, dass in 5% aller F\u00e4lle stattdessen ein ganz zuf\u00e4llig ausgew\u00e4hlter Zug gew\u00e4hlt wird. Der Vorteil: Der Agent probiert auch mal etwas aus, das nicht erfolgsversprechend aussieht, und st\u00f6\u00dft so m\u00f6glicherweise auf unerwartete L\u00f6sungen. Dieses explorative Verhalten kann man losgel\u00f6st von allen anderen Neuerungen betrachten.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int decideOnMove(String state) {\n if (Math.random()&lt;explorationRate) { \n  return pickRandomMove(state);\n }\n else {\n  return pickBestMove(state);\n }\n}<\/code><\/pre>\n\n\n\n<p><strong><font color=\"red\">Neu eingef\u00fchrt:<\/font><\/strong> Die Explorationsrate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ausblick auf ein Problem<\/h3>\n\n\n\n<p>Wenn die Anzahl der Zust\u00e4nde zu hoch wird, st\u00f6\u00dft man mit einer Q-Tabelle an technische Grenzen. Schon die 14000 Zust\u00e4nde beim vereinfachten Breakout sind eigentlich zu viel. Vielleicht sind ja manche Elemente, die den aktuellen Spielzustand ausmachen, <em>manchmal<\/em> weniger relevant als andere und k\u00f6nnen je nach den anderen Elementen ignoriert werden? Dann benutzt man keine Q-Tabelle mehr, sondern ein Neuronales Netz &#8211; die Eingangswerte beschreiben den Zustand, die Ausgangswerte die m\u00f6glichen Z\u00fcge in diesem Zustand. Zu Erkl\u00e4rung und Beispiel werde ich aber wohl nicht mehr kommen, aber weiter unten sind ein paar Videos dazu verlinkt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ausblick: Alternativen zu Reinforcement Learning<\/h3>\n\n\n\n<p>Wenn ich die L\u00f6sung eh schon wei\u00df, wei\u00df ich brauche ich keine Q-Tabelle, insbesondere, wenn ich den besten Zug aus den gegebenen Variablen mit einer einfachen Formel berechnen kann. Bei dem Breakout-Spiel geht das zum Beispiel leicht, ich muss einfach schreiben: wenn x-Position von Schl\u00e4ger gr\u00f6\u00dfer als x-Position der Kugel, dann gehe nach links, sonst nach rechts. Die Leistung der KI ist hier also nicht, auf eine L\u00f6sung zu kommen, die uns schwerer gefallen w\u00e4re.<\/p>\n\n\n\n<p>Bei Tic-Tac-Toe ist das schon schwieriger. Auch da k\u00f6nnte ich mir vorher alle Z\u00fcge selber \u00fcberlegen und knackige Strategien formulieren. Au\u00dferdem es einfachere Algorithmen, dort auf eine L\u00f6sung zu kommen, etwa Minimax. Allerdings erfordert Minimax eine f\u00fcr jedes Spiel individuelle Bewertungsfunktion, das hei\u00dft, man muss sich als Mensch vorher mehr Gedanken gemacht haben, was eine gute Position und was eine schlechte ist &#8211; bei Maschinellem lernen findet das die KI selber heraus. Oder man macht das mit Brute Force durch Ausprobieren und Streichen von schlechten Z\u00fcgen und rekursivem Streichen weiterer Zust\u00e4nde\u2026 aber sind wir damit nicht doch wieder bei unserer ganz einfachen Form von Reinforcement Learning?<\/p>\n\n\n\n<p>Bei einem Spiel, wo ein Auto einen fixen Parcour entlang fahren soll, gibt es schnell viele Zust\u00e4nde und keine einfache oder offensichtliche Formel, was in welchem Zustand zu tun ist. Statt da m\u00fchsam von Hand zu \u00fcberlegen, was in jedem Zustand das beste ist (links, rechts, geradeaus, bremsen, beschleunigen), l\u00e4sst man den Agenten das einfach durch Ausprobieren und Belohnen lernen. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fu\u00dfnote: Unerwartetes Verhalten<\/h3>\n\n\n\n<p>Die KI versucht ihr Verhalten zu optimieren angesichts der Vorgaben bei der Programmierung. Manchmal passen diese Vorgaben aber nicht zum programmierten System und zeugen so Verhalten, das man so nicht gewollt hat. Von Beispielen hatte ich immer wieder gelesen, aber jetzt hatte ich selber solche F\u00e4lle. Hintergrund: Mein Breakout hatte urspr\u00fcnglich einen Bug: Wenn der Schl\u00e4ger den Ball an einer bestimmten Position erwischte, irgendwo am Eck, dann rollte der Ball den Schl\u00e4ger entlang und prallte erst am anderen Ende des Schl\u00e4gers wieder ab. Das war nur manchmal so und hatte bei meinem urspr\u00fcnglichen Breakout-Projekt, in dem es noch gar nicht um Maschinelles Lernen ging, keine gro\u00dfen Auswirkungen, so dass ich mich nie darum gek\u00fcmmert hatte, das mal zu beheben.<\/p>\n\n\n\n<p>Die KI, mit dem Auftrag, Punkte zu machen, und das n\u00e4mlich durch Ber\u00fchren des Balls mit dem Schl\u00e4ger, hat den Bug und sp\u00e4ter eine L\u00fccke im ersten L\u00f6sungsversuch gleich entdeckt und ausgenutzt. <\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"522\" style=\"aspect-ratio: 516 \/ 522;\" width=\"516\" controls src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_breakout_fehler1.mp4\"><\/video><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Wie es weiter geht<\/h3>\n\n\n\n<p>Autorennen! Ich habe schon etwas zum Vorzeigen, ganz rudiment\u00e4r, aber schon schick, scheitere aber noch an etwas, das gar nicht so viel mit dem KI-Element zu tun hat &#8211; das bleibt n\u00e4mlich unver\u00e4ndert das bisherige. (<a href=\"https:\/\/www.herr-rau.de\/wordpress\/2023\/03\/ki-reinforcement-learning-4-autofahren.htm\">Fortsetzung folgt also wahrscheinlich.<\/a>)<\/p>\n\n\n\n<p><strong>Links:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/computingeducation.de\/proj-snaip-A\/\">https:\/\/computingeducation.de\/proj-snaip-A\/<\/a><br>mit sehr sch\u00f6nen Vorlage f\u00fcr Reinforcement Learning in Snap! &#8211; etwa: Pong, Breakout, Space Invaders<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=L4KBBAwF_bE\">https:\/\/www.youtube.com\/watch?v=L4KBBAwF_bE<\/a><br>ein Video zu einer KI, die Super Mario World gelernt hat (Q-Learning, aber nicht mit einer Q-Tabelle, sondern einem Neuronalen Netz).<\/li>\n<\/ul>\n\n\n\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vg08.met.vgwort.de\/na\/ea247244470e49d5b10c5554f5ac8731\" alt=\"\" width=\"1\" height=\"1\">\n","protected":false},"excerpt":{"rendered":"<p>(1 Kommentare.) (Fortsetzung von hier.) Die L\u00f6sung des Problems, grunds\u00e4tzlich Das Problem vom letzten Mal war: Wenn man nur den Zug vor Sieg oder Niederlage bewertet, dann gibt es eben nur eine Lernm\u00f6glichkeit unmittelbar vor Sieg oder Niederlage und sonst nicht. Wenn man das Problem so formuliert, ist die L\u00f6sung einfach: Man bewertet nicht nur [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":23992,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227,254],"class_list":["post-23788","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik","tag-ki"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_breakout_screenshot0.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/23788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=23788"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/23788\/revisions"}],"predecessor-version":[{"id":68192,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/23788\/revisions\/68192"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/23992"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=23788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=23788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=23788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}