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

SVM

Υποστήριξη διανυσματική μηχανή(Αγγλικά SVM, support vector machine) - ένα σύνολο παρόμοιων εποπτευόμενων αλγορίθμων εκμάθησης που χρησιμοποιούνται για προβλήματα ταξινόμησης και ανάλυσης παλινδρόμησης. Ανήκει στην οικογένεια των γραμμικών ταξινομητών και μπορεί επίσης να θεωρηθεί ως ειδική περίπτωση τακτοποίησης Tikhonov. Η ειδική ιδιότητα της μηχανής διανυσμάτων υποστήριξης είναι να μειώνει συνεχώς το εμπειρικό σφάλμα ταξινόμησης και να αυξάνει το χάσμα, επομένως η μέθοδος είναι επίσης γνωστή ως μέθοδος ταξινομητή μέγιστου κενού.

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

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

Επίσημα, το πρόβλημα μπορεί να περιγραφεί ως εξής.

Υποθέτουμε ότι τα σημεία έχουν τη μορφή: , όπου παίρνει την τιμή 1 ή;1, ανάλογα με την τάξη σε ποια κατηγορία ανήκει το σημείο. Κάθε ένα είναι ένα πραγματικό διάνυσμα διαστάσεων, που συνήθως κανονικοποιείται από τις τιμές ή. Εάν τα σημεία δεν κανονικοποιηθούν, τότε ένα σημείο με μεγάλες αποκλίσεις από τις μέσες συντεταγμένες σημείων θα επηρεάσει πάρα πολύ τον ταξινομητή. Μπορούμε να το σκεφτούμε αυτό ως μια συλλογή εκπαίδευσης στην οποία κάθε στοιχείο έχει ήδη δοθεί η τάξη στην οποία ανήκει. Θέλουμε ο αλγόριθμος της μηχανής διανυσμάτων υποστήριξης να τα ταξινομεί με τον ίδιο τρόπο. Για να γίνει αυτό, κατασκευάζουμε ένα διαχωριστικό υπερεπίπεδο, το οποίο έχει τη μορφή:

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

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

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

Αυτό μπορεί επίσης να γραφτεί ως:

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

Σύμφωνα με το θεώρημα Kuhn-Tucker, αυτό το πρόβλημα είναι ισοδύναμο διπλό πρόβλημααναζήτηση για το σημείο σέλας της συνάρτησης Lagrange.


Πού είναι ένα διάνυσμα διπλών μεταβλητών

Ας περιορίσουμε αυτό το πρόβλημα σε ένα ισοδύναμο πρόβλημα τετραγωνικού προγραμματισμού που περιέχει μόνο διπλές μεταβλητές:


Ας πούμε ότι αποφασίσαμε αυτή η εργασία, τότε μπορείτε να το βρείτε χρησιμοποιώντας τους τύπους:

Ως αποτέλεσμα, ο αλγόριθμος ταξινόμησης μπορεί να γραφτεί ως εξής:

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

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

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

Ομοίως, χρησιμοποιώντας το θεώρημα Kuhn-Tucker, μειώνουμε το πρόβλημα στην εύρεση του σημείου σέλας της συνάρτησης Lagrange:


Κατ' αναλογία, μειώνουμε αυτό το πρόβλημα σε ένα ισοδύναμο:


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

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

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

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

Ο αλγόριθμος για την κατασκευή ενός βέλτιστου διαχωριστικού υπερεπιπέδου, που προτάθηκε το 1963 από τους Vladimir Vapnik και Alexey Chervonenkis, είναι ένας αλγόριθμος γραμμικής ταξινόμησης. Ωστόσο, το 1992, ο Bernhard Boser, η Isabelle Guyon και ο Vapnik πρότειναν έναν τρόπο δημιουργίας ενός μη γραμμικού ταξινομητή που βασίζεται στη μετάβαση από βαθμωτά προϊόντα σε αυθαίρετους πυρήνες, το λεγόμενο κόλπο του πυρήνα (πρώτη πρόταση από τους M.A. Aizerman, E.M. Bravermann και L. V. Rozonoer για τη μέθοδο των συναρτήσεων δυναμικού), η οποία επιτρέπει την κατασκευή μη γραμμικών διαχωριστών. Ο αλγόριθμος που προκύπτει είναι εξαιρετικά παρόμοιος με τον αλγόριθμο γραμμικής ταξινόμησης, με τη μόνη διαφορά ότι κάθε γινόμενο κουκίδων στους παραπάνω τύπους αντικαθίσταται από μια μη γραμμική συνάρτηση πυρήνα (ένα γινόμενο κουκκίδων σε χώρο υψηλότερης διάστασης). Ένα βέλτιστο διαχωριστικό υπερεπίπεδο μπορεί ήδη να υπάρχει σε αυτόν τον χώρο. Δεδομένου ότι η διάσταση του προκύπτοντος χώρου μπορεί να είναι μεγαλύτερη από τη διάσταση του αρχικού, ο μετασχηματισμός που συγκρίνει τα κλιμακωτά γινόμενα θα είναι μη γραμμικός, πράγμα που σημαίνει ότι η συνάρτηση που αντιστοιχεί στο βέλτιστο διαχωριστικό υπερεπίπεδο στον αρχικό χώρο θα είναι επίσης μη γραμμική.

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

Οι πιο συνηθισμένοι πυρήνες:

1. Γραμμικός πυρήνας:

2. Πολυώνυμο (ομογενές):

3. Λειτουργία RBF:

4. Σιγμοειδές:

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

Για να επιταχύνουμε την προπόνηση, θα χρησιμοποιήσουμε μια μέθοδο που ονομάζεται Stochastic Gradient Descent, η οποία μας επιτρέπει να επιταχύνουμε σημαντικά την εκπαίδευση ταξινομητή χωρίς να θυσιάσουμε μεγάλο μέρος της ακρίβειάς της.

Στοχαστική Κάθοδος Κλίσης

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

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

όπου παίζει το ρόλο της συνάρτησης ενεργοποίησης (στην πιο απλή περίπτωση μπορούμε να βάλουμε).

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

Πού είναι η δεδομένη συνάρτηση απώλειας.

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

Πού είναι μια θετική παράμετρος που ονομάζεται ρυθμός εκμάθησης.

Υπάρχουν 2 κύριες προσεγγίσεις για την εφαρμογή gradient descent:

1. Παρτίδα, όταν σε κάθε επανάληψη το δείγμα εκπαίδευσης προβάλλεται ολόκληρο και μόνο μετά αλλάζει. Αυτό απαιτεί μεγάλο υπολογιστικό κόστος.

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

Μπορείτε να αναπαραστήσετε τον αλγόριθμο καθόδου στοχαστικής κλίσης σε ψευδοκώδικα ως εξής:

· - δείγμα εκπαίδευσης

· - ρυθμός μάθησης

· - παράμετρος λειτουργικής εξομάλυνσης

1. Διάνυσμα βαρών

1) Αρχικοποιήστε τα βάρη

2) Αρχικοποιήστε την τρέχουσα λειτουργική αξιολόγηση:

