Βελτιώσεις στη βαθιά μάθηση Q: Dueling Double DQN, Priority Experience Replay και σταθερή…

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

Στο τελευταίο μας άρθρο σχετικά με το Deep Q Learning with Tensorflow, εφαρμόσαμε έναν πράκτορα που μαθαίνει να παίζει μια απλή έκδοση του Doom. Στην έκδοση βίντεο, εκπαιδεύσαμε έναν πράκτορα DQN που παίζει διαστημικούς εισβολείς.

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

Το Deep Q-Learning κυκλοφόρησε το 2014. Έκτοτε, έχουν γίνει πολλές βελτιώσεις. Έτσι, σήμερα θα δούμε τέσσερις στρατηγικές που βελτιώνονται - δραματικά - την εκπαίδευση και τα αποτελέσματα των πρακτόρων μας DQN

  • σταθεροί Q-στόχοι
  • διπλά DQN
  • μονομαχία DQN (γνωστό και ως DDQN)
  • Επανάληψη προτεραιότητας εμπειρίας (γνωστός και ως PER)

Θα εφαρμόσουμε έναν πράκτορα που μαθαίνει να παίζει Doom Deadly διάδρομο. Το AI μας πρέπει να κατευθυνθεί προς τον θεμελιώδη στόχο (το γιλέκο) και να διασφαλίσει ότι επιβιώνουν ταυτόχρονα σκοτώνοντας εχθρούς.

Διορθώθηκαν οι στόχοι Q

Θεωρία

Είδαμε στο άρθρο Deep Q Learning ότι, όταν θέλουμε να υπολογίσουμε το σφάλμα TD (γνωστό και ως την απώλεια), υπολογίζουμε τη διαφορά μεταξύ του στόχου TD (Q_target) και της τρέχουσας τιμής Q (εκτίμηση του Q).

Αλλά δεν έχουμε ιδέα για τον πραγματικό στόχο TD. Πρέπει να το εκτιμήσουμε. Χρησιμοποιώντας την εξίσωση Bellman, είδαμε ότι ο στόχος TD είναι ακριβώς η ανταμοιβή της ανάληψης αυτής της ενέργειας σε αυτήν την κατάσταση συν την προεξοφλημένη υψηλότερη τιμή Q για την επόμενη κατάσταση.

Ωστόσο, το πρόβλημα είναι ότι χρησιμοποιούμε τις ίδιες παραμέτρους (βάρη) για την εκτίμηση του στόχου και της τιμής Q. Κατά συνέπεια, υπάρχει μια μεγάλη συσχέτιση μεταξύ του στόχου TD και των παραμέτρων (w) που αλλάζουμε.

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

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

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

Αυτό οδηγεί σε ένα πολύ παράξενο μονοπάτι κυνηγιού (μια μεγάλη ταλάντωση στην προπόνηση).

Αντ 'αυτού, μπορούμε να χρησιμοποιήσουμε την ιδέα των σταθερών στόχων Q που εισήγαγε η DeepMind:

  • Χρησιμοποιώντας ένα ξεχωριστό δίκτυο με μια σταθερή παράμετρο (ας το πούμε w-) για την εκτίμηση του στόχου TD.
  • Σε κάθε βήμα Tau, αντιγράφουμε τις παραμέτρους από το δίκτυο DQN για να ενημερώσουμε το δίκτυο προορισμού.

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

Εκτέλεση

Η εφαρμογή σταθερών στόχων q είναι αρκετά απλή:

  • Πρώτον, δημιουργούμε δύο δίκτυα ( DQNetwork, TargetNetwork)
  • Στη συνέχεια, δημιουργούμε μια συνάρτηση που θα λάβει τις DQNetworkπαραμέτρους μας και θα τις αντιγράψει στο δικό μαςTargetNetwork
  • Τέλος, κατά τη διάρκεια της εκπαίδευσης, υπολογίζουμε τον στόχο TD χρησιμοποιώντας το δίκτυο στόχων μας. Ενημερώνουμε το δίκτυο προορισμού με DQNetworkκάθε tauβήμα ( tauείναι μια υπερ-παράμετρος που ορίζουμε).

Διπλά DQN

Θεωρία

Τα διπλά DQN, ή το Double Learning, παρουσιάστηκαν από τον Hado van Hasselt. Αυτή η μέθοδος χειρίζεται το πρόβλημα της υπερεκτίμησης των τιμών Q.

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

