[PYTHON] [Einführung in die Stärkung des Lernens] Teil 1 - Epsilon-Greedy-Algorithmus im Banditenspiel

Einführung

Ich möchte einen Artikel schreiben, um maschinelles Lernen auf meine eigene Weise zu verdauen. Wir planen, eine Serie zu erstellen, die von den Grundlagen ausgeht und sich schrittweise mit der Entwicklung von Inhalten befasst. Die Theorie dahinter ⇨ Code. Fragen sind willkommen.

Lernen stärken

Im Gegensatz zum sogenannten überwachten Lernen ist intensives Lernen eine Ansatzmethode, bei der auf einen vorgegebenen Datensatz keine "Antwort" gegeben wird und nach der optimalen Lösung gesucht wird. Nehmen wir zum Beispiel an, dass sich zwei Blackjack-Stände vor Ihnen befinden (hier ändert sich die Gewinnrate je nach Dealer). Wenn Sie weiterhin mit der höheren Gewinnrate spielen, können Sie natürlich Ihre Gewinne maximieren. Zu Beginn wissen wir jedoch nicht, wie viel Geld jede Plattform zurückgeben wird, daher werden wir "lernen", was besser ist, indem wir die Anzahl der Wiederholungen wiederholen. Dies ist die Grundidee des verbesserten Lernens. casino_dealer_man.pngcasino_dealer_woman.png

Hier sind zwei wichtige "antagonisierende" Faktoren, das Explore-Exploit-Dillemma, genannt

Exploit (~Greedy) Die Kraft, Gewinne zu maximieren   Explore (~Epsilon) Die Fähigkeit, höhere Gewinne auf Kosten der Maximierung der (jüngsten) Gewinne zu "erzielen"

Ist. Schauen wir uns als nächstes eines der konkreten Modelle an, den Epsilon-Greedy-Algorithmus.

Epsilon-Greedy Algorithm Einfach ausgedrückt ist es eine Taktik, die besagt: "Grundsätzlich wird die mit der höheren Rendite ausgewählt (gierig), aber gelegentlich (mit einer Wahrscheinlichkeit von nur Epsilon) wird die Stimmung geändert und die Auswahl ist zufällig." Nehmen Sie im Fall des obigen Blackjack an, dass Sie insgesamt N Mal Blackjack spielen und zuerst den männlichen Dealer (M) gewinnen. Dann ist die Rendite, dh die Gewinnrate (MW) gegen M, 1, während die Gewinnrate (WW) gegen die Händlerin (W) unbekannt ist. Wenn also die Gewinnrate (WW) 0 ist, ist der nächste zu spielende Tisch wieder M. Übrigens ist in diesem zweiten Spiel die Gewinnrate MW> WW, unabhängig davon, ob Sie gewinnen oder verlieren. Auf diese Weise spielen Sie nur mit einem Dealer, wenn Sie nur mit dem Spieler spielen, der zu diesem Zeitpunkt die höchste Gewinnrate aufweist, dh mit M (Complete Greedy), und Sie werden für immer weiterspielen, ohne die Gewinnrate gegen W zu kennen. Daher wurde der Ort herausgestellt, an dem die Wahrscheinlichkeit von Epsilon in der zweiten Hälfte (normalerweise 5 bis 10%) zufällig aus allen Optionen ausgewählt wurde. Auf diese Weise gibt es keine Händler, deren Gewinnrate nicht aktualisiert wird, wenn Sie ein ausreichend großes N erhalten, und Sie können alle Gewinnraten schätzen.

Was hier wichtig ist, ist Epsilon, die "Wahrscheinlichkeit, zufällig zu spielen". Wenn dies ein großer Wert von 50% ist, bedeutet dies, dass Sie mit der halben Wahrscheinlichkeit angemessen spielen, also ungefähr die gleiche Anzahl wie zwei Dealer spielen und die Gewinnrate gegen zwei Personen frühzeitig kennen. Gleichzeitig ist die Strategie von Greedy relativ geschwächt, was zu einer geringeren Gesamtrendite führt. Was ist, wenn ich das Epsilon diesmal zu klein nehme? Die Antwort ist im Gegenteil, Sie entscheiden sich frühzeitig für einen Dealer mit einer hohen Gewinnrate (nicht immer ein Match) und spielen nur mit diesem Dealer. Mit anderen Worten, Gleichgewicht ist wichtig (wie auch das Leben). Mein Leben ist übrigens ein kleines Epsilon (beiseite).

Lassen Sie uns diese Dinge als nächstes implementieren.

Implementierung

Geschrieben in python3.x. Ersetzen Sie zunächst das Argument, das nach der Bibliothek verwendet werden soll.

Bandit_Epsilon_simulation.py


import numpy as np
import matplotlib.pyplot as plt

Num_try = 1000
Eps =0.05
Bandit_prob = [0.1,0.45,0.75]

Hier ist die Zahl in Bandit_prob die "echte Gewinnrate" für jeden Dealer, aber das Ziel dieses Algorithmus ist es, dies durch Lernen zu finden (daher die Informationen, die die Spielerseite ursprünglich nicht kennt Hinweis).

Implementieren Sie als Nächstes den Kernalgorithmus.

Bandit_Epsilon_simulation.py