3) Επαναλάβετε:

1. Επιλέξτε ένα αντικείμενο από τυχαία

2. Υπολογίστε την τιμή εξόδου του αλγορίθμου και το σφάλμα:

3. Κάντε ένα βήμα κατάβασης με κλίση

4. Αξιολογήστε την αξία της λειτουργικότητας:

4) Μέχρι να σταθεροποιηθεί η τιμή ή/και τα βάρη να σταματήσουν να αλλάζουν.

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

συμπεράσματα

Ως μέρος του προβλήματος που επιλύεται, θα χρειαστεί να χρησιμοποιήσουμε τον αλγόριθμο μετατροπής δεδομένων πηγής TF-IDF, ο οποίος θα μας επιτρέψει να αυξήσουμε το βάρος των σπάνιων συμβάντων και να μειώσουμε το βάρος των συχνών συμβάντων. Θα μεταφέρουμε τα δεδομένα που ελήφθησαν μετά τον μετασχηματισμό σε ταξινομητές που είναι κατάλληλοι για την επίλυση του προβλήματος που αντιμετωπίζουμε, συγκεκριμένα: Ταξινομητής Naive Bayes ή Υποστήριξη Διανυσματική Μηχανή με Γραμμικό Πυρήνα, εκπαιδευμένο με τη μέθοδο της στοχαστικής διαβάθμισης. Θα δοκιμάσουμε επίσης την αποτελεσματικότητα μιας Υποστήριξης Διανυσματικής Μηχανής με μη γραμμικούς πυρήνες που έχουν εκπαιδευτεί χρησιμοποιώντας τη μέθοδο batch gradient descent. Ωστόσο, αυτός ο τύποςο ταξινομητής δεν φαίνεται κατάλληλος για την εργασία λόγω του υπερβολικά πολύπλοκου πυρήνα και της τάσης για υπερβολική προσαρμογή, στην οποία ο ταξινομητής έχει κακή απόδοση σε δεδομένα που δεν χρησιμοποιήθηκαν για την εκπαίδευση του ταξινομητή.

Μηχανή λογισμικού προεπεξεργασίας δεδομένων

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

Στα περισσότερα από τα προηγούμενα μαθήματα χρησιμοποιήσαμε πλήρη κλίση κατάβασης.

Γιατί είναι έτσι;

Επειδή είναι πιο χρήσιμο αν θέλουμε να μεγιστοποιήσουμε την πιθανότητα για ολόκληρο το σετ προπόνησης:

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

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

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

Ποιο είναι το μειονέκτημα;

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

Ένας καλός συμβιβασμός μεταξύ αυτών των δύο μεθόδων είναι το batch gradient descent. Αν έχουμε, για παράδειγμα, 10.000 παρατηρήσεις, τότε μπορούμε να τις χωρίσουμε σε 100 παρτίδες των 100 παρατηρήσεων η καθεμία και να υπολογίσουμε τη συνάρτηση κόστους με βάση κάθε παρτίδα σε κάθε επανάληψη:

Τι θα γίνει με τη συνάρτηση κόστους σε αυτήν την περίπτωση;

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

Και θα ήθελα με αυτήν την ευκαιρία να σημειώσω ότι εάν θέλετε να λαμβάνετε δωρεάν υλικό που σχετίζεται με τη βαθιά και μηχανική μάθηση, καθώς και με την επεξεργασία δεδομένων, επισκεφτείτε τον ιστότοπό μου lazyprogrammer.me. Γράφω συνεχώς νέο περιεχόμενο για αυτά τα θέματα, γι' αυτό ελέγχετε συχνά. Θα πρέπει να υπάρχει μια προτροπή για να εγγραφείτε, ώστε να μπορείτε να εγγραφείτε για τη δωρεάν εισαγωγή μου στην επιστήμη δεδομένων. Έχει πολλούς εξαιρετικούς πόρους για εξερεύνηση. Γλώσσα Python, αλγόριθμους και δομές δεδομένων, καθώς και κουπόνια για μαθήματα σχετικά.

Πλήρης, παρτίδας και στοχαστική διαβάθμιση σε κώδικα

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

Έτσι στην αρχή του αρχείου εισάγουμε όλες τις συνηθισμένες βιβλιοθήκες. Από αρχείο util.py εισάγουμε τη συνάρτηση get_transformed_dataνα μετασχηματίσει δεδομένα χρησιμοποιώντας ανάλυση κύριων συστατικών, καθώς και συναρτήσεις προώθηση, error_date, cost, gradW, gradbΚαι y2δείκτης.

εισαγωγή numpy ως np

εισαγωγή panda ως pd

εισαγωγή matplotlib.pyplot ως plt

από το sklearn.utils import shuffle

από ημερομηνία ώρα εισαγωγής ημερομηνία ώρα

από util import get_transformed_data, forward, error_rate, cost, gradW, gradb, y2indicator

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

Έτσι πρώτα χρησιμοποιούμε τη συνάρτηση get_transformed_data, λαμβάνοντας μόνο τις πρώτες 300 στήλες. Στη συνέχεια, κανονικοποιούμε το Χ αφαιρώντας τον μέσο όρο και διαιρώντας με την τυπική απόκλιση. Στη συνέχεια, από τη συνάρτηση get_transformed_dataέχει ήδη αναμείξει τα δεδομένα μας, αφήνουμε τα τελευταία 1.000 παραδείγματα ως σύνολο δοκιμών, χρησιμοποιώντας τα υπόλοιπα ως σετ εκπαίδευσης.

defκύριος():

X, Y, _, _ = get_transformed_data()

X = X[:, :300]

# κανονικοποιήστε πρώτα το X

mu = X.μέσο( άξονας=0)

std = X.std( άξονας=0)

X = (X – mu) / std

εκτύπωση "Εκτέλεση λογιστικής παλινδρόμησης..."

Xtrain = X[:-1000,]

Ytrain = Y[:-1000]

Xtest = X[-1000:,]

N, D = Xtrain.shape

Ytrain_ind = y2indicator(Ytrain)

Ytest_ind = y2indicator(Ytest)

Στη συνέχεια ξεκινάμε τους συντελεστές στάθμισης και τους εικονικούς όρους. Σημειώστε ότι οι ενεργοποιημένοι συντελεστές στάθμισης ορίζονται σχετικά μικροί - αναλογικοί τετραγωνική ρίζααπό διάσταση. Ακόμη και πριν την εγγραφή αυτού του βίντεο, έθεσα τον συντελεστή εκμάθησης και την ποινή κανονικοποίησης σε 0,0001 και 0,01, αντίστοιχα. Θα ορίσουμε τον αριθμό των επαναλήψεων σε 200 για να μην αργούν πολύ οι υπολογισμοί.

#1.γεμάτο

b = np.zeros(10)

LL=

lr = 0,0001

reg = 0,01

t0 = datetime.now()

για εγω μεσα xrange(200):

p_y = προς τα εμπρός (Xtrain, W, b)

