Καλωσορίσατε στο μάθημα Τεχνητής Nοημοσύνης και Μηχανικής Μάθησης (Machine Learning).
Αυτό το μάθημα εισάγει τις βασικές και θεμελιώδεις ιδέες της Μηχανικής Μάθησης αρχίζοντας με την επιτηρούμενη μάθηση (supervised learning) και καταλήγοντας στα νευρωνικά δίκτυα (neural networks) και την τεχνική του Transfer Learning. Οι διαλέξεις αντλούν από την διδασκαλία μου στο Πανεπιστήμιο του Τέξας στο Ώστιν (UT Austin) και έχουν σχεδιαστεί για μαθητές του λυκείου (και για οποιονδήποτε άλλο διαθέτει το κατάλληλο υπόβαθρο) που έχουν κάποια γνώση προγραμματισμού και ενδιαφέρονται να μάθουν τις βασικές αρχές της Μηχανικής Μάθησης.
Το μάθημα δεν φιλοδοξεί να αναπτύξει μία πλήρη και ολοκληρωμένη παρουσίαση των ιδεών και των αλγορίθμων της μηχανικής μάθησης. Επιχειρεί να εισάγει ένα πυρήνα επιλεγμένων βασικών ιδεών που μπορεί να επεκταθεί εύκολα, αλλά και να χρησιμοποιηθεί άμεσα. Σκοπός μας είναι να προχωρήσουμε γρήγορα τόσο με τις βασικές ιδέες, όσο και με την υλοποίησή τους στην γλώσσα Python
χρησιμοποιώντας ευρέως διαθέσιμες βιβλιοθήκες εντολών (Python libraries), για να εξηγήσουμε και να μεταφέρουμε το γνωστικό περιεχόμενο κάθε καινούργιας ιδέας με απτά παραδείγματα.
Θα βρείτε παρακάτω σύνδεσμους (links) σε μια σειρά διαλέξεων, οργανωμένες θεματικά σε “Modules”. Χρησιμοποιούμε διαφάνειες όταν πρωτοεισάγουμε και εξηγούμε μία καινούργια ιδέα. Στις επόμενες διαλέξεις, αναπτύσσουμε και υλοποιούμε αυτές τις ιδέες στην Python,
επιλύοντας χαρακτηριστικά προβλήματα που βασίζονται κατά περίπτωση σε πραγματικά ή αληθοφανή τεχνητά δεδομένα.
Python και Colab: θα χρησιμοποιήσουμε την γλώσσα προγραμματισμού Python. Δεν καλύπτουμε τις αρχές της Python από μηδενική βάση. Ωστόσο, στις διαλέξεις εξηγούμε τις βασικές εντολές, και δίνουμε πληροφορίες για τις βιβλιοθήκες όπου οί εντολές αυτές είναι διαθέσιμες. Επίσης σε διάφορα σημεία του κώδικα, προτείνονται σύνδεσμοι (links) που περιέχουν περισσότερες λεπτομέρειες για τις συγκεκριμένες εντολές ή βιβλιοθήκες, τους οποίους μπορείτε να ακολουθήσετε ώστε να εμβαθύνετε τις γνώσεις σας. Ο προγραμματισμός γίνεται στο Colab. Το Colab είναι ένα δωρεάν, βασισμένο στο cloud εργαλείο από την Google, το οποίο επιτρέπει τη συγγραφή και την εκτέλεση κώδικα Python σε περιβάλλον Jupyter Notebook. Δουλεύει εξ ολοκλήρου στον browser, χωρίς να απαιτείται εγκατάσταση λογισμικού ή ρύθμιση περιβάλλοντος, οπότε η χρήση του εξασφαλίζει σε όλους πρόσβαση στο ίδιο υπολογιστικό περιβάλλον. Θα χρειαστείτε όμως λογαριασμό gmail.
Πως μπορείτε να χρησιμοποιήσετε την ύλη του μαθήματος:
`
Lecture 1: Τι είναι η Τεχνητή Νοημοσύνη; Τι θα καλύψει αυτό το μάθημα; Σε αυτήν την διάλεξη δίνουμε κάποια πρώτα παραδείγματα, και ύστερα περιγράφουμε συνοπτικά όλο το μάθημα, την δομή των διαλέξεων, και τις προαπαιτούμενες γνώσεις για να παρακολουθήσετε τα μαθήματα.
Lecture 2: Ο John Snow, η Χολέρα, και η Μοντέρνα Τεχνητή Νοημοσύνη Σε αυτήν την διάλεξη συνεχίζουμε την εισαγωγική μας συζήτησή για την τεχνητή νοημοσύνη. Αρχίζουμε με ένα ιστορικό παράδειγμα, και ύστερα περνάμε σε παραδείγματα εφαρμογών της μοντέρνας μηχανικής μάθησης. Με αυτόν τον τρόπο εξηγούμε την ιδέα της ταξινόμησης και παλινδρόμησης στην μηχανική όραση και στην επεξεργασία φυσικής γλώσσας. Επίσης ορίζουμε την έννοια της γενετικής τεχνητής νοημοσύνης (Generative AI) και αναφέρουμε κάποιες εφαρμογές της.
`
Lecture 3: Επιτηρούμενη Μάθηση και Δέντρα Απόφασης Σε αυτήν την διάλεξη συζητάμε την βασική ιδέα του αλγορίθμου, και των παραμέτρων, για να εισάγουμε το βασικό πρότυπο της επιτηρούμενης μάθησης (supervised learning) και να εξηγήσουμε τι θα πεί “εκπαιδεύω αλγόριθμο”. Η επόμενη διάλεξη μπαίνει λεπτομερώς στην υλοποίηση (με κώδικα) της επιτηρούμενης μάθησης χρησιμοποιώντας την Python.
Lecture 4: Δέντρα Απόφασης με δεδομένα του διαβήτη 1/2 (Python / Colab) Σε αυτήν την διάλεξη, υλοποιούμε τις βασικές ιδέες της προηγούμενης διάλεξης, στην Python. Μεταφορτώνουμε ένα σετ δεδομένων σχετικά με τον διαβήτη. Χρησιμοποιούμε εντολές της Pandas, της Numpy και της Matplotlib για να επεξεργαστούμε, να οπτικοποιήσουμε και να καθαρίσουμε τα δεδομένα. Τέλος, χρησιμοποιούμε εντολές από την βιβλιοθήκη Sklearn για να εκπαιδεύσουμε δέντρα απόφασης.
Lecture 5: Δέντρα Απόφασης με δεδομένα του διαβήτη 2/2 (Python / Colab) Σε αυτήν την διάλεξη συμπληρώνουμε τις ασκήσεις που είχαμε περιγράψει στην προηγούμενη διάλεξη.
`
Lecture 6: Υπερμοντελοποίηση: οι βασικές ιδέες Σε αυτήν την διάλεξη αρχίζουμε την συζήτησή μας για την υπερμοντελοποίηση (overfitting). Η υπερμοντελοποίηση περιγράφει το φαινόμενο όπου ένας αλγόριθμος ταιριάζει πολύ καλά (έχει μεγάλη ακρίβεια) στα δεδομένα με τα οποία εκπαιδεύτηκε, αλλά έχει πολύ χειρότερη επίδοση (ακρίβεια) όταν καλείται να εκτιμήσει τα “output” δεδομένων που δεν περιέχονται στα δεδομένα εκπαίδευσης. Αυτό συμβαίνει, όπως είδαμε, με τα δεδομένα του διαβήτη όταν εκπαιδεύουμε βαθιά δέντρα απόφασης.
Lecture 7: Υπερμοντελοποίηση στην Python (Python / Colab) Συνεχίζουμε την συζήτησή μας για την υπερμοντελοποίηση, τώρα παρατηρώντας αυτό το φαινόμενο στην πράξη. Κοιτάμε πάλι τα δεδομένα του διαβήτη. Δημιουργούμε ένα τεχνητό σετ δεδομένων, και πάλι με βαθιά δέντρα απόφασης, παρατηρούμε και εκεί το φαινόμενο της υπερμοντελοποίησης: τα βαθιά δέντρα απόφασης υπερμοντελοποιούν διότι προσπαθούν να μοντελοποιήσουν τον θόρυβο (τυχαίες μικρές διακυμάνσεις) στα δεδομένα εκπαίδευσης.
Lecture 8: Υπερμοντελοποίηση με το CIFAR-10 (Python / Colab) Σε αυτήν την διάλεξη συνεχίζουμε την συζήτηση για την υπερμοντελοποίηση και τα δέντρα απόφασης, τώρα με ένα πρόβλημα ταξινόμησης στην Μηχανική Όραση (computer vision), με τα δεδομένα του CIFAR-10. Με αυτή την αφορμή μαθαίνουμε πως αποθηκεύονται οι εικόνες στον υπολογιστή, και επίσης εκτιθέμεθα σε ένα πρόβλημα σημαντικά μεγαλύτερο από αυτά που έχουμε δεί έως τώρα.
Lecture 9: Υπερμοντελοποίηση και Υπομονετλοποίηση στην Παλινδρόμηση (Python / Colab) Σε αυτήν την διάλεξη επανερχόμαστε τις βασικές ιδέες που έχουμε αναπτύξει στο μάθημα, αλλά τώρα τις αντιμετωπίζουμε σε προβλήματα παλινδρόμησης (regression). Συγκεκριμένα, συζητάμε το βασικό πρότυπο της επιτηρούμενης μάθησης και εκπαίδευσης αλγορίθμων, και την υπερμοντελοποίηση (overfitting). Επίσης, εξηγούμε την ιδέα της υπομοντελοποίησης (underfitting).
`
Lecture 10: Εισαγωγή στα Νευρωνικά Δίκτυα Σε αυτήν την διάλεξη αρχίζουμε την συζήτησή μας για βαθιά νευρωνικά δίκτυα (deep neural networks). Εξηγούμε δύο από τα βασικά δομικά στοιχεία των νευρωνικών δικτύων: τα fully-connected γραμμικά επίπεδα (fully connected layers), και το softmax.
Lecture 11: Νευρωνικά Δίκτυα: ReLU Συνεχίζουμε την συζήτησή μας για νευρωνικά δίτκυα. Απαντάμε την ερώτηση που έθεσε η προηγούμενη διάλεξη: ‘αρκούν τα γραμμικά επίπεδα για να χτίσουμε μια πλούσια οικογένεια νευρωνικών δικτύων;’ Βλέπουμε με ένα απλό παράδειγμα και υπολογισμό, πως δεν μπορούμε να βασιστούμε μόνο σε γραμμικά επίπεδα: δύο (ή και παραπάνω) γραμμικά επίπεδα στην σειρά, ισοδυναμούν με μόνο ένα γραμμικό επίπεδο. Είναι απαραίτητα, λοιπόν, κάποια μη-γραμμικά επίπεδα: τα ReLU (ή κάτι παρόμοιο). Ύστερα, εξηγούμε πως με εντολές από την βιβλιοθήκη Pytorch χτίζουμε μια οικογένεια νευρωνικών δικτύων.
Lecture 12: Νευρωνικά Δίκτυα: Feedforward 1/2 (Python / Colab) Σε αυτήν την διάλεξη αρχίζουμε την εξερεύνηση των νευρωνικών δικτύων με την βιβλιοθήκη Pytorch. Χτίζουμε νευρωνικά με fully-connected επίπεδα και με ReLU. Προς το παρόν δεν εκπαιδεύουμε ακόμα το νευρωνικό – αλλά επιλέγοντας τιμές για τις παραμέτρους, βλέπουμε με λεπτομέρεια (και με κώδικα) πως κάνει υπολογισμούς, δηλαδή, πως παίρνει δεδομένα και παράγει τις προβλέψεις (τα output).
Lecture 13: Νευρωνικά Δίκτυα: Feedforward 2/2 (Python / Colab) Συνεχίζουμε την συζήτησή μας για νευρωνικά δίκτυα, χρησιμοποιώντας την Pytorch. Εξηγούμε πως δουλεύει το softmax και γιατί το χρειαζόμαστε, και ύστερα βλέπουμε πως λειτουργεί ένα απλό νευρωνικό δίκτυο σε ένα δισδιάστατο πρόβλημα ταξινόμησης. Επίσης οπτικοποιούμε ισοϋψείς καμπήλες για να καταλάβουμε σε μεγαλύτερο βάθος την συμπεριφορά του νευρωνικού δικτύου, και γιατί τα ReLU είναι απαραίτητα.
Lecture 14: Εκπαίδευση Νευρωνικών Δικτύων (Python / Colab) Σε αυτήν την διάλεξη συζητάμε την εκπαίδευση νευρωνικών δικτύων με την Pytorch. Στην πορεία, συναντάμε κάποια βασικά εργαλεία της Pytorch: τα Data Loaders, και τα Transforms. Επίσης, συζητάμε σε διαισθητικό επίπεδο, τι κάνει ο κώδικας της εκπαίδευσης στην Pytorch, ποιός είναι ο ρόλος του optimizer και του scheduler.
`
Lecture 15: Μηχανική Όραση Σε αυτήν την διάλεξη περιγράφουμε πως αποθηκεύονται οι μαυρόασπρες και οι έγχρωμες εικόνες στον υπολογιστή, αρχίζοντας έτσι την συζήτησή μας για την Μηχανική Όραση (Computer Vision).
Lecture 16: Convolutional Neural Networks Συνεχίζουμε την συζήτησή μας για την Μηχανική Όραση (Computer Vision) και εξηγούμε λεπτομερώς τι είναι, γιατί τα χρειαζόμαστε, και πως χρησιμοποιούνται τα συνελικτικά επίπεδα και νευρωνικά δίκτυα (Convolutional Neural Networks).
Lecture 17: Convolutional Neural Networks & MNIST (Python / Colab) Σε αυτήν την διάλεξη υλοποιούμε με την Python & Pytorch τις ιδέες που έχουμε δεί – συγκεκριμένα, τα συνελικτικά νευρωνικά δίκτυα (convolutional neural networks) – για την αυτόματη αναγνώριση χειρόγραφων ψηφίων. Χρησιμοποιούμε το σετ δεδομένων MNIST.
Lecture 18: Convolutional Neural Networks & CIFAR-10 (Python / Colab) Σε αυτήν την διάλεξη επιστρέφουμε στο σετ δεδομένων του CIFAR-10. Με τα δέντρα αποφασης, είχαμε καταφέρει να πετύχουμε ακρίβεια (στα δεδομένα εκτίμησης) γύρω στο 23%-24%. Χρησιμοποιώντας βαθιά νευρωνικά δίκτυα με convolutional επίπεδα (CNNs), βελτιώνουμε πολύ την επίδοσή μας. Χτίζουμε τρία δίκτυα. Το μικρότερο έχει περίπου 2.500 παραμέτρους. Το μεσαίο περίπου 60.000. Και το μεγαλύτερο σχεδόν 6.000.000. Τα εκπαιδεύουμε όλα, και βλέπουμε την επίδοσή τους.
`
Lecture 19: Transfer Learning στην Μηχανική Όραση Σε αυτήν την διάλεξη εισάγουμε την θεμελιώδη ιδέα του Transfer Learning, και εξηγούμε πως εφαρμόζεται σε προβλήματα της Μηχανικής Όρασης.
Lecture 20: Transfer Learning: Resnet18 και CIFAR-10 (Python / Colab) Σε αυτήν την διάλεξη επιστρέφουμε για μια τελευταία φορά στο σετ δεδομένων CIFAR-10, και χρησιμοποιούμε την ιδέα του Transfer Learning. Χρησιμοποιώντας ένα βαθύ νευρωνικό δίκτυο προεκπαιδευμένο στις 14.000.000 εικόνες του Imagenet, καταφέρνουμε να ξεπεράσουμε τις επιδόσεις των νευρωνικών που εκπαιδεύσαμε εξαρχής, μόνο με τα δεδομένα του CIFAR-10.”
Lecture 21: Transfer Learning: Υπερηχογραφήματα (Python / Colab) Σε αυτήν την διάλεξη εφαρμόζουμε την τεχνική του Transfer Learning σε ένα πρόβλημα ιατρικής απεικόνισης (medical imaging): προσπαθούμε να ανιχνεύσουμε τον καρκίνο μαστού από υπερηχογραφήματα, χρησιμοποιώντας ένα σετ δεδομένων από την Kaggle (https://www.kaggle.com/). Εξετάζουμε πως λειτουργεί το Transfer Learning χρησιμοποιώντας δύο διαφορετικά βαθιά νευρωνικά δίκτυα προεκπαιδευμένα στο ImagNet: το Resnet18 και το Inception V3. Μαθαίνουμε επίσης για την τεχνική του Data Augmentation (Αύξηση Δεδομένων), πως εφαρμόζεται και σε τι χρησιμεύει.