Kyriakos D. Katsaras

Principal Software Architect | AI & CS Educator | IT Strategy Expert

Mail me : kyriakos@kkatsaras.gr
LinkedIn : Link me

Member of

artificial stupidity

Όλοι μιλούν για Artificial Intelligence, αλλά κανείς για Artificial Stupidity

Εισαγωγικά…

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

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

Μετά από πολλά στον χώρο της ανάπτυξης λογισμικού και 22+ εκπαίδευσης στον προγραμματισμό, έχω παρατηρήσει κάτι πολύ συγκεκριμένο στους νέους developers και στους μαθητές που κάνουν τα πρώτα τους σοβαρά βήματα στον κώδικα. Πολλοί πιστεύουν ότι ο τελικός στόχος ενός προγράμματος είναι η απόλυτη τελειότητα.

Να μην κάνει λάθη. Να βρίσκει πάντα τη σωστή απάντηση. Να επιλέγει πάντα την καλύτερη κίνηση. Να λειτουργεί υπολογιστικά άψογα.

Αυτό ακούγεται σωστό. Αλλά δεν είναι πάντα.

Η τελειότητα δεν είναι πάντα καλό προϊόν

Στον προγραμματισμό υπάρχει μια μεγάλη παγίδα: να μπερδέψουμε το τεχνικά σωστό με το ανθρώπινα χρήσιμο.

Ένας αλγόριθμος μπορεί να είναι μαθηματικά άψογος και ταυτόχρονα να δημιουργεί μια απαίσια εμπειρία χρήστη. Αυτό φαίνεται πολύ καθαρά στα παιχνίδια.

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

Και Το αποτέλεσμα είναι οτι ο χρήστης σταματά να ασχολειται με το συγκεκριμένο game.

Αυτό είναι ένα πολύ σημαντικό μάθημα για τους νέους προγραμματιστές. Στην πραγματική ανάπτυξη λογισμικού, ειδικά όταν μιλάμε για interactive εφαρμογές, παιχνίδια, εκπαιδευτικά εργαλεία και user experience, η απόλυτη τελειότητα δεν είναι πάντα ο στόχος.

Κάποιες φορές, για να φτιάξεις ένα πραγματικά καλό προϊόν, πρέπει να σχεδιάσεις έξυπνα την ατέλεια.

Τι είναι η Artificial Stupidity

Η έννοια της Artificial Stupidity(AS), ή αλλιώς «Τεχνητή Βλακεία», ακούγεται αρχικά σαν αστείο. Στην πραγματικότητα όμως είναι ένα εξαιρετικά σοβαρό θέμα στο game design και στην ανάπτυξη έξυπνων συστημάτων.

Artificial Stupidity δεν σημαίνει ότι το σύστημα παίζει τυχαία ή ότι ο αλγόριθμος είναι κακογραμμένος ή το bot είναι χαλασμένο. Σημαίνει ότι η μηχανή έχει σχεδιαστεί ώστε να μην είναι πάντα τέλεια, με ελεγχόμενο και έξυπνο τρόπο.

Προφανώς δεν υλοποιήθηκε για να κάνει ανοησίες. Ο στόχος είναι να συμπεριφέρεται με τρόπο που κάνει την εμπειρία πιο ανθρώπινη, πιο ενδιαφέρουσα και πιο απολαυστική για ένα και μόνο σκοπό…

Να μην τα παρατήσει ο gamer

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

Αυτό όμως πρέπει να γίνει με κανόνες. Αν το bot παίζει απλώς τυχαία, τότε δεν έχουμε Artificial Stupidity. Έχουμε κακό AI.

Η σωστή Artificial Stupidity χρειάζεται καλό σχεδιασμό, περιορισμούς, guardrails και καθαρή κατανόηση του τι κάνει το παιχνίδι διασκεδαστικό.

Γιατί επέλεξα το Tic Tac Toe