Στη συνέχεια, ενημερώνουμε τις τιμές και τους δωρεάν όρους χρησιμοποιώντας gradient descent και . Χρησιμοποιούμε επίσης τη συνάρτηση προς τα εμπρόςγια να υπολογίσετε την τιμή της συνάρτησης κόστους κατά τη διέλευση από το σετ εκπαίδευσης. Θα εμφανίζουμε την τιμή του ποσοστού σφάλματος κάθε δέκα επαναλήψεις. Επιπλέον, θα εμφανίσουμε τον χρόνο που αφιερώνεται στους υπολογισμούς, καθώς η μία από τις μεθόδους είναι πολύ γρήγορη και η άλλη είναι πολύ αργή.

W += lr*(gradW(Ytrain_ind, p_y, Xtrain) – reg*W)

b += lr*(gradb(Ytrain_ind, p_y) – reg*b)

LL.append(ll)

αν i % 10 == 0:

εκτυπώστε "Ποσοστό σφάλματος:", err

p_y = προς τα εμπρός (Xtest, W, b)

εκτύπωση "Elapsted time for full GD:", datetime.now() – t0

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

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

#2.στοχαστική

W = np.random.randn(D, 10) / 28

b = np.zeros(10)

LL_στοχαστική =

lr = 0,0001

reg = 0,01

t0 = datetime.now()

για εγω μεσα xrange(1): Το # παίρνει πολύ χρόνο αφού υπολογίζουμε το κόστος για 41.000 δείγματα

για n σε xrange(min(N, 500)): # συντόμευση, ώστε να μην διαρκέσει τόσο πολύ…

x = tmpX.reshape(1,D)

y = tmpY.reshape(1,10)

p_y = προς τα εμπρός (x, W, b)

p_y_test = προς τα εμπρός (Xtest, W, b)

ll = κόστος (p_y_test, Ytest_ind)

LL_stochastic.append(ll)

αν n % (N/2) == 0:

err = error_rate (p_y_test, Ytest)

εκτύπωση "Κόστος σε επανάληψη %d: %.6f" % (i, ll)

εκτυπώστε "Ποσοστό σφάλματος:", err

p_y = προς τα εμπρός (Xtest, W, b)

εκτύπωση "Τελικό ποσοστό σφάλματος:", error_rate (p_y, Ytest)

εκτύπωση "Elapsted time for SGD:", datetime.now() – t0

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

#3.παρτίδα

W = np.random.randn(D, 10) / 28

b = np.zeros(10)

LL_batch =

lr = 0,0001

reg = 0,01

batch_sz = 500

n_batches = N/batch_sz

t0 = datetime.now()

για εγω μεσα xrange(50):

tmpX, tmpY = shuffle (Xtrain, Ytrain_ind)

για j σε xrange(n_batches):

x = tmpX

y = tmpY

p_y = προς τα εμπρός (x, W, b)

W += lr*(gradW(y, p_y, x) – reg*W)

b += lr*(gradb(y, p_y) – reg*b)

p_y_test = προς τα εμπρός (Xtest, W, b)

ll = κόστος (p_y_test, Ytest_ind)

LL_batch.append(ll)

αν j % (n_batches/2) == 0:

err = error_rate (p_y_test, Ytest)

εκτύπωση "Κόστος σε επανάληψη %d: %.6f" % (i, ll)

εκτυπώστε "Ποσοστό σφάλματος:", err

p_y = προς τα εμπρός (Xtest, W, b)

εκτύπωση "Τελικό ποσοστό σφάλματος:", error_rate (p_y, Ytest)

εκτύπωση "Ελασμένος χρόνος για παρτίδα GD:", datetime.now() – t0

Και στο τέλος εμφανίζουμε όλα τα δεδομένα μας στην οθόνη.

x1 = np.linspace(0, 1, len(LL))

plt.plot(x1, LL, επιγραφή="γεμάτο")

x2 = np.linspace(0, 1, len(LL_stochastic))

plt.plot(x2, LL_stochastic, επιγραφή="στοχαστική")

x3 = np.linspace(0, 1, len(LL_batch))

plt.plot(x3, LL_batch, επιγραφή="παρτίδα")

plt.legend()

plt.show()

αν __όνομα__ == '__κύριος__':

Λοιπόν, ας τρέξουμε το πρόγραμμα.

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

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


Προβολές ανάρτησης: 588

Στείλτε την καλή δουλειά σας στη βάση γνώσεων είναι απλή. Χρησιμοποιήστε την παρακάτω φόρμα

Καλή δουλειάστον ιστότοπο">

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

Δημοσιεύτηκε στις http://www.allbest.ru/

Υπουργείο Παιδείας και Επιστημών της Ρωσικής Ομοσπονδίας

Ομοσπονδιακό Κρατικό Αυτόνομο Εκπαιδευτικό Ίδρυμα

Ανώτερη εκπαίδευση

"ΟΜΟΣΠΟΝΔΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΑΖΑΝ (ΒΟΛΓΑ)"

ΛΥΚΕΙΟ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑΣ ΣΥΣΤΗΜΑΤΩΝ

ΕΡΓΑΣΙΑ ΜΑΘΗΜΑΤΟΣ

Στοχαστική κλίση κάθοδος. Επιλογές υλοποίησης

Εισαγωγή

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

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

Το Gradient descent είναι ένας δημοφιλής αλγόριθμος για ένα ευρύ φάσμα μοντέλων μηχανικής εκμάθησης, συμπεριλαμβανομένων μηχανών υποστήριξης διανυσμάτων, λογιστικής παλινδρόμησης και γραφικών μοντέλων. Σε συνδυασμό με τον αλγόριθμο οπίσθιο πολλαπλασιασμό, είναι ένας τυπικός αλγόριθμος για την εκπαίδευση τεχνητών νευρωνικών δικτύων. Η στοχαστική κλίση κατάβασης ανταγωνίζεται τον αλγόριθμο L-BFGS, ο οποίος χρησιμοποιείται επίσης ευρέως. Χρησιμοποιήθηκε στοχαστική κλίση κάθοδος, σύμφωνα με τουλάχιστον, το 1960 για την εκπαίδευση μοντέλων γραμμικής παλινδρόμησης, αρχικά με το όνομα Adaline.

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

1. Στοχαστική κλίση κάθοδος

Το στοχαστικό gradient descent είναι ένας αλγόριθμος βελτιστοποίησης και χρησιμοποιείται συχνά για τον συντονισμό των παραμέτρων ενός μοντέλου μηχανικής μάθησης.

Το τυπικό gradient descent χρησιμοποιεί μια κλίση για να αλλάξει τις παραμέτρους του μοντέλου. Η κλίση συνήθως υπολογίζεται ως το άθροισμα των κλίσεων που προκαλούνται από κάθε στοιχείο εκπαίδευσης. Το διάνυσμα της παραμέτρου αλλάζει προς την κατεύθυνση της αντιδιαβάθμισης με ένα δεδομένο βήμα. Επομένως, η τυπική κλίση κατάβασης απαιτεί ένα πέρασμα από τα δεδομένα εκπαίδευσης πριν μπορέσει να αλλάξει παραμέτρους.

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