Υπολογίζοντας τον στόχο TD, αντιμετωπίζουμε ένα απλό πρόβλημα: πώς είμαστε σίγουροι ότι η καλύτερη ενέργεια για την επόμενη κατάσταση είναι η ενέργεια με την υψηλότερη τιμή Q;

Γνωρίζουμε ότι η ακρίβεια των τιμών q εξαρτάται από τη δράση που δοκιμάσαμε και από τις γειτονικές πολιτείες που εξερευνήσαμε.

Κατά συνέπεια, στην αρχή της εκπαίδευσης δεν έχουμε αρκετές πληροφορίες σχετικά με την καλύτερη δράση που πρέπει να κάνουμε. Επομένως, η λήψη της μέγιστης τιμής q (η οποία είναι θορυβώδης) ως η καλύτερη ενέργεια που μπορεί να ληφθεί μπορεί να οδηγήσει σε ψευδώς θετικά. Εάν οι μη βέλτιστες ενέργειες δίνουν τακτικά υψηλότερη τιμή Q από τη βέλτιστη καλύτερη δράση, η μάθηση θα είναι περίπλοκη.

Η λύση είναι: όταν υπολογίζουμε τον στόχο Q, χρησιμοποιούμε δύο δίκτυα για να αποσυνδέσουμε την επιλογή ενέργειας από τη δημιουργία τιμών στόχου Q. Εμείς:

  • χρησιμοποιήστε το δίκτυο DQN για να επιλέξετε ποια είναι η καλύτερη ενέργεια για την επόμενη κατάσταση (η ενέργεια με την υψηλότερη τιμή Q).
  • χρησιμοποιήστε το δίκτυο στόχων μας για να υπολογίσετε την τιμή στόχου Q για την εκτέλεση αυτής της ενέργειας στην επόμενη κατάσταση.

Επομένως, το Double DQN μας βοηθά να μειώσουμε την υπερεκτίμηση των τιμών q και, κατά συνέπεια, μας βοηθά να εκπαιδεύουμε πιο γρήγορα και να έχουμε πιο σταθερή μάθηση.

Εκτέλεση

Dueling DQN (γνωστός και ως DDQN)

Θεωρία

Να θυμάστε ότι οι τιμές Q αντιστοιχούν στο πόσο καλό είναι να είναι σε αυτήν την κατάσταση και να κάνετε μια ενέργεια σε αυτήν την κατάσταση Q (s, a).

Έτσι μπορούμε να αποσυνθέσουμε Q (s, a) ως το άθροισμα:

  • V (s) : η αξία της ύπαρξης σε αυτήν την κατάσταση
  • A (s, a) : το πλεονέκτημα της ανάληψης δράσης σε αυτήν την κατάσταση (πόσο καλύτερα είναι να αναλάβετε αυτήν την ενέργεια έναντι όλων των άλλων πιθανών ενεργειών σε αυτήν την κατάσταση).

Με το DDQN, θέλουμε να διαχωρίσουμε τον εκτιμητή αυτών των δύο στοιχείων, χρησιμοποιώντας δύο νέες ροές:

  • που εκτιμά την τιμή κατάστασης V (ες)
  • αυτό που υπολογίζει το πλεονέκτημα για κάθε ενέργεια A (s, a)

Και μετά συνδυάζουμε αυτές τις δύο ροές μέσω ενός ειδικού επιπέδου συγκέντρωσης για να λάβουμε μια εκτίμηση του Q (s, a).

Περίμενε? Γιατί όμως πρέπει να υπολογίσουμε αυτά τα δύο στοιχεία ξεχωριστά εάν τότε τα συνδυάσουμε;

Με την αποσύνδεση της εκτίμησης, διαισθητικά το DDQN μας μπορεί να μάθει ποιες καταστάσεις είναι (ή δεν είναι) πολύτιμες χωρίς να χρειάζεται να μάθει το αποτέλεσμα κάθε ενέργειας σε κάθε κατάσταση (καθώς υπολογίζει επίσης V (s)).

Με το κανονικό μας DQN, πρέπει να υπολογίσουμε την τιμή κάθε ενέργειας σε αυτήν την κατάσταση. Αλλά ποιο είναι το νόημα εάν η αξία του κράτους είναι κακή; Ποιο είναι το νόημα για τον υπολογισμό όλων των ενεργειών σε μια κατάσταση όταν όλες αυτές οι ενέργειες οδηγούν σε θάνατο;

