Perceptron: δομικό στοιχείο τεχνητού νευρωνικού δικτύου

Κόμβος πηγής: 1216283

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

Βιολογική έμπνευση των Νευρωνικών Δικτύων

Ένας νευρώνας (νευρικό κύτταρο) είναι το βασικό δομικό στοιχείο του νευρικού συστήματος. Ένας ανθρώπινος εγκέφαλος αποτελείται από δισεκατομμύρια νευρώνες που είναι διασυνδεδεμένοι μεταξύ τους. Είναι υπεύθυνοι για τη λήψη και την αποστολή σημάτων από τον εγκέφαλο. Όπως φαίνεται στο παρακάτω διάγραμμα, ένας τυπικός νευρώνας αποτελείται από τα τρία κύρια μέρη - δενδρίτες, έναν άξονα και κυτταρικό σώμα ή σώμα. Οι δενδρίτες είναι κλαδιά που μοιάζουν με δέντρα που προέρχονται από το κυτταρικό σώμα. Λαμβάνουν πληροφορίες από τους άλλους νευρώνες. Το Soma είναι ο πυρήνας ενός νευρώνα. Είναι υπεύθυνο για την επεξεργασία των πληροφοριών που λαμβάνονται από τους δενδρίτες. Ο Άξονας είναι σαν ένα καλώδιο μέσω του οποίου οι νευρώνες στέλνουν τις πληροφορίες. Προς το τέλος του, ο άξονας χωρίζεται σε πολλούς κλάδους που κάνουν συνδέσεις με τους άλλους νευρώνες μέσω των δενδριτών τους. ο Η σύνδεση μεταξύ του άξονα και άλλων δενδριτών του νευρώνα ονομάζεται συνάψεις.

1: Βιολογικός νευρώνας έναντι τεχνητού νευρωνικού δικτύου

Πηγή εικόνας: Willems, K. (2017, 2 Μαΐου). Keras Tutorial: Deep Learning σε Python.

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

Εμπνευσμένος από τη βιολογική λειτουργία ενός νευρώνα, ένας Αμερικανός επιστήμονας Franck Rosenblatt σκέφτηκε την έννοια του perceptron στο Cornell Aeronautical Laboratory το 1957.

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

Κύρια συστατικά του Perceptron

Το perceptron του Rosenblatt είναι βασικά ένας δυαδικός ταξινομητής. Το perceptron αποτελείται από 3 κύρια μέρη:

  • Κόμβοι εισόδου ή στρώμα εισόδου: Το επίπεδο εισόδου μεταφέρει τα αρχικά δεδομένα στο σύστημα για περαιτέρω επεξεργασία. Κάθε κόμβος εισόδου συνδέεται με μια αριθμητική τιμή. Μπορεί να πάρει οποιαδήποτε πραγματική αξία.
  • Βάρη και μεροληψία: Οι παράμετροι βάρους αντιπροσωπεύουν την ισχύ της σύνδεσης μεταξύ των μονάδων. Όσο υψηλότερο είναι το βάρος, τόσο ισχυρότερη είναι η επιρροή του σχετικού νευρώνα εισόδου για να αποφασίσει την έξοδο. Το Bias παίζει το ίδιο με την τομή σε μια γραμμική εξίσωση.
  • Λειτουργία ενεργοποίησης: Η συνάρτηση ενεργοποίησης καθορίζει εάν ο νευρώνας θα ενεργοποιηθεί ή όχι. Στην απλούστερη μορφή της, η συνάρτηση ενεργοποίησης είναι μια συνάρτηση βήματος, αλλά με βάση το σενάριο, μπορούν να χρησιμοποιηθούν διαφορετικές λειτουργίες ενεργοποίησης.

Θα δούμε περισσότερα για αυτά στην επόμενη ενότητα.

Λειτουργία ενός Perceptron

Στο πρώτο βήμα, όλες οι τιμές εισόδου πολλαπλασιάζονται με τα αντίστοιχα βάρη τους και αθροίζονται. Το αποτέλεσμα που προκύπτει ονομάζεται σταθμισμένο άθροισμα ∑ wi*xi, ή δηλώνεται διαφορετικά,  x1*w1 + x2*w2 +…wn*xn. Αυτό το άθροισμα δίνει μια κατάλληλη αναπαράσταση των εισροών με βάση τη σημασία τους. Επιπλέον, ένας όρος μεροληψίας b προστίθεται σε αυτό το άθροισμα ∑wi*xi + b. Το Bias χρησιμεύει ως μια άλλη παράμετρος μοντέλου (εκτός από τα βάρη) που μπορεί να ρυθμιστεί για να βελτιώσει την απόδοση του μοντέλου.

Στο δεύτερο βήμα, μια λειτουργία ενεργοποίησης f εφαρμόζεται στο παραπάνω άθροισμα ∑wi*xi + b για να ληφθεί η έξοδος Y = f(∑wi*xi + b). Ανάλογα με το σενάριο και τη λειτουργία ενεργοποίησης που χρησιμοποιείται, το Παραγωγή είναι είτε δυαδικό {1, 0} ή μια συνεχή τιμή. 

Λειτουργία ενός Perceptron

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

Λειτουργίες ενεργοποίησης

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