Υπάρχει ένας συμβιβασμός μεταξύ αυτών των δύο τύπων κλίσης κατάβασης, που μερικές φορές αποκαλούνται "μίνι-παρτίδα". Σε αυτήν την περίπτωση, η διαβάθμιση προσεγγίζεται με το άθροισμα για ένα μικρό αριθμό δειγμάτων εκπαίδευσης.

1.1 Προαπαιτούμενα

Οι στατιστικές εκτιμήσεις και η μηχανική μάθηση εξετάζουν το πρόβλημα της ελαχιστοποίησης μιας συνάρτησης, η οποία έχει τη μορφή:

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

Στην κλασική στατιστική, το πρόβλημα της ελαχιστοποίησης των αθροισμάτων προκύπτει στη μέθοδο των ελαχίστων τετραγώνων, καθώς και στη μέθοδο της μέγιστης πιθανότητας (για ανεξάρτητες παρατηρήσεις). Η γενική κατηγορία των εκτιμητών που προκύπτει από την ελαχιστοποίηση των αθροισμάτων ονομάζεται Μ-εκτιμητής. Ωστόσο, στις στατιστικές, έχει από καιρό αναγνωριστεί ότι η απαίτηση ακόμη και τοπικής ελαχιστοποίησης είναι πολύ περιοριστική για ορισμένα προβλήματα εκτίμησης μέγιστης πιθανότητας. Έτσι, οι σύγχρονοι θεωρητικοί της στατιστικής θεωρούν συχνά ακίνητα σημείαστις συναρτήσεις πιθανότητας (μηδενικά της παραγώγου, συνάρτηση αξιολόγησης και άλλες εξισώσεις εκτίμησης).

Το πρόβλημα της ελαχιστοποίησης των ποσών προκύπτει επίσης στην ελαχιστοποίηση του εμπειρικού κινδύνου. Σε αυτήν την περίπτωση, αυτή είναι η τιμή της συνάρτησης απώλειας για το σύνολο i και ο εμπειρικός κίνδυνος.

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

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

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

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

1.2 Επαναληπτική μέθοδος

Στη στοχαστική κλίση, η πραγματική κλίση προσεγγίζεται από την κλίση σε αυτό το παράδειγμα:

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

Στον ψευδοκώδικα, η στοχαστική κλίση κάθοδος μπορεί να αναπαρασταθεί ως εξής:

1) Επιλέξτε το διάνυσμα της αρχικής παραμέτρου και το ρυθμό εκμάθησης.

2) Επαναλάβετε μέχρι να επιτευχθεί περίπου το ελάχιστο:

2.1) Ανακατέψτε τυχαία τα παραδείγματα στο σετ εκπαίδευσης.

2.2) Για i = 1,2,...,n, κάντε:

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

1.3 Επιλογές υλοποίησης

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

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

Μια εννοιολογικά απλή επέκταση της στοχαστικής διαβάθμισης καθιστά τον ρυθμό εκμάθησης φθίνουσα συνάρτηση ανάλογα με τον αριθμό των επαναλήψεων m.

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

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

1. 4 Ορμή

Η ορμή, γνωστή και ως μέθοδος ορμής, προήλθε από τον Αμερικανό ψυχολόγο David Ramelhart, καθώς και από τη μελέτη του Geoffrey Hinton και του Ronald J William για τη μέθοδο της οπισθοδιάδοσης. Η στοχαστική κλίση με ορμή θυμάται τις ενημερώσεις σε κάθε επανάληψη και καθορίζει την επόμενη ενημέρωση ως γραμμικός συνδυασμός gradient και προηγούμενη ενημέρωση:

Αυτό οδηγεί σε:

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

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

Σε αντίθεση με την κλασική μέθοδο στοχαστικής κλίσης κατάβασης, τείνει να διατηρεί την κίνηση προς μία κατεύθυνση, αποτρέποντας τις ταλαντώσεις. Το Momentum έχει χρησιμοποιηθεί με επιτυχία εδώ και αρκετές δεκαετίες.

1.5 AdaGrad

Το AdaGrad είναι μια τροποποιημένη στοχαστική κλίση κάθοδος με προκαταρκτική παράμετροςταχύτητα εκμάθησης. Δημοσιεύτηκε για πρώτη φορά το 2011. Ανεπίσημα, αυξάνει το ποσοστό εκμάθησης για τις πιο αραιές παραμέτρους και μειώνει το ποσοστό εκμάθησης για τις λιγότερο αραιές. Αυτή η στρατηγική συχνά αυξάνει την πιθανότητα σύγκλισης σε σύγκριση με τυπικός αλγόριθμοςστοχαστική κάθοδος κλίσης σε μέρη όπου τα δεδομένα είναι αραιά και οι σπάνιες παράμετροι είναι πιο κατατοπιστικές.

Παραδείγματα τέτοιων εφαρμογών περιλαμβάνουν την επεξεργασία φυσικής γλώσσας και την αναγνώριση προτύπων.

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

όπου είναι η κλίση στην επανάληψη m.

Η διαγώνιος καθορίζεται ως:

Το διάνυσμα ενημερώνεται μετά από κάθε επανάληψη. Ο τύπος ενημέρωσης μοιάζει τώρα με αυτό:

ή γραμμένο ως προκαταρκτική ενημέρωση παραμέτρων,

Κάθε ένα αυξάνει την επεκτασιμότητα του παράγοντα ρυθμού εκμάθησης που εφαρμόζεται σε μία μόνο παράμετρο.

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

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

1.6 RMSProp

Το RMSProp είναι επίσης μια μέθοδος στην οποία ο ρυθμός εκμάθησης προσαρμόζεται για κάθε μία από τις παραμέτρους. Η ιδέα είναι να διαιρεθεί ο ρυθμός εκμάθησης για ένα συγκεκριμένο βάρος με έναν κινητό μέσο όρο των τελευταίων κλίσεων για αυτό το βάρος. Έτσι, ο πρώτος κινητός μέσος όρος υπολογίζεται ως τετράγωνο:

όπου είναι η παράμετρος εκθετικής στάθμισης ή η παράμετρος «παράμετρος λήθης».

Οι παράμετροι ενημερώνονται χρησιμοποιώντας τον παρακάτω τύπο:

Το RMSProp έχει δείξει εξαιρετική προσαρμογή των ρυθμών εκμάθησης σε διαφορετικές εφαρμογές. Το RMSProp μπορεί να θεωρηθεί ως γενίκευση του Rprop και είναι επίσης ικανό να λειτουργήσει με μια τέτοια παραλλαγή βαθμίδωσης όπως η μίνι-παρτίδα, η οποία είναι αντίθετη με την κανονική κλίση κάθοδος.

2. Εφαρμογή στοχαστικής κλίσης κατάβασης

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

2.1 Εφαρμογή τυπικής στοχαστικής κλίσης καθόδου

Πρώτα, χρειάζεστε ένα σύνολο δεδομένων. Σε αυτήν την περίπτωση, δημιουργείται ένα σύνολο δεδομένων χρησιμοποιώντας τη βιβλιοθήκη Scikit-Learn:

εκμάθηση στοχαστικού αλγορίθμου κλίσης

