AI 101
Τι είναι το Gradient Descent;
Τι είναι το Gradient Descent;
Εάν έχετε διαβάσει για το πώς εκπαιδεύονται τα νευρωνικά δίκτυα, σχεδόν σίγουρα έχετε συναντήσει τον όρο «gradient descent» στο παρελθόν. Διαβάθμιση κλίσης είναι η κύρια μέθοδος βελτιστοποίησης της απόδοσης ενός νευρωνικού δικτύου, μειώνοντας το ποσοστό απώλειας/λάθους του δικτύου. Ωστόσο, η ντεγκραντέ κάθοδος μπορεί να είναι λίγο δύσκολο να γίνει κατανοητή για όσους είναι νέοι στη μηχανική μάθηση και αυτό το άρθρο θα προσπαθήσει να σας δώσει μια αξιοπρεπή διαίσθηση για το πώς λειτουργεί η βαθμιδωτή κάθοδος.
Το Gradient descent είναι ένας αλγόριθμος βελτιστοποίησης. Χρησιμοποιείται για τη βελτίωση της απόδοσης ενός νευρωνικού δικτύου κάνοντας τροποποιήσεις στις παραμέτρους του δικτύου έτσι ώστε η διαφορά μεταξύ των προβλέψεων του δικτύου και των πραγματικών/αναμενόμενων τιμών του δικτύου (που αναφέρεται ως απώλεια) να είναι όσο το δυνατόν μικρότερη. Το Gradient descent παίρνει τις αρχικές τιμές των παραμέτρων και χρησιμοποιεί πράξεις που βασίζονται στον λογισμό για να προσαρμόσει τις τιμές τους προς τις τιμές που θα κάνουν το δίκτυο όσο πιο ακριβές μπορεί να είναι. Δεν χρειάζεται να γνωρίζετε πολλούς λογισμούς για να καταλάβετε πώς λειτουργεί η ντεγκραντέ κάθοδος, αλλά χρειάζεται να κατανοήσετε τις κλίσεις.
Τι είναι οι κλίσεις;
Ας υποθέσουμε ότι υπάρχει ένα γράφημα που αντιπροσωπεύει το μέγεθος του λάθους που κάνει ένα νευρωνικό δίκτυο. Το κάτω μέρος του γραφήματος αντιπροσωπεύει τα σημεία του χαμηλότερου σφάλματος ενώ το επάνω μέρος του γραφήματος είναι όπου το σφάλμα είναι το υψηλότερο. Θέλουμε να μετακινηθούμε από την κορυφή του γραφήματος προς τα κάτω. Μια κλίση είναι απλώς ένας τρόπος ποσοτικοποίησης της σχέσης μεταξύ του σφάλματος και των βαρών του νευρωνικού δικτύου. Η σχέση μεταξύ αυτών των δύο πραγμάτων μπορεί να γραφτεί ως κλίση, με τα λανθασμένα βάρη να παράγουν περισσότερα σφάλματα. Η απότομη κλίση/κλίση αντιπροσωπεύει πόσο γρήγορα μαθαίνει το μοντέλο.
Μια πιο απότομη κλίση σημαίνει ότι γίνονται μεγάλες μειώσεις στα σφάλματα και το μοντέλο μαθαίνει γρήγορα, ενώ αν η κλίση είναι μηδέν το μοντέλο βρίσκεται σε οροπέδιο και δεν μαθαίνει. Μπορούμε να κινηθούμε κάτω από την κλίση προς λιγότερα σφάλματα υπολογίζοντας μια κλίση, μια κατεύθυνση κίνησης (αλλαγή στις παραμέτρους του δικτύου) για το μοντέλο μας.
Ας αλλάξουμε λίγο τη μεταφορά και ας φανταστούμε μια σειρά από λόφους και κοιλάδες. Θέλουμε να φτάσουμε στο κάτω μέρος του λόφου και να βρούμε το τμήμα της κοιλάδας που αντιπροσωπεύει τη χαμηλότερη απώλεια. Όταν ξεκινάμε από την κορυφή του λόφου, μπορούμε να κάνουμε μεγάλα βήματα κάτω από το λόφο και να είμαστε σίγουροι ότι κατευθυνόμαστε προς το χαμηλότερο σημείο της κοιλάδας.
Ωστόσο, καθώς πλησιάζουμε στο χαμηλότερο σημείο της κοιλάδας, τα βήματά μας θα πρέπει να γίνουν μικρότερα, διαφορετικά θα μπορούσαμε να ξεπεράσουμε το πραγματικό χαμηλότερο σημείο. Ομοίως, είναι πιθανό κατά την προσαρμογή των βαρών του δικτύου, οι προσαρμογές να το απομακρύνουν πραγματικά από το σημείο της χαμηλότερης απώλειας, και επομένως οι προσαρμογές πρέπει να γίνονται μικρότερες με την πάροδο του χρόνου. Στο πλαίσιο της κατάβασης ενός λόφου προς ένα σημείο με τη χαμηλότερη απώλεια, η κλίση είναι ένα διάνυσμα/εντολές που περιγράφουν λεπτομερώς τη διαδρομή που πρέπει να ακολουθήσουμε και πόσο μεγάλα πρέπει να είναι τα βήματά μας.
Τώρα γνωρίζουμε ότι οι διαβαθμίσεις είναι οδηγίες που μας λένε προς ποια κατεύθυνση να κινηθούμε (ποιοι συντελεστές πρέπει να ενημερωθούν) και πόσο μεγάλα είναι τα βήματα που πρέπει να κάνουμε (πόσο πρέπει να ενημερωθούν οι συντελεστές), μπορούμε να εξερευνήσουμε πώς υπολογίζεται η κλίση.
Υπολογισμός Διαβαθμίσεων & Κλίσης Κάθοδος

