Συνδυαστική Βελτιστοποίηση (2023-01-20-16:10:01) / Μέρος 1 / Προγραμματισμένη Μετάδοση μαθήματος - Ζησιμόπουλος Βασίλης (ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ, 2023)
Προγραμματισμένη Μετάδοση μαθήματος: Πολαβλασιάζει το προς τα πίσω, κάνει τα κανόα λυσίδας για κάθε πίνακα βαρών, βέβαια να θάσει το F2X. Αυτό ήταν. Αυτό είναι το Back-Location γι' αυτό. Αν το δείτε και εδώ, αυτό είναι ένα Up-Level P. Παίρνετε τα X σας, όπου είναι το input, κάποια features που έχετε. Αυτό εδώ πέρα τα βελάκια είναι ο πολαβλασιασμός με το W1. Μετά το άλλο 2 είναι ο πολαβλασιασμός με το W2 και βγαίνει το F2X. Υποτιμήσετε ένα loss. Αυτό εδώ πέρα λέγεται hit and layer. Αν το έχετε ακούσει, το έχετε ακούσει στο τέτοιο. Είναι 10 διάμεσο layer αλλά είναι hit. 10 διάμεσο. Έχετε το first, το last και 10 διάμεσο είναι hit. Και τώρα κάθε μοντέλο μπορεί να το δείτε σαν ένα μικρό γράφος. Βάση, δηλαδή βήματα. Πέρα το X, το W1, βγαίνει το H, είναι διάμεσο αποτέλεσμα, το W2, βγαίνει το G. Και μετά υπολογίζει το loss και βγαίνει το loss. Και μετά τι κάνετε, υπολογίζεται με βάση, θέλετε το W1 και το W2. Άρα τι θέλετε να κάνετε, το loss ως προς τις παραμέτρες. Άρα το loss ως προς το W2. Για να το υπολογίσετε, τι κάνετε πάνω της αλυσίδας. Άμα θέλετε να βγάλετε ένα loss ως death. Death, W2, το υπολογίζεται. Άρα μπορείτε να πάτε εδώ πέρα και μετά πάτε πίσω. Βγάζει λίγο. Εδώ είναι ένα real life απλό παράδειγμα. Θέλετε να μου το πείτε ή να το πω. Ωραία δεν λειτουργήθηκε καν κάτι. Απλά ξέρω εγώ, το X, C, Z είναι τα input. Πάμε να ορίσουμε το μοντέλο. Το μοντέλο είναι αυτό, X και C επί Z. Για να μην είναι έτσι, μπορείτε το Q να το είστε X και C. Και όλο το F να γίνει και ο επί Z. Άμα βάλετε για παράδειγμα τα features, έστω ότι είναι τα features. Μίον 2, 5 και μίον 4. Και μπορείτε να δείτε αυτό που είπας είναι ένα μικρό γράφη. Τι κάνει για X, προσθέτει το X με το Ψ. X Ψ θα προσθέτει, κάνει κάτι. Μετά τι κάνει, Q επί Z. Και ο γελάτο μίον 12. Πώς υπολογίζω τα ingredients. Κάνουμε, DF, ας πούμε στο DF δεν έχει σημασία, κανένας σου. Μετά θέλω να υπολογίσω τον DF προς τον DQ. Αυτό εδώ είναι. Q. Ο επί Z. Τελείωσε, πάμε παρακάτω. Μετά θέλω να υπολογίσω, θέλω να υπολογίσω τον DF προς τον DH. Για να υπολογίσω τον DF προς τον DH, θέλω τον DF προς τον DQ. Και αντίσκατον το DQ προς το DH. Και καταλαβαίνετε, το DQ προς το DH κάνει 1. Και εδώ πέρα τα MOF είναι το σήμα που έρχεται προς τα πίσω. Αυτό είναι το πόσο θα τα πιάξω το MOF. Γι' αυτό στα RNN υπάρχει το πρόβλημα του vanishing gradient που λέμε. Γιατί άμα αυτό πηγαίνει και πηγαίνει και πηγαίνει και πηγαίνει και πηγαίνει. Γιατί το RNN τι κάνει, βλέπεις σειρά κάθε λέξη. Παίρνει την ποτή λέξη, κάνει κάτι, τα περνάει στο επόμενο. Άρα αυτό είναι μια τεράστια σειρά. Εδώ πέρα βλέπετε ότι πολλαπνευσιάζουν πράγματα. Κάνουν πολλαπνευσιασμούς, γιατί πολλαπνευσιάζουν νούμερα και πηγαίνουν προς τα πίσω. Άμα φτάσετε στο DQ και κάνετε πολλαπνευσιασμού προς τα πίσω, τα νούμερα που θα φτάσουν εδώ θα μικρύνουν. Πολύ, γιατί πολλαπνευσιάζει την μηχανή νούμερα. Αυτό θα είναι η sin gradient. Γι' αυτό στα RNN, άμα έχετε μεγάλες προτάσεις, κάνουμε και το ανάποδο. Κάνουμε και by RNN. Εντάξει. Εντάξει. Τώρα, είπαμε ότι το W είναι πυχή, είναι linear, μια γραμμή. Άρα όσα W και να βάλει από πάνω, πάει μια γραμμή θα μείνει. Αυτό λέγεται expressivity, άρα επιθυμείς μιας γραμμής, δεν μπορείτε να κάνετε πολλά πράγματα. Για παράδειγμα, θα γράψω. Αν σας έβαζα κατηγορίες και μετά ήτανε κόκκινα τα άλλα και σας έλεγα να τα χωρίσετε, μια γραμμή θα τα χωρίζετε. Αυτό είναι το W και είναι πυχή. Όσα W και να βάλετε, αυτά τα πράγματα είναι μια γραμμή, δεν κάνει κάτι. Οπότε άμα σας το έκανα πιο περίπλοκο και σας μπέρδευα τα μπλε με τα κόκκινα και ήταν αυτός ο χαμός. Βασικά, να το κάνω και λίγο λακέα. Ξεχάσετε το, θέλει πιο μεγάλο. Άρα, άμα είστε εδώ, εδώ, εδώ και αντίστοιχα έχετε κόκκινα εδώ πέρα άμα θέλετε να τα ξεφορίσετε, πρέπει να κάνετε τα μπλε τέλεια πρέπει να βγει μια γραμμή, ξέρω εγώ, έτσι. Άρα δεν μπορείτε να έχετε γραμμές. Πώς το σώζετε να έχετε γραμμές, κάνετε Activation Functions. Γιατί, βασικά, δεν κάνει αυτό το Activation Function κάνετε Apply το Activation Function σε αυτά και τα πετάει σε ένα νέο χώρο όπου τα κάνει η σκός, ας πούμε, στο 0 και 1, αυτά δεν είναι 0,1 οπότε, άμα τα περάσετε από μια σημοειδή, είναι 0,1, πρέπει να τα φορίζονται πιο εύκολα γιατί κάποιοι θα πάνε κοντά στο 0, κάποιοι θα πάνε κοντά στο 1. Αυτό είναι ότι το προσθέτω non-linearity, που λένε. Πάντα πρέπει να βάζετε μετά από, ας πούμε, εδώ το 0 και ένα x δεν έχει νόημα να βάλετε και άλλο, χρειάζεται Activation Functions για να κάνετε αυτήν, να αυξάνεται το expressivity του μοντέλου. Εδώ έχουμε πάρα πολλά Activation Functions για αυτός που πουλεί μεγάλο στο μέσο της έρευνας είναι λίγο κουταμάρα γενικά, γιατί αλλάζουν κάτι απλό και λένε app-paper, ας πούμε. Το rel για παράδειγμα κάνει max μεταξύ hickey 0, άμα είναι αλληλουτικό το κάνει 0, και ήρθε ένα τολίκι rel που λέει, OK, ξέρω, εγώ με μια πιθανότητα αφήνω κάποια αριθμητικά. Και βγαίνουν έξι papers στην Activation Functions κάνοντας μια πολύ μικρή παραλλαγή, η οποία... βάσκα να κάνω και λίγο ανάλυση γιατί δουλεύει, αλλά OK. Ανάλογα και το task μπορεί να το αλλάξει. Για παράδειγμα, άμα έχετε binary classification και στο τέλος βγάζετε ένα 0,7 σαν νούμερο, το κοπάνετε μια σημοειβία από πάνω και γίνεται πιθανότητα και θα σε το πάει κοντά στον άσσο. Το rel αντίστοιχα είναι τα πιο κατεδομένα, μαζί με το λίκι rel. Αυτό είναι το πιο σημαντικό πρόγραμμα, τα πιο κατεδομένα, μαζί με το λίκι rel. Ορίσαμε τα πάντα, ας πάρουμε ένα MLP, το οποίο τι είναι... Θα σας πω έναν κασβαρό, επί το input και κάποιο bias. Το bias είναι ένα πλάνος πλάνος που προσθέπεται. Και από πάνω μια Activation Function. Και αυτό είναι ένα layer. Μπορεί να στακάρετε πάρα πολλά για να κάνετε όσο πιο βαθιά θέλετε, αλλά πρέπει να έχετε μία βαθύτη μορφή. Επί ένα κασβαρό, επί το input, άμα θέλετε να στακάρετε, το επόμενο layer δεν θα έχει πια το hell, αλλά το hell sin 1, το output που προηγούμε. Και κάνετε το hell sin 1, επί wl sin 1, Activation Function και το κοδεξί, αλλά μπορείτε να τα στακάρετε. Και στην ουσία είναι κάθε ένα linear transformation, ένα σπίνα κασβαρό, επί το input, και βαράτε από πάνω ένα Activation Function για να γίνει το non linear που λέει. Εντάξει. Έβγαλε και την όη μου. Σαν πολύ βασιλό intro. Αυτό είναι το κοδεξί. Αυτό είναι ένα summary. Να τα ξαναβω λίγο. Το x είναι το input, το ψ είναι η απάντηση, f του x είναι το μοντέλο, μπορεί να το θέλετε ένα mlp για το άριμα που ήταν πριν. Το δέν είναι το x που περνάει από το mlp. Όταν περνάει από το mlp, αυτό είναι το forward που λέμε. Γι' αυτό στην byteorts, όταν πάμε να ανοίξετε ένα μοντέλο, πάντα γράφεται τη forward. Είναι υποχρετικό. Γιατί το forward είναι πως περνάει το μοντέλο. Άρα στην ουσία πρέπει απλά να πάρετε το x, το forward function of the node, αυτό είναι ένα function στην Python που δέχεται το x, το πλασιάζει με το w, προσθέτει το bias, και από πάνω κάνει ένα activation function. Είναι απλά 4 γραμμές τελικά. Και έχετε φτιάξει ένα player. Εντάξει. Βασικά ούτε καν χρειάζεται να το φτιάξετε. Στην byteorts θα το κάνετε import και το καλύτε. Είναι έθιμο από πίσω. Απλά αν θέλετε να το φτιάξετε, έτσι θα το κάνετε. Αυτό λέγεται το forward. Άρα γεγονιά πως κάνετε train. Ωραία πρέπει να είναι ένα batch με γεύθους 16. Άρα 16 διαφορετικά x, ίδιες ασθήσεις βασικά. Κάνετε forward, το περνάτε το μοντέλο, υπολογίζετε το loss, και μετά κάνετε backward. Όταν καλύτετε το backward, πάει και υπολογίζει τα gradings. Δεν είναι κάτι άλλο. Και μετά κάνετε optimizer.step και να κάνετε.step έχετε το sd και κάνετε το theta-mean length-rate επί το gradings. Αυτό. Ωραία. Πάμε πίσω στα graph. Κάποια ερώτηση. Κατανοητάει, ναι. Ωραία. Πάμε να ορίσουμε λίγο την κατάσταση για να κάνουμε graph. Ορίσουμε το V σαν το σύνολο των κόμμων. Εντάξει, όλοι οι κομβοί που έχουμε. Το A είναι ο πίνακας γυρνίασης, το οποίο είναι πώς ενώνονται οι κόμβοι. Ένας πίνακας τετράγωνος είναι η επινήση στην ουσία είναι. Μαχαιά V επί V. Όπου έχει πάντου μηδενικά εκτός από εκεί που είναι ενωμένοι οι δυο κόμβοι. Εκεί που είναι ενωμένοι στο κελί εκείνο έχει νούμερο ένα. Και ορίσουμε και τα features των κόμμων. Όπου μπορεί να είναι οτιδήποτε. Μπορεί τα features να είναι handcrafted features που λέμε ή τα features μπορεί να είναι pre-trained not abandoned. Κάτι που έχει εκπαιδεύσει και το βάζεται σαν features στους κόμμους. Το X είναι MPV. Το M είναι η ίδια στάση στους features. Πόσα features έχετε. Το V είναι πόσους κόμμους έχετε. Εδώ που λέει not features μπορεί να είναι user profiles, user images. Στο προηγούμενο μάθημα που δεν πελάπαμε να μάθουμε κώδικα, ο γράφος που είχα κάνει load είχε σαν features για παράδειγμα ποιοι είναι οι φίλοι σου, πότε έχεις γενέθειλια, πού δουλεύεις, τέτοια πράγματα. Μπορεί να είναι κείμενο που συσκετίζεται με τους κόμμους και τα features θα βγουν αφού περάσετε το κείμενο από ένα Rnn. Άρα θα βγει η ίδια στάση sen. Και τι άλλο μπορείτε να βάλετε στην ουσία. Ωραία είναι τα features. Τώρα, η ιδέα των γράφων μολούζων network θα έχει τα τα CNN. Στα CNN, επειδή έχετε απλά ένα τετράγωνο, έχετε και μια σταθερή δομή. Άρα τι μπορείτε να πείτε, πάω να περάσω από πάνω ένα kernel, ένα τετράγωνο, ένα filtro και για τον combo 1, για αυτό που είναι στο κέντρο, πάω και προσθέτω, κάνω average ή το τιδήποτε, επιλέξτε εσείς, τους γειτονέζουμε. Ή κάνω max pooling και κάνω τα μεγαλύτερα. Και αφού το κάνω αυτό, βγάζω ένα νούμερο. Μετά το κάνω slide δίπλα και πόω στο 2. Κάνω κάτι. Μαζεύω δηλαδή τα γειτονικά pixels, τα κάνω average, τα προσθέτω ή βρίσκω το max, το τιδήποτε. Και βγάζω άλλο νούμερο και μετά, επειδή παραμένει σταθερό, απλά κυλίεται αυτό το παράθυρο από πάνω. Μέτα στο output αυτό, μπορείτε να βάλετε άλλο παράθυρο και άλλο παράθυρο και να κάνετε όλα αυτά τα πράγματα που θέλετε εδώ πέρα. Και να βγει κάτι θεωτικά που λέγεται deep CNN. Ωραία, στην εικόνα είναι απλό. Να το πάρει το τετράγωνο, κάνετε κάτι, γίνεται ένα νούμερο. Στον γράφο δεν είναι τόσο απλό, γιατί λέτε, ok, δεν μπορώ να έχω ένα τετράγωνο. Δηλαδή, πού το περνάω, το περνάω εδώ, το περνάω εδώ, το περνάω εδώ, δεν βγάζει τόσο νόημα. Οπότε η θεωρία λέει, ότι άμα θέλετε να μάθετε το νούμερο ή το embedding, τόσο πάλι, του κεντρικού κόμπου, θέλετε να μαζεύσετε μηνύματα, messages από τους γείτονές σας και να κάνετε κάτι. Για μας τα μηνύματα είναι τα embeddings. Ωραία, για τον κεντρικό κόμπου πάω και λέω ποιοι είναι οι γείτονές μου. Λέω αυτοί, φέρτε μου όλοι τα embeddings σας, βάζω και το δικό μου, με ένα σεφιού, γιατί εάν δεν το βάζαμε το μέχανα, και κάνω κάτι. Το κάνω κάτι είναι το GCN, κάθε διαφορετικός τύπος κάνει μια διαφορετική πράξη. Το πιο απλό είναι να τα προσθέσετε, να πάρετε το με αυτό μου και όλους τους γείτονες και να τα προσθέσετε. Άλλα κάνουν average, άλλα κάνουν max. Ό,τι ο καθεξής. Άρα το τι κάνετε είναι το aggregation. Και αφού τα μαζεύσω για μένα και βγάρω το νέο μου embedding, μπορώ να το πασάρω στους άλλους γείτονες. Να το περάσω σαν μήνυμα στους υπόλοιπους γείτονες που θέλουν να υπολογήσουν και αυτό το embedding τους. Άρα μαζεύω, κάνω κάτι ή το δίνω. Εδώ είναι παραδείγματα. Ωραία. Η πιο απλή ιδέα που μπορείτε να κάνετε είναι ότι έχω κάποια φίτσους σχετικά με τους κόμπους. Εδώ είναι δύο. Εντάξει. Αυτός είναι ο πυρέτας γυμνιάσης. Άμα δείτε, ξέρω εγώ, ο A είναι ενωμένος στο C και άμα πάτε στο AC υπάρχει Άσος. Γιατί μπορείτε να κάνετε, όχι ξέρω εγώ, να το περάσετε από ένα MLP. Πώς? Αυτό είναι ένα γραμμί. Στους έχεις ένα MLP για κάθε κόμπο. Παίρνεις αυτό, εδώ, το περνάς και κάνεις κάτι. Γιατί στο MLP πρέπει να δώσετε φίτσους για το παράδειγμα σας, φίτσους για τον κόμπο σας, για να περάσει μέσα από το MLP. Δεν είναι το καλύτερο πράγμα. Δηλαδή, έχετε ότου νι παράμετρες. Δίνεται αυτό στην ουσία, σαν input στο μοντέλο. Άρα, όταν κάνουμε output, το νι νόση κόμπου έχετε, πλάσος φίτσους έχετε. Όταν έχετε ένα εκατομμύριο κόμπου, πλάσεις ένα εκατομμύριο φίτσους, είναι δύο εκατομμύρια. Άρα, είναι πολύ μεγάλο, δεν συμφέρει. Αν αλλάξει η μέγεθοσογράφος, τι κάνετε? Πρέπει να φτιάξετε άλλο μοντέλο. Γιατί, εδώ, αυτό είναι σταθερό. Έχετε θεωρήσει δύο εκατομμύρια. Άμα γίνει πέντε, τι κάνετε. Άρα, δεν δουλεύει πάρα. Αυτό είναι σημαντικό. Ο γράφος δεν παίζει ρόλο με ποια σειρά θα βάλετε τους κόμμους. Οι γείτονές μου παραμένουν γείτανες. Άμα τους μαζεύσουμε τις προσθέσεις, όταν αλλάζει κάτι. Εδώ, αν αλλάξετε λίγο το input, πειράξετε κάτι, αλλάζει όλο το αποτέλεσμα. Αυτό θα το δούμε τώρα. Αυτό λέγεται permutation invariant, invariance και equivalent. Ωραία. Στην ουσία, ένας γράφος μπορείτε να τον ορίσετε με ένα order plan. Πότε να κάνω για λίγο. Αντέχετε κι άλλο ή... Πρώτα, με τις 6 θα κάνουμε. Ωραία. Αυτός ο γράφος γεννάει από την εναγκυνίαση. Η γράφη, άμα απλά αλλάξετε τα γράμματα... Άμα αλλάξετε τα γράμματα, αλλάζει από την εναγκυνίαση. Αλλά, άμα πάτε να μάθετε έναν dependings, επειδή η δομή δεν άλλαξε, τα dependings θα μάθετε για αυτό. Δεν πάνανε σε, δεν πάνανε τε, το dependings αυτού του κόμπου θα είναι το ίδιο. Γιατί ο γράφος δεν έχει αλλάξει τη δομή του, δεν έχει αλλάξει κάτι. Είναι αυτό που σας έλεγα την προηγούμενη φορά, ότι άμα αυτός ο γράφος έδινε σκυλάκια, και αυτός ο γράφος έδινε αμάξια, και αυτό ήταν Ferrari και αυτό λαπραντόρ, δεν είχα μια σημασία. Θα ήταν το ίδιο dependings, ακριβώς, άμα τρέχατε το no-work. Άρα αυτό λέγεται, βασικά ναι. Οι γράφοι αυτοί έχουν μια τέτοια ιδιαιότητα, ότι άμα αλλάξετε το ordering, δηλαδή άμα πάρετε ένα διαδικασία α1 και x1, και θέλετε να μάθετε ένα embedding για το γράφο όλο, θα παίρναν ίδιο, όποιο άλλο ordering πάρετε, άμα αλλάξετε τα γάμματα. Δεν αλλάζει κάτι. Αυτό λέγεται η vibe, ok? Εδώ δάξει, απλά, μια σημεριοφορία. Άμα έχετε μη κόμβους, μπορείτε να κάνετε μη παραγωγιτικό αλλαγές. Άρα υπάρχουν πολλές παραλλαγές των κόμβων, που ό,τι και να κάνετε, άμα πάτε να μάθετε ένα embedding για όλο το γράφο, θα δείτε και πράγματα. Αντίστοιχα, τελειώσει και με τα no embeddings. Εδώ το α είναι εδώ, είναι που βάζετε το όνομα στη μουσείο. Και μετά το καφέ. Το καφέ είναι εδώ, και με το καφέ πήγε εδώ πέρα. Γιατί το no ονομάσατε καφέ στη μουσείο. Ναι, το embedding του καφέ-κόμβου, πάλι το embedding του καφέ-κόμβου. Άμα πάτε να μάθετε no embeddings, το καφέ θα ήδη αλλάζει. Άλλαζε το όνομα. Απλά αλλάζει ο κόμβος που κοιτάτε. Δηλαδή κοιτάτε τον α, λαρύκα, αλλά δεν αλλάζει τίποτα. Εντάξει, θα προχωράω λίγο, δεν ξέρω τι πράγμα είναι. Αυτό λέγεται equivalent, δηλαδή όταν χαθείτε no embeddings, ο μόνος λόγος που μπορείτε να μπερδευτείτε είναι επειδή αλλάξετε το όνομα. Το embedding του καφέ-κόμβου θα είναι το ίδιο ό,τι και να κάνετε, αλλά εξαρτάται ποιος είναι ο καφέ-κόμβος. Εσάς είναι ο α ή εσάς είναι ο ε. Αλλά ό,τι και να αλλάξετε παραμένει το ίδιο. Άρα τα graph omolutions, όταν βάζετε aggregations, αυτό έχει σημασία για τα aggregations, θα πρέπει αυτά τα aggregations να έχουν αυτήν την ιδιότητα. Δηλαδή όποια σειρά και να πάρω τους κόμβους, όποια σειρά και να πάρω τους γειτονές μου, το αποδέσμα είναι ίδιο. Δηλαδή εάν επιλέξω σε ένα πρώτα ή σε ένα πρώτα, άμα πάρω και τα δύο και κάνω ένα άθροισμα, θα είναι το ίδιο πράγμα, να αλλάζει κάτι. Άρα οποιοδήποτε aggregation κάνουμε σαν πράξη, όταν μαζέψουμε τους κόμβους, θέλουμε να έχουμε αυτήν την ιδιότητα. Για παράδειγμα, το ίδιο σύγκρου τα MLP, όχι. Γιατί άμα αλλάξετε λίγο το input, θα αλλάζει και το output. Άμα αλλάξω τα νούμερα, αλλάζει. Άμα αλλάξω κάτι άλλο, αλλάζει. Οπότε δεν έχουμε αυτήν την ιδιότητα, άρα γι' αυτό ο λόγος δεν παίζει και πολύ καλά η προηγούμενη ιδέα που κάναμε. Άρα να πάρουμε αυτό και να το περάσουμε μπροστά από ένα MLP. Γιατί άμα αλλάξω λίγο αυτά, αλλάζει το output. Αλλάζει το input, αλλάζει το input και την δεύτερη γραμμή. Άρα, η ιδέα ποια είναι, θέλουμε να κάνουμε δύο πράγματα. Θέλουμε, βασικά πρέπει να ορίσουμε το computation graph, έτσι λέγεται, και μετά το πώς να πάρουμε την πληροφορία. Το computation graph σημαίνει ένα πιο σημαντικό πρόγραμμα. Άρα, θα κάνουμε δύο πράγματα. Άρα, θα κάνουμε δύο πράγματα. Άρα, θα κάνουμε δύο πράγματα. Άρα, θα κάνουμε δύο πράγματα. Και μετά το πώς να πάρουμε την πληροφορία. Το computation graph σημαίνει, από ποιους κόμβους θα πάρω πληροφορία. Ορίζω βασικά τη γειτονιά μου. Θέλω να είναι δύο χώπους μακριά, όλους τους γείτον, δύο χώπους μακριά. Εδώ, εντάξει, είναι και αυτή, απλά σας το κοκκινίζει για να δείξει συγκεκριμένους. Αλλά το computation graph είναι στην ουσία, από ποιους κόμβους θέλω να πάρω πληροφορία. Και το propagate και transform είναι στην ουσία, πώς μεταδίδεται αυτή την πληροφορία. Άρα, άμα θέλω να μάθω κάτι για τον i και έχω πει, θα πάω δύο χώπους μακριά, πρέπει πρώτα να μάθω αυτό. Για να μάθω αυτό, μαζεύω αυτά, κάνω κάτι, το έμαθα. Αντίστοιχα, μαζεύω αυτό, μαζεύω αυτό, μαζεύω αυτό, κάνω κάτι και μόλις μάθω για αυτά, τότε θα δίνω τον i και ο i κάνει κάτι. Εντάξει, εκεί βγάζει το δικό του i συν ένα. Άρα, καταλαβαίνετε ότι ο κάθε κόμβος έχει τον δικό του computation graph. Άρα, ο κάθε κόμβος έχει διαφορετική γειτονιά. Άρα, για κάθε κόμβο που αλλάζει, μπορείτε να υπολογίσετε και να έχετε διαφορετικό τρόπο να συλλέξετε πληροφορία. Εδώ, πάλι, φαίνεται αυτό το παράλυτο. Θέλουμε να μάθουμε για τον α. Άρα, εδώ είναι το α0, θεωρητικά, είναι το αχυκό του, και αυτό είναι το α1, αυτό που θέλουμε να βγει. Πώς βγαίνει το α1? Ωραία, με ποιούς είναι και και μεσό α, με τον d και με τον b και με τον c. Αυτή είναι με τρεις. Αλλά αυτοί έχουν δικούς τους γείτονες. Έχουν, ξέρω εγώ, τον a, τον c, τον b, τελείως πάντων, γιατί το c έχει αυτόν τον α, άρα, για να βγει το νέο α, μαζεύω πρώτα τα b, c, d, μαζεύοντας το αρχικό του α και το πρασικό του c, κάνω κάτι, βγαίνει το b, μαζεύω αυτά τα 4, κάνω κάτι, βγαίνει το c, μαζεύω πάλι το α, το αρχικό, το μηδέν, και βγαίνει το d, και μετά μαζεύω αυτά τα τρία και σε αυτό το κουτί κάνω κάτι άλλο και βγαίνει το νέο α. Εντάξει? Πέρα τα κουτιά είναι νευρονικά, είναι στη θεσία τα πανπολούσιες. Εδώ είναι αυτό που είπα, ότι ο κάθε κόμπος κάνει, define, το δικό του computation graph με βάση στην γειτονιά του, άρα, άμα δείτε εδώ, για παράδειγμα, άμα πάρω διαφορετικούς κόμμους, άμα πάρω διαφορετικούς κόμμους, πρέπει να συλλέξω από διαφορετικές γειτονιές την πληροφορία και να υπολογίσω τα νευρονικά. Εδώ μια παρατήρηση, θα την αναφέρουμε και μετά, είναι ότι μπορεί ο κάθε κόμπος να βγάζει το δικό του computation graph, το οποίο έχει να κάνει με τη γειτονιά του, αλλά τα κουτάκια είναι ίδια. Άρα μοιραζόμαστε τις παραμέθους. Είναι σαν ένα MLP στην ουσία. Όπως το MLP, όταν το δείτε στο κουτί, είναι σαν ένα κουτί. Είναι σαν ένα MLP στην ουσία. Όπως το MLP, όταν του δείτε ένα input, έχει το W1 πάντα και πάντα πολλαλασιάζει το input με το W1. Έτσι και εδώ πέρα, στα κουτάκια, έχετε Across All, όποιο κομπίδας που γράφετε να πάρετε, τα κουτάκια είναι τα ίδια. Απλά κάθε φορά παίρνει διαφορετικό input, κάθε φορά παίρνει άλλο κόμμο. Ωραία, έτσι φαίνεται πόσο στακάρουμε layers. Αυτό που πω πριν είναι δύο layers. Το layer 0 είναι τα αρχή, όπου τα αρχή είναι τα φύτσους, είναι τα αρχικά, ο B για να βγάλει την αναπαράσταση του στο layer 1 μαζεύει τις αναπαραστάσεις του A και του C στο layer 0 και βγαίνει κάτι, αντίστοιχα ο C κάνει το ίδιο και ο D τα μαζεύει εδώ, τα κάνει σαν aggregate, κάνει κάτι, θα δούμε το κάτι τι είναι, και βγαίνει το α στο layer 2. Άρα έτσι, άμα βάλετε κι άλλα από πάνω και βάλετε κι άλλες τέτοιες, να τα μαζεύσετε μετά, εδώ μπορείτε να βάλετε κι άλλα και να μαζεύσετε το α του layer 2. Μπορεί να στακάρετε και στην ουσία όσο πιο πολλά layers βάζετε μπορείτε να δείτε τόσο πολλά hops μακριά. Αν έχετε τρία layers θα βλέπετε τρία hops, άρα τρεις κόμφους μακριά. Εδώ καταλαβαίνετε αν είναι μικρός ο γράφος και βάλετε πάρα πολλά hops, πάρα πολλά layers, θα φτάσετε να μαζεύετε πληροφορία από το ελαιάκι του γράφου, άρα έχετε δει όλο το γράφο το οποίο δεν έχει νόημα γιατί χάνεται έννοια της γειτονιάς. Άρα τα layers εντάξει εξαλάτα και με τα μεγάλια του γράφου, αν είναι μικρός δεν μπορείτε να βάλετε πολλά, γιατί με λίγα, άμα στακάρετε λίγα layers έχετε μαζεύσει τα πάντα και έχει χαθεί λίγο το νόημα της γειτονιάς και το νόημα της similarity. Αυτό βάζει μέμα? Ωραία, άρα όσα layers βάζεται τόσα πιο πολλά hops βλέπετε μακριά. Αλλά δεν έχουμε πει τι είναι στο κουτί, τι είναι σε αυτό το ερωτηματικό. Ωραία, θα το δούμε το επόμενο. Εδώ είναι average, το κλασικό GCN κάνει average. Εδώ πέρα παίρνει αυτό, αυτό και αυτό, τα προσθέτει τα θηρύπτρια. Αυτό εδώ πέρα είναι ένα neural network πολύ απλό, έχει ένα πίνακα βαρών και απλά το αποτέλεσμα το average το πολλαπλασιάζει με ένα βαρών. Και βγαίνει το καινούργιο α. Αυτό είναι ένα GCN. Παίρνετε οι γείτονες, τα προσθέτετε, βγαίνετε με το αριθμό των γειτόνων, πολλαπλασιάζετε με ένα πίνακα βαρών και τελείωσε. Και μετά αυτό το κάνετε όσο χωρίς θέλετε στο output αυτού του νου βάζετε άλλο από πάνω. Και άλλο και άλλο και άλλο και στα κάρεται. Και όσο πιο πολύ στα κάρεται, τόσο πιο πολλά hops βλέπετε. Αυτά είναι τα μαθηματικά του. Ωραία, άμα θέλω να βγάλω το embedding του V στο StepCup. Άρα στο αυτό έχω στα κάρε κάπε layers. Το V0 είναι το αρχικό. Το πρώτο πρώτο αυτό που κάνει ο rando μπλιμίσα αλλάζει ξέρω εγώ για να ξεκινήσω να κάνω εκπαίδευση. Αυτό είναι το XV. Το ZV είναι αυτό που θέλω να πάρω σαν output. Το embedding του V στο καπαϊωστό layer. Αυτό είναι ένα activation function ό,τι θέλετε. Συνήθως είναι ReLU. Το WK είναι ο πίνακας βαρών που είπα. Άρα το WK είναι αυτό που υπάρχει σε αυτό το κουτάκι. Όπως αντίστοιχα είναι και το WK. Γιατί έχουμε τα WK και WK? Γιατί στιγμή αν βρείτε εδώ μαζεύω τα U για τη γειτονία του W. Άρα πάω και μαζεύω όλους τους κόμβους οι οποίοι είναι γείτονες του W. Τι κάνω θα προσθέτω. Αλλά το προηγούμενο layer είμαι στο K-1. Άρα πάω και κάνω όλες τις προηγούμενες αναπαραστάσεις των γειτόνων του W. Άρα μάλλον όλες τις προηγούμενες αναπαραστάσεις των γειτόνων του B. Το Ά και το Σ. Τα προσθέτω, διαιρώνω το 2 γιατί είναι 2. Άρα αυτό εδώ είναι 2 plus προσθέτω. Αυτό είναι ο εαυτός μας. Είναι το H του W στο προηγούμενο layer. Είναι δηλαδή ο W. Είναι σαν να είχαμε εδώ πέρα στον β. Ένα ακόμα βελάκι όπου μαζεύει τον εαυτό του. Είναι πέρα β. Απλά, εδώ η εξίσωση μας το δείχνει με ένα ξεχωριστό βάρος. Συνήθως, άμα το δείτε σε κώδικα, πάτε και προσθέτετε στο γράφο ο self-lux από πριν. Βάζετε στον εαυτό σας όλους που όμως μια κμήσμα είναι αυτό του. Οπότε αυτό μπορεί να το πετάξετε. Γιατί αυτός μας θα είναι στην κοιτονιά μας. Άρα το πάρουμε έτσι βέβαιος. Και αυτό ήταν ένα αντισίδιο. Ερώτηση. Απλό δεν είναι. Γιατί, πες μου, ναι. Το κάθε λέει, δηλαδή είναι και ένας κόμπος, όχι? Κάθε μία λέει είναι αυτή η εξίσωση. Αλλά ναι, θεωρητικά, ο W ξεκινάει με το X του W. Άμα περάσεις το layer 1, θα βγει το H του W 1. Άμα περάσεις το άλλο layer, είναι άλλο embedding. Ναι, κάθε φορά που περνάς ένα layer από πάνω, αυτό αλλάζει. Το W, το embedding αλλάζει. Λογικό είναι, γιατί κάνεις όλο αυτό την εξίσωση. Κάτι άλλο? Τι σημασία με είναι τα ιαρική την γραφή? Ναι, γιατί αλλάζει αυτό. Αλλά ή το νιώσεις. Κάποιοι όμως, ανάλογα με τον direction, χρησιμοποιούν να λέει ο βάρος. Γιατί, τι σου λέει, ο κόμπος W συμπεριφέρεται διαφορετικά στο γράφο όταν είναι παιδί και διαφορετικά όταν είναι πατέρας. Άρα, όταν το βλέπεις σαν παιδί, όταν μαζεύεις το embedding του από την εγγύη του κάποιου ελληνικού, είναι γείτονας κάποιου ελληνικού, το μπορείς να προσθέσεις με τον W κάποτε από τους παιδιών. Όταν είναι πατέρας, όταν θες να τον υπολογίσεις δηλαδή, βάζεις ένα άλλο πίνακα για να έχεις την διαφοροποίηση. Αλλά κατά τα άλλα δεν αλλάζει κάτι, το μόνο παλάζει όταν κάνεις direction στην γειτονιά. Είναι, δηλαδή, το τι μαζεύεις. Γενικά, είναι full απλό, μαζεύεις τους γείτονες, average, ένα πίνακα plus τον εαυτό σου. Enactivation function και βγήκε το embedding του επόμενου laser. Ωραία. Θα μας κάνει κάτι να βγαίνουμε για να περάσουμε 15 λεπτά και να συνεχίσουμε. Λέω να σου πω πόσο εύκολο είναι η εξαγωγή πληροφορίας από μια αυτοτυπία. Αν έχεις εγκαιδεύσει ένα μοντέλο να ανοιχνεύει λέξεις. Ροσιάρ δηλαδή. Φωτογραφία δεν θα κάνεις βασικά, όχι φωτογραφία, πρέπει να τις βάζεις φωτογραφία. Ναι, να δεις τι τζίξω εγώ και να το σπάσεις στα bytes. Ναι, να χωράω πολλά μοντέλα γενικά. Αν ψάξεις στο GitHub και η Google έχει έτοιμα, δηλαδή έχει κάτι στην Google που αναγνωρίζει που είναι αγκείδες. Άρα βγάζει φωτογραφία πληροφορίας από το αυτοκίνητο και σου κάνει εξαγωγή τον αριθμό. Το οποίο είναι έτοιμο, δεν το κάνεις σε import και μπορείς να το δοκιμάσεις. Πόσο πιο περίπληκη μπορεί να είναι η πληροφορία, για παράδειγμα μπορεί ένα έγγραφο κυβερνητικό, ας πούμε. Είναι εξατάτευτος θέλεις να βρεις. Για παράδειγμα, άμα πας σε legal documents ή σε εξαγορές εταιρεών, θέλεις σίγουρα να μαζεύσεις το ποια εταιρεία είναι, ποια εταιρεία εξαγοράστηκε. Οπότε δεν είναι μόνο εξαγωγή, πρέπει να κάνεις πρώτα εξαγωγή και μετά να κάνεις, δηλαδή να πάρεις το έγγραφο, να κάνεις επειδή είναι έγγραφο και μια φωτογραφία, να κάνεις extract όλο το κείμενο. Άρα να το κάνεις text. Και μετά πάνω στο text μπορείς να κάνεις ό,τι θέλεις, μπορείς να κάνεις name and recognition. Άρα στην ουσία είναι δύο κομμάτια. Ένα να πάρεις το κείμενο από τη φωτογραφία, και ένα άλλο βήμα να περάσεις από πάνω ένα μοντέλο που κάνει name and recognition, όπου αυτό στην ουσία είναι ένα task, το έχετε δει ή όχι. Στην ουσία το name and recognition το εκπαιδεύεις να σου κάνει extract named entities. Named entities μπορεί να είναι ένας άνθρωπος, μια εταιρεία, ένα σχολείο, ένα πανεμιστήριο. Ένα entity είναι το οποίο έχει κάποια απόσταση. Ένα κτίριο, ένα πάρκο, οπότε είναι δύο task. Ένα να κάνεις OCR, να βγάλεις όλο το text, και ένα άλλο να εκπαιδεύσεις ένα άλλο μοντέλο πάνω στο κείμενο για να βγάζει αυτό που θέλεις. Ποιος θα ξαγόρασε ποιον. Κατευθείαν να το βγάλει και να σου πει κατευθείαν αυτό νομίζω ότι γίνεται. Θέλεις δύο text. Όχι, αλλά ότι γίνεται. Είναι μια ωραία ιδέα, αλλά τώρα δεν ξέρω όσοι αν το ξανακάνε. Δεν ξέρω πόσο δύσκολα είναι. Είναι πως το computer vision του είμαστε πρόσφυση. Ναι, αν θες να πάρεις από τη φιλοτυπία το τι γράφει είναι computer vision. Δεν ξέρω τις τεχνικές, αλλά ξέρω να σου πω ότι μετά με new identity, recognition, μπορείς να κάνεις extract or things. Εκπαιδεύεις να λέγεις, πρέπει να έχεις την data. Πρέπει να έχεις έγγραφα. Πολλά. Υποφέτω. Αν και με τον άλλον διδακτορικό, τον Δημήτρη, νομίζω. Το Δημήτρη βέβαια το θα με κάνει κιόλας. Α, νομίζω με κάνει τραντισφόρμες νομίζω με αυτό. Κάπου είχε αναγνωθεί ότι πλέον είναι εξαιρετικά εύκολο και γρήγορο να εκπαιδεύσεις ένα βδίκτυο, ένα AI, να αναγνωρίζει τα entities και να κάνει διασταύρωση. Ναι, ναι. Εύκολο είναι. Απλά θέλεις το κείμενο για να το κάνεις. Για να βάλεις το κείμενο πρέπει να κάνεις πρώτα OCR στην εικόνα. Αν τότε θέλεις να το κάνεις σαν pre-project θα σου έλεγα να πάρεις μια έτοιμη βιβλιοθήκη από την Google που κάνει OCR, να του δίνεις τη φωτογραφία σου να σου βγάζει το κείμενο και μετά εσύ να κοδεύεις έναν δικό σου μοντέλο να κάνει entity, recognition. Σε περίπτωση που η φωτοτυπή είναι μικτό, είναι μικτό έγγραφο, για παράδειγμα έχει και standardized χαρακτήρες και χειρόγραφος. Άμα δεν ξέρω. Ίσως θέλει κάτι άλλο, ίσως φαντάζουμε ότι υπάρχουν και εφαρτικά μοντέλα. Δηλαδή φαντάζουμε ένα έγγραφο που έχει σε κείμενο κάτι άλλο, δηλαδή πάντα σε παφάνει τη σφραγίδα και την υπογραφή. Κατάλαβα. Είμαι σίγουρος ότι θα υπάρχουν μοντέλα που κάνουν χειρόγραφο και type. Τώρα για μην την πρότρεψε και την αργά βέβαια, γιατί έχουμε είδη επιλέγεις. Όχι, δεν είναι. Κι άμα μια ιδέα έρα που κάνανε από την ASOE, σε συνεργασία με την DeepMind, που είναι της Google, κάνανε αυτό ακριβώς το πράγμα, αλλά το κάνανε σε αρχαία. Έπαιρνε στις πλάκες, το βγάζανε από τη φωτογραφία, και διότι αυτές τις πλάκες ήταν καταστραμένες έλειπτε κάθε κείμενο. Και έκαναν συμπλήρωση. Και έκαναν extract το κείμενο και χειρόγραφο, οπότε ήρθα και να σου ξημεύσει. Οπότε έκαναν extract το χειρόγραφο κείμενο και μετά συμπληρώνανε. Ή είχες φορτωμένη τη γραμματική και το συντακτικό και μάθευε. Ή είχες εκπαιδεύσει ένα language model, ας πούμε, σαν ένα bird, να σου κάνει predict. Αλλά πάντως είχες εκπαιδεύσει σε αρχαία. Ουφ, αυτό είναι λίγο πιο βαρύ. Οπότε μάλλον είχαν κάποια γραμματική, η οποία στο λόγι, ξέρω εγώ, μάθει να δώσει τη λέξη λογικά και πηγαίνει. Αλλά είναι τέτοιες ενδιαφέροντες, είναι δυνατά. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ. Αυτό είναι λίγο πιο βαρύ.