από το sklearn.datasets εισαγωγή make_moons

από το sklearn.cross_validation εισαγωγή train_test_split

X, y = make_moons(n_samples=5000, random_state=42, noise=0,1)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Να τι πήραμε:

Εικόνα 1 - Γραφική αναπαράσταση του συνόλου δεδομένων

Στη συνέχεια, προσδιορίζεται το μοντέλο νευρωνικού δικτύου. Αυτό θα είναι τρία επίπεδα του δικτύου (ένα κρυφό επίπεδο):

εισαγωγή numpy ως np

def make_network(n_hidden=100):

model = dict(W1=np.random.randn(n_feature, n_hidden),

W2=np.random.randn(n_hidden, n_class)

Ορίζει επίσης δύο λειτουργίες: τη διάδοση προς τα εμπρός και την αντίστροφη διάδοση. Ας κάνουμε πρώτα την πρώτη επιλογή:

επιστροφή np.exp(x) / np.exp(x).sum()

def forward(x, model):

h = x @model["W1"]

prob = softmax(h @ μοντέλο["W2"])

Το κύκλωμα πρέπει να κάνει μια σειρά σημείων από την είσοδο στο κρυφό στρώμα και μετά στο στρώμα εξόδου. Στο κρυφό επίπεδο, η μη γραμμικότητα μπορεί επίσης να εφαρμοστεί έτσι ώστε το νευρωνικό δίκτυο να μπορεί να προβλέψει ένα μη γραμμικό όριο απόφασης. Ένας σημαντικός εκπρόσωπος μιας μη γραμμικής συνάρτησης σήμερα είναι ο ReLU.

Το ReLU ορίζεται ως f(x)=max(0,x), αλλά αντί να κάνουμε np.max(0, x), υπάρχει ένα καθαρό τέχνασμα υλοποίησης: x = 0.

Μόλις επιτευχθεί το επίπεδο εξόδου, η έξοδος πρέπει να είναι τέτοια ώστε η κατανομή πιθανοτήτων Bernoulli να είναι ακριβής, επομένως η έξοδος αποσυμπιέζεται χρησιμοποιώντας τη συνάρτηση SoftMax για να ληφθεί η δεδομένη κατανομή.

Τώρα ορίζεται η δεύτερη λειτουργία. Η οπίσθια διάδοση μοιάζει με αυτό:

def backward(μοντέλο, xs, hs, λάθη):

dW2 = hs.T @ errs

dh = errs @ model["W2"].T

dh = 0

επιστροφή dict(W1=dW1, W2=dW2)

Δημιουργείται η βάση του αλγορίθμου. Η συνάρτηση sgd υλοποιείται. Μοιάζει με αυτό:

def sgd(model, X_train, y_train, batch_size):

για iter στο εύρος (n_iter):

print("Iteration()".format(iter))

X_train, y_train = shuffle(X_train, y_train)

για i in range(0, X_train.shape, batch_size):

X_train_mini = X_train

y_train_mini = y_train

μοντέλο = sgd_step(model, X_train_mini, y_train_mini)

μοντέλο επιστροφής

Η υλοποίηση της συνάρτησης sgd_step βρίσκεται σε εξέλιξη. Μοιάζει με αυτό:

def sgd_step(model, X_train, y_train):

grad = get_batch_grad (model, X_train, y_train)

model = model.copy()

για στρώμα σε grad:

μοντέλο += μάθηση_βαθμός * βαθμ

Η συνάρτηση get_batch_grad υλοποιείται. Μοιάζει με αυτό:

def get_batch_grad(model, X_train, y_train):

xs, hs, errs = , ,

για x, cls_idx σε zip(X_train, y_train):

h, y_pred = προς τα εμπρός (x, μοντέλο)

y_true = np.zeros(n_class)

y_true = 1.

err = y_true - y_pred

errs.append(err)

επιστροφή προς τα πίσω(μοντέλο, np.array(xs), np.array(hs), np.array(errs))

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

2.2 Εφαρμογή της ορμής

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

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

ορμή ορμής (μοντέλο, X_train, y_train, batch_size):

ταχύτητα = (k: np.zeros_like(v) για k, v στο model.items())

γάμμα =.9

X_mini, y_mini = παρτίδες

για στρώμα σε grad:

ταχύτητα = γάμμα * ταχύτητα + άλφα * βαθμίδα

μοντέλο += ταχύτητα

Μια νέα μεταβλητή ταχύτητας είναι ενεργοποιημένη η οποία θα συσσωρεύει ορμή για κάθε παράμετρο. Η μεταβλητή θα ενημερώνεται με τον όρο alpha*grad σε κάθε νέο βήμα βαθμίδωσης. Υπάρχει επίσης μια μικρή μείωση στην τιμή της μεταβλητής ταχύτητας, η οποία υπολογίστηκε στο προηγούμενο βήμα, χρησιμοποιώντας τον συντελεστή γάμμα.

2.3 Εφαρμογή του AdaGrad

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

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

Η εφαρμογή αυτής της μεθόδου βρίσκεται σε εξέλιξη. Όλο το πρόγραμμα είναι έτοιμο, απλά πρέπει να αλλάξετε την κύρια λειτουργία. Θα λέγεται adagrad. Η λειτουργία φαίνεται παρακάτω:

def adagrad(model, X_train, y_train, batch_size):

παρτίδες = get_batch (X_train, y_train, batch_size)

για iter στην περιοχή (1, n_iter + 1):

idx = np.random.randint(0, len(batches))

X_mini, y_mini = παρτίδες

grad = get_batch_grad (μοντέλο, X_mini, y_mini)

cache[k] += grad[k]**2

μοντέλο επιστροφής

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

2.4 Εφαρμογή του RMSProp

Μπορείτε να παρατηρήσετε ότι στο αθροιστικό τμήμα του Adagrad, η τιμή cache[k] += grad[k]**2 αυξάνεται μονότονα ως συνέπεια του αθροίσματος και του τετραγώνου. Αυτό μπορεί να είναι προβληματικό, καθώς ο ρυθμός μάθησης θα μειωθεί μονοτονικά σε έναν πολύ μικρό ρυθμό μάθησης.

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

Η εφαρμογή αυτής της μεθόδου βρίσκεται σε εξέλιξη. Όλο το πρόγραμμα είναι έτοιμο, απλά πρέπει να αλλάξετε την κύρια λειτουργία. Θα ονομάζεται rmsprop. Η λειτουργία φαίνεται παρακάτω:

def rmsprop(model, X_train, y_train, batch_size):

cache = (k: np.zeros_like(v) για k, v στο model.items())

γάμμα =.9

παρτίδες = get_batch (X_train, y_train, batch_size)

για iter στην περιοχή (1, n_iter + 1):

idx = np.random.randint(0, len(batches))

X_mini, y_mini = παρτίδες

grad = get_batch_grad (μοντέλο, X_mini, y_mini)

cache[k] = gamma * cache[k] + (1 - gamma) * (grad[k]**2)

model[k] += alpha * grad[k] / (np.sqrt(cache[k]) + eps)

Η κύρια διαφορά είναι στον υπολογισμό της τιμής cache[k] και τώρα η συσσωρευμένη τιμή κλίσης δεν θα αυξηθεί επιθετικά μονότονα.

3. Δοκιμή και σύγκριση

Αυτό το κεφάλαιο θα ελέγξει την εφαρμογή και θα αναλύσει τα αποτελέσματα που προέκυψαν.

3.1 Δοκιμή τυπικής στοχαστικής κλίσης καθόδου

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

n_experiment = 100

accs = np.zeros(n_experiment)

για k στην περιοχή (n_experiment):

model = make_network()

μοντέλο = sgd(model, X_train, y_train, minibattch_size)

probe = εμπρός (x, μοντέλο)

y = np.argmax(prob)

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

Μέση ακρίβεια: 0,8765040000000001

Έτσι, μπορούμε να συμπεράνουμε ότι η μέση ακρίβεια εκτέλεσης είναι 87%.

3.2 Δοκιμαστική ορμή

Σε αυτό το στάδιο, θα δοκιμάσουμε την στοχαστική κλίση με βάση την υλοποίηση του Momentum. Η διαδικασία θα εκτελεστεί 100 φορές και στη συνέχεια θα υπολογιστεί η μέση ακρίβεια.

Το πρόγραμμα δοκιμών δίνεται παρακάτω:

n_experiment = 100

accs = np.zeros(n_experiment)

για k στην περιοχή (n_experiment):

model = make_network()

μοντέλο = ορμή (μοντέλο, X_train, y_train, minibattch_size)

y_pred = np.zeros_like(y_test)

για i, x in enumerate(X_test):

probe = εμπρός (x, μοντέλο)

y = np.argmax(prob)

accs[k] = (y_pred == y_test).sum() / y_test.size

print("Μέση ακρίβεια: (), Ληφθείσα τιμή: ()".format(accs.mean(), accs.std()))

Μέση ακρίβεια:

1) 0,3152, με άλφα = 0,5

