Caught in the Net

Some shallow thoughts from my tiny virtual space

I am not the kind of guy that goes to concerts. Ever.

I prefer studio recordings because in them the logical thoughts of the artist emerge as the track comes to life and to our ears. I was always attracted by that, more than every sprinkle of emotions that comes from the venues and theaters.

In my case the exceptions are the live performances of Dale Crover (from The Melvins) and Jeff Mangum which have been some kind of unshaped epiphanic experiences.

Milan, december 2015, The Melvins were at the end of their most recente european tour when Jeff Pinkus drops the bass guitar, tunes the effects pedal and kicks the bass with his bare foot until the right repetition of sounds comes out of the speakers. Slowly, each one of the components leaves the stage, sounds still coming from the earlier kicks to the speakers up to my ears.

Once home, the performance by The Melvins made me recognize the different stages of communication. We can think of three stages. The first one is trial, or experimentation, field test. This first phase is as obvious as accidental.

The second stage is about excess. Excess is to acknowledge that what was played today will be different to what will be played tomorrow. A draft becomes a singular work that may not come to an end.

The last one is the most important one if we want to understand the dynamics of the Internet: dissipation. With the act of dissipation the work of the artist that reached its on way on a tiny and crucial fraction of time, that is the moment, folds on it self, and it is forever lost by an act of absence, the absence of objective memory.

Internet dynamics

On the internet hounding supersedes dissipation.

Hounding is the reason why thousands of man from different backgrounds congregates in small facebook groups and share photos of their friends, wives and relevant others.

On the original italian blog post I reported some italian references on this phenomenon that hasn't much cultural significance to english readers so I want to explain the phenomenon in other words.

The discussion about these facebook groups in Italy covered an internet (?) phenomenon regarding group of males playing what they call the game of "What would you do" on sexually or less explicit photos of friends and wives.

The game is as far as ever from an online rpg or creative. It degrades every time in vulgar and extremist comments about the body of the girls depicted.

I do believe that one of the many reasons to explain the inception of these online groups is the impossibility to overcome the absence of dissipation in online communication.

Machines do not remember but they never make us forget, they cross our space online with a continuos stream of photos and other people's moments.

Algorithms do not follow our placid flow of continuous time online and they snap it in collages of instants.

Recollection

In my first online experiences all the interactions I had did not have the quality of recollection.

