Εισαγωγή στις μεθόδους του Advantage Actor Critic: ας παίξουμε το Sonic the Hedgehog!

Από την αρχή αυτού του μαθήματος, μελετήσαμε δύο διαφορετικές μεθόδους μάθησης ενίσχυσης:

  • Μέθοδοι με βάση την αξία (Q-learning, Deep Q-learning): όπου μαθαίνουμε μια συνάρτηση τιμής που θα αντιστοιχίζει κάθε ζεύγος ενεργειών κατάστασης σε μια τιμή. Χάρη σε αυτές τις μεθόδους, βρίσκουμε την καλύτερη ενέργεια για κάθε κατάσταση - την ενέργεια με τη μεγαλύτερη αξία. Αυτό λειτουργεί καλά όταν έχετε ένα πεπερασμένο σύνολο ενεργειών.
  • Μέθοδοι που βασίζονται σε πολιτικές (ΕΠΙΒΕΒΑΙΩΣΗ με διαβαθμίσεις πολιτικής): όπου βελτιστοποιούμε άμεσα την πολιτική χωρίς να χρησιμοποιήσουμε μια συνάρτηση τιμής. Αυτό είναι χρήσιμο όταν ο χώρος δράσης είναι συνεχής ή στοχαστικός. Το κύριο πρόβλημα είναι η εύρεση μιας καλής λειτουργίας βαθμολογίας για τον υπολογισμό του πόσο καλή είναι μια πολιτική. Έχουμε χρησιμοποιήσει συνολικά οφέλη του επεισοδίου.

Αλλά και οι δύο αυτές μέθοδοι έχουν μεγάλα μειονεκτήματα. Γι 'αυτό, σήμερα, θα μελετήσουμε έναν νέο τύπο μεθόδου εκμάθησης ενίσχυσης που μπορούμε να ονομάσουμε «υβριδική μέθοδο»: Κριτικός ηθοποιός . Θα χρησιμοποιήσουμε δύο νευρωνικά δίκτυα:

  • κριτικός που μετρά πόσο καλή είναι η δράση που λαμβάνεται (με βάση την αξία)
  • ένας ηθοποιός που ελέγχει τη συμπεριφορά του πράκτορά μας (βάσει πολιτικής)

Ο έλεγχος αυτής της αρχιτεκτονικής είναι απαραίτητος για την κατανόηση των αλγορίθμων τελευταίας τεχνολογίας, όπως η Βελτιστοποίηση πολιτικής εγγύησης (γνωστός και ως PPO). Το PPO βασίζεται στο Advantage Actor Critic.

Και θα εφαρμόσετε έναν πράκτορα Advantage Actor Critic (A2C) που μαθαίνει να παίζει Sonic the Hedgehog!

Η αναζήτηση ενός καλύτερου μοντέλου μάθησης

Το πρόβλημα με τις διαβαθμίσεις πολιτικής

Η μέθοδος πολιτικής διαβάθμισης έχει ένα μεγάλο πρόβλημα. Βρισκόμαστε σε κατάσταση Μόντε Κάρλο, περιμένουμε μέχρι το τέλος του επεισοδίου να υπολογίσουμε την ανταμοιβή. Μπορούμε να καταλήξουμε στο συμπέρασμα ότι εάν έχουμε υψηλή ανταμοιβή ( R (t) ), όλες οι ενέργειες που κάναμε ήταν καλές, ακόμη και αν ορισμένες ήταν πραγματικά κακές.

Όπως μπορούμε να δούμε σε αυτό το παράδειγμα, ακόμα κι αν το A3 ήταν μια κακή ενέργεια (οδήγησε σε αρνητικές ανταμοιβές), όλες οι ενέργειες θα είναι κατά μέσο όρο τόσο καλές, επειδή η συνολική ανταμοιβή ήταν σημαντική

Κατά συνέπεια, να έχουμε μια βέλτιστη πολιτική,χρειαζόμαστε πολλά δείγματα. Αυτό παράγει αργή μάθηση, γιατί χρειάζεται πολύς χρόνος για σύγκλιση.