2) 0,8554666666666666, με άλφα = 1e-2

3) 0,8613333333333334, με άλφα = 1e-5

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

3.3 Δοκιμές AdaGrad

Σε αυτό το στάδιο, θα δοκιμάσουμε την στοχαστική κλίση με βάση την υλοποίηση του AdaGrad. Η διαδικασία θα εκτελεστεί 100 φορές και στη συνέχεια θα υπολογιστεί η μέση ακρίβεια.

Το πρόγραμμα δοκιμών δίνεται παρακάτω:

n_experiment = 100

accs = np.zeros(n_experiment)

για k στην περιοχή (n_experiment):

model = make_network()

μοντέλο = adagrad(model, X_train, y_train, minibattch_size)

y_pred = np.zeros_like(y_test)

για i, x in enumerate(X_test):

probe = εμπρός (x, μοντέλο)

y = np.argmax(prob)

accs[k] = (y_pred == y_test).sum() / y_test.size

print("Μέση ακρίβεια: (), Ληφθείσα τιμή: ()".format(accs.mean(), accs.std()))

Με την εκτέλεση αυτού του κώδικα, λαμβάνονται οι ακόλουθες τιμές:

Μέση ακρίβεια:

1) 0,8754666666666667, με άλφα = 0,5

2) 0,8786666666666667, με άλφα = 1e-2

3) 0,504, με άλφα = 1e-5

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

3.4 Δοκιμή RMSProp

Σε αυτό το στάδιο, η στοχαστική κλίση θα δοκιμαστεί με βάση την υλοποίηση RMSProp. Η διαδικασία θα εκτελεστεί 100 φορές και στη συνέχεια θα υπολογιστεί η μέση ακρίβεια.

Το πρόγραμμα δοκιμών δίνεται παρακάτω:

n_experiment = 100

accs = np.zeros(n_experiment)

για k στην περιοχή (n_experiment):

model = make_network()

μοντέλο = rmsprop(model, X_train, y_train, minibattch_size)

y_pred = np.zeros_like(y_test)

για i, x in enumerate(X_test):

probe = εμπρός (x, μοντέλο)

y = np.argmax(prob)

accs[k] = (y_pred == y_test).sum() / y_test.size

print("Μέση ακρίβεια: (), Ληφθείσα τιμή: ()".format(accs.mean(), accs.std()))

Με την εκτέλεση αυτού του κώδικα, λαμβάνονται οι ακόλουθες τιμές:

Μέση ακρίβεια:

1) 0,8506666666666667, με άλφα = 0,5

2) 0,8727999999999999, με άλφα = 1e-2

3) 0,30693333333333334, με άλφα = 1e-5

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

συμπέρασμα

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

Ωστόσο, το αντίθετο συμβαίνει όταν χρησιμοποιείται μια μικρή τιμή ρυθμού εκμάθησης, όπως 1e-5. Για τυπική έκδοσηΗ στοχαστική κλίση και η μέθοδος ορμής, οι αρκετά μικρές τιμές τους επιτρέπουν να λειτουργούν καλά. Από την άλλη πλευρά, εάν το ποσοστό μάθησης είναι πολύ μικρό και κανονικοποιείται σε μεθόδους προσαρμοστικού ρυθμού μάθησης, τότε γίνεται ακόμη μικρότερο, γεγονός που επηρεάζει το ποσοστό σύγκλισης. Αυτό κάνει την προπόνηση πολύ αργή και αυτές οι μέθοδοι αποδίδουν χειρότερα από την τυπική στοχαστική κλίση με τον ίδιο αριθμό επαναλήψεων.

Κατάλογος πηγών που χρησιμοποιήθηκαν

1. Μηχανομάθηση - Στοχαστική κλίση κατάβασης

2. Τεχνητή νοημοσύνη στα ρώσικα - Gradient descents

3. Εκμάθηση Wiki - Εφαρμογές αλγορίθμων/Gradient descent

4. Πανεπιστήμιο Stanford - Adaptive Subgradient Methods

5. Cambridge University Press - Online Algorithms and Stochastic Approximations

6. Sanjoy Dasgupta και David Mcallester - Σχετικά με τη σημασία της αρχικοποίησης και της ορμής στη βαθιά μάθηση [Ηλεκτρονικός πόρος].

Δημοσιεύτηκε στο Allbest.ru

...

