Στον κλασικό προγραμματισμό, οι οδηγίες λογισμικού γίνονται ρητά από προγραμματιστές και τίποτα δεν μαθαίνεται από τα δεδομένα. Αντίθετα, η μηχανική μάθηση είναι ένα πεδίο της επιστήμης των υπολογιστών που χρησιμοποιεί στατιστικές μεθόδους για να επιτρέπει στους υπολογιστές να μαθαίνουν και να εξάγουν γνώσεις από τα δεδομένα χωρίς να προγραμματίζονται ρητά.
Σε αυτό το εκπαιδευτικό σεμινάριο ενίσχυσης, θα δείξω πώς μπορούμε να χρησιμοποιήσουμε το PyTorch για να διδάξουμε ένα νευρωνικό δίκτυο εκμάθησης οπλισμού πώς να παίξουμε το Flappy Bird. Αλλά πρώτα, θα πρέπει να καλύψουμε μια σειρά δομικών στοιχείων.
Οι αλγόριθμοι μηχανικής μάθησης μπορούν περίπου να χωριστούν σε δύο μέρη: Παραδοσιακοί αλγόριθμοι μάθησης και βαθιά μάθηση αλγόριθμοι. Οι παραδοσιακοί αλγόριθμοι μάθησης έχουν συνήθως πολύ λιγότερες μαθησιακές παραμέτρους από τους αλγόριθμους βαθιάς μάθησης και έχουν πολύ λιγότερη μαθησιακή ικανότητα.
Επίσης, οι παραδοσιακοί αλγόριθμοι μάθησης δεν μπορούν να κάνουν εξαγωγή χαρακτηριστικών : Οι ειδικοί της τεχνητής νοημοσύνης πρέπει να καταλάβουν μια καλή αναπαράσταση δεδομένων που στη συνέχεια αποστέλλεται στον αλγόριθμο εκμάθησης. Παραδείγματα παραδοσιακών τεχνικών μηχανικής μάθησης περιλαμβάνουν SVM, τυχαίο δάσος, δέντρο αποφάσεων και $ k $-σημαίνει, ενώ ο κεντρικός αλγόριθμος στη βαθιά μάθηση είναι ο βαθύ νευρωνικό δίκτυο .
Η είσοδος σε ένα βαθύ νευρωνικό δίκτυο μπορεί να είναι ακατέργαστες εικόνες και ένας ειδικός τεχνητής νοημοσύνης δεν χρειάζεται να βρει καμία αναπαράσταση δεδομένων - το νευρωνικό δίκτυο βρίσκει την καλύτερη αναπαράσταση κατά τη διάρκεια της εκπαιδευτικής διαδικασίας.
Πολλές τεχνικές βαθιάς μάθησης είναι γνωστές εδώ και πολύ καιρό, αλλά οι πρόσφατες εξελίξεις στο υλικό ενίσχυσαν γρήγορα την έρευνα και την ανάπτυξη της βαθιάς μάθησης. Η Nvidia είναι υπεύθυνη για την επέκταση του πεδίου, επειδή οι GPU της επέτρεψαν πειράματα γρήγορης μάθησης.
Οι αλγόριθμοι μηχανικής εκμάθησης αποτελούνται από μαθησιακές παραμέτρους που συντονίζονται στη διαδικασία εκπαίδευσης και μη διδακτικές παραμέτρους που έχουν οριστεί πριν από τη διαδικασία εκπαίδευσης. Οι παράμετροι που έχουν οριστεί πριν από την εκμάθηση καλούνται υπερπαραμέτρους .
Αναζήτηση πλέγματος είναι μια κοινή μέθοδος για την εύρεση των βέλτιστων υπερπαραμέτρων. Πρόκειται για μια μέθοδο brute-force: Σημαίνει να δοκιμάσετε όλους τους πιθανούς συνδυασμούς υπερπαραμέτρων σε ένα καθορισμένο εύρος και να επιλέξετε τον συνδυασμό που μεγιστοποιεί μια προκαθορισμένη μέτρηση.
Ένας τρόπος για την ταξινόμηση των αλγορίθμων μάθησης είναι η διαχωρισμός μεταξύ εποπτευόμενων και μη εποπτευόμενων αλγορίθμων. (Αλλά αυτό δεν είναι απαραίτητα τόσο απλό: Μάθηση ενίσχυσης βρίσκεται κάπου ανάμεσα σε αυτούς τους δύο τύπους.)
Όταν μιλάμε για εποπτευόμενη μάθηση, εξετάζουμε $ (x_i, y_i) $ ζευγάρια. $ x_i $ είναι η είσοδος του αλγορίθμου και $ y_i $ είναι η έξοδος. Η αποστολή μας είναι να βρούμε μια συνάρτηση που θα κάνει τη σωστή αντιστοίχιση από $ x_i $ έως $ y_i $.
Προκειμένου να συντονιστούν οι μαθησιακές παράμετροι, έτσι ώστε να ορίσουν μια συνάρτηση που αντιστοιχίζει $ x_i $ σε $ y_i $, πρέπει να οριστεί μια συνάρτηση απώλειας και ένα εργαλείο βελτιστοποίησης. Ένας βελτιστοποιητής ελαχιστοποιεί τη λειτουργία απώλειας. Ένα παράδειγμα συνάρτησης απώλειας είναι το μέσο τετράγωνο σφάλμα (MSE):
[MSE = sum_ {i = 1} ^ {n} (y_i - widehat {y_i}) ^ 2 ]Εδώ, το $ y_i $ είναι μια ετικέτα αλήθειας εδάφους και το $ widehat {y_i} $ είναι μια προβλεπόμενη ετικέτα. Ένα εργαλείο βελτιστοποίησης που είναι πολύ δημοφιλές στη βαθιά μάθηση είναι στοχαστική κλίση . Υπάρχουν πολλές παραλλαγές που προσπαθούν να βελτιωθούν στη μέθοδο στοχαστικής κλίσης: Adam, Adadelta, Adagrad και ούτω καθεξής.
Οι μη επιτηρούμενοι αλγόριθμοι προσπαθούν να βρουν δομή στα δεδομένα χωρίς να τους παρέχονται ρητά ετικέτες. Το $ k $ -means είναι ένα από τα παραδείγματα αλγορίθμων χωρίς επίβλεψη που προσπαθούν να βρουν βέλτιστα συμπλέγματα στα δεδομένα. Ακολουθεί μια εικόνα με 300 σημεία δεδομένων. $ k $-σημαίνει ότι οι αλγόριθμοι βρήκαν τη δομή στα δεδομένα και εκχώρησαν μια ετικέτα συμπλέγματος σε κάθε σημείο δεδομένων. Κάθε σύμπλεγμα έχει το δικό του χρώμα.
Η εκμάθηση ενίσχυσης χρησιμοποιεί ανταμοιβές: Αραιές ετικέτες με καθυστέρηση στο χρόνο. Ένας πράκτορας αναλαμβάνει δράση, η οποία αλλάζει το περιβάλλον, από την οποία μπορεί να λάβει μια νέα παρατήρηση και ανταμοιβή. Μια παρατήρηση είναι το ερέθισμα που αντιλαμβάνεται ένας παράγοντας από το περιβάλλον. Μπορεί να είναι αυτό που ο πράκτορας βλέπει, ακούει, μυρίζει και ούτω καθεξής.
Μια ανταμοιβή δίνεται στον πράκτορα όταν αναλαμβάνει δράση. Λέει στον πράκτορα πόσο καλή είναι η δράση. Διαπιστώνοντας παρατηρήσεις και ανταμοιβές, ένας πράκτορας μαθαίνει πώς να συμπεριφέρεται βέλτιστα στο περιβάλλον. Θα το αναλύσω λεπτομερέστερα παρακάτω.
Υπάρχουν μερικές διαφορετικές προσεγγίσεις σε αυτήν την τεχνική. Πρώτα απ 'όλα, υπάρχει ενεργή μάθηση ενίσχυσης, την οποία χρησιμοποιούμε εδώ. Αντίθετα, υπάρχει παθητική μάθηση ενίσχυσης, όπου οι ανταμοιβές είναι απλώς ένας άλλος τύπος παρατήρησης και οι αποφάσεις λαμβάνονται αντί για μια σταθερή πολιτική.
Τέλος, η αντίστροφη μάθηση ενίσχυσης προσπαθεί να αναδημιουργήσει μια συνάρτηση ανταμοιβής δεδομένης της ιστορίας των ενεργειών και των ανταμοιβών τους σε διάφορες πολιτείες.
Οποιαδήποτε σταθερή παρουσία παραμέτρων και υπερπαραμέτρων ονομάζεται μοντέλο. Τα πειράματα μηχανικής μάθησης αποτελούνται συνήθως από δύο μέρη: Εκπαίδευση και δοκιμές.
θα βοηθούσε το ποτήρι steagall
Κατά τη διάρκεια της εκπαιδευτικής διαδικασίας, οι μαθησιακές παράμετροι συντονίζονται χρησιμοποιώντας δεδομένα εκπαίδευσης. Στη διαδικασία της δοκιμής, οι μαθησιακές παράμετροι παγώνονται και ο στόχος είναι να ελέγξετε πόσο καλά το μοντέλο κάνει προβλέψεις για δεδομένα που δεν είχαν παρατηρηθεί προηγουμένως. Η γενίκευση είναι η ικανότητα μιας μηχανής εκμάθησης να αποδίδει με ακρίβεια σε ένα νέο, αόρατο παράδειγμα ή εργασία αφού έχει ζήσει ένα σύνολο δεδομένων μάθησης.
Εάν ένα μοντέλο είναι πολύ απλό σε σχέση με τα δεδομένα, δεν θα μπορεί να χωρέσει τα δεδομένα εκπαίδευσης και θα έχει κακή απόδοση τόσο στο σύνολο δεδομένων εκπαίδευσης όσο και στο σύνολο δεδομένων δοκιμής. Σε αυτήν την περίπτωση, λέμε ότι το μοντέλο είναι ανεπαρκής .
Εάν ένα μοντέλο μηχανικής εκμάθησης αποδίδει καλά σε ένα σύνολο δεδομένων εκπαίδευσης, αλλά κακώς σε ένα σύνολο δεδομένων δοκιμής, λέμε ότι είναι υπερβολική τοποθέτηση . Το overfitting είναι η κατάσταση όπου ένα μοντέλο είναι πολύ περίπλοκο σε σχέση με τα δεδομένα. Μπορεί να ταιριάζει απόλυτα με τα εκπαιδευτικά δεδομένα, αλλά προσαρμόζεται τόσο πολύ στο σύνολο δεδομένων εκπαίδευσης ώστε να έχει κακή απόδοση στα δεδομένα δοκιμών - δηλαδή, απλά δεν γενικεύεται.
Ακολουθεί μια εικόνα που εμφανίζει ελλιπή τοποθέτηση και υπερβολική προσαρμογή σε σύγκριση με μια ισορροπημένη κατάσταση μεταξύ των συνολικών δεδομένων και της λειτουργίας πρόβλεψης.
Τα δεδομένα είναι ζωτικής σημασίας για τη δημιουργία μοντέλων μηχανικής μάθησης. Συνήθως, οι παραδοσιακοί αλγόριθμοι εκμάθησης δεν απαιτούν πάρα πολλά δεδομένα. Αλλά λόγω της περιορισμένης χωρητικότητάς τους, η απόδοση είναι επίσης περιορισμένη. Ακολουθεί μια γραφική παράσταση που δείχνει πόσο βαθιές είναι οι μέθοδοι βαθιάς μάθησης σε σύγκριση με τους παραδοσιακούς αλγόριθμους μηχανικής μάθησης.
Τα νευρικά δίκτυα αποτελούνται από πολλαπλά επίπεδα. Η παρακάτω εικόνα δείχνει ένα απλό νευρωνικό δίκτυο με τέσσερα επίπεδα. Το πρώτο στρώμα είναι το επίπεδο εισόδου και το τελευταίο στρώμα είναι το επίπεδο εξόδου. Τα δύο επίπεδα μεταξύ των επιπέδων εισόδου και εξόδου είναι κρυμμένα επίπεδα.
Εάν ένα νευρωνικό δίκτυο έχει περισσότερα από ένα κρυμμένα επίπεδα, το ονομάζουμε ένα βαθύ νευρωνικό δίκτυο. Το σύνολο εισόδου $ X $ δίνεται στο νευρωνικό δίκτυο και λαμβάνεται η έξοδος $ y $. Η εκμάθηση γίνεται χρησιμοποιώντας έναν αλγόριθμο backpropagation που συνδυάζει μια λειτουργία απώλειας και έναν βελτιστοποιητή.
Το Backpropagation αποτελείται από δύο μέρη: ένα πέρασμα προς τα εμπρός και ένα πέρασμα προς τα πίσω. Στο πέρασμα προς τα εμπρός, εισάγονται δεδομένα εισόδου στην είσοδο του νευρικού δικτύου και λαμβάνεται έξοδος. Υπολογίζεται η απώλεια μεταξύ της αλήθειας του εδάφους και της πρόβλεψης και, στη συνέχεια, στο πίσω μέρος, οι παράμετροι των νευρικών δικτύων συντονίζονται σε σχέση με την απώλεια.
Μία παραλλαγή νευρικού δικτύου είναι η συνελικτικό νευρικό δίκτυο . Χρησιμοποιείται κυρίως για εργασίες όρασης υπολογιστή.
Το πιο σημαντικό στρώμα στα συνελικτικά νευρικά δίκτυα είναι το συνελικτικό στρώμα (εξ ου και το όνομα). Οι παράμετροι του είναι κατασκευασμένες από φίλτρα που μπορούν να διδαχθούν, που ονομάζονται επίσης πυρήνες. Τα συνελικτικά στρώματα εφαρμόζουν μια λειτουργία συνέλιξης στην είσοδο, περνώντας το αποτέλεσμα στο επόμενο επίπεδο. Η λειτουργία της συνέλιξης μειώνει τον αριθμό των μαθησιακών παραμέτρων, λειτουργώντας ως ένα είδος ευρετικής και διευκολύνοντας την εκπαίδευση του νευρικού δικτύου.
Παρακάτω είναι πώς λειτουργεί ένας συνελικτικός πυρήνας σε ένα συνελικτικό επίπεδο. Ο πυρήνας εφαρμόζεται στην εικόνα και επιτυγχάνεται μια περίπλοκη λειτουργία.
Τα επίπεδα ReLU χρησιμοποιούνται για την εισαγωγή μη γραμμικότητας στο νευρικό δίκτυο. Οι μη γραμμικότητες είναι σημαντικές γιατί μαζί τους μπορούμε να μοντελοποιήσουμε όλες τις λειτουργίες, όχι μόνο τις γραμμικές, καθιστώντας το νευρωνικό δίκτυο ως καθολική προσέγγιση. Αυτό καθιστά μια συνάρτηση ReLU ορισμένη ως εξής:
[ReLU = max (0, x) ]Το ReLU είναι ένα από τα παραδείγματα των λεγόμενων λειτουργίες ενεργοποίησης χρησιμοποιείται για την εισαγωγή μη γραμμικότητας σε νευρικά δίκτυα. Παραδείγματα άλλων λειτουργιών ενεργοποίησης περιλαμβάνουν σιγμοειδείς και υπερ-εφαπτομενικές συναρτήσεις. Το ReLU είναι η πιο δημοφιλής λειτουργία ενεργοποίησης, επειδή αποδεικνύεται ότι κάνει την εκπαίδευση νευρωνικών δικτύων πιο αποτελεσματικά σε σύγκριση με άλλες λειτουργίες ενεργοποίησης.
Ακολουθεί μια γραφική παράσταση μιας συνάρτησης ReLU.
Όπως μπορείτε να δείτε, αυτή η λειτουργία ReLU αλλάζει απλώς αρνητικές τιμές σε μηδενικά. Αυτό βοηθά στην αποφυγή του προβλήματος της διαβάθμισης . Εάν μια κλίση εξαφανιστεί, δεν θα έχει μεγάλο αντίκτυπο στη ρύθμιση του βάρους του νευρικού δικτύου.
Ένα συνελικτικό νευρικό δίκτυο αποτελείται από πολλαπλά επίπεδα: Convolutional στρώματα, ReLU στρώματα και πλήρως συνδεδεμένα επίπεδα. Πλήρως συνδεδεμένα στρώματα συνδέουν κάθε νευρώνα σε ένα στρώμα με κάθε νευρώνα σε ένα άλλο στρώμα, όπως φαίνεται με τα δύο κρυμμένα στρώματα στην εικόνα στην αρχή αυτής της ενότητας. Το τελευταίο πλήρως συνδεδεμένο επίπεδο αντιστοιχίζει τις εξόδους από το προηγούμενο επίπεδο σε, στην περίπτωση αυτή, number_of_actions
αξίες.
Η βαθιά μάθηση είναι επιτυχής και υπερτερεί των κλασικών αλγορίθμων μηχανικής μάθησης σε διάφορα πεδία μηχανικής μάθησης, συμπεριλαμβανομένης της όρασης υπολογιστή, της αναγνώρισης ομιλίας και της μάθησης ενίσχυσης. Αυτοί οι τομείς της βαθιάς μάθησης εφαρμόζονται σε διάφορους τομείς του πραγματικού κόσμου: Οικονομικά, ιατρική, ψυχαγωγία κ.λπ.
Η ενίσχυση της μάθησης βασίζεται σε ένα μέσο . Ένας πράκτορας αναλαμβάνει ενέργειες σε ένα περιβάλλον και λαμβάνει παρατηρήσεις και ανταμοιβές από αυτό. Ένας πράκτορας πρέπει να εκπαιδευτεί για να μεγιστοποιήσει τη σωρευτική ανταμοιβή. Όπως σημειώνεται στην εισαγωγή, με τους κλασικούς αλγόριθμους μηχανικής μάθησης, οι μηχανικοί μηχανικής μάθησης πρέπει να κάνουν εξαγωγή χαρακτηριστικών, δηλ. Να δημιουργούν καλές δυνατότητες που αντιπροσωπεύουν το περιβάλλον καλά και που τροφοδοτούνται σε έναν αλγόριθμο μηχανικής μάθησης.
Χρησιμοποιώντας τη βαθιά μάθηση, μπορείτε να δημιουργήσετε ένα σύστημα από άκρο σε άκρο που να λαμβάνει είσοδο υψηλής διαστάσεων, π.χ. βίντεο - και από αυτό, μαθαίνει τη βέλτιστη στρατηγική για έναν πράκτορα να κάνει καλές ενέργειες.
Το 2013, η εκκίνηση DeepMind στο Λονδίνο AI δημιούργησε μια μεγάλη ανακάλυψη στη μάθηση να ελέγχει τους πράκτορες απευθείας από αισθητήριες εισόδους υψηλής διάστασης. Δημοσίευσαν μια εφημερίδα, Παίζοντας Atari με Εκμάθηση Βαθιάς Ενίσχυσης , στο οποίο έδειξαν πώς δίδαξαν ένα τεχνητό νευρωνικό δίκτυο να παίζουν παιχνίδια Atari απλώς κοιτάζοντας την οθόνη. Αποκτήθηκαν από την Google και στη συνέχεια δημοσίευσαν ένα νέο έγγραφο στο Φύση με κάποιες βελτιώσεις: Έλεγχος σε ανθρώπινο επίπεδο μέσω μάθησης βαθιάς ενίσχυσης .
Σε αντίθεση με άλλα πρότυπα μηχανικής μάθησης, η ενίσχυση της μάθησης δεν έχει έναν επόπτη, αλλά μόνο ένα σήμα επιβράβευσης. Η ανατροφοδότηση καθυστερεί: Δεν είναι στιγμιαία όπως στους εποπτευόμενους αλγόριθμους μάθησης. Τα δεδομένα είναι διαδοχικά και οι ενέργειες ενός πράκτορα επηρεάζουν τα επόμενα δεδομένα που λαμβάνει.
τι κάνουν τα bots σε διαφωνία
Τώρα, ένας πράκτορας βρίσκεται στο περιβάλλον του, το οποίο βρίσκεται σε μια συγκεκριμένη κατάσταση. Για να το περιγράψουμε με περισσότερες λεπτομέρειες, χρησιμοποιούμε μια διαδικασία απόφασης Markov, η οποία είναι ένας επίσημος τρόπος μοντελοποίησης αυτού του μαθησιακού περιβάλλοντος ενίσχυσης . Αποτελείται από ένα σύνολο καταστάσεων, ένα σύνολο πιθανών ενεργειών και κανόνων (π.χ. πιθανότητες) για μετάβαση από τη μία κατάσταση στην άλλη.
Ο πράκτορας είναι σε θέση να εκτελεί ενέργειες, μετασχηματίζοντας το περιβάλλον. Καλούμε την ανταμοιβή $ R_t $. Είναι ένα βαθμιαίο σήμα ανατροφοδότησης που δείχνει πόσο καλά κάνει ο πράκτορας στο βήμα $ t $.
Για καλή μακροπρόθεσμη απόδοση, δεν πρέπει να λαμβάνονται υπόψη μόνο οι άμεσες ανταμοιβές, αλλά και οι μελλοντικές ανταμοιβές. Η συνολική ανταμοιβή για ένα επεισόδιο από το χρονικό βήμα $ t $ είναι $ R_t = r_t + r_ {t + 1} + r_ {t + 2} + ldots + r_n $. Το μέλλον είναι αβέβαιο και όσο περισσότερο προχωράμε στο μέλλον, τόσο περισσότερες μελλοντικές προβλέψεις μπορεί να αποκλίνουν. Λόγω αυτού, χρησιμοποιείται μια μελλοντική έκπτωση με έκπτωση: $ R_t = r_t + gamma r_ {t + 1} + gamma ^ 2r_ {t + 2} + ldots + gamma ^ {nt} r_n = r_t + gamma R_ {t + 1} $. Ένας πράκτορας θα πρέπει να επιλέξει την ενέργεια που μεγιστοποιεί την έκπτωση μελλοντικής ανταμοιβής.
Η συνάρτηση $ Q (s, a) $ αντιπροσωπεύει τη μέγιστη έκπτωση μελλοντικής ανταμοιβής όταν η ενέργεια $ a $ εκτελείται σε κατάσταση $ s $:
[Q (s_t, a_t) = max R_ {t + 1} ]Η εκτίμηση μιας μελλοντικής επιβράβευσης δίνεται από την εξίσωση Bellman: $ Q (s, a) = r + gamma max_ {a '} Q (s', a ') $. Με άλλα λόγια, η μέγιστη μελλοντική ανταμοιβή που δίνεται σε μια κατάσταση $ s $ και μια ενέργεια $ a $ είναι η άμεση ανταμοιβή συν η μέγιστη μελλοντική ανταμοιβή για την επόμενη κατάσταση.
Η προσέγγιση των τιμών Q χρησιμοποιώντας μη γραμμικές συναρτήσεις (νευρωνικά δίκτυα) δεν είναι πολύ σταθερή. Εξαιτίας αυτού, η επανάληψη της εμπειρίας χρησιμοποιείται για σταθερότητα. Η εμπειρία κατά τη διάρκεια επεισοδίων σε μια προπόνηση αποθηκεύεται σε μια μνήμη επανάληψης. Χρησιμοποιούνται τυχαίες μίνι παρτίδες από τη μνήμη επανάληψης αντί να χρησιμοποιούν την πιο πρόσφατη μετάβαση. Αυτό σπάει την ομοιότητα των επακόλουθων δειγμάτων εκπαίδευσης που διαφορετικά θα οδηγούσαν το νευρικό δίκτυο σε τοπικό ελάχιστο.
Υπάρχουν δύο ακόμη σημαντικές πτυχές που πρέπει να αναφέρουμε για τη βαθιά μάθηση Q: Εξερεύνηση και εκμετάλλευση. Με την εκμετάλλευση, λαμβάνεται η καλύτερη απόφαση δεδομένης της τρέχουσας πληροφορίας. Η εξερεύνηση συγκεντρώνει περισσότερες πληροφορίες.
Όταν ο αλγόριθμος εκτελεί μια ενέργεια που προτείνεται από το νευρωνικό δίκτυο, κάνει εκμετάλλευση: Εκμεταλλεύεται τις γνώσεις του νευρικού δικτύου. Αντίθετα, ένας αλγόριθμος μπορεί να αναλάβει μια τυχαία δράση, να διερευνήσει νέες δυνατότητες και να εισαγάγει πιθανές νέες γνώσεις στο νευρωνικό δίκτυο.
Ο «αλγόριθμος Deep Q-learning με επανάληψη εμπειρίας» από το έγγραφο του DeepMind Παίζοντας Atari με Εκμάθηση Βαθιάς Ενίσχυσης φαίνεται παρακάτω.
Το DeepMind αναφέρεται σε συνελικτικά δίκτυα που έχουν εκπαιδευτεί με την προσέγγισή τους ως Deep Q-network (DQN).
Το Flappy Bird ήταν ένα δημοφιλές παιχνίδι για κινητά που αναπτύχθηκε αρχικά από τον βιετναμέζικο καλλιτέχνη βιντεοπαιχνιδιών και τον προγραμματιστή Dong Nguyen. Σε αυτό, ο παίκτης ελέγχει ένα πουλί και προσπαθεί να πετάξει ανάμεσα σε πράσινους σωλήνες χωρίς να το χτυπήσει.
Παρακάτω είναι ένα στιγμιότυπο οθόνης από ένας κλώνος Flappy Bird κωδικοποιημένος χρησιμοποιώντας το PyGame :
Ο κλώνος έκτοτε έχει διχαλωθεί και τροποποιηθεί: Το φόντο, οι ήχοι και τα διαφορετικά στυλ πουλιών και σωλήνων έχουν αφαιρεθεί και ο κώδικας έχει προσαρμοστεί έτσι ώστε να μπορεί εύκολα να χρησιμοποιηθεί με απλά πλαίσια μάθησης ενίσχυσης. Η τροποποιημένη μηχανή παιχνιδιών προέρχεται από αυτό το έργο TensorFlow :
c ++ <>
Αντί όμως να χρησιμοποιώ το TensorFlow, έχω δημιουργήσει ένα πλαίσιο μάθησης βαθιάς ενίσχυσης χρησιμοποιώντας το PyTorch. Το PyTorch είναι ένα πλαίσιο βαθιάς μάθησης για γρήγορο, ευέλικτο πειραματισμό. Παρέχει τανυστές και δυναμικά νευρωνικά δίκτυα στο Πύθων με ισχυρή επιτάχυνση GPU.
Η αρχιτεκτονική του νευρικού δικτύου είναι η ίδια με το DeepMind που χρησιμοποιείται στο χαρτί Έλεγχος σε ανθρώπινο επίπεδο μέσω μάθησης βαθιάς ενίσχυσης .
Στρώμα | Εισαγωγή | Μέγεθος φίλτρου | Δρασκελιά | Αριθμός φίλτρων | Δραστηριοποίηση | Παραγωγή |
---|---|---|---|---|---|---|
μετατρ1 | 84x84x4 | 8x8 | 4 | 32 | ReLU | 20x20x32 |
μετατρ2 | 20x20x32 | 4x4 | 2 | 64 | ReLU | 9 x 9 x 64 |
μετατρ. 3 | 9 x 9 x 64 | 3 x 3 | ένας | 64 | ReLU | 7 x 7 x 64 |
FC4 | 7 x 7 x 64 | 512 | ReLU | 512 | ||
fc5 | 512 | 2 | Γραμμικός | 2 |
Υπάρχουν τρία συνελικτικά στρώματα και δύο πλήρως συνδεδεμένα στρώματα. Κάθε επίπεδο χρησιμοποιεί ενεργοποίηση ReLU, εκτός από την τελευταία, η οποία χρησιμοποιεί γραμμική ενεργοποίηση. Το νευρωνικό δίκτυο εξάγει δύο τιμές που αντιπροσωπεύουν τις μόνες πιθανές ενέργειες της συσκευής αναπαραγωγής: 'Fly up' και 'do τίποτα'.
Η είσοδος αποτελείται από τέσσερις διαδοχικές ασπρόμαυρες εικόνες 84x84. Ακολουθεί ένα παράδειγμα τεσσάρων εικόνων που τροφοδοτούνται στο νευρωνικό δίκτυο.
Θα παρατηρήσετε ότι οι εικόνες περιστρέφονται. Αυτό συμβαίνει επειδή η έξοδος της μηχανής παιχνιδιών του κλώνου περιστρέφεται. Εάν όμως το νευρικό δίκτυο διδάσκεται και δοκιμαστεί χρησιμοποιώντας τέτοιες εικόνες, δεν θα επηρεάσει την απόδοσή του.
Μπορεί επίσης να παρατηρήσετε ότι η εικόνα έχει περικοπεί, έτσι ώστε να παραλείπεται το δάπεδο, επειδή δεν σχετίζεται με αυτήν την εργασία. Όλα τα pixel που αντιπροσωπεύουν σωλήνες και το πουλί είναι λευκά και όλα τα pixel που αντιπροσωπεύουν το φόντο είναι μαύρα.
Αυτό είναι μέρος του κώδικα που καθορίζει το νευρωνικό δίκτυο. Τα βάρη των νευρωνικών δικτύων αρχικοποιούνται για να ακολουθήσουν την ομοιόμορφη κατανομή $ mathcal {U} (- 0,01, 0,01) $. Το μεροληπτικό μέρος των παραμέτρων νευρωνικών δικτύων ορίζεται σε 0,01. Αρκετές διαφορετικές αρχικοποιήσεις δοκιμάστηκαν (ομοιόμορφη Xavier, κανονική Xavier, ομοιόμορφη Kaiming, κανονική, ομοιόμορφη και κανονική), αλλά η παραπάνω αρχικοποίηση έκανε το νευρωνικό δίκτυο να συγκλίνει και να εκπαιδεύσει το ταχύτερο. Το μέγεθος του νευρικού δικτύου είναι 6,8 MB.
class NeuralNetwork(nn.Module): def __init__(self): super(NeuralNetwork, self).__init__() self.number_of_actions = 2 self.gamma = 0.99 self.final_epsilon = 0.0001 self.initial_epsilon = 0.1 self.number_of_iterations = 2000000 self.replay_memory_size = 10000 self.minibatch_size = 32 self.conv1 = nn.Conv2d(4, 32, 8, 4) self.relu1 = nn.ReLU(inplace=True) self.conv2 = nn.Conv2d(32, 64, 4, 2) self.relu2 = nn.ReLU(inplace=True) self.conv3 = nn.Conv2d(64, 64, 3, 1) self.relu3 = nn.ReLU(inplace=True) self.fc4 = nn.Linear(3136, 512) self.relu4 = nn.ReLU(inplace=True) self.fc5 = nn.Linear(512, self.number_of_actions) def forward(self, x): out = self.conv1(x) out = self.relu1(out) out = self.conv2(out) out = self.relu2(out) out = self.conv3(out) out = self.relu3(out) out = out.view(out.size()[0], -1) out = self.fc4(out) out = self.relu4(out) out = self.fc5(out) return out
Στον κατασκευαστή, θα παρατηρήσετε ότι έχουν οριστεί υπερπαραμέτρους. Η βελτιστοποίηση υπερπαραμέτρων δεν πραγματοποιείται για τους σκοπούς αυτής της ανάρτησης ιστολογίου. Αντ 'αυτού, οι υπερπαραμέτρους χρησιμοποιούνται κυρίως από τα έγγραφα του DeepMind. Εδώ, ορισμένες από τις υπερπαραμέτρους είναι κλιμακωτές ώστε να είναι χαμηλότερες από ό, τι στο χαρτί του DeepMind, επειδή το Flappy Bird είναι λιγότερο περίπλοκο από τα παιχνίδια Atari που χρησιμοποιούσαν για συντονισμό.
Επίσης, το epsilon αλλάζει για να είναι πολύ πιο λογικό για αυτό το παιχνίδι. Το DeepMind χρησιμοποιεί ένα epsilon ενός, αλλά εδώ χρησιμοποιούμε 0.1. Αυτό οφείλεται στο γεγονός ότι τα υψηλότερα έψιλον αναγκάζουν το πουλί να κτυπήσει πολύ, κάτι που ωθεί το πουλί προς το άνω όριο της οθόνης, με αποτέλεσμα τελικά το πουλί να συντρίβει σε ένα σωλήνα.
Ο κώδικας εκμάθησης ενίσχυσης έχει δύο τρόπους: Εκπαίδευση και δοκιμή. Κατά τη διάρκεια της δοκιμαστικής φάσης, μπορούμε να δούμε πόσο καλά ο αλγόριθμος μάθησης ενίσχυσης έχει μάθει να παίζει το παιχνίδι. Αλλά πρώτα, το νευρικό δίκτυο πρέπει να εκπαιδευτεί. Πρέπει να καθορίσουμε τη λειτουργία απώλειας που θα ελαχιστοποιηθεί και τις βελτιστοποιητές που θα ελαχιστοποιήσουν τη λειτουργία απώλειας. Θα χρησιμοποιήσουμε το Αδάμ μέθοδος βελτιστοποίησης και το μέσο τετραγωνικό σφάλμα για τη λειτουργία απώλειας:
optimizer = optim.Adam(model.parameters(), lr=1e-6) criterion = nn.MSELoss()
Το παιχνίδι πρέπει να είναι instantiated:
game_state = GameState()
Η μνήμη αναπαραγωγής ορίζεται ως λίστα Python:
replay_memory = []
Τώρα πρέπει να προετοιμάσουμε την πρώτη κατάσταση. Μια ενέργεια είναι δισδιάστατος τανυστής:
Το frame_step
Η μέθοδος μας δίνει την επόμενη οθόνη, ανταμοιβή και πληροφορίες σχετικά με το αν η επόμενη κατάσταση είναι τερματική. Η ανταμοιβή είναι 0.1
για κάθε κίνηση πουλιού χωρίς να πεθαίνει όταν δεν περνάει μέσα από ένα σωλήνα, 1
εάν το πουλί περάσει επιτυχώς μέσω ενός σωλήνα και -1
αν το πουλί συντρίψει.
Το resize_and_bgr2gray
Η λειτουργία περικόπτει το δάπεδο, αλλάζει το μέγεθος της οθόνης σε εικόνα 84x84 και αλλάζει τον χρωματικό χώρο από BGR σε ασπρόμαυρο. Το image_to_tensor
Η λειτουργία μετατρέπει την εικόνα σε έναν τανυστή PyTorch και την τοποθετεί στη μνήμη GPU εάν υπάρχει διαθέσιμο CUDA. Τέλος, οι τελευταίες τέσσερις διαδοχικές οθόνες συνδυάζονται μαζί και είναι έτοιμες να σταλούν στο νευρωνικό δίκτυο.
action = torch.zeros([model.number_of_actions], dtype=torch.float32) action[0] = 1 image_data, reward, terminal = game_state.frame_step(action) image_data = resize_and_bgr2gray(image_data) image_data = image_to_tensor(image_data) state = torch.cat((image_data, image_data, image_data, image_data)).unsqueeze(0)
Το αρχικό epsilon ρυθμίζεται χρησιμοποιώντας αυτήν τη γραμμή κώδικα:
epsilon = model.initial_epsilon
Ακολουθεί ο κύριος άπειρος βρόχος. Τα σχόλια γράφονται στον κώδικα και μπορείτε να συγκρίνετε τον κωδικό με το Deep Q-learning με τον αλγόριθμο Experience Replay που γράφτηκε παραπάνω.
Ο αλγόριθμος παίρνει δείγματα μίνι-παρτίδων από τη μνήμη επανάληψης και ενημερώνει τις παραμέτρους του νευρικού δικτύου. Οι ενέργειες εκτελούνται χρησιμοποιώντας άπληστη εξερεύνηση epsilon . Ο Έψιλον είναι διαπυρακτομένος στο περασμα του χρονου. Η συνάρτηση απώλειας που ελαχιστοποιείται είναι $ L = frac {1} {2} αριστερά [ max_ {a '} Q (s', a ') - Q (s, a) right] ^ 2 $. $ Q (s, a) $ είναι η τιμή αλήθειας εδάφους που υπολογίζεται χρησιμοποιώντας την εξίσωση Bellman και $ max_ {a '} Q (s', a ') $ λαμβάνεται από το νευρωνικό δίκτυο. Το νευρωνικό δίκτυο δίνει δύο τιμές Q για τις δύο πιθανές ενέργειες και ο αλγόριθμος αναλαμβάνει τη δράση με την υψηλότερη τιμή Q.
while iteration Τώρα που όλα τα κομμάτια είναι στη θέση τους, ακολουθεί μια επισκόπηση υψηλού επιπέδου της ροής δεδομένων χρησιμοποιώντας το νευρωνικό μας δίκτυο:

Εδώ είναι μια σύντομη ακολουθία με ένα εκπαιδευμένο νευρωνικό δίκτυο.

Το νευρωνικό δίκτυο που φαίνεται παραπάνω εκπαιδεύτηκε χρησιμοποιώντας GPU υψηλής τεχνολογίας Nvidia GTX 1080 για μερικές ώρες. χρησιμοποιώντας μια λύση που βασίζεται σε CPU, αυτή η συγκεκριμένη εργασία θα διαρκέσει αρκετές ημέρες. Το FPS της μηχανής παιχνιδιών ορίστηκε σε έναν πολύ μεγάλο αριθμό κατά τη διάρκεια της προπόνησης: 999… 999 — με άλλα λόγια, όσο το δυνατόν περισσότερα καρέ ανά δευτερόλεπτο. Στη φάση δοκιμής, το FPS ορίστηκε σε 30.
Ακολουθεί ένα γράφημα που δείχνει πώς άλλαξε η μέγιστη τιμή Q κατά τις επαναλήψεις. Εμφανίζεται κάθε 10.000 επανάληψη. Μια ακίδα προς τα κάτω σημαίνει ότι για ένα συγκεκριμένο πλαίσιο (μια επανάληψη είναι ένα πλαίσιο), το νευρικό δίκτυο προβλέπει ότι το πουλί θα έχει πολύ χαμηλή ανταμοιβή στο μέλλον - δηλαδή, θα συντριβεί πολύ σύντομα.

Ο πλήρης κωδικός και το προκατασκευασμένο μοντέλο είναι διαθέσιμα εδώ .
Εκμάθηση βαθιάς ενίσχυσης: 2D, 3D και ακόμη και πραγματική ζωή
Σε αυτό το σεμινάριο εκμάθησης ενίσχυσης PyTorch, έδειξα πώς ένας υπολογιστής μπορεί να μάθει να παίζει Flappy Bird χωρίς προηγούμενη γνώση σχετικά με το παιχνίδι, χρησιμοποιώντας μόνο μια προσέγγιση δοκιμής και σφάλματος όπως θα έκανε ένας άνθρωπος όταν συναντούσε το παιχνίδι για πρώτη φορά.
Είναι ενδιαφέρον ότι ο αλγόριθμος μπορεί να εφαρμοστεί σε μερικές γραμμές κώδικα χρησιμοποιώντας το πλαίσιο PyTorch. Το χαρτί στο οποίο βασίζεται η μέθοδος σε αυτό το ιστολόγιο είναι σχετικά παλιό και υπάρχουν πολλά νεότερα χαρτιά με διάφορες τροποποιήσεις που επιτρέπουν ταχύτερη σύγκλιση. Έκτοτε, η εκμάθηση βαθιάς ενίσχυσης έχει χρησιμοποιηθεί για παιχνίδια 3D και ρομποτικά συστήματα πραγματικού κόσμου.
Εταιρείες όπως Βαθύ μυαλό , Μαλούμπα , και Αντιπροσωπευτικός εργάζονται εντατικά στην εκμάθηση βαθιάς ενίσχυσης. Τέτοια τεχνολογία χρησιμοποιήθηκε στο AlphaGo, το οποίο κέρδισε τον Lee Sedol, έναν από τους καλύτερους παίκτες του κόσμου στο Go. Εκείνη την εποχή, θεωρήθηκε ότι θα χρειαστούν τουλάχιστον δέκα χρόνια έως ότου τα μηχανήματα θα μπορούσαν να νικήσουν τους καλύτερους παίκτες στο Go.
Η πλημμύρα ενδιαφέροντος και επενδύσεων στη μάθηση βαθιάς ενίσχυσης (και στην τεχνητή νοημοσύνη εν γένει) μπορεί ακόμη και να οδηγήσει σε πιθανή τεχνητή γενικός νοημοσύνη (AGI) - νοημοσύνη ανθρώπινου επιπέδου (ή ακόμα και πέρα από αυτό) που μπορεί να εκφραστεί με τη μορφή αλγορίθμου και προσομοίωσης σε υπολογιστές. Αλλά το AGI θα πρέπει να είναι το αντικείμενο ενός άλλου άρθρου.
Βιβλιογραφικές αναφορές:
Πώς να αποφύγετε τις διαρροές μνήμης στη java
- Απομυθοποίηση της μάθησης βαθιάς ενίσχυσης
- Εκμάθηση βαθιάς ενίσχυσης για το Flappy Bird
- 'Convolutional neural network' στη Wikipedia
- «Εκμάθηση ενίσχυσης» στη Wikipedia
- «Διαδικασία απόφασης Markov» στη Wikipedia
- Μάθημα University College London στο RL
Σχετίζεται με: Ένα μάθημα βαθιάς μάθησης: Από Perceptrons σε Deep Networks Κατανόηση των βασικών
Τι είναι η μη επιτηρούμενη μάθηση;
Η μη εποπτευόμενη μάθηση είναι μια προσέγγιση στη μηχανική μάθηση που βρίσκει δομή στα δεδομένα. Σε αντίθεση με την εποπτευόμενη μάθηση, τα δεδομένα δεν επισημαίνονται.
Τι είναι η εκμάθηση παθητικής ενίσχυσης;
Στην παθητική μάθηση ενίσχυσης, ο πράκτορας μαθαίνει και ακολουθεί μια πολιτική. Παίρνει «ανταμοιβές», αλλά μπορεί να τις παρατηρήσει μόνο, είτε είναι καλές είτε όχι. Αντίθετα, η ενεργή μάθηση ενίσχυσης έχει τους πράκτορες να μάθουν να κάνουν την καλύτερη δράση για κάθε κατάσταση για να μεγιστοποιήσουν τις σωρευτικές μελλοντικές ανταμοιβές.
Τι είναι η αντίστροφη μάθηση ενίσχυσης;
Στην ενίσχυση της μάθησης, ένας πράκτορας έχει πρόσβαση σε ανατροφοδότηση με τη μορφή «ανταμοιβής» κάθε φορά που αναλαμβάνει κάποια δράση σε κάποια κατάσταση στο περιβάλλον. Η αντίστροφη εκμάθηση ενίσχυσης προσπαθεί να αναδημιουργήσει μια συνάρτηση ανταμοιβής δεδομένης της ιστορίας των ανταμοιβών που λαμβάνονται για ενέργειες σε ορισμένες πολιτείες.
Ποιοι είναι οι τύποι των νευρικών δικτύων;
Πολλοί τύποι νευρωνικών δικτύων βασίζονται στους συνδυασμούς επιπέδων που χρησιμοποιούν, π.χ. συνελικτικά στρώματα, πλήρως συνδεδεμένα στρώματα και στρώματα LSTM. Οι τύποι νευρωνικών δικτύων περιλαμβάνουν τα συνελικτικά νευρωνικά δίκτυα (CNNs), τα επαναλαμβανόμενα νευρικά δίκτυα (RNNs) και τα πολυεπίπεδη perceptron (MLP ή «βανίλια») νευρικά δίκτυα.
Τι είναι το DeepMind AI;
Η DeepMind Technologies Limited είναι εταιρεία τεχνητής νοημοσύνης με έδρα το Λονδίνο. Ανέπτυξαν το AlphaGo, το οποίο νίκησε τον Lee Sedol, παγκόσμιο πρωταθλητή στο Go. Η εταιρεία εξαγοράστηκε από την Google το 2014.