Για να διδάξω αυτή την ιδέα σε μαθητές, φοιτητές και νέους developers, ήθελα ένα παράδειγμα απλό στην επιφάνεια αλλά αρκετά δυνατό κάτω από το καπό.

Έτσι αποφάσισα να χτίσω ένα εκπαιδευτικό project βασισμένο στο πιο απλό παιχνίδι που γνωρίζουν σχεδόν όλοι: την τρίλιζα.

Το project ονομάζεται Educational Tic Tac Toe AI και είναι διαθέσιμο ως open source repository στο GitHub:

https://github.com/DomiXLogic/Educational-Tic-Tac-Toe-AI

Η κλασική τρίλιζα σε ταμπλό 3×3 είναι ένα πλήρως λυμένο παιχνίδι. Αυτό σημαίνει ότι αν γράψεις έναν τέλειο αλγόριθμο, το παιχνίδι θα καταλήγει σχεδόν πάντα σε μια βαρετή ισοπαλία.

Για εκπαιδευτικούς λόγους, αυτό είναι πολύ περιοριστικό. Οπότε πήρα την ιδέα της τρίλιζας και την ανέβασα αρκετά επίπεδα.

tik tac toe 10x10

Από την απλή τρίλιζα σε ένα πιο σύνθετο AI πρόβλημα

Αντί για το κλασικό 3×3 ταμπλό, το project χρησιμοποιεί ένα μεγαλύτερο ταμπλό 10×10. Επιπλέον, ο παίκτης μπορεί να επιλέξει διαφορετικές συνθήκες νίκης: 4, 5 ή 6 συνεχόμενα σύμβολα στη σειρά. Αυτή η αλλαγή μεταμορφώνει πλήρως το πρόβλημα.

Ξαφνικά, ο αριθμός των πιθανών κινήσεων αυξάνεται δραματικά. Το state space γίνεται πολύ μεγαλύτερο. Ο υπολογιστής δεν μπορεί πλέον να αντιμετωπίσει το παιχνίδι σαν μια απλή σχολική άσκηση. Πρέπει να αξιολογήσει περισσότερα σενάρια. Να σκεφτεί περισσότερες πιθανότητες. Να διαχειριστεί μεγαλύτερη πολυπλοκότητα.

Αυτό δημιουργεί ένα πολύ καλό περιβάλλον για να διδάξεις έννοιες όπως:

  • αλγοριθμική σκέψη
  • αναζήτηση σε δέντρα αποφάσεων
  • game AI
  • υπολογιστική πολυπλοκότητα
  • performance monitoring
  • trade-offs ανάμεσα σε ακρίβεια και ταχύτητα

Με απλά λόγια, παίρνεις ένα παιχνίδι που όλοι καταλαβαίνουν και το μετατρέπεις σε ένα εργαστήριο Java Advanced και Τεχνητής Νοημοσύνης.

Οι δύο “AI” μηχανές του project

Για να γίνει η σύγκριση πιο ξεκάθαρη, το project περιλαμβάνει δύο διαφορετικές προσεγγίσεις, στον κλασικό αλγόριθμο Minimax και η δεύτερη βασίζεται στο Monte Carlo Tree Search

  1. Τι είναι ο Minimax.
    Ο Minimax είναι από τους πιο γνωστούς αλγορίθμους στα παιχνίδια δύο παικτών. Η λογική του είναι απλή στη θεωρία αλλά πολύ ισχυρή στην πράξη. Προσπαθεί να εξετάσει όλες τις πιθανές μελλοντικές κινήσεις και να επιλέξει εκείνη που οδηγεί στο καλύτερο δυνατό αποτέλεσμα.

    Με άλλα λόγια, είναι η λογική του «παίζω τέλεια».

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

  2. Τι είνια ο Monte Carlo Tree Search. (Wiki Link)
    Το Monte Carlo Tree Search δεν προσπαθεί απαραίτητα να υπολογίσει με απόλυτη ακρίβεια κάθε πιθανό μέλλον. Αντίθετα, βασίζεται σε προσομοιώσεις. Παίζει χιλιάδες πιθανές παρτίδες εσωτερικά, μέσα σε ελάχιστο χρόνο, και χρησιμοποιεί τα αποτελέσματα αυτών των προσομοιώσεων για να επιλέξει την πιο υποσχόμενη κίνηση.
    Ενα ενδιαφέρον κομμάτι για τον MCTS είναι οτι χρησιμοποιήθηκε απο την ομάδα του AlphaGo της Google το 2016 για να νικήσει στο παιχνιδι πρωτάθλημα Go. Οποιος θέλει μπορεί να ψαξει το story με search “MCTS Move 37“. Αξίζει τον κόπο!

