Νευρωνικά δίκτυα #1 | Όταν οι μηχανές μαθαίνουν μόνες τους

Πώς μπορούμε να κάνουμε έναν υπολογιστή να μπορεί να καταλάβει τις προτιμήσεις μας, να περιγράψει μία εικόνα ή να μπορεί να παίξει ότι video game και να του δώσεις ;

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

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

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

scifi4

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

Να τονίσουμε εδώ ότι τα νευρωνικά δίκτυα είναι μόνο ένας από τους πολλούς αλγορίθμους μηχανικής μάθησης, ο οποίος όμως θεωρείται state of the art στις μέρες μας μιας και έχει κάποια πολύ ιδιαίτερα χαρακτηριστικά.

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

 

network

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

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

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

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

Όλα αυτά θα γίνουν περισσότερο κατανοητά με το παρακάτω παράδειγμα:

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

Έστω ότι έχουμε εκπαιδεύσει ένα νευρωνικό δίκτυο να μας δίνει το αποτέλεσμα της πράξης

Χ1 AND Χ2

screenshot_2016-12-26_16-30-21

Πίνακας αλήθειας πράξης AND

Με απλά λόγια, θέλουμε να μάθουμε το δίκτυο να μας επιστρέφει 1 μόνο όταν και το Χ1 και το Χ2 είναι 1. Σε οποιαδήποτε άλλη περίπτωση πρέπει να επιστρέψει 0. Το Χ1 και το Χ2 πρέπει να είναι είτε 0 είτε 1.

Το δίκτυο αυτό μπορεί να γίνει με έναν μόνο νευρώνα! Αφού το εκπαιδεύσουμε (θα δούμε αργότερα πως γίνεται αυτό), προκύπτουν οι παρακάτω τιμές:

screenshot_2016-12-26_16-42-58

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

Για παράδειγμα αν δώσουμε Χ1=1 και Χ2=0 περιμένουμε η απάντηση να είναι 0 (βλ. πίνακα αλήθειας). Ο νευρώνας για να υπολογίσει τη πρόβλεψη αρχικά θα κάνει τη παρακάτω πράξη:

χ1*20+χ2*20+1*(-30)

όπου χ1=1 και χ2=0 άρα:

1*20+0*10+1*(-30)  = 20-30=-10

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

logistic-curve-svg

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

Αν δοκιμάσουμε τώρα για Χ1=1 και για Χ2=1 (στο οποίο αναμένουμε για απάντηση το 1), έχουμε:

χ1*20+χ2*20+1*(-30) =

20+20-30 = 10

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

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

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

Οι δυνατότητες είναι άπειρες και το μέλλον δείχνει να φέρνει μεγάλες εκπλήξεις! Περισσότερα στα επόμενα parts.

Show Your Love

Facebook Profile photo

Studying in Computer Engineering & Informatics Department. Member of the fedora community. Interested in mobile apps and machine learning.

Leave a Reply

Your email address will not be published. Required fields are marked *