Τι γίνεται αν, αντίθετα, μπορούμε να κάνουμε μια ενημέρωση σε κάθε βήμα;

Παρουσιάζοντας τον κριτικό του ηθοποιού

Το μοντέλο Actor Critic είναι μια καλύτερη λειτουργία σκορ. Αντί να περιμένουμε μέχρι το τέλος του επεισοδίου, όπως κάνουμε στο Monte Carlo REINFORCE, κάνουμε μια ενημέρωση σε κάθε βήμα (TD Learning).

Επειδή κάνουμε μια ενημέρωση σε κάθε βήμα, δεν μπορούμε να χρησιμοποιήσουμε τις συνολικές ανταμοιβές R (t). Αντ 'αυτού, πρέπει να εκπαιδεύσουμε ένα μοντέλο κριτικής που προσεγγίζει τη συνάρτηση τιμής (θυμηθείτε ότι η συνάρτηση τιμής υπολογίζει ποια είναι η μέγιστη αναμενόμενη μελλοντική ανταμοιβή δεδομένης μιας κατάστασης και μιας ενέργειας). Αυτή η συνάρτηση τιμής αντικαθιστά τη συνάρτηση ανταμοιβής σε διαβάθμιση πολιτικής που υπολογίζει τις ανταμοιβές μόνο στο τέλος του επεισοδίου.

Πώς λειτουργεί ο κριτικός ηθοποιός

Φανταστείτε ότι παίζετε ένα βιντεοπαιχνίδι με έναν φίλο που σας παρέχει κάποια σχόλια. Είστε ο ηθοποιός και ο φίλος σας είναι ο κριτικός.

Στην αρχή, δεν ξέρετε πώς να παίξετε, οπότε δοκιμάζετε κάποια ενέργεια τυχαία. Ο κριτικός παρατηρεί τη δράση σας και παρέχει σχόλια.

Μαθαίνοντας από αυτά τα σχόλια, θα ενημερώσετε την πολιτική σας και θα είστε καλύτεροι στο παιχνίδι αυτού του παιχνιδιού.

Από την άλλη, ο φίλος σας (Κριτικός) θα ενημερώσει επίσης τον δικό του τρόπο για να παρέχει σχόλια, ώστε να μπορεί να είναι καλύτερη την επόμενη φορά.

Όπως μπορούμε να δούμε, η ιδέα του Actor Critic είναι να έχουμε δύο νευρωνικά δίκτυα. Εκτιμούμε και τα δύο:

Και οι δύο τρέχουν παράλληλα.

Επειδή έχουμε δύο μοντέλα (ηθοποιός και κριτικός) που πρέπει να εκπαιδευτούν, αυτό σημαίνει ότι έχουμε δύο σετ βαρών (; για τη δράση μας και w για τον κριτικό μας) το καπέλο πρέπει να βελτιστοποιηθεί ξεχωριστά:

Η κριτική διαδικασία του ηθοποιού

Σε κάθε χρονικό βήμα t, παίρνουμε την τρέχουσα κατάσταση (St) από το περιβάλλον και την περνάμε ως είσοδος μέσω του Ηθοποιού και του κριτικού μας.

Η Πολιτική μας λαμβάνει την κατάσταση, εκπέμπει μια ενέργεια (At) και λαμβάνει μια νέα κατάσταση (St + 1) και μια ανταμοιβή (Rt + 1).

Χάρη σε αυτό:

  • ο Κριτικός υπολογίζει την αξία της ανάληψης δράσης σε αυτήν την κατάσταση
  • ο Ηθοποιός ενημερώνει τις παραμέτρους πολιτικής του (βάρη) χρησιμοποιώντας αυτήν την τιμή q

Χάρη στις ενημερωμένες παραμέτρους του, ο Ηθοποιός παράγει την επόμενη ενέργεια που πρέπει να κάνει στο At + 1, δεδομένης της νέας κατάστασης St + 1. Στη συνέχεια, ο κριτικός ενημερώνει τις παραμέτρους αξίας:

