[PYTHON] [Introduction au renforcement de l'apprentissage] part.1-Algorithme Epsilon-Greedy dans Bandit Game

introduction

J'aimerais écrire un article pour digérer l'apprentissage automatique à ma manière. Nous prévoyons de faire une série, en partant des bases, et en faisant progressivement face à l'évolution du contenu. La théorie derrière cela ⇨ Code. Les questions sont les bienvenues.

Renforcer l'apprentissage

Contrairement à ce que l'on appelle l'apprentissage supervisé, l'apprentissage intensif est une méthode d'approche dans laquelle une «réponse» n'est pas donnée à un ensemble de données prédéfini et la solution optimale est recherchée. Par exemple, supposons qu'il y ait deux stands de blackjack devant vous (ici, le taux de gain changera en fonction du croupier). Bien sûr, si vous continuez à jouer avec le taux de gain le plus élevé, vous pouvez maximiser vos profits. Cependant, au début, on ne sait pas combien d'argent chaque plateforme va rapporter, on va donc "apprendre" ce qui est mieux en répétant le nombre de fois. C'est l'idée de base d'un apprentissage amélioré. casino_dealer_man.pngcasino_dealer_woman.png

Ici, deux facteurs «antagonisants» importants, appelés dillemme Explore-Exploit, sont

Exploit (~Greedy) Le pouvoir de maximiser les profits   Explore (~Epsilon) La capacité de «rechercher» des profits plus importants au détriment de la maximisation des profits (les plus récents)

Est. Ensuite, jetons un œil à l'un des modèles concrets, l'algorithme Epsilon-Greedy.

Epsilon-Greedy Algorithm Pour le dire simplement, c'est une tactique qui dit: "Fondamentalement, celui avec le rendement le plus élevé est choisi (Gourmand), mais parfois (avec une probabilité aussi petite qu'Epsilon) l'ambiance est changée et le choix est aléatoire." Dans le cas du blackjack ci-dessus, supposons que vous jouiez au blackjack un total de N fois et que vous gagniez d'abord le croupier masculin (M). Ensuite, le retour, c'est-à-dire le taux de victoire (MW) contre M est de 1, tandis que le taux de victoire (WW) contre la croupière (W) est inconnu, donc si le taux de victoire (WW) est de 0, la prochaine table à jouer sera à nouveau M. À propos, dans ce deuxième jeu, le taux de gain est MW> WW, que vous gagniez ou perdiez. De cette façon, si vous jouez simplement avec celui avec le taux de gain le plus élevé à ce moment-là, c'est-à-dire avec M (Complete Greedy), vous ne jouerez qu'avec un croupier, et vous continuerez à jouer pour toujours sans connaître le taux de gain contre W. Par conséquent, ce qui a été mis en évidence était le lieu où la probabilité d'Epsilon dans la seconde moitié (généralement 5 à 10%) a été choisie au hasard parmi toutes les options. En faisant cela, si vous obtenez un N suffisamment grand, il n'y aura pas de revendeurs dont le taux de gain ne sera pas mis à jour, et vous pourrez estimer tous les taux de gain.

Maintenant, ce qui est important ici, c'est Epsilon, la "probabilité de jouer au hasard". Si c'est une valeur élevée, 50%, cela signifie que vous jouerez correctement avec la moitié de la probabilité, vous jouerez donc à peu près le même nombre que deux croupiers, et vous connaîtrez le taux de victoire contre deux personnes à un stade précoce. Dans le même temps, la stratégie de Greedy est relativement affaiblie, ce qui se traduit par un rendement total moindre. Et si je prends l'Epsilon trop petit cette fois? La réponse est, au contraire, que vous choisissez un croupier avec un taux de gain élevé dès le début (pas toujours un match), et vous ne jouez qu'avec ce croupier. En d'autres termes, l'équilibre est important (tout comme la vie). Au fait, ma vie est petite Epsilon (à part).

Implémentons ces choses ensuite.

la mise en oeuvre

Écrit en python3.x. Tout d'abord, remplacez l'argument à utiliser après la bibliothèque.

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]