Αυτό κάνει το project πολύ πιο ενδιαφέρον εκπαιδευτικά, γιατί οι μαθητές μπορούν να δουν δύο διαφορετικές φιλοσοφίες AI:

  • η μία βασίζεται στην εξαντλητική λογική
  • η άλλη βασίζεται στην πιθανότητα και στην προσομοίωση

Και κάπου εκεί μπαίνει το πιο ενδιαφέρον κομμάτι: η ελεγχόμενη ατέλεια.

Το slider της Artificial Stupidity

Αφού υλοποιήθηκε η Monte Carlo λογική, πρόσθεσα στο interface ένα slider με πέντε επίπεδα Artificial Stupidity. Όσο αυξάνεται το επίπεδο, ο αλγόριθμος σταματά να επιλέγει πάντα την καλύτερη δυνατή κίνηση. Αρχίζει να εισάγει ελεγχόμενη τυχαιότητα στις αποφάσεις του.  Όμως εδώ είναι το σημαντικό σημείο: ακόμα και στο υψηλότερο επίπεδο Artificial Stupidity, το bot δεν γίνεται χαζό με την κακή έννοια.

Διατηρεί βασικά tactical guardrails. Αν έχει άμεση κίνηση νίκης, θα την παίξει. Αν βλέπει ότι ο άνθρωπος μπορεί να κερδίσει στην επόμενη κίνηση, θα προσπαθήσει να τον μπλοκάρει. Δεν αγνοεί εντελώς το παιχνίδι.

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

Γιατί αυτό έχει σημασία στο game design

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

Αυτό δεν γίνεται επειδή οι developers δεν ξέρουν να γράψουν καλύτερο AI αλλά επειδή όπως καταλάβατε μέχρι τώρα…

…το τέλειο AI δεν είναι πάντα διασκεδαστικό!!!

Ο βάση παίκτης βάση ψυχολογίας χρειάζεται 3 πράγματα

  1. Ένταση, αλλά όχι απόγνωση.
  2. Πρόκληση, αλλά όχι να αισθάνεται αδικία.
  3. Να νιώθει ότι μπορεί να κερδίσει, ακόμα κι αν δυσκολεύεται.

Αυτό είναι ένα από τα πιο σημαντικά μαθήματα που μπορεί να πάρει ένας νέος developer: ο κώδικας δεν υπάρχει μόνο για να είναι σωστός. Υπάρχει για να εξυπηρετεί μια ανθρώπινη εμπειρία.

Το project ως εκπαιδευτικό εργαστήριο Java

Επειδή ο στόχος του project ήταν εκπαιδευτικός, δεν ήθελα να μείνω μόνο στην επιφάνεια του παιχνιδιού. Το project έχει χτιστεί σε Java και ακολουθεί αρχιτεκτονική Model View Controller. Αυτό βοηθά τους μαθητές να δουν πώς μπορεί να οργανωθεί ένα μεγαλύτερο desktop application με καθαρό διαχωρισμό ευθυνών.

Δεν ήθελα όμως οι μαθητές να βλέπουν μόνο τον κώδικα. Ήθελα να βλέπουν και τι συμβαίνει όταν ο κώδικας εκτελείται. Γι’ αυτό δημιουργήθηκε και ένα ξεχωριστό live telemetry παράθυρο, το Algorithm Monitor.