A2C και A3C

Παρουσιάζοντας τη λειτουργία Advantage για τη σταθεροποίηση της μάθησης

Όπως είδαμε στο άρθρο σχετικά με βελτιώσεις στη Βαθμολόγηση Q, οι μέθοδοι που βασίζονται στην αξία έχουν υψηλή μεταβλητότητα.

Για να μειώσουμε αυτό το πρόβλημα, μιλήσαμε για τη χρήση της συνάρτησης πλεονεκτήματος αντί της συνάρτησης τιμής.

Η συνάρτηση πλεονεκτήματος ορίζεται ως εξής:

Αυτή η συνάρτηση θα μας πει τη βελτίωση σε σύγκριση με τον μέσο όρο της δράσης που λαμβάνεται σε αυτήν την κατάσταση. Με άλλα λόγια, αυτή η συνάρτηση υπολογίζει την επιπλέον επιβράβευση που λαμβάνω αν κάνω αυτήν την ενέργεια. Η επιπλέον επιβράβευση είναι αυτή πέρα ​​από την αναμενόμενη αξία αυτής της κατάστασης.

Εάν A (s, a)> 0: η κλίση μας ωθεί προς αυτή την κατεύθυνση.

Εάν A (s, a) <0 (η δράση μας κάνει χειρότερη από τη μέση τιμή αυτής της κατάστασης) η κλίση μας ωθείται προς την αντίθετη κατεύθυνση.

Το πρόβλημα της εφαρμογής αυτής της λειτουργίας πλεονεκτήματος είναι ότι απαιτεί δύο συναρτήσεις τιμής - Q (s, a) και V (s). Ευτυχώς, μπορούμε να χρησιμοποιήσουμε το σφάλμα TD ως καλό εκτιμητή της συνάρτησης πλεονεκτήματος.

Δύο διαφορετικές στρατηγικές: ασύγχρονες ή σύγχρονες

Έχουμε δύο διαφορετικές στρατηγικές για να εφαρμόσουμε έναν παράγοντα κριτικού Actor:

  • A2C (γνωστός και ως Advantage Actor Critic)
  • A3C (γνωστός και ως Asynchronous Advantage Actor Critic)

Εξαιτίας αυτού θα συνεργαστούμε με τους A2C και όχι με τους A3C. Αν θέλετε να δείτε μια πλήρη εφαρμογή του A3C, δείτε το εξαιρετικό άρθρο του Arthur Juliani A3C και την εφαρμογή Doom.

Στο A3C, δεν χρησιμοποιούμε επανάληψη εμπειρίας, καθώς αυτό απαιτεί πολλή μνήμη. Αντ 'αυτού, εκτελούμε ασύγχρονα διαφορετικούς παράγοντες παράλληλα σε πολλές περιπτώσεις του περιβάλλοντος. Κάθε εργαζόμενος (αντίγραφο του δικτύου) θα ενημερώνει το παγκόσμιο δίκτυο ασύγχρονα.

Από την άλλη πλευρά, η μόνη διαφορά στο A2C είναι ότι ενημερώνουμε συγχρόνως το παγκόσμιο δίκτυο. Περιμένουμε έως ότου όλοι οι εργαζόμενοι ολοκληρώσουν την εκπαίδευσή τους και υπολογίστηκαν οι κλίσεις τους για να τους μετρήσουν, ώστε να ενημερώσουν το παγκόσμιο δίκτυό μας.

Επιλέγοντας A2C ή A3C;

Το πρόβλημα του A3C εξηγείται σε αυτό το φοβερό άρθρο. Λόγω της ασύγχρονης φύσης του A3C, ορισμένοι εργαζόμενοι (αντίγραφα του πράκτορα) θα παίζουν με παλαιότερη έκδοση των παραμέτρων. Έτσι, η συγκεντρωτική ενημέρωση δεν θα είναι η βέλτιστη.

