Angesichts einer Zeitreihe xi möchte ich einen gewichteten gleitenden Durchschnitt mit einem Mittelungsfenster von N Punkten berechnen, wobei die Gewichtungen für neuere Werte über ältere Werte sprechen. Bei der Wahl der Gewichte verwende ich die bekannte Tatsache, daß eine geometrische Reihe gegen 1 konvergiert, d. H. Sum (frac) k, sofern unendlich viele Begriffe genommen werden. Um eine diskrete Zahl von Gewichtungen zu erhalten, die zu einer Einheit summieren, nehme ich einfach die ersten N-Terme der geometrischen Reihe (frac) k und normalisiere dann ihre Summe. Bei N4 ergeben sich zum Beispiel die nicht normierten Gewichte, die nach Normalisierung durch ihre Summe ergibt. Der gleitende Mittelwert ist dann einfach die Summe aus dem Produkt der letzten 4 Werte gegen diese normierten Gewichte. Diese Methode verallgemeinert sich in der offensichtlichen Weise zu bewegten Fenstern der Länge N und scheint auch rechnerisch einfach. Gibt es einen Grund, diese einfache Methode nicht zu verwenden, um einen gewichteten gleitenden Durchschnitt mit exponentiellen Gewichten zu berechnen, frage ich, weil der Wikipedia-Eintrag für EWMA komplizierter erscheint. Was mich fragt, ob die Lehrbuch-Definition von EWMA hat vielleicht einige statistische Eigenschaften, die die obige einfache Definition nicht oder sind sie in der Tat gleichwertig sind, beginnen Sie mit 1), dass es keine ungewöhnlichen Werte Und keine Pegelverschiebungen und keine Zeittrends und keine saisonalen Dummies 2), dass das optimale gewichtete Mittel Gewichte aufweist, die auf eine gleichmäßige Kurve fallen, die durch einen Koeffizienten 3 beschreibbar ist), dass die Fehlerabweichung konstant ist, dass es keine bekannten Ursachenreihen gibt Annahmen. Ndash IrishStat Okt 1 14 am 21:18 Ravi: In dem gegebenen Beispiel ist die Summe der ersten vier Ausdrücke 0,9375 0,06250,1250.250,5. Die ersten vier Ausdrücke haben also 93,8 des Gesamtgewichts (6,2 ist im abgeschnittenen Schwanz). Verwenden Sie diese, um normierte Gewichte zu erhalten, die zu einer Einheit durch Reskalierung (dividieren) um 0,9375 zusammenkommen. Dies ergibt 0,06667, 0,1333, 0,267, 0,5333. Ndash Assad Ebrahim Ich habe festgestellt, dass die Berechnung der exponentiell gewichteten laufenden Durchschnitte mit overline leftarrow overline alpha (x - overline), alphalt1 ist eine einfache einzeilige Methode, die leicht, wenn auch nur annähernd interpretierbar in Bezug auf Eine effektive Anzahl von Proben Nalpha (vergleichen Sie diese Form an die Form für die Berechnung der laufenden Mittelwert), erfordert nur das aktuelle Datum (und den aktuellen Mittelwert), und ist numerisch stabil. Technisch integriert dieser Ansatz alle Geschichte in den Durchschnitt. Die beiden Hauptvorteile bei der Verwendung des Vollfensters (im Gegensatz zum verkürzten, in der Frage diskutierten) liegen darin, dass es in einigen Fällen die analytische Charakterisierung der Filterung erleichtern kann, und es reduziert die Fluktuationen, die bei sehr großen (oder kleinen) Daten induziert werden Wert ist Teil des Datensatzes. Zum Beispiel betrachten die Filter-Ergebnis, wenn die Daten sind alle Null, außer für ein Datum, dessen Wert 106. beantwortet Nov 29 12 bei 0: 33Deep Reinforcement Learning: Pong von Pixels Dies ist eine längst überfällige Blog-Post auf Reinforcement Learning (RL). RL ist heiß Sie können bemerkt haben, dass Computer jetzt automatisch lernen können, ATARI-Spiele spielen (von Rohpixeln), sie schlagen Weltmeister bei Go. Simulierte Vierbeiner lernen, zu rennen und zu springen. Und Roboter lernen, wie man komplexe Manipulationsaufgaben, die explizite Programmierung zu defizieren. Es stellt sich heraus, dass alle diese Fortschritte unter dem Dach der RL Forschung fallen. Ich interessierte mich auch für RL im letzten Jahr: Ich arbeitete durch Richard Suttons Buch. Lesen Sie David Silvers Kurs. Sahen John Schulmanns Vorträge. Schrieb eine RL-Bibliothek in Javascript. Über den Sommer interniert bei DeepMind, der in der DeepRL-Gruppe arbeitet, und zuletzt in ein wenig mit der Designentwicklung von OpenAI Gym aufgeschlagen. Ein neues RL-Benchmarking-Toolkit. So Ive sicherlich auf diesem funwagon für mindestens ein Jahr gewesen, aber bis jetzt ich havent erhalten, um zu schreiben, einen kurzen Pfosten auf, warum RL eine große Sache ist, was seine ungefähr ist, wie es alle entwickelt und wo es gehen könnte. Beispiele für RL in der Wildnis. Von links nach rechts . Deep Q Learning-Netzwerk spielen ATARI, AlphaGo, Berkeley Roboter-Stacking Legos, körperlich-simulierte vierbeinigen Springen über Terrain. Es ist interessant, über die Art der jüngsten Fortschritte in der RL zu reflektieren. Ich denke gern an vier verschiedene Faktoren, die zurückhalten AI: Compute (die offensichtliche: Moores Law, GPUs, ASICs), Daten (in einer netten Form, nicht nur irgendwo da draußen im Internet - zB ImageNet), Algorithmen ( Forschung und Ideen, zB Backprop, CNN, LSTM) und Infrastruktur (Software unter Ihnen - Linux, TCPIP, Git, ROS, PR2, AWS, AMT, TensorFlow, etc.). Ähnlich wie in der Computer Vision, ist der Fortschritt in RL nicht so viel getrieben, wie Sie vernünftigerweise durch neue fantastische Ideen annehmen können. In Computer Vision, die 2012 AlexNet war vor allem eine skalierte (tiefer und breiter) Version der 1990er Jahre ConvNets. Ebenso ist das ATARI Deep Q-Learning-Papier ab 2013 eine Implementierung eines Standardalgorithmus (Q Learning mit Funktionsnäherung, den Sie im Standard-RL-Buch von Sutton 1998 finden), wobei die Funktion Approximator ein ConvNet war. AlphaGo verwendet Polgradienten mit Monte Carlo Tree Search (MCTS) - das sind auch Standardkomponenten. Natürlich dauert es eine Menge Geschick und Geduld, um es an die Arbeit zu bekommen, und mehrere schlaue Tweaks oben auf alten Algorithmen wurden entwickelt, aber zu einer Approximation erster Ordnung der Haupttreiber der jüngsten Fortschritte sind nicht die Algorithmen, sondern (ähnlich Zu Computer-Vision) berechnen. Jetzt zurück zu RL. Wann immer es eine Trennung zwischen, wie magisch etwas scheint und wie einfach es ist unter der Haube bekomme ich alle antsy und wirklich wollen, um einen Blog-Post zu schreiben. In diesem Fall habe ich gesehen, viele Menschen, die nicht glauben können, dass wir automatisch lernen, die meisten ATARI Spiele auf menschlicher Ebene spielen, mit einem Algorithmus, von Pixeln und von Grund auf - und es ist erstaunlich, und ich war selbst dort aber im Kern der Ansatz, den wir verwenden, ist auch wirklich ziemlich tief dumm (obwohl ich es leicht verstehe, solche Ansprüche im Nachhinein zu machen). Wie auch immer, Id wie zu Fuß Sie durch Policy Gradienten (PG), unsere Lieblings-Standard-Wahl für Angriff RL Probleme im Moment. Wenn youre von außerhalb von RL Sie neugierig sein könnte, warum Im nicht präsentieren DQN stattdessen, die ein alternativer und bekannter RL-Algorithmus ist, weit verbreitet durch das ATARI Spiel spielen Papier. Es stellt sich heraus, dass Q-Learning ist kein großer Algorithmus (man könnte sagen, dass DQN ist so 2013 (ok Im 50 Scherz)). Tatsächlich bevorzugen die meisten Leute Politikverläufe, einschließlich die Autoren des ursprünglichen DQN Papiers, das Politikverläufe gezeigt hat, um besser als Q Lernen zu arbeiten, wenn sie gut abgestimmt werden. PG wird bevorzugt, weil es Ende-zu-Ende ist: theres eine explizite Politik und eine prinzipielle Ansatz, der direkt optimiert die erwartete Belohnung. Wie auch immer, als ein laufendes Beispiel gut lernen, ein ATARI-Spiel (Pong) mit PG, von Grund auf, von Pixeln, mit einem tiefen neuronalen Netzwerk spielen, und das Ganze ist 130 Zeilen von Python nur mit numpy als Abhängigkeit (Gist-Link) . Lets get it. Pong von Pixel Links: Das Spiel von Pong. Rechts: Pong ist ein Spezialfall eines Markov-Entscheidungsprozesses (MDP). Ein Graph, bei dem jeder Knoten ein bestimmter Spielzustand ist und jeder Rand ein möglicher (im allgemeinen probabilistischer) Übergang ist. Jede Kante gibt auch eine Belohnung, und das Ziel ist es, die optimale Art zu handeln in jedem Staat zu maximieren Belohnungen zu berechnen. Das Spiel von Pong ist ein hervorragendes Beispiel für eine einfache RL-Aufgabe. In der ATARI 2600 Version gut verwenden Sie spielen als eine der Paddel (die andere wird durch eine anständige KI kontrolliert) und Sie müssen den Ball über den anderen Spieler (ich habe nicht wirklich zu erklären, Pong, rechts) bounce. Auf dem niedrigen Niveau arbeitet das Spiel wie folgt: Wir erhalten einen Bildrahmen (ein 210x160x3 Byte Array (ganze Zahlen von 0 bis 255 Pixelwerte geben)) und wir entscheiden, ob wir das Paddle UP oder DOWN (dh eine binäre Wahl). Nach jeder einzelnen Wahl führt der Spielsimulator die Aktion aus und gibt uns eine Belohnung: Entweder eine Belohnung, wenn der Ball den Gegner hinter sich gelassen hat, eine -1 Belohnung, wenn wir den Ball verpasst haben oder sonst 0. Und natürlich ist unser Ziel, das Paddel zu bewegen, so dass wir viel Belohnung bekommen. Als wir durch die Lösung gehen im Auge behalten, die gut versuchen, sehr wenige Annahmen über Pong zu machen, weil wir heimlich nicht wirklich interessieren Pong Wir kümmern uns um komplexe, hochdimensionale Probleme wie Roboter Manipulation, Montage und Navigation. Pong ist nur ein lustiges Spielzeug Test Fall, was wir spielen mit, während wir herausfinden, wie man sehr allgemeine AI-Systeme, die eines Tages beliebige nützliche Aufgaben zu schreiben. Richtliniennetzwerk. Zuerst wollten wir ein Politiknetzwerk definieren, das unseren Spieler (oder Agenten) implementiert. Dieses Netzwerk wird den Zustand des Spiels zu nehmen und zu entscheiden, was wir tun sollten (nach oben oder unten). Wie unser beliebter einfacher Block der Berechnung gut verwenden ein 2-Layer-neuronales Netzwerk, das die rohen Bildpixeln nimmt (100.800 Zahlen insgesamt (2101603)), und produziert eine einzelne Zahl, die die Wahrscheinlichkeit des Gehens aufwärts. Beachten Sie, dass es üblich ist, eine stochastische Politik zu verwenden, was bedeutet, dass wir nur eine Wahrscheinlichkeit des Bewegens von oben erzeugen. Jede Iteration, die wir aus dieser Verteilung probieren (d. h. eine vorgespannte Münze werfen), um die tatsächliche Bewegung zu erhalten. Der Grund dafür wird deutlicher, wenn wir über die Ausbildung sprechen. Unser Policy-Netzwerk ist ein 2-schichtiges Netzwerk. Und hier zu konkretisieren, ist, wie Sie dieses Richtliniennetzwerk in Pythonnumpy implementieren könnten. Angenommen, es wurde ein Vektor x gegeben, der die (vorverarbeitete) Pixelinformation enthält. Wir würden berechnen: wobei in diesem Snippet W1 und W2 zwei Matrizen sind, die wir zufällig initialisieren. Wurden nicht mit Bias weil meh. Beachten Sie, dass wir die Sigmoid-Nichtlinearität am Ende verwenden, die die Ausgangswahrscheinlichkeit auf den Bereich 0,1 kürzt. Intuitiv können die Neuronen in der verborgenen Schicht (die ihre Gewichte entlang der Zeilen von W1 angeordnet haben) verschiedene Spielszenarien erkennen (z. B. ist der Ball in der Spitze und unser Paddel ist in der Mitte) und die Gewichte in W2 können dann Entscheiden, ob wir in jedem Fall nach oben oder nach unten gehen sollten. Nun, die ursprüngliche zufällige W1 und W2 wird natürlich dazu führen, dass der Spieler auf Spot zu spasm. Das einzige Problem ist jetzt, W1 und W2 zu finden, die zum Expertenspiel von Pong Fine Print führen: Vorverarbeitung. Idealerweise möchten Sie mindestens 2 Frames zum Richtliniennetzwerk füttern, damit es Bewegung erkennen kann. Um die Dinge ein bisschen einfacher (Ich habe diese Experimente auf meinem Macbook) Ill ein kleines bisschen Vorverarbeitung, z. Gut tatsächlich Feed-Differenz-Frames zu dem Netzwerk (d. H. Subtraktion von gegenwärtigem und letzten Frame). Es klingt irgendwie unmöglich. An dieser Stelle Id wie Sie zu schätzen, wie schwierig das RL-Problem ist. Wir erhalten 100.800 Nummern (2101603) und weiterleiten unser Policenetzwerk (das leicht auf Bestellung von einer Million Parameter in W1 und W2 beteiligt ist). Angenommen, wir beschließen, nach oben zu gehen. Das Spiel könnte antworten, dass wir 0 Belohnung erhalten diesen Zeitschritt und gibt uns weitere 100.800 Zahlen für den nächsten Rahmen. Wir könnten diesen Vorgang für hundert Mal wiederholen, bevor wir eine Belohnung von null Null erhalten. Angenommen, wir haben endlich ein 1. Das ist großartig, aber wie können wir sagen, was gemacht, dass passiert War es etwas, was wir gerade jetzt Oder vielleicht 76 Frames ago Oder vielleicht hatte es etwas mit Rahmen 10 und dann Frame 90 Und wie können wir Abbildung Welche der Millionen Knöpfe ändern und wie, um es in Zukunft besser zu machen. Wir nennen dies das Kreditzuweisungsproblem. Im speziellen Fall von Pong wissen wir, dass wir eine 1 erhalten, wenn der Ball es vorbei am Gegner macht. Die wahre Ursache ist, dass wir passiert, um den Ball auf eine gute Flugbahn bounce, aber in der Tat haben wir so viele Frames vor - z. Vielleicht etwa 20 im Falle von Pong, und jede einzelne Aktion, die wir danach hatten keine Wirkung auf, ob wir am Ende immer die Belohnung. Mit anderen Worten, mit einem sehr schwierigen Problem konfrontiert und die Dinge sind ziemlich düster aussehen. Überwachtes Lernen . Bevor wir in die Policy Gradients-Lösung eintauchen, möchte ich Sie kurz an das betreute Lernen erinnern, weil RL sehr ähnlich ist. Siehe Diagramm unten. Im gewöhnlichen überwachten Lernen würden wir ein Bild dem Netzwerk zuführen und einige Wahrscheinlichkeiten erhalten, z. B. Für zwei Klassen UP und DOWN. Im die Log-Wahrscheinlichkeiten (-1.2, -0.36) für UP und DOWN anstelle der Rohwahrscheinlichkeiten (30 und 70 in diesem Fall), weil wir immer die Logwahrscheinlichkeit des richtigen Labels optimieren (das macht Mathe schöner und ist gleichbedeutend mit Optimierung Die rohe Wahrscheinlichkeit, weil log monoton ist). Nun, im betreuten Lernen hätten wir Zugang zu einem Label. Zum Beispiel könnten wir sagen, dass die richtige Sache, um jetzt zu tun ist, gehen nach oben (Label 0). In einer Implementierung würden wir den Gradienten von 1.0 auf die logwahrscheinlichkeit von UP eingeben und backprop ausführen, um den Gradientenvektor (nabla log p (yUP mid x)) zu berechnen. Dieser Gradient würde uns sagen, wie wir alle unsere Millionen Parameter ändern sollten, damit das Netzwerk etwas häufiger voraussagen kann. Beispielsweise könnte einer der Millionen Parameter im Netzwerk einen Gradienten von -2,1 haben, was bedeutet, dass wenn wir diesen Parameter um einen kleinen positiven Betrag erhöhen würden (zB 0,001), die logarithmische Wahrscheinlichkeit von UP um 2,1 0,001 ( Abnahme aufgrund des negativen Vorzeichens). Wenn wir dann eine Parameteraktualisierung durchgeführt haben, dann würde unser Netzwerk jetzt ein bisschen eher voraussagen, wenn es ein sehr ähnliches Bild in der Zukunft sieht. Richtlinienverläufe. Okay, aber was tun wir, wenn wir nicht das richtige Label in der Reinforcement Learning-Einstellung haben, ist hier die Policy-Gradienten-Lösung (siehe auch Diagramm unten). Unser Policy-Netzwerk berechnete die Wahrscheinlichkeit zu gehen UP als 30 (logprob -1.2) und DOWN als 70 (logprob -0.36). Wir werden nun eine Aktion aus dieser Verteilung z. B. Angenommen wir probieren DOWN, und wir werden es im Spiel ausführen. An dieser Stelle bemerken wir eine interessante Tatsache: Wir konnten sofort einen Gradienten von 1,0 für DOWN füllen, wie wir es beim überwachten Lernen getan haben, und finden Sie den Gradientenvektor, der das Netzwerk dazu ermutigen würde, etwas mehr Wahrscheinlichkeit zu haben, die DOWN-Aktion in der Zukunft durchzuführen. So können wir sofort bewerten diese Steigung und das ist großartig, aber das Problem ist, dass zumindest für jetzt wissen wir noch nicht, wenn gehen DOWN ist gut. Aber der kritische Punkt ist, dass das okay ist, weil wir einfach ein wenig warten können und zum Beispiel in Pong können wir bis zum Ende des Spiels warten, dann nehmen Sie die Belohnung erhalten wir (entweder 1, wenn wir oder -1 gewonnen, wenn wir verloren haben ) Und geben Sie diesen Skalar als Gradienten für die Aktion ein, die wir getroffen haben (in diesem Fall DOWN). In dem unten stehenden Beispiel ging DOWN zu Ende, um das Spiel zu verlieren (-1 Belohnung). Wenn wir also -1 für die Logwahrscheinlichkeit von DOWN und do backprop ausfüllen, werden wir einen Gradienten finden, der das Netzwerk davon abhält, die DOWN-Aktion für diesen Eingang in die Zukunft zu nehmen (und das zu Recht, da diese Aktion dazu geführt hat, dass wir das Spiel verlieren ). Und das ist es: Wir haben eine stochastische Politik, die Aktionen und dann Aktionen, die schließlich zu guten Ergebnissen führen, in der Zukunft gefördert werden, und Maßnahmen, die zu schlechten Ergebnissen führen, entmutigen lassen. Außerdem muss die Belohnung nicht einmal 1 oder -1 sein, wenn wir das Spiel schließlich gewinnen. Es kann eine beliebige Maßnahme für irgendeine Art von eventueller Qualität sein. Zum Beispiel, wenn die Dinge wirklich gut ausfallen, könnte es 10.0 sein, die wir dann als Gradient statt -1 eingeben würden, um backprop zu starten. Das ist die Schönheit der neuronalen Netze mit ihnen können wie betrügen fühlen: Youre erlaubt, 1 Million Parameter zu haben, die in 1 teraflop von comped eingebettet werden und Sie können es tun, willkürliche Sachen mit SGD. Es sollte nicht funktionieren, aber amüsant leben wir in einem Universum, wo es funktioniert. Ausbildungsprotokoll. So ist hier, wie die Ausbildung im Detail arbeiten wird. Wir werden das Policy-Netzwerk mit einigen W1 initialisieren. W2 und spielen 100 Pong-Spiele (wir nennen diese Richtlinien-Rollouts). Wir gehen davon aus, dass jedes Spiel besteht aus 200 Frames, so dass insgesamt weve 20.000 Entscheidungen für den Aufstieg UP oder DOWN und für jeden von ihnen kennen wir die Parameter-Gradienten, die uns sagt, wie wir die Parameter ändern sollten, wenn wir das zu fördern Entscheidung in diesem Staat in der Zukunft. Alles, was jetzt bleibt, ist, jede Entscheidung, die wir als gut oder schlecht gemacht haben, zu etikettieren. ZB nehmen wir an, dass wir 12 Spiele gewonnen und 88 verloren haben. Nehmen Sie alle 20012 2400 Entscheidungen, die wir in den gewinnenden Spielen gemacht haben, und machen Sie ein positives Update (das Ausfüllen eines 1.0 in der Steigung für die gesampelte Maßnahme, das backprop und das Parameterupdate, das die Aktionen ermutigt Wir wählten in all diesen Staaten). Und gut nehmen die anderen 20088 17600 Entscheidungen, die wir in der Losing-Spiele gemacht haben und ein negatives Update (Entmutigung, was auch immer wir taten). Und das ist es. Das Netzwerk wird nun etwas wahrscheinlicher zu wiederholen Aktionen, die gearbeitet, und etwas weniger wahrscheinlich, um Aktionen, die nicht funktioniert wiederholen. Jetzt spielen wir weitere 100 Spiele mit unserer neuen, etwas verbesserten Politik und spülen und wiederholen. Richtlinienverläufe: Führen Sie eine Richtlinie für eine Weile aus. Sehen Sie, welche Aktionen zu hohen Belohnungen führte. Erhöhen Sie ihre Wahrscheinlichkeit. Cartoon Diagramm von 4 Spielen. Jeder schwarze Kreis ist ein Spielzustand (drei Beispielzustände werden auf der Unterseite dargestellt), und jeder Pfeil ist ein Übergang, der mit der Handlung kommentiert wurde, die abgetastet wurde. In diesem Fall haben wir 2 Spiele gewonnen und 2 Spiele verloren. Mit Richtlinienverläufen würden wir die zwei Spiele gewinnen, die wir gewannen und jede einzelne Tätigkeit, die wir in dieser Episode machten, leicht anregen. Umgekehrt würden wir auch die beiden Spiele nehmen, die wir verloren und jede einzelne Aktion, die wir in dieser Episode gemacht haben, leicht entmutigen. Wenn Sie durch diesen Prozess youll starten, um ein paar lustige Eigenschaften zu finden denken. Zum Beispiel, was, wenn wir eine gute Aktion in Rahmen 50 (bouncing den Ball wieder richtig), aber dann verpasste den Ball in Frame 150 Wenn jede einzelne Aktion ist nun als schlecht markiert (weil wir verloren), würde nicht, dass die richtige Bounce auf Rahmen 50 Sie haben Recht - es würde. Allerdings, wenn Sie den Prozess über Tausende von Spielen, dann tun die erste Bounce korrekt macht Sie etwas mehr wahrscheinlich, um die Straße zu gewinnen, so dass im Durchschnitt youll sehen mehr positive als negative Updates für die richtige bounce und Ihre Politik wird am Ende tun das Richtige. Update: 9. Dezember 2016 - alternative Ansicht. In meiner Erklärung oben Ich benutze die Begriffe wie füllen Sie die Steigung und backprop, die ich verwirkliche ist eine besondere Art des Denkens, wenn youre verwendet, um Ihre eigenen Backprop-Code, oder mit Torch, wo die Gradienten sind explizit und offen für Basteln. Allerdings, wenn youre verwendet, um Theano oder TensorFlow Sie vielleicht ein wenig verwirrt, weil der Code ist um die Festlegung einer Verlustfunktion oranisiert und die Backprop ist voll automatisch und schwer zu basteln mit. In diesem Fall könnte die folgende alternative Ansicht intuitiver sein. In vanilla überwachtes Lernen ist die Maximierung (sumi log p (yi mid xi)), wobei (xi, yi) Trainingsbeispiele (wie Bilder und ihre Labels) sind. Die Policengradienten sind genau dieselben wie das überwachte Lernen mit zwei kleineren Unterschieden: 1) Wir haben nicht die korrekten Etiketten (yi), so dass wir als gefälschtes Label die Aktion, die wir aus der Politik entnommen haben, ersetzen, wenn sie es sahen (xi) und 2 ) Wir modulieren den Verlust für jedes Beispiel multiplikativ basierend auf dem endgültigen Ergebnis, da wir die Log-Wahrscheinlichkeit für Aktionen, die gearbeitet und verringert für diejenigen, die nicht erhöhen wollte. Zusammenfassend sieht unser Verlust nun wie folgt aus (sumi Ai log p (yi mid xi)), wobei (yi) die Aktion ist, die wir probiert haben und (Ai) eine Zahl ist, die wir einen Vorteil nennen. Im Fall von Pong, zum Beispiel, (Ai) könnte 1,0 sein, wenn wir schließlich gewann in der Episode, die enthalten (xi) und -1,0, wenn wir verloren haben. Dies wird sicherstellen, dass wir die Log-Wahrscheinlichkeit von Aktionen, die zu guten Ergebnissen geführt zu maximieren und zu minimieren die Log-Wahrscheinlichkeit derjenigen, die nicht. So ist das Bewehrungslernen genau wie das überwachte Lernen, aber auf einem sich ständig verändernden Datensatz (die Episoden), der durch den Vorteil skaliert wird, und wir wollen nur eine (oder nur sehr wenige) Aktualisierungen basierend auf jedem abgetasteten Datensatz durchführen. Allgemeine allgemeine Funktionen. Ich versprach auch ein wenig mehr Diskussion über die Rückkehr. Bisher haben wir die Güte jedes einzelnen Handelns beurteilt, basierend darauf, ob wir das Spiel gewinnen oder nicht. In einer allgemeineren RL-Einstellung würden wir eine Belohnung (rt) bei jedem Schritt erhalten. Eine gängige Entscheidung besteht darin, eine vergünstigte Belohnung zu verwenden, sodass die eventuelle Belohnung im Diagramm oben (Rt sum gammak r) wird, wobei (gamma) eine Zahl zwischen 0 und 1 ist, die als Rabattfaktor (z. B. 0,99) bezeichnet wird. Der Ausdruck besagt, dass die Stärke, mit der wir eine abgetastete Aktion fördern, die gewichtete Summe aller Belohnungen danach ist, aber spätere Belohnungen sind exponentiell weniger wichtig. In der Praxis kann es auch wichtig sein, diese zu normalisieren. Angenommen, wir berechnen (Rt) für alle 20.000 Aktionen im Batch von 100 Pong-Spiel-Rollouts oben. Eine gute Idee ist, diese Rückkehr zu standardisieren (z. B. subtrahieren Sie Mittelwert, dividieren durch Standardabweichung), bevor wir sie in backprop anschließen. Auf diese Weise wurden immerhin etwa die Hälfte der durchgeführten Aktionen gefördert und entmutigt. Mathematisch können Sie auch interpretieren diese Tricks als eine Möglichkeit der Kontrolle der Varianz der Politik gradient Schätzer. Eine eingehendere Erkundung finden Sie hier. Ableiten von Richtlinienverläufen. Id wie auch geben eine Skizze, wo Politik Gradienten aus mathematisch kommen. Richtliniengradienten sind ein spezieller Fall eines allgemeineren Punktwertgradientenschätzers. Der allgemeine Fall ist, dass, wenn wir einen Ausdruck der Form (E f (x)) haben - dh die Erwartung einiger skalar bewerteter Punktefunktion (f (x)) unter einer von einigen Parametern parametrisierten Wahrscheinlichkeitsverteilung (p (xtheta) Theta). Hinweis: (f (x)) wird unsere Belohnungsfunktion (oder Vorteilsfunktion allgemeiner) und (p (x)) unser politisches Netzwerk sein, das wirklich ein Modell für (p (mittlere I)) ist Eine Verteilung über Aktionen für jedes Bild (I). Dann sind wir daran interessiert, wie wir die Verteilung (durch ihre Parameter (theta)) verlagern sollten, um die Punktzahl der Samples zu erhöhen, wie dies durch (f) beurteilt wird (dh wie ändern wir die Netzwerkparameter so, dass die Aktionsbeispiele höhere Belohnungen erhalten ). Wir haben das: Um dies auf Englisch zu setzen, haben wir eine Verteilung (p (xtheta)) (ich verwendete shorthand (p (x)), um Unordnung zu reduzieren), die wir ausprobieren können (zum Beispiel könnte dies ein Gaußscher sein). Für jede Stichprobe können wir auch die Score-Funktion (f) auswerten, die die Stichprobe entnimmt und uns eine skalarwertige Bewertung liefert. Diese Gleichung erklärt uns, wie wir die Verteilung (durch ihre Parameter (theta)) verschieben sollten, wenn wir wollten, dass ihre Proben höhere Werte erzielen, wie mit (f) bewertet. Im Einzelnen heißt es: Look: Ziehe einige Samples (x), bewerte ihre Scores (f (x)) und für jedes (x) auch den zweiten Term (nabla log p (xtheta)). Was ist dieser zweite Term Sein ein Vektor - der Gradient, der uns die Richtung im Parameterraum gibt, die zur Erhöhung der einem (x) zugeordneten Wahrscheinlichkeit führen würde. Mit anderen Worten, wenn wir (theta) in Richtung von (nabla log p (xtheta)) stoßen würden, würden wir sehen, dass die neue Wahrscheinlichkeit etwas (x) leicht erhöht. Wenn Sie auf die Formel zurückblicken, sagen Sie uns, dass wir diese Richtung nehmen und die skalarwertige Note (f (x)) multiplizieren sollten. Dies macht es so, dass Proben, die eine höhere Punktzahl haben, auf die Wahrscheinlichkeitsdichte stärker als die Proben, die eine niedrigere Punktzahl haben, zerren, so dass, wenn wir eine Aktualisierung auf der Grundlage von mehreren Proben aus (p) die Wahrscheinlichkeitsdichte würde um verschieben Die Richtung der höheren Scores, so dass hoch-Scoring-Proben eher. Eine Visualisierung der Scorefunktion Gradientenschätzer. Links. Eine Gaußverteilung und ein paar Proben davon (blaue Punkte). Auf jedem blauen Punkt zeichnen wir auch den Gradienten der Logwahrscheinlichkeit in Bezug auf den Gaußschen Mittelwert auf. Der Pfeil gibt die Richtung an, in der der Mittelwert der Verteilung gestoßen werden sollte, um die Wahrscheinlichkeit dieser Probe zu erhöhen. Mitte. Überlagerung einiger Score-Funktionen, die -1 überall mit Ausnahme von 1 in einigen kleinen Regionen geben (dies kann eine beliebige und nicht notwendigerweise differenzierbare skalarwertige Funktion sein). Die Pfeile sind nun farbcodiert, weil wir aufgrund der Multiplikation im Update alle grünen Pfeile und das negative der roten Pfeile mittlere. Recht . Nach der Parameteraktualisierung stoßen die grünen Pfeile und die umgekehrten roten Pfeile nach links und nach unten. Proben aus dieser Verteilung haben nun eine höhere erwartete Punktzahl, wie gewünscht. Ich hoffe, die Verbindung zu RL ist klar. Unser Richtliniennetzwerk gibt uns Beispiele von Aktionen, und einige von ihnen arbeiten besser als andere (wie durch die Vorteilsfunktion beurteilt). Dieses kleine Stück Mathe sagt uns, dass die Weise, die policys Parameter zu ändern, einige Rollouts zu tun ist, nehmen Sie die Steigung der abgetasteten Tätigkeiten, multiplizieren Sie sie durch die Kerbe und addieren Sie alles, was ist, was wir oben getan haben. Für eine gründlichere Ableitung und Diskussion empfehle ich John Schulmans Vorlesung. Lernen . In Ordnung, weve entwickelt die Intuition für politische Gradienten und sah eine Skizze ihrer Ableitung. Ich implementiert die gesamte Ansatz in einem 130-Zeilen-Python-Skript. Die OpenAI Gym s ATARI 2600 Pong verwendet. Ich trainierte ein 2-Schicht-Policy-Netzwerk mit 200 versteckten Layer-Einheiten mit RMSProp auf Batches von 10 Episoden (jede Episode ist ein paar Dutzend Spiele, weil die Spiele gehen bis zu 21 Punkte für beide Spieler). Ich habe nicht stimmen die Hyperparameter zu viel und lief das Experiment auf meinem (langsam) Macbook, aber nach dem Training für 3 Nächte landete ich mit einer Politik, die etwas besser als die AI-Spieler ist. Die Gesamtzahl der Episoden lag bei etwa 8.000, so dass der Algorithmus etwa 200.000 Pong-Spiele gespielt hat (ziemlich viel ist es nicht) und machte insgesamt 800 Updates. Im erzählt von Freunden, dass, wenn Sie auf GPU mit ConvNets für ein paar Tage trainieren, können Sie den AI-Spieler häufiger schlagen, und wenn Sie auch optimieren Hyperparameter sorgfältig können Sie auch immer die AI-Spieler dominieren (i. e win jedes einzelne Spiel). Allerdings verbringe ich nicht zu viel Zeit mit Computern oder Tweaking, so dass wir am Ende mit einer Pong AI, die die wichtigsten Ideen illustriert und funktioniert ganz gut: Der gelehrte Agent (in grün, rechts) mit der hartcodierten AI-Gegner links). Gelernte Gewichte. Wir können auch einen Blick auf die gelernten Gewichte werfen. Aufgrund der Vorverarbeitung jedes einzelnen unserer Eingaben ist ein 80x80-Differenzbild (aktueller Rahmen minus letzter Rahmen). Wir können nun jede Zeile von W1 nehmen. Strecken sie zu 80x80 und visualisieren. Unten ist eine Sammlung von 40 (von 200) Neuronen in einem Raster. Weiße Pixel sind positive Gewichte und schwarze Pixel sind negative Gewichte. Beachten Sie, dass mehrere Neuronen auf bestimmte Spuren von bouncing Ball, codiert mit wechselnden schwarz und weiß entlang der Linie abgestimmt sind. Der Ball kann nur an einem einzigen Punkt, so dass diese Neuronen multitasking sind und feuern für mehrere Standorte der Kugel entlang dieser Linie. Das wechselseitige Schwarzweiss ist interessant, weil, da die Kugel entlang der Spur fährt, die Neuronenaktivität als eine Sinuswelle schwanken wird und aufgrund der ReLU sie an diskreten getrennten Positionen entlang der Spur schießen würde. Theres ein wenig Rauschen in den Bildern, die ich vermutete, wenn ich L2-Regularisierung verwendet hätte. Was ist nicht passiert Also da haben Sie es - wir gelernt, Pong aus rohen Pixeln mit Policy-Gradienten spielen und es funktioniert ganz gut. Der Ansatz ist eine phantastische Form von Vermutung und Kontrolle, wo die Vermutung bezieht sich auf Probenahme Rollouts aus unserer aktuellen Politik, und der Scheck bezieht sich auf die Förderung von Aktionen, die zu guten Ergebnissen führen. Modulo einige Details, dies stellt den Stand der Technik in, wie wir derzeit Ansatz Verstärkung Lernprobleme. Seine beeindruckend, dass wir diese Verhaltensweisen lernen können, aber wenn Sie den Algorithmus intuitiv verstanden und Sie wissen, wie es funktioniert, sollten Sie zumindest ein wenig enttäuscht sein. Insbesondere, wie es nicht funktioniert Vergleichen Sie, dass, wie ein Mensch lernen könnte, Pong zu spielen. Sie zeigen ihnen das Spiel und sagen etwas entlang der Linien von Youre in die Kontrolle über ein Paddel und Sie können es nach oben und unten bewegen, und Ihre Aufgabe ist es, den Ball vorbei an den anderen Spieler von AI gesteuert, und youre gesetzt und bereit zu gehen . Beachten Sie einige der Unterschiede: In der Praxis kommunizieren wir in der Regel die Aufgabe in gewisser Weise (z. B. Englisch oben), aber in einem Standard-RL-Problem nehmen Sie eine willkürliche Belohnungsfunktion an, die Sie durch Umwelteinwirkungen entdecken müssen. Es kann argumentiert werden, dass der Mensch viel Schwierigkeiten hätte, zu lernen, was er tun sollte, wenn ein Mensch ins Spiel von Pong ging, aber ohne etwas über die Belohnungsfunktion zu wissen (tatsächlich, wenn die Belohnungsfunktion eine statische, aber zufällige Funktion war) Politik Gradienten wäre gleichgültig, und wahrscheinlich arbeiten viel besser. Ähnlich, wenn wir die Rahmen genommen und permuted die Pixel nach dem Zufall, dann würden die Menschen wahrscheinlich scheitern, aber unsere Policy-Gradient-Lösung konnte nicht einmal sagen, den Unterschied (wenn seine mit einem voll verbundenen Netzwerk wie hier getan). Ein Mensch bringt eine riesige Menge an Vorkenntnissen mit, wie z. B. die intuitive Physik (der Ball hüpft, es ist unwahrscheinlich, dass er teleportiert, seine Wahrscheinlichkeit, dass er plötzlich aufhört, eine konstante Geschwindigkeit beibehält usw.) und die intuitive Psychologie (die AI-Gegnerin will Gewinnen, ist wahrscheinlich nach einer offensichtlichen Strategie der Bewegung auf den Ball, etc.). Sie verstehen auch das Konzept der Kontrolle über ein Paddel, und dass es reagiert auf Ihre UPDOWN-Tastenbefehle. Im Gegensatz dazu beginnen unsere Algorithmen von vorne anfangen, die gleichzeitig beeindruckend ist (weil es funktioniert) und deprimierend (weil wir keine konkreten Ideen dafür haben, wie nicht). Richtliniengradienten sind eine rohe Gewaltlösung, in der die richtigen Handlungen schließlich entdeckt und in eine Politik verinnerlicht werden. Menschen bauen ein reiches, abstraktes Modell und Plan in ihm. In Pong, kann ich begründen, dass der Gegner ist ziemlich langsam, so könnte es eine gute Strategie, um den Ball mit hohen vertikalen Geschwindigkeit, die den Gegner, nicht fangen würde es in der Zeit zu springen. Allerdings fühlt es sich auch an, als ob wir auch schließlich verinnerlichen gute Lösungen in das, was fühlt sich mehr wie eine reaktive Muskel-Gedächtnis-Politik. Zum Beispiel, wenn youre Lernen einer neuen motorischen Aufgabe (z. B. Autofahren mit Stick-Verschiebung) fühlen Sie sich oft denken, eine Menge in den Anfang, aber schließlich wird die Aufgabe automatisch und gedankenlos. Politik Gradienten müssen tatsächlich eine positive Belohnung zu erleben, und erleben sie sehr oft, um schließlich und langsam verschieben die Politik-Parameter in Richtung wiederholen Züge, die hohe Belohnungen geben. Mit unserem abstrakten Modell können die Menschen herausfinden, was wahrscheinlich Belohnungen geben wird, ohne jemals den lohnenden oder unbeliebten Übergang zu erleben. Ich habe nicht wirklich zu erleben, Crashing mein Auto in eine Wand ein paar hundert Mal, bevor ich langsam beginnen zu vermeiden, dies zu tun. Links: Montezumas Rache: ein schwieriges Spiel für unsere RL-Algorithmen. Der Spieler muss nach unten springen, klettern, den Schlüssel bekommen und die Tür öffnen. Ein Mensch versteht, dass das Erlernen eines Schlüssels nützlich ist. Der Computer Proben Milliarden von zufälligen Bewegungen und 99 der Zeit fällt in den Tod oder wird durch das Monster getötet. Mit anderen Worten, es ist schwer, in die lohnende Situation zu stolpern. Rechts: Ein weiteres schwieriges Spiel namens Frostbite, wo ein Mensch versteht, dass die Dinge sich bewegen, einige Dinge sind gut zu berühren, manche Dinge sind schlecht zu berühren, und das Ziel ist es, den Iglu-Ziegel von Backstein zu bauen. Eine gute Analyse dieses Spiels und eine Diskussion der Unterschiede zwischen dem menschlichen und Computer-Ansatz finden Sie in Bau-Maschinen, die lernen und denken, wie Menschen. Ich möchte auch betonen, dass es umgekehrt viele Spiele gibt, bei denen Policy Gradienten ganz einfach einen Menschen besiegen würde. Insbesondere wäre alles mit häufigen Belohnungssignalen, die ein präzises Spiel, schnelle Reflexe und nicht zu viel langfristige Planung erfordern, ideal, da diese kurzfristigen Korrelationen zwischen Belohnungen und Aktionen durch den Ansatz und die Ausführung sorgfältig bemerkt werden können Perfektioniert durch die Politik. In unserem Pong-Agenten gibt es Hinweise darauf, wie es bereits geschieht: Es entwickelt eine Strategie, in der es auf den Ball wartet und dann schnell abstreift, um es gerade am Rand zu fangen, was es schnell und mit hoher vertikaler Geschwindigkeit startet. Der Agent erzielt mehrere Punkte in einer Reihe, die diese Strategie wiederholen. Es gibt viele ATARI-Spiele, bei denen Deep Q Learning die menschliche Grundlinienleistung auf diese Weise zerstört - z. B. Pinball, Breakout, etc. Abschließend, sobald Sie den Trick, mit dem diese Algorithmen arbeiten Sie verstehen, können Sie durch ihre Stärken und Schwächen zu verstehen. Insbesondere sind wir bei Menschen nicht in der Lage, abstrakte, reiche Darstellungen von Spielen zu erstellen, die wir planen und für schnelles Lernen einsetzen können. Eines Tages wird ein Computer ein Array von Pixeln betrachten und einen Schlüssel, eine Tür merken und sich selbst denken, dass es wahrscheinlich eine gute Idee ist, den Schlüssel abzunehmen und die Tür zu erreichen. Denn jetzt ist nichts dahinter, und der Versuch, dorthin zu gelangen, ist ein aktives Forschungsgebiet. Nicht differenzierbare Berechnung in Neuronalen Netzwerken Id wie zu erwähnen, eine weitere interessante Anwendung von Policy Gradients ohne Bezug zu Spielen: Es ermöglicht es uns, neuronale Netze mit Komponenten, die (oder interagieren) nicht-differenzierbare Berechnung zu entwerfen und zu trainieren. Die Idee wurde zuerst in Williams 1992 eingeführt und vor kurzem von Recurrent Models of Visual Attention unter dem Namen harte Aufmerksamkeit, im Rahmen eines Modells, verarbeitet ein Bild mit einer Folge von niedrigen Auflösung foveal Blicke (inspiriert von unseren eigenen menschlichen Augen ). Insbesondere würde bei jeder Iteration ein RNN ein kleines Stück des Bildes empfangen und einen Ort untersuchen, um als nächstes zu suchen. Zum Beispiel kann der RNN die Position (5,30) betrachten, ein kleines Stück des Bildes empfangen, dann beschließen, auf (24, 50) usw. zu schauen. Das Problem bei dieser Idee ist, daß dort ein Stück Netzwerk vorhanden ist, Verteilung, wo als nächstes zu suchen und dann Proben von ihm. Leider ist dieser Vorgang nicht differenzierbar, weil wir intuitiv nicht wissen, was passiert wäre, wenn wir einen anderen Ort abgetastet hätten. More generally, consider a neural network from some inputs to outputs: Notice that most arrows (in blue) are differentiable as normal, but some of the representation transformations could optionally also include a non-differentiable sampling operation (in red). We can backprop through the blue arrows just fine, but the red arrow represents a dependency that we cannot backprop through. Policy gradients to the rescue Well think about the part of the network that does the sampling as a small stochastic policy embedded in the wider network. Therefore, during training we will produce several samples (indicated by the branches below), and then well encourage samples that eventually led to good outcomes (in this case for example measured by the loss at the end). In other words we will train the parameters involved in the blue arrows with backprop as usual, but the parameters involved with the red arrow will now be updated independently of the backward pass using policy gradients, encouraging samples that led to low loss. This idea was also recently formalized nicely in Gradient Estimation Using Stochastic Computation Graphs . Trainable Memory IO . Youll also find this idea in many other papers. For example, a Neural Turing Machine has a memory tape that they it read and write from. To do a write operation one would like to execute something like mi x. where i and x are predicted by an RNN controller network. However, this operation is non-differentiable because there is no signal telling us what would have happened to the loss if we were to write to a different location j i. Therefore, the NTM has to do soft read and write operations. It predicts an attention distribution a (with elements between 0 and 1 and summing to 1, and peaky around the index wed like to write to), and then doing for all i: mi aix. This is now differentiable, but we have to pay a heavy computational price because we have to touch every single memory cell just to write to one position. Imagine if every assignment in our computers had to touch the entire RAM However, we can use policy gradients to circumvent this problem (in theory), as done in RL-NTM. We still predict an attention distribution a. but instead of doing the soft write we sample locations to write to: i sample(a) mi x. During training we would do this for a small batch of i. and in the end make whatever branch worked best more likely. The large computational advantage is that we now only have to readwrite at a single location at test time. However, as pointed out in the paper this strategy is very difficult to get working because one must accidentally stumble by working algorithms through sampling. The current consensus is that PG works well only in settings where there are a few discrete choices so that one is not hopelessly sampling through huge search spaces. However, with Policy Gradients and in cases where a lot of datacompute is available we can in principle dream big - for instance we can design neural networks that learn to interact with large, non-differentiable modules such as Latex compilers (e. g. if youd like char-rnn to generate latex that compiles), or a SLAM system, or LQR solvers, or something. Or, for example, a superintelligence might want to learn to interact with the internet over TCPIP (which is sadly non-differentiable) to access vital information needed to take over the world. Thats a great example. Conclusions We saw that Policy Gradients are a powerful, general algorithm and as an example we trained an ATARI Pong agent from raw pixels, from scratch, in 130 lines of Python. More generally the same algorithm can be used to train agents for arbitrary games and one day hopefully on many valuable real-world control problems. I wanted to add a few more notes in closing: On advancing AI . We saw that the algorithm works through a brute-force search where you jitter around randomly at first and must accidentally stumble into rewarding situations at least once, and ideally often and repeatedly before the policy distribution shifts its parameters to repeat the responsible actions. We also saw that humans approach these problems very differently, in what feels more like rapid abstract model building - something we have barely even scratched the surface of in research (although many people are trying). Since these abstract models are very difficult (if not impossible) to explicitly annotate, this is also why there is so much interest recently in (unsupervised) generative models and program induction. On use in complex robotics settings . The algorithm does not scale naively to settings where huge amounts of exploration are difficult to obtain. For instance, in robotic settings one might have a single (or few) robots, interacting with the world in real time. This prohibits naive applications of the algorithm as I presented it in this post. One related line of work intended to mitigate this problem is deterministic policy gradients - instead of requiring samples from a stochastic policy and encouraging the ones that get higher scores, the approach uses a deterministic policy and gets the gradient information directly from a second network (called a critic ) that models the score function. This approach can in principle be much more efficient in settings with very high-dimensional actions where sampling actions provides poor coverage, but so far seems empirically slightly finicky to get working. Another related approach is to scale up robotics, as were starting to see with Googles robot arm farm. or perhaps even Teslas Model S Autopilot . There is also a line of work that tries to make the search process less hopeless by adding additional supervision. In many practical cases, for instance, one can obtain expert trajectories from a human. For example AlphaGo first uses supervised learning to predict human moves from expert Go games and the resulting human mimicking policy is later finetuned with policy gradients on the real objective of winning the game. In some cases one might have fewer expert trajectories (e. g. from robot teleoperation ) and there are techniques for taking advantage of this data under the umbrella of apprenticeship learning. Finally, if no supervised data is provided by humans it can also be in some cases computed with expensive optimization techniques, e. g. by trajectory optimization in a known dynamics model (such as (Fma) in a physical simulator), or in cases where one learns an approximate local dynamics model (as seen in very promising framework of Guided Policy Search ). On using PG in practice . As a last note, Id like to do something I wish I had done in my RNN blog post. I think I may have given the impression that RNNs are magic and automatically do arbitrary sequential problems. The truth is that getting these models to work can be tricky, requires care and expertise, and in many cases could also be an overkill, where simpler methods could get you 90 of the way there. The same goes for Policy Gradients. They are not automatic: You need a lot of samples, it trains forever, it is difficult to debug when it doesnt work. One should always try a BB gun before reaching for the Bazooka. In the case of Reinforcement Learning for example, one strong baseline that should always be tried first is the cross-entropy method (CEM). a simple stochastic hill-climbing guess and check approach inspired loosely by evolution. And if you insist on trying out Policy Gradients for your problem make sure you pay close attention to the tricks section in papers, start simple first, and use a variation of PG called TRPO. which almost always works better and more consistently than vanilla PG in practice. The core idea is to avoid parameter updates that change your policy too much, as enforced by a constraint on the KL divergence between the distributions predicted by the old and the new policy on a batch of data (instead of conjugate gradients the simplest instantiation of this idea could be implemented by doing a line search and checking the KL along the way). And thats it I hope I gave you a sense of where we are with Reinforcement Learning, what the challenges are, and if youre eager to help advance RL I invite you to do so within our OpenAI Gym :) Until next time
No comments:
Post a Comment