Copy Link
Add to Bookmark
Report

Intelligenze Artificiali e dintorni 2 (parte 2)

DrWatson's profile picture
Published in 
guide hacker
 · 30 May 2019

APPROFONDIMENTI TEORICI
Definiamo l'errore della rete in funzione del quadrato della differenza tra l'output attuale e quello desiderato per tutti i pattern che devono essere appresi.

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Il coefficiente "1/2" non altera la sostanza della formula ma presenta il vantaggio di semplificare alcuni calcoli successivi (*). Il valore di attivazione di ciascun nodo j al pattern p consiste nella somma pesata con w dei precedenti output o.

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

A sua volta ciascun output è dato dalla funzione di soglia f, nella fattispecie una sigmoide, applicata alla somma pesata.

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Considerando il rapporto tra E e w possiamo scrivere

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

e soffermandoci sul secondo fattore evidenziamo che

Indicando

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

diventa.

Inoltre si può scrivere

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

ed essendo il secondo fattore Df(x)/Dx esso equivale a.

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Considerando poi il primo fattore, e calcolando la derivata di E rispetto ad o, otteniamo.

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Perciò, rimoltiplicando i fattori otteniamo.

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Questo risultato presuppone che siano direttamente valutabili il target t e l'output o, e la sua validità è limitata al solo livello di output. Per i livelli intermedi consideriamo nuovamente il primo dei fattori in cui era stato scomposto g e notiamo che;

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

rimoltiplicando ancora i fattori abbiamo infine.

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Questa equazione rappresenta la variazione dell'errore in relazione ai pesi della rete, e fornisce un criterio per ridurre tale errore. A questo punto non resta che calcolare la derivata di f(net).

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Autore: Sconosciuto (da me ovvio..;D)

Altre informazioni sull’argomento (Reti Neurali) potete trovarle un po’ ovunque nella rete...date cmq un’occhiata a questo URL

http://lbalzerani.supereva.it/ia/backpropagation.html

Dovrebbe risultare un po’ più semplice...almeno lo spero ;D

Ed ora un esempio pratico...

Un emulatore ad apprendimento dinamico di personalità virtuale


ELECTRA
di Gianluigi Davassi

Gigy@freemail.it

"algoritmo è tutto e soltanto ciò che può essere elaborato con un’opportuna Macchina di Turing"

Alan Turing

Electra è essenzialmente un’entità informatica che può essere definita come un esperimento di "Personalità virtuale". Che cosa è una personalità virtuale? Nient’altro che un emulatore, a livello umano, di conversazione.

In chiave più implicita (e meno sfarzosa) posso definire Elettra semplicemente come un software che imita in tutto e per tutto il modello della conversazione umana attraverso pochi (ma complicati) algoritmi.

In maniera più fantasiosa (definire Electra un software può sembrare alquanto riduttivo per chi ha molta immaginazione) è possibile, seppur azzardatamente, definire Electra come una Intelligenza artificiale, ma personalmente aborrisco questa definizione sia perché la suddetta "Intelligenza" non esiste, sia perché Electra è esente da qualsiasi facoltà di ragionamento autonomo (almeno al livello attuale)

Electra è un software da me sviluppato, scritto in Visual Basic 6.0 dedicato hai sistemi operativi Windows 9x. Le funzionalità di questo programma sono molteplici…teoricamente illimitate, la difficoltà sta proprio nell’implementare queste funzionalità, ma è una difficoltà che si può facilmente aggirare, come spiegherò più avanti.

Dunque: principalmente Electra (il nome della personalità virtuale) ha il compito di rispondere a qualsiasi domanda che le venga posta, sia attraverso la tastiera sia attraverso la voce, in quest'ultimo caso ho implementato delle librerie dinamiche per il riconoscimento vocale nel software del ViaVoice1.4 SDK sviluppato e rilasciato da IBM

La struttura portante del programma è questa: dopo che è stata posta una domanda (o affermazione) scritta o detta a voce, questa viene spedita tramite algoritmi (di mia creazione) a controlli sintattici e che ne stabiliscono la composizione e successivamente ripartiscono i criteri di ricerca che sono necessari per l'individuazione della risposta, presente nei database di Electra.

il sistema di ricerca funziona questo modo:

'inizio dichiarazione variabili

Dim w() As String 'array per le parole

Dim w2() As String 'array temp per le frasi

Sub cerca()

Dim x As Integer

Dim ric As String

Dim sPy As Integer

sPy = 0

'inizio ricerca

‘elimino le possibili parole di lunghezza inferiore hai 2 caratteri e tolgo anche i pronomi impersonali…

For k = 1 To UBound(w())

If w(k) "" And w(k) " " And Len(w(k)) > 2 And w(k) "una" And w(k) "uno" And w(k) "un'" And w(k) "che" Then

For i = 1 To UBound(w2())

TextBox2.Text = w2(i)