Αν ∑wi*xi + b > 0: έξοδος = 1 άλλο: έξοδος = 0

Το γράφημα του θα είναι κάπως έτσι:

Λειτουργίες ενεργοποίησης

Αυτή είναι στην πραγματικότητα η λειτουργία ενεργοποίησης Unit Step (Threshold) που χρησιμοποιήθηκε αρχικά από τη Rosenblatt. Αλλά όπως μπορείτε να δείτε, αυτή η συνάρτηση είναι ασυνεχής στο 0, επομένως προκαλεί προβλήματα στους μαθηματικούς υπολογισμούς. Μια πιο ομαλή εκδοχή της παραπάνω συνάρτησης είναι η σιγμοειδής συνάρτηση. Βγάζει μεταξύ 0 και 1. Μια άλλη είναι η Υπερβολική εφαπτομένη (tanh) συνάρτηση, η οποία παράγει την έξοδο μεταξύ -1 και 1. Και οι δύο συναρτήσεις σιγμοειδούς και tanh υποφέρουν από προβλήματα διαβάθμισης εξαφάνισης. Σήμερα, το ReLU και το Leaky ReLU είναι οι πιο ευρέως χρησιμοποιούμενες λειτουργίες ενεργοποίησης. Είναι συγκριτικά σταθερά σε βαθιά δίκτυα.

Το Perceptron ως δυαδικός ταξινομητής

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

Εισαγωγή ορισμένων βιβλιοθηκών –

από sklearn.datasets import make_blobs εισαγωγή matplotlib.pyplot ως plt εισαγωγή numpy ως np %matplotlib inline

Δημιουργία εικονικού συνόλου δεδομένων χρησιμοποιώντας make_blobs λειτουργικότητα που παρέχεται από το scikit Learn –

# Δημιουργία δεδομένων X, Y = make_blobs (n_features = 2, κέντρα = 2, n_samples = 1000, random_state = 12)
# Οπτικοποίηση συνόλου δεδομένων plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Βασική αλήθεια', μέγεθος γραμματοσειράς = 18) plt.show()
Το Perceptron ως δυαδικός ταξινομητής

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

Πριν προχωρήσουμε περαιτέρω, ας προσθέσουμε έναν όρο μεροληψίας (one) στο διάνυσμα εισόδου –

# Προσθέστε μια προκατάληψη στο διάνυσμα εισόδου X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Το σύνολο δεδομένων θα μοιάζει κάπως έτσι

σύνολο δεδομένων

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

w = w + (αναμενόμενο — προβλεπόμενο) * x

Perceptron w

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

Ξεκινάμε εκχωρώντας αυθαίρετες τιμές στο διάνυσμα βάρους και, στη συνέχεια, τις προσαρμόζουμε προοδευτικά σε κάθε επανάληψη χρησιμοποιώντας το σφάλμα και τα διαθέσιμα δεδομένα –

# αρχικοποίηση βαρών με τυχαίες τιμές w = np.random.rand(3, 1) print(w)

Παραγωγή:

[[0.37547448] [0.00239401] [0.18640939]]

Ορίστε τη συνάρτηση ενεργοποίησης του perceptron –

def activation_func(z): αν z >= 1: επιστροφή 1 άλλο: επιστροφή 0

Στη συνέχεια, εφαρμόζουμε τον κανόνα εκμάθησης perceptron -

for _ in range(100): for i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Ενημέρωση βαρών w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

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

Τώρα, που έχουμε αποκτήσει τα βέλτιστα βάρη, εμείς προβλέψτε την κλάση για κάθε σημείο δεδομένων χρησιμοποιώντας Y = f(∑wi*xi + b) ή Y = wT.x σε διανυσματική μορφή.

# πρόβλεψη της κλάσης των σημείων δεδομένων result_class = [activation_func(w.transpose().dot(x)) για x στο X_bias]

Οραματιστείτε το όριο απόφασης και τις προβλεπόμενες ετικέτες τάξης –

# μετατροπή σε διάνυσμα μονάδας w = w/np.sqrt(w.transpose().dot(w))
# Οπτικοποίηση αποτελεσμάτων plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], hyperplane ([-10, -1], w), lw = 3, c = 'κόκκινο') plt.title('Ταξινόμηση Perceptron με όριο απόφασης') plt.show()
Ταξινόμηση Perceptron με όριο απόφασης

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

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

Σημειώσεις

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

Σχετικά με το Συγγραφέας

Pratik Nabriya είναι ένας εξειδικευμένος Επιστήμονας Δεδομένων που απασχολείται επί του παρόντος σε μια εταιρεία Analytics και AI με έδρα τη Noida. Είναι ικανός στη μηχανική μάθηση, τη βαθιά μάθηση, το NLP, την Ανάλυση χρονοσειρών, τη χειραγώγηση δεδομένων, την SQL, την Python και είναι εξοικειωμένος με την εργασία σε περιβάλλον Cloud. Στον ελεύθερο χρόνο του, λατρεύει να διαγωνίζεται σε Hackathons και να γράφει τεχνικά άρθρα.

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.

Πηγή: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Σφραγίδα ώρας:

Περισσότερα από Ανάλυση Vidhya