Ici, le nombre contenu dans Bandit_prob est le "taux de gain réel" pour chaque croupier, mais le but de cet algorithme est de l'obtenir en apprenant (d'où les informations que le joueur ne connaît pas à l'origine). Remarque).

Ensuite, implémentez l'algorithme de base.

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

Le résultat du match (win: 1, Lose: 0) est renvoyé par la méthode pull du premier Bandit. Selon le résultat, le taux de gain contre chaque croupier est mis à jour en se mettant à jour à chaque fois. Il convient de noter que le taux de gain ici est calculé et obtenu en jouant contre le joueur, et est différent de ce que le croupier a à l'origine (apprendre à s'en rapprocher).

résultat

Maintenant, traçons cela sous plusieurs Epsilon. L'axe horizontal est le nombre de parties, l'axe vertical est le taux de gain et la ligne horizontale noire est le taux de gain maximum de 75%.

bandit_epsilon.png

Cette intrigue regorge de nombreuses informations. La vitesse au plateau, sa hauteur, pourquoi il n'atteint pas 75%, la prochaine fois, procédons en regardant autour de nous.

résumé

―― L'apprentissage intensifié est un modèle qui corrige la distribution de probabilité des choix basés sur des rendements moyens (récompenses) sans réponse.

References Udemy - Intelligence artificielle: apprentissage par renforcement en Python

Recommended Posts

[Introduction au renforcement de l'apprentissage] part.1-Algorithme Epsilon-Greedy dans Bandit Game
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Essayez l'apprentissage Q dans une bataille de style Drakue [Introduction au renforcement de l'apprentissage]
[Introduction] Renforcer l'apprentissage
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
[Renforcer l'apprentissage] Tâche de bandit
Introduction à l'apprentissage automatique
Introduction à l'algorithme de recherche de dictionnaire
[Mémorandum d'apprentissage] Introduction à vim
Une introduction à l'apprentissage automatique
Introduction au Deep Learning ~ Règles d'apprentissage ~
Super introduction à l'apprentissage automatique
Introduction au Deep Learning ~ Rétropropagation ~
[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
Introduction à la rédaction de notes d'apprentissage automatique
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie2-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie4-
Introduction à l'apprentissage profond ~ Préparation au codage ~
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 1
Présentation de la bibliothèque d'apprentissage automatique SHOGUN
Introduction au Deep Learning ~ Dropout Edition ~
Introduction au Deep Learning ~ Propagation vers l'avant ~
Introduction à l'apprentissage profond ~ Expérience CNN ~
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie3-
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 2
Possibilité d'application à la conception d'itinéraire d'évacuation du problème de labyrinthe dans l'apprentissage par renforcement
[Introduction à Python] Comment utiliser la classe en Python?
Introduction à l'apprentissage automatique: fonctionnement du modèle
Introduction au Deep Learning ~ Pliage et mise en commun ~
Une introduction à OpenCV pour l'apprentissage automatique
Une introduction à Python pour l'apprentissage automatique
Introduction à TensorFlow - Explication des termes et concepts d'apprentissage automatique
Introduction à docker Création d'un environnement ubuntu dans ubuntu
Essayez l'algorithme d'apprentissage amélioré standard d'OpenAI PPO
Introduction aux vecteurs: Algèbre linéaire en Python <1>
[Introduction à la simulation] Jeu de masse d'onde de signe ♬
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Introduction au Deep Learning (1) --Chainer est expliqué d'une manière facile à comprendre pour les débutants-
Qu'est-ce qu'un algorithme? Introduction à l'algorithme de recherche] ~ Python ~
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
tse --Introduction à l'éditeur de flux de texte en Python
[Introduction à StyleGAN2] Apprentissage indépendant avec 10 visages d'anime ♬
J'ai écrit "Introduction à la vérification des effets" en Python
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Introduction à l'apprentissage profond ~ Fonction de localisation et de perte ~
[Introduction à l'algorithme] Trouvez l'itinéraire le plus court [Python3]
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Essayez de faire une stratégie de blackjack en renforçant l'apprentissage (② Enregistrer l'environnement dans le gymnase)
Apprentissage de l'histoire pour participer au développement d'applications en équipe avec Python ~ Après avoir terminé "Introduction à Python 3" de paiza learning ~