x = TextBox2.Find(w(k), 0, , 2) ‘Cerca nel database la parola w(k)

If x = -1 Then w2(i) = "%not%"

Next

End If

Next

'evitiamo le ripetizioni inutili...

For k = 1 To UBound(w2())

ric = w2(k)

For i = 1 To UBound(w2())

If k i And ric = w2(i) Then w2(i) = "%not%"

Next

Next

For i = 1 To UBound(w2()) ' e mettiamo il tutto nella textbox3

If w2(i) "%not%" And w2(i) "" And w2(i) " " Then

TextBox3.Text = TextBox3.Text + w2(i) + vbCrLf

End If

Next i

'ma evitiamo di dire TROPPO!

For i = 1 To UBound(w2())

If w2(i) "%not%" And w2(i) "" And w2(i) " " Then

sPy = sPy + 1

End If

Next i

If sPy < 2 Then

If TextBox3.Text "" And TextBox3.Text " " Then

uscita TextBox3.Text

Else

'uscita "risposta non definita"

Call ri_cerca

If guess = True And RiCerca = False Then uscita "non lo so..." & vbCrLf

End If

Else

InDef = True

If RiCerca = False Then uscita w(UBound(w())) & " cosa?" + vbCrLf

End If

TextBox3.Text = ""

TextBox2.FileName = App.Path & "\matrix.txt"

'guess = False: RiCerca = False

End Sub

Esempio

Domanda in entrata :

Dove è nato il Manzoni?

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Vengono incluse in un array w(i) le parole "dove", "nato", "Manzoni". Successivamente per queste tre parole vengono ricercate all'interno del database che riporterà in un'altro array tutte le risposte contenenti queste parole.

E successivamente l’insieme S viene frazionato e trasformato in un insieme S’ contenente tutte le frasi nel quale la parola "dove" è effettivamente presente:

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

e così per tutte le altre parole …

Da questa parte il collegamento diretto verso la risposta (che è presente nello stesso database, proprio accanto alla domanda) che viene visualizzata sullo schermo, oppure "letta" (sempre attraverso le routine del ViaVoice) verso utente.

In tal modo vengono eliminate le frasi superflue e l'ultima frase rimasta viene visualizzata. Se la risposta non c'è ovvero non compare nel database, allora Electra chiama la funzione di apprendimento.

C’è un problema però! E se le domande fossero 2 nello stesso momento? Ad esempio e se chiedessero ad electra "Ciao chi sei? Da dove vieni?"

Se il programma andasse a cercare tutte le parole contenute in una "stringa" di non le troverebbe MAI tutte insieme ma bensì troverebbe:

[ciao]

[chi sei]

[da dove vieni]

Ma poiché nel metodo sopra descritto la frase scelta è una soltanto e gli insiemi vengono selezionati per successivi "inscatolamenti" parola per parola, c’è il rischio che il programma o vada tranquillamente in loop, o che non fornisca all’utente alcuna frase. In questo caso bisogna impartire dei criteri di ricerca ben più sottili e raffinati. Personalmente ho risolto il problema in questo modo: metto tutto il contenuto dell’array contenente le parole della domanda posta a Electra in un array temporaneo con estensione uguale al primo, e ridimensiono questo con l’estensione minima, ovvero 1. Quindi il mio array conterrà solo la prima parola della domanda. Impartisco la funzione della ricerca per la prima parola e guardo il risultato. Se la parola è stata trovata solo una volta e in una sola "stringa" nel database, allora fornisco all’utente la risposta che segue la stringa; ridimensiono l’array a 1, e lo riempo con la seconda parola dell’array temporaneo e faccio partire d’accapo il ciclo. Se la parola è stata trovata più volte nel database allora imposto un Flag di ricerca che chiamo (e ritengo, per ovvie ragioni) indefinito. In questo caso allora ricomincio dall’ inizio ma ridimensiono l’array incrementandolo di un fattore 1, e in questo spazio così creato inserisco il contenuto dell’array temporaneo fino a quanto permette la nuova dimensione del medesimo. Rinizio la ricerca. Se (in questo caso) le due parole vengono trovate INSIEME una e una sola volta nel database dei criteri di ricerca allora li accetto, e fornisco all’utente la risposta collegata ad essi. In caso contrario aumento ancora l’estensione dell’array e ricomincio tutto d’accapo fino all’esaurimento delle parole.

Ma teoricamente il programma per gli usi destinato alla società ovvero come punto di riferimento per informazioni e consigli è concluso ovvero adesso è esattamente che risponde esattamente a ogni domanda chiedendosi spiegazioni quando ce ne è bisogno

