Classification με την ml5.js (1/5)

Σε αυτό το tutorial θα επιχειρήσουμε να λύσουμε ένα πρόβλημα ταξινόμησης (classification) με τη χρήση του machine learning. 

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

Εδώ βλέπουμε μια δοκιμή του προγράμματος με δύο νότες, την Nτο (C) και τη Ρε (D).

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

Θα μπορούσαμε να λύσουμε το παραπάνω πρόβλημα χωρίς τη χρήση του ML , δημιουργώντας μια σειρά από if statements, όμως εμείς θέλουμε να χρησιμοποιήσουμε το ML. Αντί δηλαδή να κατασκευάσουμε τον δικό μας αλγόριθμό θα πούμε στο πρόγραμμα μας: ορίστε τα δεδομένα ως παράδειγμα, εκπαιδεύσου από αυτά και όταν στο ζητήσω κάνε μου την πρόβλεψη.

Οπότε, τα βήματα που θα χτίσουμε στο πρόγραμμά μας είναι τα εξής:

  • Συλλογή δεδομένων
  • Εκπαίδευση μοντέλου
  • Πρόβλεψη

Το νευρωνικό δίκτυο από ψηλά

Με τα παραπάνω λοιπόν δεδομένα, το nn που θα στήσουμε μοιάζει κάπως έτσι

Υπάρχουν δύο (2) είσοδοι input0 και input1 (mouseX και mouseY αντίστοιχα) και εφτά (7) έξοδοι, μια για την κάθε νότα.

Όλη η μαγεία φυσικά συμβαίνει μέσα στον κύκλο , εκεί που αναλαμβάνει η ml5 να παραμετροποιήσει όλες τις πτυχές ενός feedforward neural network και να μας το παρέχει για να κάνουμε την εκπαίδευση και τις προβλέψεις μας.

Εσωτερικά το nn μας μοιάζει κάπως έτσι

Όπως θα παρατηρήσατε, το αποτέλεσμα σε κάθε έξοδο είναι ένας αριθμός ο οποίος αντιπροσωπεύει το ποσοστό σιγουριάς (confidence score) για την κάθε νότα. Στο σύνολο τους και οι εφτά έξοδοι δίνουν το 100%. Στην πραγματικότητα οι αριθμοί αυτοί κυμαίνονται από το 0 έως το 1 και όχι από το 0 εως 100. 

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