Διαβαθμίσεις: παρτίδες και στοχαστικές διαβαθμίσεις. Δημιουργείται η βάση του αλγορίθμου. Η συνάρτηση sgd υλοποιείται. Μοιάζει κάπως έτσι. Μια νέα μεταβλητή ταχύτητας είναι ενεργοποιημένη η οποία θα συσσωρεύει ορμή για κάθε παράμετρο. Ενημέρωση μεταβλητής

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

MSE με βάρη από στοχαστική κλίση κάθοδος: 2,78441258841

MSE με βάρη από gradient descent: 2,78412631451 (πανομοιότυπο με MSE με βάρη από κανονική εξίσωση)

Def mserror(y, y_pred): n = y.size diff = y - y_pred diff_squared = diff ** 2 av_er = float(sum(diff_squared))/n return av_er

Def linear_prediction(X, w): return dot(X,np.transpose(w))

Def gradient_descent_step(X, y, w, eta): n = X.shape grad = (2.0/n) * sum(np.transpose(X) * (linear_prediction(X,w) - y), axis = 1) return w - eta * grad

Def stochastic_gradient_step(X, y, w, train_ind, eta): n = X.shape grad = (2.0/n) * np.transpose(X) * (linear_prediction(X,w) - y) return w - eta * grad

Def gradient_descent(X, y, w_init, eta, max_iter): w = w_init errors = errors.append(mserror(y, linear_prediction(X,w))) για i στο range(max_iter): w = gradient_descent_step(X, y , w, eta) errors.append(mserror(y, linear_prediction(X,w))) return w, errors

Def stochastic_gradient_descent(X, y, w_init, eta, max_iter): n = X.shape w = w_init errors = errors.append(mserror(y, linear_prediction(X,w))) για i στην περιοχή(max_iter): random_ind = np.random.randint(n) w = stochastic_gradient_step(X, y, w, random_ind, eta) errors.append(mserror(y, linear_prediction(X,w))) επιστροφή w, σφάλματα

1 απάντηση

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

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

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

Οπου φά i – η συνάρτηση που υπολογίζεται στην i-η παρτίδα, το i επιλέγεται τυχαία.

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

Στοχαστική κλίση κατάβασης με αδράνεια

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

(14)
(15)

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

Μέθοδος προσαρμοστικής κλίσης

Η μέθοδος προσαρμοστικής κλίσης (Adagrad - από τον αγγλικό "αλγόριθμο προσαρμοστικής κλίσης") βασίζεται στην ιδέα της κλιμάκωσης. Επανακλιμακώνει τον ρυθμό εκμάθησης για κάθε συντονίσιμη παράμετρο ξεχωριστά, ενώ λαμβάνει υπόψη το ιστορικό όλων των προηγούμενων κλίσεων για αυτήν την παράμετρο. Για να γίνει αυτό, κάθε στοιχείο διαβάθμισης διαιρείται με την τετραγωνική ρίζα του αθροίσματος των τετραγώνων των προηγούμενων αντίστοιχων στοιχείων κλίσης. Αυτή η προσέγγιση μειώνει αποτελεσματικά τον ρυθμό εκμάθησης για τα βάρη που έχουν μεγάλη τιμή διαβάθμισης και επίσης μειώνει τον ρυθμό εκμάθησης για όλες τις παραμέτρους με την πάροδο του χρόνου καθώς το άθροισμα των τετραγώνων αυξάνεται σταθερά για όλες τις παραμέτρους με κάθε επανάληψη. Όταν ορίζετε μια μηδενική αρχική παράμετρο κλιμάκωσης g = 0, ο τύπος για τον επανυπολογισμό των συντελεστών στάθμισης έχει τη μορφή (η διαίρεση πραγματοποιείται στοιχείο προς στοιχείο).

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

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

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

Δημοσιεύτηκε στις 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 για τη μέθοδο της οπισθοδιάδοσης. Η στοχαστική κλίση με ορμή θυμάται τις ενημερώσεις σε κάθε επανάληψη και καθορίζει την επόμενη ενημέρωση ως γραμμικό συνδυασμό της κλίσης και της προηγούμενης ενημέρωσης:

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

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

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

Σε αντίθεση με την κλασική μέθοδο στοχαστικής κλίσης κατάβασης, τείνει να διατηρεί την κίνηση προς μία κατεύθυνση, αποτρέποντας τις ταλαντώσεις. Το 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 = σφάλλει @ μοντέλο["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. Τεχνητή νοημοσύνηστα ρωσικά - ντεγκραντέ καταβάσεις

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 σε φόρμες. Διάγραμμα ροής του αλγορίθμου προσομοίωσης. Προβλήματα βελτιστοποίησης για ντετερμινιστικές συναρτήσεις με ένα μόνο ακραίο σημείο.

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

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

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

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

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

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

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

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

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

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

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

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

Και θα ήθελα με αυτήν την ευκαιρία να σημειώσω ότι εάν θέλετε να λαμβάνετε δωρεάν υλικό που σχετίζεται με το deep and μηχανική μάθηση, καθώς και την επεξεργασία δεδομένων, επισκεφτείτε τον ιστότοπό μου 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 παραδείγματα, οπότε ο συνολικός αριθμός των πακέτων θα είναι ίσος με N διαιρεμένο με το μέγεθος του πακέτου.

#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)

εκτύπωση "Elapsted time for batch 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