Η κατάβαση με κλίση ξεκινά από ένα σημείο υψηλής απώλειας και μέσω πολλαπλών επαναλήψεων, κάνει βήματα προς την κατεύθυνση της χαμηλότερης απώλειας, με στόχο να βρει τη βέλτιστη διαμόρφωση βάρους. Φωτογραφία: Роман Сузи μέσω Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Για να πραγματοποιηθεί η κλίση κατάβασης, πρέπει πρώτα να υπολογιστούν οι κλίσεις. Για να για τον υπολογισμό της κλίσης, πρέπει να γνωρίζουμε τη συνάρτηση απώλειας/κόστους. Θα χρησιμοποιήσουμε τη συνάρτηση κόστους για να προσδιορίσουμε το παράγωγο. Στον λογισμό, η παράγωγος αναφέρεται απλώς στην κλίση μιας συνάρτησης σε ένα δεδομένο σημείο, επομένως βασικά υπολογίζουμε απλώς την κλίση του λόφου με βάση τη συνάρτηση απώλειας. Καθορίζουμε την απώλεια τρέχοντας τους συντελεστές μέσω της συνάρτησης απώλειας. Αν αναπαραστήσουμε τη συνάρτηση απώλειας ως "f", τότε μπορούμε να δηλώσουμε ότι η εξίσωση για τον υπολογισμό της απώλειας είναι η εξής (απλώς εκτελούμε τους συντελεστές μέσω της επιλεγμένης συνάρτησης κόστους):
Απώλεια = f (συντελεστής)
Στη συνέχεια υπολογίζουμε την παράγωγο ή προσδιορίζουμε την κλίση. Η λήψη της παραγώγου της απώλειας θα μας πει ποια κατεύθυνση είναι πάνω ή κάτω από την κλίση, δίνοντάς μας το κατάλληλο πρόσημο για να προσαρμόσουμε τους συντελεστές μας. Θα αντιπροσωπεύσουμε την κατάλληλη κατεύθυνση ως "δέλτα".
δέλτα = παράγωγο_συνάρτηση(απώλεια)
Τώρα προσδιορίσαμε ποια κατεύθυνση είναι κατηφορική προς το σημείο της χαμηλότερης απώλειας. Αυτό σημαίνει ότι μπορούμε να ενημερώσουμε τους συντελεστές στις παραμέτρους του νευρωνικού δικτύου και ελπίζουμε να μειώσουμε την απώλεια. Θα ενημερώσουμε τους συντελεστές με βάση τους προηγούμενους συντελεστές μείον την κατάλληλη αλλαγή στην τιμή όπως καθορίζεται από την κατεύθυνση (δέλτα) και ένα όρισμα που ελέγχει το μέγεθος της αλλαγής (το μέγεθος του βήματος μας). Το όρισμα που ελέγχει το μέγεθος της ενημέρωσης ονομάζεται "ποσοστό μάθησης» και θα το αναπαραστήσουμε ως «άλφα».
συντελεστής = συντελεστής – (άλφα * δέλτα)
Στη συνέχεια, απλώς επαναλαμβάνουμε αυτή τη διαδικασία έως ότου το δίκτυο συγκλίνει γύρω από το σημείο της χαμηλότερης απώλειας, το οποίο θα πρέπει να είναι κοντά στο μηδέν.
Είναι πολύ σημαντικό να επιλέξετε τη σωστή τιμή για το ρυθμό εκμάθησης (άλφα). Το επιλεγμένο ποσοστό μάθησης δεν πρέπει να είναι ούτε πολύ μικρό ούτε πολύ μεγάλο. Να θυμάστε ότι καθώς πλησιάζουμε στο σημείο της χαμηλότερης απώλειας τα βήματά μας πρέπει να γίνονται μικρότερα, διαφορετικά θα ξεπεράσουμε το πραγματικό σημείο της χαμηλότερης απώλειας και θα καταλήξουμε στην άλλη πλευρά. Το σημείο της μικρότερης απώλειας είναι μικρό και αν ο ρυθμός μεταβολής μας είναι πολύ μεγάλος, το σφάλμα μπορεί να καταλήξει να αυξάνεται ξανά. Εάν τα μεγέθη βημάτων είναι πολύ μεγάλα, η απόδοση του δικτύου θα συνεχίσει να αναπηδά γύρω από το σημείο της χαμηλότερης απώλειας, ξεπερνώντας την από τη μία πλευρά και μετά την άλλη. Εάν συμβεί αυτό, το δίκτυο δεν θα συγκλίνει ποτέ στην πραγματική βέλτιστη διαμόρφωση βάρους.
Αντίθετα, εάν ο ρυθμός εκμάθησης είναι πολύ μικρός, το δίκτυο μπορεί ενδεχομένως να πάρει έναν εξαιρετικά μεγάλο χρόνο για να συγκλίνει στα βέλτιστα βάρη.
Τύποι κλίσης καθόδου
Τώρα που καταλαβαίνουμε πώς λειτουργεί γενικά η κλίση κατάβασης, ας ρίξουμε μια ματιά σε μερικά από τα διαφορετικά τύπους κλίσης καθόδου.
Batch Gradient Descent: Αυτή η μορφή gradient descent διατρέχει όλα τα δείγματα εκπαίδευσης πριν από την ενημέρωση των συντελεστών. Αυτός ο τύπος gradient descent είναι πιθανό να είναι η πιο αποδοτική υπολογιστικά μορφή gradient descent, καθώς τα βάρη ενημερώνονται μόνο αφού ολοκληρωθεί η επεξεργασία ολόκληρης της παρτίδας, πράγμα που σημαίνει ότι υπάρχουν λιγότερες ενημερώσεις συνολικά. Ωστόσο, εάν το σύνολο δεδομένων περιέχει μεγάλο αριθμό παραδειγμάτων εκπαίδευσης, τότε η κατά παρτίδα διαβάθμιση μπορεί να κάνει την εκπαίδευση να διαρκέσει πολύ.
Στοχαστική κάθοδος κλίσης: Στη Στοχαστική κλίση καθόδου επεξεργάζεται μόνο ένα παράδειγμα εκπαίδευσης για κάθε επανάληψη κλίσης κατάβασης και ενημέρωση παραμέτρων. Αυτό συμβαίνει για κάθε παράδειγμα εκπαίδευσης. Επειδή μόνο ένα παράδειγμα εκπαίδευσης υποβάλλεται σε επεξεργασία πριν από την ενημέρωση των παραμέτρων, τείνει να συγκλίνει ταχύτερα από το Batch Gradient Descent, καθώς οι ενημερώσεις γίνονται νωρίτερα. Ωστόσο, επειδή η διαδικασία πρέπει να εκτελείται σε κάθε στοιχείο του σετ εκπαίδευσης, μπορεί να χρειαστεί πολύς χρόνος για να ολοκληρωθεί εάν το σύνολο δεδομένων είναι μεγάλο και, επομένως, η χρήση ενός από τους άλλους τύπους gradient descent αν προτιμάται.
Mini-Batch Gradient Descent: Το Mini-Batch Gradient Descent λειτουργεί χωρίζοντας ολόκληρο το σύνολο δεδομένων εκπαίδευσης σε υποενότητες. Δημιουργεί μικρότερες μίνι παρτίδες που εκτελούνται μέσω του δικτύου και όταν η μίνι παρτίδα έχει χρησιμοποιηθεί για τον υπολογισμό του σφάλματος, οι συντελεστές ενημερώνονται. Το Mini-batch Gradient Descent επιτυγχάνει μια μέση λύση μεταξύ Stochastic Gradient Descent και Batch Gradient Descent. Το μοντέλο ενημερώνεται πιο συχνά από ό,τι στην περίπτωση του Batch Gradient Descent, πράγμα που σημαίνει ελαφρώς ταχύτερη και πιο ισχυρή σύγκλιση στις βέλτιστες παραμέτρους του μοντέλου. Είναι επίσης πιο αποδοτικό υπολογιστικά από το Stochastic Gradient Descent