Joone (Java Object Oriented Neural Engine)

Introduzione alle reti neurali con un progetto Open Sourcedi

Reti Neurali e Intelligenza Artificiale: Introduzione al progetto Open Source Joone (Joone Object Oriented Neural Engine).

Introduzione

In questo articolo verrà  affrontato un argomento molto complesso ma anche molto affascinante: le Reti Neurali. Dopo una breve introduzione teorica sulle reti neurali, passerò ad illustrare un prodotto Open Source (Joone) con un piccolo esempio.

Reti Neurali Artificiali

Una rete neurale (vedere fig. 1) è composta da elementi di elaborazione (Neuroni) connessi tra di loro tramite collegamenti (Sinapsi), in modo da formare uno schema assimilabile ad un semplicissimo tessuto nervoso. I neuroni sono raggruppati in strati successivi (Layers), nei quali ogni neurone riceve il segnale esclusivamente dai neuroni dello strato precedente (rete neurale feed-forward).

Figura 1 â?? Esempio di rete neurale

Ogni Neurone, attraverso le connessioni (W1, W2, ...Wn), riceve in ingresso il segnale da tutti i neuroni dello strato precedente (I1, I2,...In). Gli input, cosଠpesati, vengono sommati e al risultato finale (l‘input netto) viene applicata una funzione di trasferimento. Il valore di output cosଠcalcolato (Y) viene presentato in ingresso ai neuroni dello strato successivo... e cosଠvia (figura 2).


Figura 2 â?? Esempio di neurone

Come lavora una rete neurale?

Per prima cosa si deve istruire la rete neurale attraverso una fase di apprendimento, ossia:

  • Fornire i dati alla rete
  • La rete calcola un risultato
  • La rete confronta il risultato ottenuto con il valore desiderato
  • La rete introduce dei pesi per correggere l‘errore


Figura 3 â?? Fase di apprendimento

successivamente, si potrà  utilizzare la rete neurale, ossia:

  1. Fornire nuovi dati alla rete
  2. La rete calcola il risultato in base alla conoscenza ottenuta nel passo precedente.

Le caratteristiche principali di una rete neurale addestrata sono le seguenti:

Categorizzazione

Una rete neurale è in grado di classificare gli esempi in ingresso (patterns) "estraendo" le caratteristiche peculiari dai dati usati per il training

Generalizzazione

Una rete neurale è in grado di fornire risposte corrette anche con dati di ingresso diversi rispetto a quelli usati per il training

Robustezza

Una rete neurale è in grado di fornire comunque una risposta corretta anche in presenza di dati incompleti o parzialmente errati

I campi di applicazione delle reti neurali sono i più svariati, ad esempio:

Classificazione

Diagnosi mediche, riconoscimento del testo (OCR), riconoscimento vocale, strumenti di anti-spam per e-mail, ecc.

Approssimazione di funzioni

Controllo dei processi, data modeling, ecc.

Predizione di serie temporali

Previsione andamento dei mercati finanziari, Analisi di portafoglio, ecc.

Data Mining

Visualizzazione ed estrazione di dati, ecc.

Il progetto Joone

