Κυριακή, Νοεμβρίου 04, 2007

Tlearn και δυαδική πρόσθεση

Α)Η απλούστερη περίπτωση πρόσθεσης στο tlearn είναι ο ακόλουθος δυαδικός αθροιστής 2 ψηφίων. Έχουμε δύο προσθεταίους 1 bit ο καθένας (είσοδοι i1,i2) και 2 bit εξόδου για το δυαδικό άθροισμα (5,6)

Στο αρχείο ba.cf ορίζουμε ένα δίκτυο με 2 κόμβους-εισόδους και 6 κόμβους από τους οποίους 2 είναι έξοδοι (οι i1,i2 είναι είσοδοι, οι 1,2,3,4 το κρυφό επίπεδο , και οι 5,6 έξοδοι). Ακόμα ορίζουμε τις συνδέσεις (οι 1,2,3,4 παίρνουν είσοδο από τους i1,i2 και οι 5,6 από τους 1,2,3,4). Τέλος ορίζουμε μέγιστο βάρος για την αρχική - αυθαίρετη κατανομή των βαρών και σαν επιλεγμένους τους κόμβους εξόδου για να τυπώνεται η τιμή τους.

Στο αρχείο ba.data δίνουμε έναν πίνακα με τους συνδιασμούς των πιθανών τιμών εισόδου και στο ba.teach τις επιθυμητές - σωστές απαντήσεις πάλι σε μορφή πίνακα αντίστοιχα.




Μετά από την εκπαίδευση το δίκτυο κάνει σωστά την πρόσθεση όπως φαίνεται στις παρακάτω εικόνες:







Τα γκριζα τετράγωνα είναι 0 και τα λευκά 1
Η πάνω-πάνω γραμμή είναι η έξοδος και η κάτω-κάτω η είσοδος
οι απόλυτοι αριθμοί για τις τιμές των εξόδων είναι :

Node 5 & 6 activities
using ba-6000.wts and ba.data (Training Set)
0.001 0.108
0.021 0.902
0.048 0.905
0.948 0.071
για τις τιμές εισόδου:
0 0
0 1
1 0
1 1
αντίστοιχα.
παρατηρούμε ότι υπάρχει σχετική απόκλιση από τις ακριβείς τιμές που θα έπρεπε να ήταν :
0 0
0 1
0 1
1 0

παρακάτω τα βάρη που κατέληξε η διαδικασία μάθησης

NETWORK CONFIGURED BY TLEARN
# weights after 6000 sweeps
# WEIGHTS
# TO NODE 1
0.0000000000
2.9818105698
-6.0779738426
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
# TO NODE 2
0.0000000000
6.1313815117
-2.9242992401
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
# TO NODE 3
0.0000000000
-4.4514608383
-4.7775363922
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
# TO NODE 4
0.0000000000
-2.5334775448
1.1163078547
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
0.0000000000
# TO NODE 5
0.0000000000
0.0000000000
0.0000000000
-7.2919034958
4.4269704819
-5.9890913963
-5.3023133278
0.0000000000
0.0000000000
# TO NODE 6
0.0000000000
0.0000000000
0.0000000000
6.0124821663
-3.6080329418
-9.9171791077
3.2884705067
0.0000000000
0.0000000000


Β)Κάποιος θα μπορούσε να αναλύσει - σχεδιάσει ένα δίκτυο - δυαδικό αθροιστή και να καθορίσει τα βάρη ως εξής :

έχουμε δύο προσθεταίους a0, b0 και δύο ψηφία εξόδου e0,e1 και 4 καταστάσεις τις : 00, 01, 10, 11 που συνδέονται ως εξής



e0=(a0-b0)+(-a0+b0)
e1=(0.5*a0+0.5*b0)
Υποθέτουμε κατώφλι 0.9 (για να μην ενεργοποιηθεί η ενδιάμεση 11 στις περιπτώσεις εισόδου 01,10 όπου φτάνει ερέθισμα 0.5)
Η λογική είναι ότι το e0 γίνετε 1 όταν προκύψουν οι καταστάσεις 01, 10 και το e1 όταν προκύψει η κατάσταση 11 όπου το e0 πρέπει να γίνει 0. Η κατάσταση 00 αφήνει την έξοδο ανεπηρέαστη σε 00

Επεκτείνωντας τη λογική μπορεί κανείς να χτίσει έναν αθροιστή n bit ως εξής
το ψηφίο e0 πάντα θα εξαρτάται μόνο από τα a0,b0
το e1 θα εξαρτάται από τα a0,b0 (με συντελεστή 0,5) και τα a1,b1
το e2 από τα a1,b1 και τα a1,b1
...
το en+1 από τα an,bn


Γ)Ορισμένα ερωτήματα και σκέψεις:

Μπορούν για το ίδιο δίκτυο να υπάρχουν διαφορετικά configurations στα βάρη που να δίνουν ΑΚΡΙΒΩΣ τις ίδιες τιμές εξόδου;

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

Σχετικά με το δίκτυο για τα πρόσωπα: Θέλουμε ένα δίκτυο που να του βάζεις μια photo και να λέει "α ΄να! είναι ο γιάννης και η μαρία και ο κώστας στο βάθος!";

2 σχόλια:

amalia είπε...

Χμ... Είτε τα διαβάζω στα αγγλικά, είτε στη σουαχίλι, είτε στα σανσκριτικά, είτε τελικά στα ελληνικά... το ίδιο κινέζικα μου μοιάζουν αυτά τα συνδετιστικά μοντέλα - συστήματα!!!

Ευχαριστούμε πάντως Kev ;-)

Shipwrecked Frontier Pioneer είπε...

Μπράβο kav, μόλις επιτάχυνες την κατανόηση των συνδετιστικών μοντέλων για όλους.

Δεν ξέρω για τους υπόλοιπους, αλλά εγώ τα αναγνώσματα αυτής της βδομάδας τα διαβάζω με τρομερή όρεξη και ενθουσιασμό! Μάλλον είναι επειδή αναφέρονται περισσότερο σε υπολογιστές απ'ότι στο νου. Έχουμε και το tlearn και μου αρέσει να παίζω με κουμπάκια... :D