Παρόμοια έγγραφα

    Οι απαραίτητες προϋποθέσειςακραίο. Ανάπτυξη αλγορίθμου μηχανής και πολυδιάστατου προγράμματος βελτιστοποίησης για τη μέθοδο gradient με χρήση της μεθόδου ομοιόμορφης αναζήτησης. Έλεγχος των απαραίτητων και επαρκών συνθηκών για ένα άκρο για το ελάχιστο σημείο που βρέθηκε.

    εργασία μαθήματος, προστέθηκε 25/09/2013

    Υλοποίηση λογισμικούυπολογιστικές εφαρμογές καθορισμένες λειτουργίες. Η διαδικασία εύρεσης του ελάχιστου συνάρτησης. Εφαρμογή των μεθόδων Hooke-Jeeves και gradient descent για την επίλυση του προβλήματος. Μελέτη συνάρτησης κοντά σε σημείο βάσης, προσδιορισμός των συντεταγμένων της.

    δοκιμή, προστέθηκε 02/02/2014

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

    εργασία μαθήματος, προστέθηκε 21/05/2015

    Εκπαίδευση του απλούστερου και πολυστρωματικού τεχνητού νευρωνικού δικτύου. Μέθοδος εκπαίδευσης Perceptron που βασίζεται στην αρχή της κλίσης καθόδου κατά μήκος της επιφάνειας σφάλματος. Υλοποίηση στο προϊόν λογισμικού NeuroPro 0.25. Χρησιμοποιώντας τον αλγόριθμο backpropagation.

    εργασία μαθήματος, προστέθηκε 05/05/2015

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

    εργασία μαθήματος, προστέθηκε 10/01/2009

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

    εργασία μαθήματος, προστέθηκε 20/03/2014

    Η βάση της τεχνολογίας για τη χρήση του πακέτου λογισμικού LabVIEW, τα πλεονεκτήματα του συστήματος. Προγραμματισμός με βάση την αρχιτεκτονική ροής δεδομένων. Μέθοδοι εύρεσης του άκρου. Χρησιμοποιώντας τη μέθοδο Gauss-Seidel για να βρείτε το μέγιστο μιας δισδιάστατης συνάρτησης.

    δοκιμή, προστέθηκε στις 18/03/2011

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

    διάλεξη, προστέθηκε 03/04/2009

    Δήλωση του προβλήματος και επισημοποίησή του. Εύρεση των τιμών του πολυωνύμου παρεμβολής στα σημεία x1 και x2. Εύρεση του ελάχιστου της συνάρτησης F(x) στο τμήμα. Έλεγχος των συνθηκών σύγκλισης των μεθόδων. Δοκιμή ενοτήτων λογισμικού. Αναλυτικό διάγραμμα του αλγορίθμου.

    εργασία μαθήματος, προστέθηκε 02/04/2011

    Αριθμητικές μέθοδοι σε προβλήματα χωρίς περιορισμούς. Σχέδιο μεθόδων καθόδου. Περιβάλλον επεξεργασίας της Visual Basic. Χρήση αντικειμένων ActiveX σε φόρμες. Διάγραμμα ροής του αλγορίθμου προσομοίωσης. Προβλήματα βελτιστοποίησης για ντετερμινιστικές συναρτήσεις με ένα μόνο ακραίο σημείο.

Gradient Descent- ο πιο χρησιμοποιούμενος αλγόριθμος εκμάθησης, χρησιμοποιείται σχεδόν σε κάθε μοντέλο. Το gradient descent είναι ουσιαστικά ο τρόπος με τον οποίο εκπαιδεύονται τα μοντέλα. Χωρίς το GS, η μηχανική μάθηση δεν θα ήταν εκεί που είναι σήμερα. Η μέθοδος gradient descent, με κάποια τροποποίηση, χρησιμοποιείται ευρέως για μάθηση και βαθιά μάθηση και είναι γνωστή ως σφάλματα.

Σε αυτή την ανάρτηση θα βρείτε μια εξήγηση της gradient descent με λίγα μαθηματικά. Περίληψη:

  • Η έννοια του GS είναι μια εξήγηση ολόκληρου του αλγορίθμου.
  • Διάφορες παραλλαγές του αλγορίθμου.
  • Υλοποίηση κώδικα: σύνταξη κώδικα σε Phyton.

Τι είναι η gradient descent

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

Επομένως, απαιτείται κλίση κατάβασης για να ελαχιστοποιηθεί η συνάρτηση απώλειας.

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


Εύρεση του ελάχιστου συνάρτησης

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

Στο σχήμα βλέπουμε ένα γράφημα της συνάρτησης απώλειας (με το όνομα «Σφάλμα» με το σύμβολο «J») με ένα βάρος. Τώρα αν υπολογίσουμε την κλίση (το ονομάζουμε dJ/dw) της συνάρτησης απώλειας ως προς ένα βάρος, θα πάρουμε την κατεύθυνση προς την οποία πρέπει να κινηθούμε για να φτάσουμε στα τοπικά ελάχιστα. Ας φανταστούμε προς το παρόν ότι το μοντέλο μας έχει μόνο ένα βάρος.

Λειτουργία απώλειας

Σπουδαίος:Καθώς επαναλαμβάνουμε όλα τα δεδομένα προπόνησης, συνεχίζουμε να προσθέτουμε τιμές dJ/dw για κάθε βάρος. Δεδομένου ότι η απώλεια εξαρτάται από το παράδειγμα εκπαίδευσης, το dJ/dw συνεχίζει επίσης να αλλάζει. Μετά χωρίζουμε συλλεγόμενες αξίεςαπό τον αριθμό των παραδειγμάτων εκπαίδευσης για να ληφθεί ο μέσος όρος. Στη συνέχεια χρησιμοποιούμε αυτόν τον μέσο όρο (κάθε βάρους) για να προσαρμόσουμε κάθε βάρος.

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

Τώρα που έχουμε καθορίσει την κατεύθυνση προς την οποία πρέπει να πιέσουμε το βάρος, πρέπει να καταλάβουμε πώς να το κάνουμε. Εδώ χρησιμοποιούμε τον συντελεστή ρυθμού εκμάθησης, ονομάζεται υπερπαράμετρος. Μια υπερπαράμετρος είναι μια τιμή που απαιτείται από το μοντέλο σας και για την οποία έχουμε πραγματικά μόνο μια αόριστη ιδέα. Συνήθως αυτές οι τιμές μπορούν να μαθευτούν μέσω δοκιμής και λάθους. Όχι τόσο εδώ: το ένα ταιριάζει σε όλες τις υπερπαραμέτρους. Ο παράγοντας ρυθμού μάθησης μπορεί να θεωρηθεί ως ένα «βήμα προς τη σωστή κατεύθυνση», όπου η κατεύθυνση προέρχεται από dJ/dw.

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

Περισσότερα για τις κλίσεις

Εκτός από τη συνάρτηση απώλειας, η κλίση κατάβασης απαιτεί επίσης μια κλίση που είναι dJ/dw (η παράγωγος της συνάρτησης απώλειας σε σχέση με ένα βάρος, που εκτελείται για όλα τα βάρη). dJ/dw εξαρτάται από την επιλογή της συνάρτησης απώλειας. Η πιο κοινή συνάρτηση απώλειας είναι το ριζικό μέσο τετραγωνικό σφάλμα.

Η παράγωγος αυτής της συνάρτησης σε σχέση με οποιοδήποτε βάρος (αυτός ο τύπος δείχνει τον υπολογισμό της διαβάθμισης για):

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

Συντελεστής μαθησιακής ταχύτητας

Όλα όσα γράφονται παραπάνω υπάρχουν στο σχολικό βιβλίο. Μπορείτε να ανοίξετε οποιοδήποτε βιβλίο σχετικά με την gradient descent, το ίδιο θα γραφτεί και εκεί. Οι τύποι διαβάθμισης για κάθε συνάρτηση απώλειας μπορούν να βρεθούν στο Διαδίκτυο, χωρίς να γνωρίζετε πώς να τις εξάγετε μόνοι σας.