Αυτός είναι ο λόγος για τον οποίο το A2C περιμένει κάθε ηθοποιό να ολοκληρώσει το τμήμα εμπειρίας του πριν ενημερώσει τις παγκόσμιες παραμέτρους. Στη συνέχεια, ξαναρχίζουμε ένα νέο τμήμα εμπειρίας με όλους τους παράλληλους ηθοποιούς να έχουν τις ίδιες νέες παραμέτρους.

Κατά συνέπεια, η εκπαίδευση θα είναι πιο συνεκτική και ταχύτερη.

Υλοποίηση ενός πράκτορα A2C που παίζει το Sonic the Hedgehog

Στην πράξη το A2C

Στην πράξη, όπως εξηγείται σε αυτό το Reddit post, η σύγχρονη φύση του A2C σημαίνει ότι δεν χρειαζόμαστε διαφορετικές εκδόσεις (διαφορετικοί εργαζόμενοι) του A2C.

Κάθε εργαζόμενος στο A2C θα έχει το ίδιο σύνολο βαρών αφού, σε αντίθεση με το A3C, το A2C ενημερώνει όλους τους εργαζομένους τους ταυτόχρονα.

Στην πραγματικότητα, δημιουργούμε πολλές εκδόσεις περιβάλλοντος (ας πούμε οκτώ) και στη συνέχεια τις εκτελούμε παράλληλα.

Η διαδικασία θα είναι η ακόλουθη:

  • Δημιουργεί ένα διάνυσμα από περιβάλλοντα n χρησιμοποιώντας τη βιβλιοθήκη πολλαπλών επεξεργασιών
  • Δημιουργεί ένα αντικείμενο δρομέα που χειρίζεται τα διαφορετικά περιβάλλοντα, εκτελώντας παράλληλα.
  • Έχει δύο εκδόσεις του δικτύου:
  1. step_model: που δημιουργεί εμπειρίες από περιβάλλοντα
  2. train_model: που εκπαιδεύει τις εμπειρίες.

Όταν ο δρομέας κάνει ένα βήμα (μοντέλο ενός βήματος), αυτό εκτελεί ένα βήμα για καθένα από τα n περιβάλλοντα. Αυτό δημιουργεί μια πείρα εμπειρίας.

Στη συνέχεια, υπολογίζουμε την κλίση ταυτόχρονα χρησιμοποιώντας το train_model και την πείρα μας.

Τέλος, ενημερώνουμε το βήμα βήμα με τα νέα βάρη.

Να θυμάστε ότι ο υπολογισμός της κλίσης ταυτόχρονα είναι το ίδιο με τη συλλογή δεδομένων, τον υπολογισμό της κλίσης για κάθε εργαζόμενο και, στη συνέχεια, ο μέσος όρος. Γιατί; Επειδή το άθροισμα των παραγώγων (άθροισμα των βαθμίδων) είναι το ίδιο πράγμα με τη λήψη των παραγώγων του αθροίσματος . Αλλά το δεύτερο είναι πιο κομψό και ένας καλύτερος τρόπος χρήσης της GPU.

A2C με Sonic the Hedgehog

Τώρα που καταλαβαίνουμε πώς λειτουργεί το A2C γενικά, μπορούμε να εφαρμόσουμε τον πράκτορα A2C παίζοντας Sonic! Αυτό το βίντεο δείχνει τη διαφορά συμπεριφοράς του πράκτορά μας μεταξύ 10 λεπτών προπόνησης (αριστερά) και 10 ωρών προπόνησης (δεξιά).

Η εφαρμογή βρίσκεται στο repo GitHub εδώ, και το σημειωματάριο εξηγεί την εφαρμογή. Σας δίνω το αποθηκευμένο μοντέλο εκπαιδευμένο με περίπου 10 ώρες + στην GPU.

Αυτή η εφαρμογή είναι πολύ περίπλοκη από τις προηγούμενες υλοποιήσεις. Αρχίζουμε να εφαρμόζουμε αλγόριθμους αιχμής, οπότε πρέπει να είμαστε όλο και πιο αποτελεσματικοί με τον κώδικα μας. Γι 'αυτό, σε αυτήν την εφαρμογή, θα χωρίσουμε τον κώδικα σε διαφορετικά αντικείμενα και αρχεία.