Bulimico degli ascii, passavo da lunghe e sostenute conversazioni su irc al lurking di qualche mailing list, saltuariamente 4chan. Mi sentivo (e mi sento tutt'ora) obbligato ad archiviare qualsiasi riga che suscitasse un minimo di interesse o potesse avere qualche valore futuro. Ascii glutton, I divided my time between irc and mailing lists. I felt the obligation to archive every tiny succession of words that gave some light to me.

(I still do).

Then web caches arrived, the Wayback Machine, Reddit, social networks and data can hardly disappear again.

It seems to me that it is just a worthy form of tenacity, not remembrance in any form.

For the joy of archivists and the ones with a wistful gaze. And still unpleasant for someone.

(This transtion is for Madeline, thank you for still taking time to read my blog)

Breve riflessione dal mio piccolo mondo virtuale

Non sono una persona che va ai concerti.

La registrazione in studio esplicita i processi logici che l'artista segue per arrivare al processo di consegna e questo mi ha sempre affascinato, in maniera assai maggiore della carica emotiva sprigionata da un concerto di notte.

Ma ci sono due artisti, Dale Crover dei Melvins e Jeff Mangum le cui performance live sono state per me, come spettatore, in qualche modo epifaniche.

Milano, dicembre del 2015, i Melvins stanno concludendo il loro più recente tour in Europa quando Jeff Pinkus lascia cadere il basso sul pavimento, regola gli effetti sulla pedaliera e lo prende a calci finché non produce la giusta ripetizione di suoni. Lentamente ciascun musicista si allontana dal palco, il basso insistente, ancora a terra.

Quell'esecuzione mi fece riflettere sui processi di produzione che dominano la nostra comunicazione. Possiamo immaginarci delle fasi. La prima é quella di sperimentazione che é tanto più ovvia quanto immediata e involontaria.

La seconda é quella del superamento. Superamento é la consapevolezza che il brano composto oggi verrà suonato diversamente domani, é la ragion d'essere delle bozze, anche quando infinite.

La terza e quella più importante per comprendere le dinamiche di rete é la dissipazione. Attraverso la dissipazione l'opera, che fissata nel momento aveva acquisito una propria dimensione di senso, é costretta a ripiegarsi su se stessa, vana si perde a causa dell'assenza di memoria.

Le dinamiche della Rete

In rete l' accanimento si sostituisce alla dissipazione.

L' accanimento é il motivo per cui qualche migliaio di uomini di qualsiasi fattura sociale si riuniscono in gruppi e condividono foto delle loro mogli, fidanzate e qualche amica. Non c'é nessuno scandalo nella foto in sé, sono scatti quotidiani spesso "rubati" dagli stessi profili delle donne riprese.

Ne ha parlato Repubblica, se ne é parlato su reddit, perfino Mentana nella sua ridicola posizione da cavaliere bianco di Facebook ha urlato contro questo fenomeno.

Fenomeno che dal mio punto di vista nasce da una difficoltà di alcuni abitanti della rete ad affrontare l'assenza di dissipazione nella comunicazione online.

Le macchine non ricordano eppure non smettono di ricordarci, anzi invadono il nostro spazio in rete con un continuo susseguirsi di foto e momenti di vita delle altre persone.

Gli algoritmi non seguono il pacato moto del nostro tempo online e anzi lo spezzano, lo frammentano in attimi che hanno il ritmo di un giro della rotella del mouse, lo scorrere di un pollice.

Memoria

Nei miei primi anni le mie fugaci interazioni virtuali non avevano la qualità della memoria.

Bulimico degli ascii, passavo da lunghe e sostenute conversazioni su irc al lurking di qualche mailing list, saltuariamente 4chan. Mi sentivo (e mi sento tutt'ora) obbligato ad archiviare qualsiasi riga che suscitasse un minimo di interesse o potesse avere qualche valore futuro.

Poi sono arrivate le cache, Wayback Machine, Reddit, e sembra che i contenuti non scompaiano più.

Eppure mi ci é voluto un po' per capire che questa non é memoria, solo una forma nobile di accanimento.

Piace ai nostalgici, agli archivisti.

Spaventa a chi di Internet non vuole farsene una ragione.

Capire il Machine Learning (parte 3)

Riconoscimento delle immagini

Il machine learning viene utilizzato anche per il riconoscimento delle immagini. La tipologia di rete neurale utilizzata per questa applicazione è chiamata rete neural a convoluzione ( convolutional neural networks), abbreviata CNN.

Innanzitutto consideriamo che ogni immagine può essere codificata come una matrice di valori

pixel

Vediamo ora quali sono le operazioni compiute da una CNN per riconoscere delle immagini.

Convoluzione

Durante la fase di apprendimento, la rete neurale analizza moltissime immagini (categorizzate) utilizzando dei "filtri", ovvero delle funzioni che mescolate all'input originale permettono di evidenziare dei pattern nell'immagine. Questi pattern corrispondono alle caratteristiche proprie di un oggetto (quali possono essere ad esempio per un uccello il becco, le piume, le ali) e nel caso queste sono presenti, possiamo riconoscere l'immagine.

In questo esempio l'immagine di Wally é mescolata (l'operazione si chiama convoluzione) con un filtro "a cerchio" che risponde molto bene a caratteristiche come quella di possedere degli occhi.

waldoblue

La convoluzione é un'operazione che ha la proprietà di essere indipendente dalla posizione. Non importa la posizione degli occhi, quando applichiamo la convoluzione su un'immagine con un filtro "a cerchio" notiamo che gli occhi sono presenti.

Subsampling

Ogni segnale contiene del "rumore", ovvero degli elementi che la allontanano dal comportamento ideale.

ideal

real

Attraverso il subsampling possiamo ridurre il rumore e rendere il nostro algoritmo meno suscettibile a queste piccole variazioni; benché l'immagine abbia una risoluzione minore, i pattern rimangono.

waldosub

Connessione completa

Alla fine dell'analisi tutte le caratteristiche estrapolate vengono considerate nell'insieme e in questo modo possiamo capire a quale categoria appartiene l'immagine.

Questo procedimento a livello algoritmo si esplicita con una connessione completa fra tutti i nodi della rete neurale che possono poi restituire l'output (probabilità che l'immagine appartenga ad una determinata categoria).