Όταν το AI σκέφτεται, το monitor εμφανίζει πληροφορίες σε πραγματικό χρόνο. Οι μαθητές μπορούν να δουν χρήση CPU, memory allocation, Java Heap και χρόνο απόφασης του αλγορίθμου σε milliseconds. Αυτό είναι εξαιρετικά σημαντικό στην εκπαίδευση. Οι έννοιες της απόδοσης, της πολυπλοκότητας και της κατανάλωσης πόρων δεν μένουν θεωρητικές. Γίνονται ορατές.

Όταν ο μαθητής ανεβάζει τη δυσκολία, μεγαλώνει το ταμπλό ή επιλέγει συνθήκη νίκης με 6 στη σειρά, βλέπει τον επεξεργαστή να δουλεύει πιο έντονα. Βλέπει το σύστημα να πιέζεται. Βλέπει τη σύνδεση ανάμεσα στον αλγόριθμο και το hardware.

Αυτό είναι πολύ πιο δυνατό από μια απλή θεωρητική εξήγηση στον πίνακα.

ai vs ai

PC εναντίον PC: όταν οι αλγόριθμοι παίζουν μεταξύ τους

Ένα ακόμα χαρακτηριστικό του project είναι το PC versus PC mode. Σε αυτό το mode, οι μαθητές μπορούν να βάλουν δύο AI μηχανές να παίξουν μεταξύ τους.

Για παράδειγμα, ένας Minimax bot μπορεί να παίξει απέναντι σε έναν Monte Carlo bot. Αυτό μετατρέπει το παιχνίδι σε ένα μικρό live πείραμα. Οι μαθητές μπορούν να παρατηρήσουν τις διαφορές στη συμπεριφορά, να συγκρίνουν στατιστικά, να δουν πώς αλλάζει το αποτέλεσμα όταν αλλάζουν οι παράμετροι και να καταλάβουν καλύτερα τα trade-offs κάθε προσέγγισης.

Δεν είναι απλώς ένα παιχνίδι. Είναι ένα εργαλείο παρατήρησης, σύγκρισης και κατανόησης.

Το σημαντικότερο μάθημα για τους νέους developers

Για εμένα, το πιο σημαντικό μήνυμα αυτού του project δεν είναι ούτε ο Minimax, ούτε το Monte Carlo Tree Search, ούτε η Java, ούτε το ταμπλό 10×10.

Το σημαντικότερο μήνυμα είναι ότι ο καλός developer δεν γράφει απλώς κώδικα που δουλεύει αλλά σχεδιάζει εμπειρίες για ανθρώπους.

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

Η Artificial Stupidity είναι ένας πολύ ωραίος τρόπος να διδάξεις αυτή την ιδέα. Δείχνει ότι…

Μερικές φορές η «έξυπνη ατέλεια» είναι καλύτερη από την άψυχη τελειότητα.

Open source πρόσκληση

Το Educational Tic Tac Toe AI είναι open source και διαθέσιμο στο GitHub. Αν είσαι εκπαιδευτικός, developer, φοιτητής ή απλώς σε ενδιαφέρει η Τεχνητή Νοημοσύνη στα παιχνίδια, μπορείς να δεις τον κώδικα, να τον τρέξεις, να τον αλλάξεις και να πειραματιστείς με τις ιδέες του project.

Μπορείς να βρεις το repository εδώ:

https://github.com/DomiXLogic/Educational-Tic-Tac-Toe-AI

Για εμένα, τέτοια projects θυμίζουν γιατί αγαπώ την εκπαίδευση και τον προγραμματισμό.

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

Και μερικές φορές, για να φτιάξεις κάτι πραγματικά έξυπνο, πρέπει να του επιτρέψεις να μην είναι τέλειο.

Social Time

Contact me

Θα χαρώ να εξυπηρετήσω σε οτιδήποτε σας απασχολεί… Ας γνωριστούμε κλείνοντας ένα τηλεφωνικό ραντεβού