Ωστόσο, το πρόβλημα με τα περισσότερα μοντέλα είναι ο ρυθμός εκμάθησης. Ας ρίξουμε μια ματιά στην ενημερωμένη έκφραση για κάθε βάρος (j κυμαίνεται από 0 έως τον αριθμό των βαρών και το Theta-j είναι j-ο βάροςστο διάνυσμα των βαρών, το k κυμαίνεται από 0 έως τον αριθμό των μετατοπίσεων, όπου B-k είναι η kth μετατόπιση στο διάνυσμα μετατόπισης). Εδώ το άλφα είναι ο συντελεστής ρυθμού μάθησης. Από αυτό μπορούμε να πούμε ότι υπολογίζουμε το dJ/dTheta-j (η κλίση του βάρους του Theta-j) και μετά το μέγεθος βήματος άλφα προς αυτή την κατεύθυνση. Επομένως, κατεβαίνουμε την κλίση. Για να ενημερώσετε το offset, αντικαταστήστε το Theta-j με το B-k.

Εάν αυτό το μέγεθος βήματος άλφα είναι πολύ μεγάλο, θα υπερβούμε το ελάχιστο: δηλαδή, θα χάσουμε το ελάχιστο. Εάν το alpha είναι πολύ μικρό, χρησιμοποιούμε πάρα πολλές επαναλήψεις για να φτάσουμε στο ελάχιστο. Άρα το άλφα πρέπει να είναι κατάλληλο.

Χρήση Gradient Descent

Λοιπόν, αυτό είναι. Αυτό είναι το μόνο που πρέπει να ξέρετε για την gradient descent. Ας συνοψίσουμε τα πάντα σε ψευδοκώδικα.

Σημείωση: Οι κλίμακες εδώ αντιπροσωπεύονται σε διανύσματα. Σε μεγαλύτερα μοντέλα μάλλον θα είναι μήτρες.

Από i = 0 έως "αριθμός παραδειγμάτων εκπαίδευσης"

1. Υπολογίστε τη διαβάθμιση της συνάρτησης απώλειας για το i-ο παράδειγμα προπόνησης για κάθε βάρος και προκατάληψη. Τώρα έχετε ένα διάνυσμα που είναι γεμάτο διαβαθμίσεις για κάθε βάρος και μια μεταβλητή που περιέχει την κλίση μεροληψίας.

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

3. Παρόμοια με την κατάσταση με τις κλίμακες, προσθέστε μια κλίση μεροληψίας στη συσσωρευτική μεταβλητή.

Τώρα, ΑΦΟΥ περάσετε από όλα τα παραδείγματα εκπαίδευσης, κάντε τα εξής:

1. Διαιρέστε τις αθροιστικές μεταβλητές βάρους και μεροληψίας με τον αριθμό των παραδειγμάτων εκπαίδευσης. Αυτό θα μας δώσει τις μέσες κλίσεις για όλα τα βάρη και τη μέση κλίση για την προκατάληψη. Θα τις ονομάσουμε ενημερωμένες μπαταρίες (RA).

2. Στη συνέχεια, χρησιμοποιώντας τον παρακάτω τύπο, ενημερώστε όλα τα βάρη και τις προκαταλήψεις. Αντί για dJ / dTheta-j, θα αντικαταστήσετε το OA (ενημερωμένο συσσωρευτή) για τα βάρη και το OA για την προκατάληψη. Κάντε το ίδιο και για το offset.

Αυτή ήταν μόνο μια επανάληψη βαθμίδωσης.

Επαναλάβετε αυτή τη διαδικασία από την αρχή μέχρι το τέλος για πολλές επαναλήψεις. Αυτό σημαίνει ότι για την 1η επανάληψη του GS, επαναλαμβάνετε όλα τα παραδείγματα εκπαίδευσης, υπολογίζετε τις κλίσεις και στη συνέχεια ενημερώνετε τα βάρη και τις προκαταλήψεις. Στη συνέχεια, το κάνετε αυτό για έναν αριθμό επαναλήψεων του HS.

Διαφορετικοί τύποι κλίσης κατάβασης

Υπάρχουν 3 επιλογές για κλίση κατάβασης:

1. Μίνι-παρτίδα: Εδώ, αντί να επαναλαμβάνουμε όλα τα παραδείγματα εκπαίδευσης και με κάθε επανάληψη να εκτελούμε υπολογισμούς μόνο σε ένα παράδειγμα εκπαίδευσης, επεξεργαζόμαστε n παραδείγματα εκπαίδευσης ταυτόχρονα. Αυτή η επιλογή είναι καλή για πολύ μεγάλα σύνολα δεδομένων.

2.Στοχαστική κλίση κάθοδος: Σε αυτήν την περίπτωση, αντί να χρησιμοποιούμε και να περιηγούμαστε σε κάθε παράδειγμα εκπαίδευσης, ΧΡΗΣΙΜΟΠΟΙΟΥΜΕ ΜΟΝΟ ΜΙΑ ΦΟΡΑ. Υπάρχουν μερικά πράγματα που πρέπει να σημειωθούν:

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

3. Σειρά GS: Αυτό είναι που γράφτηκε στις προηγούμενες ενότητες. Κάντε κύκλο σε κάθε παράδειγμα μάθησης.


Εικόνα που συγκρίνει 3 επιτυχίες με τοπικά ελάχιστα

Παράδειγμα κώδικα σε python

Ισχύει για τη σειρά GS, έτσι θα μοιάζει ένα μπλοκ κώδικα εκπαίδευσης στην Python.

Def train(X, y, W, B, alpha, max_iters): """ Εκτελεί GD σε όλα τα παραδείγματα προπόνησης, X: Σύνολο δεδομένων προπόνησης, y: Ετικέτες για δεδομένα προπόνησης, W: Διάνυσμα βαρών, B: Μεταβλητή πόλωσης, άλφα : Ο ρυθμός εκμάθησης, max_iters: Μέγιστες επαναλήψεις GD """ dW = 0 # Weights gradient accumulator dB = 0 # Bias gradient accumulator m = X.shape # No. των παραδειγμάτων εκπαίδευσης για το i στην περιοχή (max_iters): dW = 0 # Επαναφορά των συσσωρευτών dB = 0 για j στην περιοχή (m): # 1. Επανάληψη σε όλα τα παραδείγματα, # 2. Υπολογίστε τις κλίσεις των βαρών και των προκαταλήψεων στο w_grad και b_grad, # 3. Ενημερώστε το dW προσθέτοντας w_grad και dB προσθέτοντας b_grad, W = W - άλφα * (dW / m) # Ενημερώστε τα βάρη B = B - άλφα * (dB / m) # Ενημερώστε την επιστροφή πόλωσης W, B # Επιστρέψτε τα ενημερωμένα βάρη και προκατάληψη.

Αυτό είναι όλο. Θα πρέπει τώρα να έχετε μια καλή κατανόηση του τι είναι η gradient descent.