Ciao Damiano,

On June 25, 2021 3:10:09 PM UTC, "D. Davide Lamanna" wrote:
> 
> > Definire le "AI" non sarebbe difficile (cambiando loro nome), ma è
> > impossibile se si pretende di distinguerle dal resto del software.
> > Si tratta infatti di software programmato statisticamente che
> > riproduce uno degli infiniti pattern deducibili dai dati
> > disponibili.
>
> ho notato già in altri interventi questa tua posizione. Vorrei capirci
> qualcosa di più.

L'informazione esiste solo nella mente di un essere umano come 
esperienza soggettiva di pensiero comunicabile.

Il dato è una delle innumerevoli (infinite) rappresentazioni di una
informazione che, veicolata da un supporto fisico, può essere
trasferita (data, appunto) ad altri esseri umani, lontani nel tempo o
nello spazio, e da questi interpretata ovvero ritrasformata in
un'esperienza soggettiva di pensiero comunicabile.

Fin qui niente di nuovo¹.


Un programma è un dato che determina il comportamento di un automatismo
costruito per eseguirlo.

L'automatismo non comprende il programma², ma reagisce alla sua
rappresentazione in modo automatico, appunto.


Ora, solitamente nell'informatica mainstream, programma e dato vengono
considerate categorie distinte, sebbene da tempo immemore (60 anni?
:-D) i programmatori Lisp ripetano che "code is data".

In realtà se ci pensi un momento è sempre vero anche il contrario.

Quando spostiamo una parte della logica di un programma all'interno di
un file di configurazione (per permettere di modificarne il
comportamento senza modificarne il codice) stiamo trasformando il
nostro programma in un esecutore¹ di quel linguaggio di configurazione.

La configurazione è un programma per il nostro programma iniziale che
è diventato una macchina virtuale in grado di eseguirlo.

Se estendiamo questa macchina virtuale per essere in grado di
modificare più comodamente la sua configurazione, presto ci accorgeremo
di poter avere configurazioni diverse in file diversi e di poterle
scambiare con altre persone.

E se questi file li chiamassimo con un estensione comune, come .jpeg,
.odt, .xlsx o .pdf?

Esatto ogni dato è un programma che determina come una macchina,
virtuale o fisica, si deve comportare.


Siamo così abituati a vedere un'immagine quando apriamo un file jpeg,
che non consideriamo come quel file venga eseguito da diversi
automatismi per permetterci di percepire quella immagine.

Persino la sequenza di zero ed uno che sto componendo in questo istante
verrà eseguita automaticamente da molti programmi diversi per
stabilire, alla fine, quali pixel accendere sul tuo monitor affinché tu
interpreti il messaggio che io intendo comunicarti.

Server SMPT, MUA, sistemi operativi, driver video e firmware di diversi
monitor.


In generale, qualsiasi dato può essere usato come programma in per
determinare il comportamento di un automatismo.

Se scrivessi un bot che risponde automaticamente "Google ti osserva" a
chiunque nomini Google e "Facebook ti sorveglia" a chiunque nomini
Facebook, tutti gli iscritti a questa mailing list potrebbero
programmarlo.

Esattamente come se lo stesso bot eseguisse in un interprete python il
contenuto di ogni mail che contenesse la parola python.


Ora, come vedi, sostazialmente ogni programma che modifica il proprio
comportamento sulla base dei dati che riceve costituisce una macchina
virtuale che esegue tali dati come un programma.


La JVM, il CLR .NET, Perl, Python, Chibi-Scheme, Lua... sono tutte
macchine virtuali programmate linguisticamente dall'uomo per eseguire
programmi scritti linguisticamente dall'uomo (in alcuni casi, dopo la
loro traduzione in un bytecode dedicato, da compilatori scritti
linguisticamente dall'uomo).

Un programma particolarmente emblematico in questo senso è Hex0³ un
assembler in grado di assemblare sé stesso scritto in esadecimale (e
dunque compilabile anche sa qualunque essere umano che disponga di un
editor esadecimale).

Per quanto possa apparire strano a chi è abituato a distinguere dati e
programmi, in realtà non c'è alcuna distinzione.

L'errore deriva dall'esistenza di automatismi (creati da noi
programmatori) in grado di creare automaticamente alcuni di questi
programmi, come la macchina fotografica digitale che salva sulla SD dei
JPEG⁴.


Locuzioni altisonanti e fantasiose come "Artificial Intelligence",
"Machine Learning" o "Deep Learning" costituiscono arcane formule
magiche per impressionare gli sciocchi e materializzare fondi militari
e non.

Ma se siamo fortunati, fra non molto tempo i nostri nipotini rideranno
di queste formule magiche come noi ridiamo degli alchimisti alla
ricerca della pietra filosofale.


Ma nei fatti si tratta solo di metodi statistici di programmazione.

Una rete neurale profonda è una particolsre macchina virtuale che può
essere programmata con tecniche statistiche.

Ovvero programmata per replicare i pattern frequenti noti/desiderati.

La calibrazione di una rete neurale (erroneamente chiamata "training"
in gergo) evidenzia chiaramente come i dati siano SEMPRE codice anche
se rinunciamo a comprendere QUALE codice, ovvero cosa significhi
l'elaborazione effettuata dalla rete calibrata, ed a prevederne
precisamente il comportamento, in particolare negli innumerevoli casi
limite non adeguatamente rappresentati nei dati selezionati.