Αυτό είναι όλο! Μόλις δημιουργήσατε έναν πράκτορα που μαθαίνει να παίζει Sonic the Hedgehog. Είναι υπέροχο! Μπορούμε να δούμε ότι με 10 ώρες εκπαίδευσης ο αντιπρόσωπός μας δεν κατανοεί το βρόχο, για παράδειγμα, γι 'αυτό θα πρέπει να χρησιμοποιήσουμε μια πιο σταθερή αρχιτεκτονική: PPO.

Αφιερώστε χρόνο για να σκεφτείτε όλα τα επιτεύγματα που έχετε κάνει από το πρώτο κεφάλαιο αυτού του μαθήματος: πήγαμε από απλά παιχνίδια κειμένου (OpenAI taxi-v2) σε σύνθετα παιχνίδια όπως το Doom και το Sonic the Hedgehog χρησιμοποιώντας όλο και πιο ισχυρές αρχιτεκτονικές. Και αυτό είναι φανταστικό!

Την επόμενη φορά θα μάθουμε για το Proximal Policy Gradients, την αρχιτεκτονική που κέρδισε το OpenAI Retro Contest. Θα εκπαιδεύσουμε τον πράκτορά μας να παίξει Sonic the Hedgehog 2 και 3 και αυτή τη φορά, και θα τελειώσει ολόκληρα επίπεδα!

Μην ξεχάσετε να εφαρμόσετε μόνοι σας κάθε μέρος του κώδικα. Είναι πολύ σημαντικό να προσπαθήσετε να τροποποιήσετε τον κωδικό που σας έδωσα. Προσπαθήστε να προσθέσετε εποχές, να αλλάξετε την αρχιτεκτονική, να αλλάξετε το ρυθμό μάθησης και ούτω καθεξής. Ο πειραματισμός είναι ο καλύτερος τρόπος για να μάθετε, οπότε διασκεδάστε!

Αν σας άρεσε το άρθρο μου, κάντε κλικ στο? παρακάτω όσες φορές σας άρεσε το άρθρο, ώστε άλλοι χρήστες να το δουν εδώ στο Medium. Και μην ξεχάσετε να με ακολουθήσετε!

Αυτό το άρθρο είναι μέρος του μαθήματος μάθησης βαθιάς ενίσχυσης με το TensorFlow; ️. Δείτε το πρόγραμμα σπουδών εδώ.

Εάν έχετε οποιεσδήποτε σκέψεις, σχόλια, ερωτήσεις, μη διστάσετε να σχολιάσετε παρακάτω ή να μου στείλετε ένα email: γειά σου [at] simoninithomas [dot] com ή tweet me @ThomasSimonini.

Μάθημα βαθιάς ενίσχυσης:

Φτιάχνουμε μια έκδοση βίντεο του Deep Reinforcement Learning Course with Tensorflow ; όπου εστιάζουμε στο μέρος εφαρμογής με tensorflow εδώ.

Μέρος 1: Εισαγωγή στη Μάθηση Ενίσχυσης

Μέρος 2: Κατάδυση βαθύτερα στην Ενίσχυση Μάθησης με Q-Learning

Μέρος 3: Εισαγωγή στο Deep Q-Learning: ας παίξουμε το Doom

Μέρος 3+: Βελτιώσεις στην εκμάθηση Deep Q: Dueling Double DQN, Priority Experience Replay και σταθεροί Q-στόχοι

Μέρος 4: Εισαγωγή στις διαβαθμίσεις πολιτικής με Doom και Cartpole

Μέρος 6: Βελτιστοποίηση εγγύησης πολιτικής (PPO) με Sonic the Hedgehog 2 και 3

Μέρος 7: Η μάθηση που βασίζεται στην περιέργεια έγινε εύκολη στο Μέρος I