Κατά συνέπεια, με την αποσύνδεση μπορούμε να υπολογίσουμε V (s). Αυτό είναι ιδιαίτερα χρήσιμο για κράτη όπου οι ενέργειές τους δεν επηρεάζουν το περιβάλλον με σχετικό τρόπο. Σε αυτήν την περίπτωση, δεν είναι απαραίτητο να υπολογίσετε την αξία κάθε ενέργειας. Για παράδειγμα, η κίνηση προς τα δεξιά ή προς τα αριστερά έχει σημασία μόνο εάν υπάρχει κίνδυνος σύγκρουσης. Και, στις περισσότερες πολιτείες, η επιλογή της δράσης δεν επηρεάζει το τι συμβαίνει.

Θα είναι σαφέστερο εάν πάρουμε το παράδειγμα στην εργασία Dueling Network Architectures for Deep Reinforcement Learning.

Βλέπουμε ότι οι ροές δικτύου αξίας δίνουν προσοχή (το πορτοκαλί θόλωμα) στο δρόμο, και ιδίως στον ορίζοντα όπου γεννιούνται τα αυτοκίνητα. Δίνει επίσης προσοχή στο σκορ.

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

Όσον αφορά το επίπεδο συγκέντρωσης, θέλουμε να δημιουργήσουμε τις τιμές q για κάθε ενέργεια σε αυτήν την κατάσταση. Ενδέχεται να μπουν στον πειρασμό να συνδυάσουμε τις ροές ως εξής:

Αλλά αν το κάνουμε αυτό, θα πέσουμε στοζήτημα αναγνώρισης , δηλαδή - δεδομένου Q (s, a) δεν μπορούμε να βρούμε A (s, a) και V (s).

Και το να μην μπορέσουμε να βρούμε V (s) και A (s, a) δεδομένου Q (s, a) θα είναι πρόβλημα για τη μετάδοση της πλάτης μας. Για να αποφύγουμε αυτό το πρόβλημα, μπορούμε να αναγκάσουμε τον εκτιμητή συνάρτησης πλεονεκτημάτων να έχει 0 πλεονέκτημα στην επιλεγμένη ενέργεια.

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

Επομένως, αυτή η αρχιτεκτονική μας βοηθά να επιταχύνουμε την εκπαίδευση. Μπορούμε να υπολογίσουμε την τιμή μιας κατάστασης χωρίς να υπολογίσουμε το Q (s, a) για κάθε ενέργεια σε αυτήν την κατάσταση. Και μπορεί να μας βοηθήσει να βρούμε πολύ πιο αξιόπιστες τιμές Q για κάθε ενέργεια αποσυνδέοντας την εκτίμηση μεταξύ δύο ροών.

Εκτέλεση

Το μόνο που πρέπει να κάνετε είναι να τροποποιήσετε την αρχιτεκτονική DQN προσθέτοντας αυτές τις νέες ροές:

Επανάληψη προτεραιότητας εμπειρίας

Θεωρία

Το Priority Experience Replay (PER) παρουσιάστηκε το 2015 από τον Tom Schaul. Η ιδέα είναι ότι ορισμένες εμπειρίες μπορεί να είναι πιο σημαντικές από άλλες για την εκπαίδευσή μας, αλλά ενδέχεται να εμφανίζονται λιγότερο συχνά.

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

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

Θέλουμε να πάρουμε την εμπειρία προτεραιότητας όπου υπάρχει μεγάλη διαφορά μεταξύ της πρόβλεψής μας και του στόχου TD, καθώς αυτό σημαίνει ότι έχουμε πολλά να μάθουμε γι 'αυτό.

Χρησιμοποιούμε την απόλυτη τιμή του μεγέθους του σφάλματος TD:

Και βάζουμε αυτήν την προτεραιότητα στην εμπειρία κάθε buffer επανάληψης.

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

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

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

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

Όταν έχουμε κανονική εμπειρία, επιλέγουμε τις εμπειρίες μας σε μια κανονική διανομή - απλά, επιλέγουμε τις εμπειρίες μας τυχαία. Δεν υπάρχει μεροληψία, επειδή κάθε εμπειρία έχει την ίδια ευκαιρία να ληφθεί, έτσι μπορούμε να ενημερώσουμε τα βάρη μας κανονικά.

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

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

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

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