class Bandit():
    def __init__(self,p): # p:winning rate- pretend not to know what these are
        self.p = p
        self.p_estimate = 0
        self.N = 0
        
    def pull(self): # return a 1 with p
        return np.random.random() < self.p # random takes [0,1] randomly
    
    def update(self, x):
        self.N +=1
        self.p_estimate = (1/self.N)*(x + self.p_estimate*(self.N-1))
        # Using the formula below
        # <p>_n*N = p_n(=x) + <p>_(n-1)*(N-1)
        
def experiment():
    bandits = [Bandit(p) for p in Bandit_prob] # we don't know what are in Bandit_prob
    
    rewards = np.zeros(Num_try)
    num_explored = 0
    num_exploited = 0
    num_opt = 0
    opt_j = np.argmax([b.p for b in bandits]) # # in bandit_prob

    
    for i in range(Num_try):
        
        # follow epsilon-greedy algorythm
        if np.random.random() < Eps:# explore
            num_explored += 1
            # j is index
            j = np.random.choice(list(range(len(bandits))))
        else: # greed
            num_exploited += 1
            j = np.argmax([k.p_estimate for k in bandits])
        
        if j == opt_j:
            num_opt += 1
            
        x = bandits[j].pull() #the chosen one can get reward or not?
        
        
        rewards[i] = x
        
        bandits[j].update(x)
        
    return bandits, rewards, num_explored, num_exploited, opt_j

Das Spielergebnis (Gewinn: 1, Verlust: 0) wird durch den Methodenzug des ersten Banditen zurückgegeben. Entsprechend dem Ergebnis wird die Gewinnrate für jeden Händler durch jedes Mal aktualisiert. Es sollte beachtet werden, dass die Gewinnrate hier berechnet und erhalten wird, während gegen die Spielerseite gespielt wird, und sich von dem unterscheidet, was der Dealer ursprünglich hat (lernen, näher daran heranzukommen).

Ergebnis

Lassen Sie uns dies nun unter mehreren Epsilon darstellen. Die horizontale Achse ist die Anzahl der Spiele, die vertikale Achse ist die Gewinnrate und die schwarze horizontale Linie ist die maximale Gewinnrate von 75%.

bandit_epsilon.png

Diese Handlung steckt voller Erkenntnisse. Die Geschwindigkeit zum Plateau, seine Höhe, warum es beim nächsten Mal nicht 75% erreicht, lassen Sie uns fortfahren, während wir uns umschauen.

Zusammenfassung

――Intensifiziertes Lernen ist ein Modell, das die Wahrscheinlichkeitsverteilung von Entscheidungen basierend auf mittleren Renditen (Belohnungen) korrigiert, die keine Antwort haben.

References Udemy-Künstliche Intelligenz: Reinforcement Learning in Python

Recommended Posts

[Einführung in die Stärkung des Lernens] Teil 1 - Epsilon-Greedy-Algorithmus im Banditenspiel
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Versuchen Sie Q-Lernen in einem Kampf im Drakue-Stil [Einführung in die Stärkung des Lernens]
[Einführung] Stärkung des Lernens
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
[Lernen stärken] Banditenaufgabe
Einführung in das maschinelle Lernen
Einführung in den Wörterbuch-Suchalgorithmus
[Lernmemorandum] Einführung in vim
Eine Einführung in das maschinelle Lernen
Einführung in Deep Learning ~ Lernregeln ~
Super Einführung in das maschinelle Lernen
Einführung in Deep Learning ~ Backpropagation ~
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Einführung in das maschinelle Lernen Schreiben von Notizen
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part4-
Einführung in Deep Learning ~ Codierungsvorbereitung ~
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 1
Einführung in die Bibliothek für maschinelles Lernen SHOGUN
Einführung in Deep Learning ~ Dropout Edition ~
Einführung in Deep Learning ~ Forward Propagation ~
Einführung in Deep Learning ~ CNN Experiment ~
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part3-
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 2
Möglichkeit der Anwendung auf die Evakuierungsroutengestaltung des Labyrinthproblems beim Lernen der Verstärkung
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Einführung in das maschinelle Lernen: Funktionsweise des Modells
Einführung in Deep Learning ~ Falten und Pooling ~
Eine Einführung in OpenCV für maschinelles Lernen
Eine Einführung in Python für maschinelles Lernen
Einführung in TensorFlow - Erläuterung der Begriffe und Konzepte des maschinellen Lernens
Einführung in Docker Erstellen einer Ubuntu-Umgebung in Ubuntu
Probieren Sie den erweiterten Standard-Lernalgorithmus PPO von OpenAI aus
Einführung in Vektoren: Lineare Algebra in Python <1>
[Einführung in die Simulation] Sign Wave Mass Game ♬
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
Einführung in Deep Learning (1) --Chainer wird Anfängern leicht verständlich erklärt.
Was ist ein Algorithmus? Einführung in den Suchalgorithmus] ~ Python ~
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
tse - Einführung in den Text Stream Editor in Python
[Einführung in StyleGAN2] Unabhängiges Lernen mit 10 Anime-Gesichtern ♬
Geschrieben "Einführung in die Effektüberprüfung" in Python
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Einführung in Deep Learning ~ Lokalisierungs- und Verlustfunktion ~
[Einführung in den Algorithmus] Finden Sie den kürzesten Weg [Python3]
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken (② Registrieren Sie die Umgebung im Fitnessstudio).
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Nach Abschluss von "Einführung in Python 3" des Paiza-Lernens ~