Fase di rinforzo

Durante il training é presente un'ultima fase (o strato), chiamato più propriamente loss layer. Questo strato provvede a dare un feedback alla rete neurale analizzando l'output in relazione ai dati di partenza (ovvero le immagini già categorizzate).

Capire il Machine Learning (parte 2)

Nel precedente post abbiamo preso in considerazione una rete neurale molto basica. Proviamo ora ad approfondire il concetto aggiungendo una proprietà fondamentale, la memoria.

Memoria e Stati

La rete neurale che abbiamo modellato non ha alcun tipo di memoria. con gli stessi dati di input, l'output è (quasi certamente) lo stesso. Possiamo ampliare il nostro modello introducendo il concetto di stato.

Poniamo il problema della vendita delle auto in questo modo: immaginiamo di avere un algoritmo di machine learning che valuti le auto e faccia delle offerte di vendita che conseguentemente vengono valutate da delle persone e accettate oppure rifiutate. Ogni volta che una proposta viene accettata la teniamo in memoria e nell'aggiustare i pesi per la seguente offerta, teniamo in considerazione la validità dei pesi usati in precedenza. In altre parloe, in ogni operazione di valutazione dell'auto salviamo lo stato dell'offerta precedente (rifiutata o accettata) e la consideriamo quando vogliamo proporre l'offerta successiva. Abbiamo in questo modo una recurrent neural network (RNN) dove ogni stato precedente viene utilizzato per modificare l'output dell'algoritmo.

Generazione di testo attraverso le RNN

Immaginiamo di voler creare un algoritmo che utilizzando una RNN possa generare del testo o prevedere quale sarà il prossimo carattere inserito (come nel caso del T9).

Inizialmente dobbiamo permettere alla RNN di analizzare almeno qualche sample del nostro testo. La RNN analizza carattere dopo carattere e costruisce un grande grafo dove collega ogni carattere al suo successivo. Inizialmente l'output della nostra RNN non ha alcun valore: in questo esempio, abbiamo l'output di una RNN allenata attraverso Guerra e Pace:

tyntd-iafhatawiaoihrdemot  lytdws  e ,tfti, astai f ogoh eoase rrranbyne 'nhthnee e 
plia tklrgd t o idoe ns,smtt   h ne etie h,hregtrs nigtike,aoaenns lngty

L'output prodotto dalla RNN, benchè non abbia nessun valore per un umano, viene analizzato dalla RNN per arricchire il grafo costituito inizialmente dai caratteri (e le loro relazioni) di Guerra e Pace. Questo procedimento continua all'infinito. Ogni volta che la RNN produce dell'output lo salva e lo riutilizza come input in maniera ricorsiva per generare nuovo output.

Dopo 300 iterazioni abbiamo un output di questo tipo:

"Tmont thithey" fomesscerliund
Keushey. Thom here
sheulke, anmerenith ol sivh I lalterthend Bleipile shuwy fil on aseterlome
coaniogennc Phe lism thond hon at. MeiDimorotion in ther thize."

Dopo quasi mille:

Aftair fall unsuch that the hall for Prince Velzonski's that me of
her hearly, and behs to so arwage fiving were to it beloge, pavu say falling misfort 
how, and Gogition is so overelical and ofter.

Duemila:

"Why do what that day," replied Natasha, and wishing to himself the fact the
princess, Princess Mary was easier, fed in had oftened him.
Pierre aking his soul came to the packs and drove up his father-in-law women.

Possiamo notare come l'output migliori visibilmente.

Nel prossimo post tratterò una variante di rete neurale utilizzata per classificare e riconoscere immagini.

Capire il Machine Learning (parte 1)

Questo è il primo di una serie di post che hanno l'obbiettivo di fornire una breve e generale introduzione al mondo del machine learning e delle intelligenze artificiali più in generale. Mi auguro che questa breve introduzione al mondo dell'apprendimento automatico sia una sorta di vaccino contro il sensazionalismo mediatico e la disinformazione che negli ultimi anni fanno da contorno al progresso in questo settore.

Non c'è risultato senza algoritmo

Nelle scienze informatiche un algoritmo è un insieme di istruzioni che partendo da uno stato iniziale (input) permette di arrivare ad uno stato finale (output) attraverso una serie di step logici. Ogni algoritmo utilizza una logica propria e specifica per il problema di cui si occupa. Nel caso del machine learning l'algoritmo non viene progettato in base al tipo di problema bensì vengono utilizzati algoritmi generici adattabili attraverso dei parametri. L'algoritmo di machine learning analizza i vari parametri e i dati che riceve "in pasto" al fine di raggiungere lo stato di output ottimale. L'output ottimale è la migliore approssimazione di un risultato teorico che si raggiunge nella fase di "training".

La macchina impara

Nella fase di allenamento o di apprendimento, il "training", si possono adottare due tecniche differenti: apprendimento con supervisione ( supervised learning ) e apprendimento senza supervisione ( unsupervised learning ).

Supervised Learning

Immaginiamo di dover valutare il prezzo di un'automobile usata senza essere esperti in materia. Noi abbiamo questi dati:

PREZZO ORIGINALE Km percorsi stato di usura PREZZO FINALE
50 000 120 000 lieve 40 000
30 000 150 000 notevole 8 000
20 000 80 000 lieve 15 000
20 000 120 000 notevole ...

Dalla tabella possiamo dedurre la caratteristica fondamentale del supervised learning: abbiamo due vettori (serie di dati) di input (prezzo originale) e di output (prezzo finale) che hanno una correlazione certa e valida.

Possiamo dedurre intuitivamente quale sarà il prezzo dell'ultima auto se analizziamo i dati precedenti. Questo è quello che succede nel caso del supervised learning. Un algoritmo di machine learning che utilizza il supervised learning estrapolerà la relazione fra i vari dati e in questo modo potrà ottenere un determinato output partendo dai dati di input. Possiamo capire già da ora che nel caso ci fossero dati che "inquinano" il nostro data set, come ad esempio il colore dell'auto, l'algoritmo non sarà capace di fare un'analisi corretta.

La precisione della soluzione dipende dalla quantità di dati e dall'influenza che questi hanno nella situazione reale.

Unsupervised Learning

Nel caso di unsupervised learning ci troviamo di fronte agli stessi dati ma senza la possibilità di conoscere il prezzo finale.

PREZZO ORIGINALE Km percorsi stato di usura
50 000 120 000 lieve
30 000 150 000 notevole
20 000 80 000 lieve
20 000 120 000 notevole

Non siamo capaci di stabilire il prezzo finale attraverso l'unsupervised learning, ma possiamo stabilire dei pattern fra i vari dati. Non c'è nessun tipo di feedback (il prezzo finale) che possa aiutarci a capire se il risultato sia giusto ma possiamo analizzare le notevoli relazioni fra i dati.

Machine Learning e intelligenza