Ο ρόλος του b είναι να ελέγχει πόσο σημαντικά αυτά τα βάρη δειγματοληψίας επηρεάζουν τη μάθηση. Στην πράξη, η παράμετρος b είναι ανοπτημένη έως 1 κατά τη διάρκεια της προπόνησης, επειδή αυτά τα βάρη είναι πιο σημαντικά στο τέλος της μάθησης όταν οι τιμές q αρχίζουν να συγκλίνουν. Η αμερόληπτη φύση των ενημερώσεων είναι πιο σημαντική σχεδόν σύγκλιση, όπως εξηγείται σε αυτό το άρθρο.

Εκτέλεση

Αυτή τη φορά, η εφαρμογή θα είναι λίγο πιο φανταχτερή.

Πρώτα απ 'όλα, δεν μπορούμε απλώς να εφαρμόσουμε το PER ταξινομώντας όλα τα Experience Replay Buffers σύμφωνα με τις προτεραιότητές τους. Αυτό δεν θα είναι καθόλου αποτελεσματικό λόγω του O (nlogn) για εισαγωγή και του O (n) για δειγματοληψία.

Όπως εξηγείται σε αυτό το πολύ καλό άρθρο, πρέπει να χρησιμοποιήσουμε μια άλλη δομή δεδομένων αντί να ταξινομήσουμε έναν πίνακα - ένα μη ταξινομημένο σύνολο.

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

Η ενημέρωση του δέντρου και η δειγματοληψία θα είναι πραγματικά αποτελεσματική (O (log n)).

Στη συνέχεια, δημιουργούμε ένα αντικείμενο μνήμης που θα περιέχει το σύνολο δεδομένων και τα δεδομένα μας.

Στη συνέχεια, για να δοκιμάσετε ένα μικρό μέγεθος μεγέθους k, το εύρος [0, total_priority] θα χωριστεί σε εύρη k. Μια τιμή γίνεται δειγματοληπτικά ομοιόμορφα από κάθε εύρος.

Τέλος, οι μεταβάσεις (εμπειρίες) που αντιστοιχούν σε καθεμία από αυτές τις τιμές δειγματοληψίας λαμβάνονται από το sumtree.

Θα είναι πολύ πιο ξεκάθαρο όταν θα βρούμε τις πλήρεις λεπτομέρειες στο σημειωματάριο.

Ο πράκτορας Doom Deathmatch

Αυτός ο πράκτορας είναι ένα Dueling Double Deep Q Learning με PER και καθορισμένους στόχους q.

Κάναμε ένα βίντεο φροντιστήριο της εφαρμογής: Το σημειωματάριο είναι εδώ

Αυτό είναι όλο! Μόλις δημιουργήσατε έναν εξυπνότερο πράκτορα που μαθαίνει να παίζει Doom. Φοβερός! Θυμηθείτε ότι εάν θέλετε να έχετε έναν πράκτορα με πολύ καλή απόδοση, χρειάζεστε πολλές ακόμη ώρες GPU (περίπου δύο ημέρες προπόνησης)!

Ωστόσο, με μόνο 2-3 ώρες εκπαίδευσης σε CPU (ναι CPU), ο πράκτορας μας κατάλαβε ότι έπρεπε να σκοτώσουν τους εχθρούς πριν μπορέσουν να προχωρήσουν. Εάν προχωρήσουν χωρίς να σκοτώσουν εχθρούς, θα σκοτωθούν πριν πάρουν το γιλέκο.

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

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

Στο επόμενο άρθρο, θα μάθουμε για μια φοβερή υβριδική μέθοδο μεταξύ αλγορίθμων μάθησης ενίσχυσης βάσει αξίας και πολιτικής. Αυτή είναι μια βασική γραμμή για τους αλγόριθμους τελευταίας τεχνολογίας : Advantage Actor Critic (A2C). Θα εφαρμόσετε έναν πράκτορα που μαθαίνει να παίζει Outrun!

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

Αν έχετε οποιεσδήποτε σκέψεις, σχόλια, ερωτήσεις, μη διστάσετε να σχολιάσετε παρακάτω ή να μου στείλετε ένα email: [email protected] ή να μου στείλετε tweet στο @ThomasSimonini.

Συνεχίστε να μαθαίνετε, μείνετε φοβεροί!

Μάθημα βαθιάς ενίσχυσης με Tensorflow; ️

; Περίληψη

; Έκδοση βίντεο

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

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

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

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

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

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

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

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