Joone (http://www.joone.org/) è un framework scritto in Java che serve a scrivere ed eseguire applicazioni di Intelligenza Artificiale basate sulle reti neurali.
Le applicazioni che utilizzano Joone possono essere disegnate su una singola macchina, istruite utilizzando una rete distribuita ed eseguite su qualsiasi altro device che supporta java.
Joone è realizzato con un‘architettura modulare; i moduli principali di Joone sono:

  • Un core engine che espone API Java per la costruzione di reti neurali embedded in altre applicazioni
  • Un editor visuale per la creazione, addestramento e test di reti neurali attraverso un‘interfaccia grafica user-friendly
  • Un ambiente di training distribuito basato su tecnologia Jini, con il quale è possibile addestrare in parallelo diverse reti neurali su di un numero illimitato di macchine connesse in LAN

Installazione di Joone

Joone è 100% java e può essere eseguito su un qualsiasi sistema operativo dotato di  Java Runtime Environment (JRE) versione 1.4.x o superiore. Attualmente il progetto è testato sui seguenti sistemi operativi:

  • Linux
  • Mac OSX
  • Windows 2000
  • Windows XP
  • SUN Solaris

La memoria necessaria a far funzionare Joone è strettamente legata alla complessità  della rete neurale (minimo 128 MB).

Su Linux è meglio utilizzare il file ZIP in quanto il file di setup JooneEditor1.2.1-Linux-NoVM.bin non funziona in modo corretto:

# unzip JooneEditor1.2.1-All.zip

Su Windows:

Lanciare il file "JooneEditor1.2.1-Win-NoVM.exe" (figura 4)


Figura 4 â?? Esecuzione di  JooneEditor1.2.1-Win-NoVM.exe

Premere il pulsante Next fino alla fine e per ultima il pulsante "Done" (figura 5)


Figura 5 â?? Fine Installazione di Joone

Esempio: calcolo della funzione XOR

Come esempio utilizzeremo Joone e le reti Neurali per il calcolo della funzione XOR.
Per prima cosa rivediamo la tabella dello XOR:

Input 1 Input 2 Output
0  0  0
0  1  1
1  0  1
1  1  0

La rete neurale che si dovrà  implemetare è quella rappresentata in figura 6:


Figura 6 â?? Rete Neurale XOR

Aprire l‘editor di Joone, su linux:

# cd joone/
# ./RunEditor.sh

Su Windows fare doppio clic sull‘icona "Joone".

Appare la seguente finestra (figura 7):


Figura 7 â?? Editor Joone

Aggiungere un sigmoid layer e impostare come nome "Input" e come parametro rows 2;

Aggiungere un sigmoid layer e impostare come nome "Hidden" e come parametro rows 3;

Aggiungere un sigmoid layer e impostare come nome "Output" e come parametro rows 1;

Connettere l‘input layer con l‘hidden layer trascinando una linea dal cerchio blu del bordo destro dell‘input layer, rilasciare il mouse sopra l‘hidden layer;

Ripetere  per collegare l‘hidden layer all‘output layer.

Il risultato dovrebbe essere quello di figura 8.


Figura 8 â?? Input, Hidden, Output Layers

Inserire un "File Input layer" alla sinistra dell‘input layer e collegarlo all‘Input Layer come in figura 9.


Figura 9 â?? File Input Layer 1

Cambiare le impostazioni al "File Input layer"nel modo seguente (figura 10):

Impostare il parametro AdvancedColumnSelector a 1,2

Impostare il parametro "fileName parameter" scegliendo il file xor.txt

Lasciare il parametro firstRow a 1 ed il parametro lastRow a 0 (zero vuol dire che il File Input Layer leggerà  tutto il files).


Figura 10 â?? File Input Layer 1 Properties

Adesso dobbiamo inserire un Teacher layer alla destra dell‘output layer.
 Collegare l‘output layer al Teacher layer (figura 11).


Figura 11 â?? Teacher Layer

Adesso dobbiamo fornire i dati per istruire la rete (ossia l‘ultima colonna del file xor.txt).
Inserire un File Input layer sopra al Teacher layer, collegare il Teacher Layer al File Input Layer come in figura 12:


Figura 12 â?? File Input Layer 2

Cambiare le impostazioni al "File Input layer"nel modo seguente (figura 13):
Impostare il parametro AdvancedColumnSelector a 3
Impotare il parametro "fileName parameter" scegliendo il file xor.txt
Lasciare il parametro firstRow a 1 ed il pametro lastRow a 0 (zero vuol dire che il File Input Layer leggerà  tutto il file).


Figura 13 â?? File Input Layer 2 Properties

Aprire adesso la Finestra Tools e scegliere Control Panel (Figura 14).


Figura 14 â?? Control Panel 1

Impostare i seguenti parametri:
Parametro epochs a 10000 (il file verrà  letto 10000 volte)
Parametro "training patterns" a 4 (numero di righe dell‘esempio)
Parametro learningRate a 0.8
Parametro momentum a 0.3
Parametro learning a TRUE (perchè la rete deve essere istruita)

Premere il pulsante Run per dar inizio al processo di apprendimento della rete.
Attendere la fine dell‘esecuzione, verificare che l‘errore (RMSE) dovrà  essere un numero molto piccolo inferiore a 0.1.
Se fosse più grande, allora andare sulla voce di menu Tools, scegliere Randomize e poi premere di nuovo il pulsante Run


Figura 15 â?? Control Panel 2

A questo punto la rete è istruita ed è possibile salvare i dati della rete per poi ricaricarli successivamente andando sull‘opzione File e poi Save as.

Vediamo se  la rete neurale ha imparato correttamente verificandone il risultato.
Aggiungere un File Output Layer come in figura 16.


Figura 16 â?? File Output Layer

Impostare le proprietà  nel modo seguente (figura 17):
Parametro fileName con /tmp/xorout.txt


Figura 17 â?? File Output Layer

Disabilitare il Teacher Layer modificando le sue Properties (figura 18).


Figura 18 â?? Teacher Disabled

La rete neurale dovrebbe essere come in figura 19:


Figura 19 â?? Layers

Aprire adesso la Finestra Tools --> Control Panel (Figura 20).


Figura 20 â?? Control Panel 3

Modificare solo i seguenti parametri:
Parametro epochs a 1 (il file verrà  letto una sola volta)
Parametro learning a FALSE (non è più una fase di apprendimento)

Premere il pulsante Run.

Verrà  scritto il file /tmp/xorout.txt. Il contenuto del file sarà  simile al seguente:


#cat /tmp/xorout.txt
0.009558925072561689
0.9913854170900274
0.9912069173284735
0.008018880123792496

Questo risultato mostra come la rete neurale ha correttamente imparato il problema dello XOR, fornendo i valori corretti:

  •  un valore vicino allo zero per le colonne di input [0, 0] e [1, 1]
  •  un valore vicino ad 1 per le colonne di input [0, 1] e [1, 0]


Conclusioni

In questo articolo è stata fatta un‘introduzione teorica sulle reti neurali e sul progetto Open Source Joone che permette di sperimentare ed apprendere meglio questa materia.
Per chi volesse sperimentare un filtro Anti-Spam con Joone, è possibile scaricare i files necessari direttamente dal sito http://www.jugroma.it/jug/gen2006/joone/

Contenuto del file ZIP

Il file joone_esempio.zip (menu in alto a sinistra) contiene i seguenti files:

  • xor.ser: il progetto di Joone
  • xor.txt: il file di input
  • xorout.txt: il file di output per verificare il risultato

Riferimenti

[1] Paolo Marrone, "Joone Complete Guide", JooneCompleteGuide.pdf, 03/02/2005
[2] Paolo Marrone, "JOONE, un framework Open Source per l‘utilizzo delle Reti Neurali Artificiali in Java", mi28_p6_marrone.pdf, Javaconference 2006
[3] Paolo Marrone, "The Core Engine", engine.pdf, 2004
[4] Paolo Marrone, "The GUI Editor", guiEditor.pdf, 2004
[5] Wiki, http://www.jooneworld.com/wiki

Risorse

[1] JDK 1.4.2, http://java.sun.com/j2se/1.4.2/download.html
[2] Progetto, http://sourceforge.net/projects/joone
[3] Joone 1.2.1, http://www.joone.org/
[4] Esempio dell‘articolo, joone_esempio.zip (menu in alto a sinistra)

Condividi

Pubblicato nel numero
113 dicembre 2006
Marco Ratto ha conseguito la laurea in Scienze dell‘Informazione nel 1999 presso la Facoltà di Scienze Matematiche Fisiche e Naturali dell‘Università degli Studi di Torino con la realizzazione della tesi ‘‘Accesso remoto ad un servizio di creazione di un orario: autenticazione dell‘utente in ambiente Java‘‘ . Dal 1994 ha iniziato…
Ti potrebbe interessare anche