Le reti neurali

Era il 2017 quando un utente di Reddit sotto lo pseudonimo di “Deepfakes” iniziò a postare dei finti video porno di personaggi famosi. Erano video al cui volto dell’attore o attrice veniva sostituito il volto di attori del cinema Hollywoodiano. Questi video erano stati creati manipolando i video originali (sorgente) utilizzando l’intelligenza artificiale, in particolare allenando delle reti neurali attraverso il deep learning, da cui in parte prende il nome appunto di deepfake.

Come vedremo nel capitolo 3, dove analizzeremo le principali tecniche per la realizzazione di questi video, i video fake si possono realizzare anche con altre tecniche di computer grafica, non basate sulle reti neurali, ma riteniamo che per comprendere il fenomeno sia necessario soffermarsi più nel dettaglio sul funzionamento della tecnologia che per prima venne utilizzata e che, a nostro avviso, può dare al fenomeno maggiore sviluppo. Le reti neurali e il deep learning.

Free image on Pixabay

Le reti neurali sono vagamente ispirate al sistema computazionale dal modo in cui il cervello elabora le informazioni. Le cellule speciali chiamate neuroni sono collegate tra loro in una fitta rete, che consente di elaborare e trasmettere le informazioni.

Nell’uomo (e negli animali), la rete neurale biologica riceve dati e segnali tramite i sensi e, attraverso le cellule nervose, percepisce l’ambiente e riceve stimoli. Questi vengono poi elaborati da miliardi di neuroni interconnessi tra loro in una struttura non-lineare, che varia in risposta ai dati e agli stimoli ricevuti dall’esterno.

Così le reti neurali artificiali sono organizzate in livelli/strati di nodi, in una struttura anch’essa non-lineare, che ricevono i dati dagli strati precedenti ed elaborandoli trasmettono ai nodi dei livelli successivi il risultato delle elaborazioni. Questi risultati consistono tipicamente in informazioni più dettagliate.

Una rete neurale tradizionale potrebbe apparire così:

Il livello/strato di ingresso è quello che ha il compito di ricevere ed elaborare i segnali in ingresso adattandoli alle richieste dei neuroni della rete.

Gli strati nascosti sono quelli che hanno in carica il processo di elaborazione vero e proprio, possono anche essere strutturati con più livelli di neuroni. Maggiore è il numero di strati e maggiore sarà la potenza, in un certo senso sarà più “intelligente”.

Nello strato di uscita vengono raccolti i risultati.

Ogni nodo (o neurone artificiale) contiene un valore numerico che codifica l’input che vogliamo alimentare alla rete. Se stiamo cercando di prevedere il tempo per domani, i nodi di input potrebbero contenere la pressione, la temperatura, l’umidità e la velocità del vento codificati come numeri nell’intervallo [-1, + 1]. Questi valori vengono trasmessi al livello successivo; la parte interessante è che ciascuno strato smorza o amplifica i valori che trasmette.

Ogni nodo, somma tutti i valori che riceve e ne genera uno nuovo in base alla propria funzione. Il risultato del calcolo può essere recuperato dal livello di output; in questo caso, viene prodotto un solo valore (ad esempio, la probabilità di pioggia).

Quando le immagini sono l’input (o l’output) di una rete neurale, in genere abbiamo tre nodi di input per ciascun pixel, inizializzati con la quantità di rosso, verde e blu (RGB) che contiene. Finora l’architettura più efficace per le applicazioni basate su immagini è la rete neurale convoluzionale (CNN), ed è esattamente ciò che utilizza Deep Fakes.

Addestrare una rete neurale significa trovare un insieme di pesi per tutti gli strati, in modo che lo strato di output produca il risultato desiderato. Una delle tecniche più utilizzate per raggiungere questo obiettivo si chiama backpropagation[1] e funziona regolando nuovamente i pesi ogni volta che la rete commette un errore.

[1] La retropropagazione dell’errore (backpropagation), è un algoritmo per l’allenamento delle reti neurali artificiali, usato in combinazione con un metodo di ottimizzazione come per esempio la discesa stocastica del gradiente.

L’idea alla base del rilevamento dei volti e della generazione delle immagini è che ogni livello rappresenterà progressivamente funzioni complesse. Su ogni livello si tenta di apprendere dal livello precedente, la migliore rappresentazione possibile per un dato, come mostrato nell’esempio sotto[2]:

 

[2] Tratto da https://stats.stackexchange.com/questions/114385/what-is-the-difference-between-convolutional-neural-networks-restricted-boltzma/117157#117157

Nel livello 1 il computer identifica i pixel chiari e scuri

Nel livello 2 il computer impara a identificare bordi e forme semplici

Nel livello 3 il computer impara a identificare forme e oggetti più complessi

Nel livello 4 il computer apprende quali forme e oggetti possono essere usati per definire un volto umano

Questo lavoro di elaborazione/interpretazione del dato deve essere chiaramente allenato ed è possibile grazie agli autoencoder presenti nella rete neurale, che ne definiscono anche la tipologia[3].

 

[3] I principali sono: Vanilla, Multistrato, Convoluzionale, Regolarizzato.