Mokabyte

Dal 1996, architetture, metodologie, sviluppo software

  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Menu
  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Cerca
Chiudi

Nel numero:

113 dicembre
, anno 2006

Joone (Java Object Oriented Neural Engine)

Introduzione alle reti neurali con un progetto Open Source

Avatar

Marco Ratto

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 a lavorare come consulente nel settore IT e dal 2000 lavora come esperto di tecnologie J2EE ed Open Source in Banksiel per quanto riguarda il campo bancario/assicurativo e in Finsiel nel campo della Pubblica Amministrazione.

MokaByte

Joone (Java Object Oriented Neural Engine)

Introduzione alle reti neurali con un progetto Open Source

Marco Ratto

Marco Ratto

  • Questo articolo parla di: Intelligenza artificiale, Java

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)

 

 

 

Facebook
Twitter
LinkedIn
Avatar

Marco Ratto

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 a lavorare come consulente nel settore IT e dal 2000 lavora come esperto di tecnologie J2EE ed Open Source in Banksiel per quanto riguarda il campo bancario/assicurativo e in Finsiel nel campo della Pubblica Amministrazione.

Marco Ratto

Marco Ratto

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 a lavorare come consulente nel settore IT e dal 2000 lavora come esperto di tecnologie J2EE ed Open Source in Banksiel per quanto riguarda il campo bancario/assicurativo e in Finsiel nel campo della Pubblica Amministrazione.
Tutti gli articoli
Nello stesso numero
Loading...

Ant, la formica operosa che beve caffè

II parte

TikeSwing

I parte: introduzione al framework e al pattern MVC

Spring

III parte: Il supporto di Spring per l‘Aspect Oriented Programming

Le applicazioni web e Java

IV parte: Deployment di una applicazione web

Java e SMS

III parte: Comandi AT per il modem

Mokabyte

MokaByte è una rivista online nata nel 1996, dedicata alla comunità degli sviluppatori java.
La rivista tratta di vari argomenti, tra cui architetture enterprise e integrazione, metodologie di sviluppo lean/agile e aspetti sociali e culturali del web.

Imola Informatica

MokaByte è un marchio registrato da:
Imola Informatica S.P.A.
Via Selice 66/a 40026 Imola (BO)
C.F. e Iscriz. Registro imprese BO 03351570373
P.I. 00614381200
Cap. Soc. euro 100.000,00 i.v.

Privacy | Cookie Policy

Contatti

Contattaci tramite la nostra pagina contatti, oppure scrivendo a redazione@mokabyte.it

Seguici sui social

Facebook Linkedin Rss
Imola Informatica
Mokabyte