Ma cosa dovremmo fare invece prendere èlectra più umana. 0vvero come rendere èlectra capace di dialogare con un anziano o un bambino è una persona di modo che possa sembrare un dialogo umano e possa dialogare più volta se affidando l'impressione di dialogare con la persona vera e propria? sfortunatamente non si può. Emulare tutti i processi mentali umani che sono infiniti nella maggior parte sconosciute è una cosa chiaramente impossibile. Però si possono implementare una quantità tale di funzioni (o processi) in modo tale da approssimare in maniera quasi impercettibile il ragionamento umano. Più funzioni mettiamo più la validità dei discorsi di Electra sul piano umano sia approssimo a quello di un vero ragionamento

Intelligenze Artificiali e dintorni 2 (parte 2)
Pin it

Ma non sto parlando di teorie di pura fantasia: ho fatto un esperimento: ho realizzato un prototipo di Electra chiamato "Emily" (ampiamente scaricabile da internet a www.davassi.freeweb.org) e l’ho fatta "dialogare" con alcune persone inconsapevoli attraverso Irc e ciò mi ha dimostrato che Emily è riuscita almeno in un’occasione a sostenere un (corto) dialogo: questo sta a dimostrare che sebbene il numero di funzioni incrementato fosse effettivamente basso (circa 4 funzioni) e nonostante la quantità di risposte scarsissime (un centinaio di frasi) Emily è riuscita in questo caso a realizzare un dialogo intero compiuto…eccolo!
<Zorro> ciao, come va??

<Emily> >non lo so...
<Emily> >
<Zorro> nemmeno io mi ricordo
<Zorro> comunque che fa
<Zorro> vuoi parlare
<Emily> abbastanza allegra e contenta: mi piace parlare con altre persone
<Zorro> mi fa molto piacere
<Emily> non guardo molto spesso la televisione
<Zorro> e il circo??
<Emily> che cavolo stai facendo?
<Emily> e il circo??
<Zorro> tu che dici
<Zorro> che c'entra la televisione
<Zorro> dai
<Zorro> da dove digiti
<Emily> non lo so...
<Zorro> da dove digiti
<Emily> digito da roma
<Zorro> io da Formia
<Zorro> sai dov'è
<Emily> non lo so...
<Zorro> sai dov'è?
<Emily> non lo so...
<Zorro> scusa Emily ma quanti anni hai
<Emily> Io ho 19 anni Sono nata in Italia il 7 marzo del 1980
<Emily> che cavolo stai facendo?
<Zorro> da madre italiana e padre francese
<Emily> mia madre Susy era norvegese
<Zorro> vedi
<Zorro> perchè era?
<Zorro> tu che fai nella vita
<Emily> mi prendi per i fondelli? allora tanti saluti
<Zorro> magari potessi
<Zorro> ma sto scherzando
<Zorro> non ti offendere
<Zorro> sei permalosa??
<Emily> *** ehm...zorro stavi parlando con un bot! (ora entro in scena io veramente)
<Emily> ehehe
<Emily> l'ho programmato io...
<Emily> :)
<Emily> non ti arrabbiare!
<Zorro> che cosa è un bot
<Emily> un ROBOT
<Zorro> ma non dire cazzate
<Emily> ?
<Zorro> e poi
<Zorro> l'ho fatto arrabbiare
<Emily> non ci credi?
<Emily> te lo spedisco se vuoi...:)
<Zorro> no
<Emily> eheheh
<Zorro> ora posiamo parlare
<Zorro> ti va
<Emily> ho l'hobby di programmare intelligenze artificiali
<Zorro> io non sono artificiale
<Double> capito? HAI PARLATO CON UN PROGRAMMA SCRITTO DA ME! cavolo!
<Zorro> eh?

questo comunque mostra che è l'intelletto umano al non essere affatto costante!

Oltre modo dato che è possibile fare assegnare ad una parola un significato preciso dobbiamo agire su un unico elemento che ci è permesso modificare e programmare a nostro piacimento…ovvero l'inerenza delle parole …ovviamente incrociando un po' le dita!

<!--

Due emulatori di IA, Elena ed Emily, sono scaricabili a questo indirizzo:

http://www.freeweb.org/software/Davassi/progetto.htm

Si possono trovare informazioni anche su Electra, ma quest’ultima non è a disposizione per il download (lo sviluppatore ha iniziato a sentire l’odore dei soldi;D).

-->

Conclusioni vere e proprie:

L’argomento è vasto, appassionante (almeno per me) e anche divertente dal punto di vista pratico...Questo articolo non ha la pretesa di dire tutto (anche perché sarebbe troooooppa roba;D), è solo una piccola base, un probabile trampolino di lancio per qualcosa di più mirato...quindi se volete che si tratti qualcosa di specifico io vi prometto il mio impegno...quindi non vi rimane altro che scrivermi ;DDD

Non me la sono sentita di parlare di etica perché ognuno ha le sue idee e se uno vuole avere un corpo robotico e non morire mai è una sua opinione quindi lascio libertà di pensiero...semmai, come ho già detto sopra, si potrebbe organizzare qualche IRCmeeting su sta roba o un ng...bo fate voi;D

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT