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.
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.
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.
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).
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%.
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.
――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