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