Naturalmente chi programma statisticamente (i "data scientist") adotta
tecniche molto diverse da quelle usate per programmare linguisticamente.

Tuttavia rimane sempre possibile introdurre volontariamente
vulnerabilità ed errori nel programma finale (rinominati "bias", visto
che i debugger al momento fanno poco), ma diventano tendenzialmente
invisibili perché poco frequenti.


> Viceversa per un essere umano è molto difficile produrre software
> attraverso un procedimento statistico, mentre per una macchina è molto
> facile. 

Facilità e difficoltà sono esperienze umane.

Per le macchine dobbiamo misurare consumi e utilità.

La produzione di output fra queste.

Però (attenzione che questo è un punto centrale del ragionamento) il
software (AI o meno) non produce software ma dati.

Siamo poi sempre noi che interpretiamo ed usiamo tali dati come
software!

Esattamente come chi vuole vedere "intelligenza arificiale" in una
"rete neurale" la vedrà.

Si tratta di interpretazioni!
Il software (la rete neurale) è un dato e come tale viene
inevitabilmente interpretato alla luce delle conoscenze
pregresse e delle opinioni di chi lo osserva¹.


> Con la programmazione statistica, invece, vengono forniti dall'essere
> umano INPUT e OUTPUT coerenti e si chiede alla macchina di trovare
> procedimenti di ELABORAZIONE efficienti, che possano poi essere usati
> per produrre nuovi OUTPUT a partire da INPUT inediti.

Questa è una interpretazione. ;-)

Anzitutto la relazione fra input e output di calibrazione non è di
coerenza ma di disponibilità.

E questo semplicemente perché in assenza di un modello concettuale del
fenomeno rappresentato dai dati disponibili, modello che renderebbe
ingiustificabile il ricorso la programmazione statistica stessa, è
impossibile stabilire se la relazione fra input e output sia
effettivamente coerente.

E poi come sai underfit e overfit sono problemi complessi: minime
alterazioni di un immagine studiate ad arte possono cambiare
completamente l'output calcolato da un software di classificazione.

Insomma, tu hai riportato quello che si dice di voler fare, ma ciò che
avviene davvero è molto diverso.


> Gli ambiti di adozione dei due approcci possono essere molto diversi.
> Generalmente si ricorre alla programmazione statistica nei problemi a
> complessità elevata, dove è svantaggioso usare l'approccio
> tradizionale.

Svantaggioso per chi?

Quante vite umane sono state sacrificate sull'altare delle self driving
car?

Per chi è vantaggioso?



> > Una volta in funzione è indistinguibile dal software programmato
> > linguisticamente eccetto che per l'effettiva impossibilità di
> > prevederne il comportamento negli infiniti corner-case non
> > sufficientemente rappresentati dai dati.
> 
> Non sono del tutto convinto sia proprio indistinguibile. Ho visto dei
> pattern elaborativi usciti da reti neurali, che non avevano nulla di
> "umano", ossia nessun umano avrebbe mai pensato ad un procedimento
> elaborativo di quel tipo. 

Esistono infiniti modi sbagliati di fare un calcolo. ;-)

D'altro canto AlphaGo ha dimostrato che moltissimi modi di giocare a Go
sono ancora inesplorati.

Nel contesto di un gioco, l'utilizzo di un sistema del genere per
esplorare nuove possibilità è applicabile ed etico (assumendo che il
bene fornito all'umanità sia superiore al danno ecologico).

Ma prima di lasciare che un sistema di guida autonoma ricerchi nuovi
modi di attraversare una città, bisogna evacuarla.


> Penso che la fascinazione dell'espressione
> AI derivi, almeno in parte, da questo. E' così?

Penso si tratti più dell'effetto del marketing.

Anche se non dubito che, quando non danneggiano nessuno, gli output più
inattesi di un software programmato statisticamente possa richiamare,
nelle menti eccitate dal marketing, la sorpresa che da bambini provavamo
guardando dentro un magico caleidoscopio.


E andrebbe anche bene così, se usassimo il software solo per giocare.
Un po' come la polvere pirica per fare splendidi fuochi d'artificio.

Il problema è che quei risultati inattesi possono anche uccidere.
E l'informatica sta diventando l'arma delle prossime guerre.
Guerre mondiali che grazie ad essa saranno chirurgiche.


Giacomo

¹ vedi il breve saggio che ho presentato al AIUCD 2021
  
http://www.tesio.it/2020/10/02/la_lotta_informatica_per_la_democrazia_cibernetica.html
  o il precedente
  http://www.tesio.it/2019/06/03/what-is-informatics.html

² a ben pensarci, il termine "interprete" usato per le macchine
  virtuali di alcuni linguaggi non-compilati (ovvero programmi che
  permettono ad una macchina di eseguire programmi scritti per un'altra,
  talvolta di fantasia) è in effetti piuttosto fuorviante, uno dei tanti
  sintomi dello stato ancora primitivo dell'informatica contemporanea

³ una breve e piacevole spiegazione di come funziona è su
  https://ekaitz.elenq.tech/hex0.html

⁴ ovviamente il fatto che certi dati rispettino formati standard noti a
  molti programmatori permette di far eseguire lo stesso file a
  programmi/macchine virtuali diverse, dal visualizzatore di immagini,
  al driver della stampante, a stegohide etc...

_______________________________________________
nexa mailing list
nexa@server-nexa.polito.it
https://server-nexa.polito.it/cgi-bin/mailman/listinfo/nexa

Reply via email to