Concentriamoci sul supervised learning. Nel caso della vendita dell'automobile, abbiamo un semplice problema con una soluzione lineare di questo tipo: prezzo finale = prezzo originale + km percorsi + stato di usura

Ovviamente ogni incognita nella nostra equazione influisce diversamente sul prezzo finale e quindi possiamo riscriverla come: prezzo finale = A *prezzo originale + B *km percorsi + C * stato di usura

Se pensiamo ad un algoritmo possiamo ragionare in questo modo:

funzione: calcola_prezzo_auto:
    parametri: prezzo_originale, km_percorsi, stato_usura
    variabili: prezzo_finale = 0

    prezzo finale = prezzo_originale * 0.804246
    prezzo finale = prezzo_finale + km_percorsi * -0.000125
    prezzo finale = prezzo_finale + stato_usura * -2500

I valori di quelle costanti, stabilite casualmente nell'esempio, sono chiamate pesi e servono a stimare il prezzo finale. Una volta stabiliti i pesi, il nostro algoritmo di supervised learning applica questi pesi ai dati originali e ne valuta l'errore:

PREZZO ORIGINALE Km percorsi stato di usura PREZZO FINALE PREZZO STIMATO
50 000 120 000 lieve 40 000 374888
30 000 150 000 notevole 8 000 16000
20 000 80 000 lieve 15 000 13492
20 000 120 000 notevole ... 10988

Una volta valutato l'errore e la distanza dal prezzo finale, l'algoritmo di machine learning modifica i pesi di conseguenza e ripete la procedura fino ad arrivare al risultato che più si avvicina ai dati iniziali. rete1 Ci sono varie funzioni che stimano l'errore e permettono di correggere i pesi o metodi che restringono lo spazio di ricerca fino a convergere alla soluzione, ovvero i pesi cercati.

Reti Neurali

Ora, come possiamo immaginare, il prezzo di un'auto ha molti fattori che si aggiungono a quelli elencati nell'esempio. Non solo, ma molti problemi non hanno una soluzione lineare, ovvero una soluzione che si può semplicemente esprimere attraverso una funzione che aggiunge e moltiplica i valori una sola volta.

Possiamo arricchire l'esempio dell'automobile immaginando di avere più set di pesi e di ripetere il procedimento più volte:

|---------------------------------------------------|
| PREZZO_ORIG * peso A1 ----->                      |
| KM_PERCORSI * peso B1 ----->                      |
| STATO_USURA * peso C1 ----->                      |
|                            PREZZO FINALE STIMATO 1|
|---------------------------------------------------|

| --------------------------------------------------|
| PREZZO_ORIG * peso A2 ----->                      |
| KM_PERCORSI * peso B2 ----->                      |
| STATO_USURA * peso C2 ----->                      |
|                            PREZZO FINALE STIMATO 2|
|---------------------------------------------------|

| --------------------------------------------------|
| PREZZO_ORIG * peso A3 ----->                      |
| KM_PERCORSI * peso B3 ----->                      |
| STATO_USURA * peso C3 ----->                      |
|                            PREZZO FINALE STIMATO 3|
|---------------------------------------------------|

E ora immaginiamo di combinare ogni PREZZO FINALE STIMATO in un'ultimo risultato:

| --------------------------------------------------|
| PREZZO_1 * peso X  ----->                         |
| PREZZO_2 * peso Y  ----->                         |
| PREZZO_3 * peso Z  ----->                         |
|                            PREZZO FINALE DEF      |
|---------------------------------------------------|

Questa é, seppur molto basica, una rete neurale. Proviamo a visualizzarla in un'immagine dove i box arancioni sono i nodi di input e i rossi sono i nodi "nascosti" e temporanei.

rete2

In una rete neurale (neural networks) abbiamo:

  • i neuroni: la funzione di stima e i set di pesi;

  • le catene: i collegamenti fra neuroni che permettono di valutare il prezzo più volte.

Nel prossimo post cercherò di approfondire il concetto di rete neurale con degli esempi di applicazioni concrete.