X
    Categories: blog

IA: Un po’ di nozioni prima della pratica

Finalmente, dopo aver fatto un po’ di storia e filosofia negli articoli precedenti, in questo e nei prossimi articoli inizieremo a vedere più da vicino gli strumenti che ci mette a disposizione il vasto mondo della Intelligenza Artificiale.

Faremo un excursus dei fondamentali: termini, tecniche, un po’ di teoria.
Ovviamente non potremo vedere tutto, ma almeno gli aspetti principali cercheremo di affrontarli.
Successivamente, entreremo nel merito con alcuni casi d’uso e relativi codici sorgenti per risolverli.

Non preoccupatevi se non capirete tutto subito, alcuni concetti verranno ripresi ed approfonditi nei prossimi articoli e con il tempo avrete una visione migliore e più completa.

Niente paura: non sarà un corso di matematica o statistica, ma alcune nozioni base le dovremo almeno accennare per capire meglio su cosa si basano le tecniche che affronteremo. Inoltre si darà per scontata la conoscenza di alcune tecniche, strumenti o teoremi (ad esempio derivate, gradienti, sommatorie, medie, eccetera).
Non è necessario conoscere a memoria la loro definizione e dimostrazione, ma almeno sapere a grandi linee di cosa si tratta in modo da non perdersi nella lettura di alcuni articoli. Del resto non ci saranno interrogazioni o esami a sorpresa, quindi in caso potete consultare qualsiasi fonte vogliate per approfondire il tema.

Per quanto riguarda l’aspetto della programmazione, gli esempi che vedremo saranno scritti in Python, un linguaggio di programmazione ampiamente utilizzato nel campo della ricerca e che, per questo motivo, possiede numerose librerie che agevolano molto l’analisi e l’elaborazione dei dati.
Esistono librerie e framework analoghi anche in altri linguaggi (Java, C#, C++, ecc.), ma in questi articoli daremo per assodata la conoscenza di Python, del modo in cui vengono installati i suoi package (comando pip), degli ambienti di sviluppo (SpyderPycharmVSCode, ecc.), dell’uso degli ambienti virtuali (in questo caso non sono obbligatori, ma conoscerli può far comodo) e tutte quelle caratteristiche che dovessero rendersi utili negli esempi.
Eventualmente potrete divertirvi a fare il porting degli esempi verso il linguaggio che più vi aggrada.

Ultima nota: gli esempi saranno in sintassi Python 3. Per chi non lo sapesse, è ancora molto utilizzato Python 2 che però ha una sintassi leggermente diversa (e anche comportamenti leggermente diversi) per alcuni comandi, quindi non tutti i sorgenti sono compatibili tra le due versioni. Per utilizzare una sintassi omogenea è possibile utilizzare il modulo __future__, ma anche in questo caso non mi addentrerò su questi aspetti, anche perchè alcune librerie funzioneranno solo con la versione 3 del linguaggio.
Ovviamente potrete scrivermi per ricevere aiuto e/o anche per scambiarci informazioni.

Ah, ovviamente arriveremo anche alle reti neurali, che vanno tanto di moda ultimamente e che effettivamente ci levano tante castagne dal fuoco (con il non trascurabile effetto collaterale della perdita di controllo di gran parte del processo), ma tenete bene a mente che l’intelligenza artificiale mette a disposizione numerosi altri strumenti più “classici“, spesso sottovalutati, che hanno delle performance estremamente interessanti.

I fondamentali

Cominciamo con un po’ di terminologia, in modo che certe parole inizino ad entrarci in testa e possiamo fare gli spacconi con gli amici al bar.

Pattern

Il pattern è un campione di dati che porta con sè delle informazioni utili. Nel nostro caso è sinonimo di schema o esempio.
I pattern possono essere di vari tipi:

  • numerici: sono valori, proprietà o caratteristiche misurabili sotto forma di numeri (ad esempio l’altezza o il peso o l’età di una persona, una distanza, eccetera). Solitamente i pattern numerici sono rappresentabili come vettori multidimensionali.
  • categorici: sono caratteristiche qualitative non misurabili in modo numerico (ad esempio il sesso o il colore degli occhi o il gruppo sanguigno di una persona, eccetera). Per comodità di elaborazione è però possibile associare dei numeri ad ogni categoria (ad esempio 1 per maschio2 per femmina, eccetera)
  • sequenziali: sono sequenze di dati sulle quali insistono relazioni spaziali e temporali (ad esempio uno stream audio, la sequenza di fotogrammi di un video, la sequenza di parole che formano una frase, eccetera). In questi casi la posizione di una informazione all’interno della sequenza è essa stessa una informazione fondamentale.

Pattern recognition

Una disciplina fondamentale dell’intelligenza artificiale è la pattern recognition, cioè il riconoscimento dei pattern, la quale si suddivide principalmente in tre tecniche da utilizzarsi a seconda di ciò che si vuole ottenere:

classificazione: ad un pattern in ingresso viene assegnata una classe in base ad alcune caratteristiche.
Ne deriva quindi che una classe è un insieme di pattern con caratteristiche comuni.
Ad esempio: raggruppare le persone in base al colore degli occhi o al sesso, eccetera.
Si possono utilizzare due (binary classification) o più classi (multi-class classification).
Esempi di classificazione: face recognition, medical diagnosys, eccetera.

regressione: ad un pattern in ingresso viene assegnato un valore continuo.
Risolvere un problema di regressione corrisponde a trovare una funzione che approssima le coppie input/output fornite durante la fase di training.
Esempi di regressione: stime, previsioni, eccetera.



clustering: vengono individuati gruppi (cluster) di pattern con caratteristiche simili.
Rispetto alla classificazione, le classi non sono note a priori e gli algoritmi analizzano le caratteristiche dei pattern individuando similitudini che possono essere anche molto complesse.
Esempi di clustering: nel marketing l’individuazione dei consumi e delle preferenze dei consumatori in base ai loro comportamenti, in generale la profilazione degli utenti di un servizio, eccetera.

Feature

Nel campo dell’apprendimento automatico, una caratteristica (nota anche con il rispettivo termine inglese feature) è una proprietà individuale e misurabile di un fenomeno osservato.
(Wikipedia)

Si tratta solitamente del risultato di una elaborazione che tende a selezionare, raggruppare, trasformare le informazioni di un pattern in una informazione diversa ma più raffinata e quindi maggiormente adatta a svolgere lo scopo iniziale (pattern recognition).

Questa elaborazione è in generale definita riduzione della dimensionalità e si suddivide principalmente nella estrazione delle caratteristiche (o feature extraction) e nella selezione delle caratteristiche (o feature selection).

Nella prima si estraggono, automaticamente o per mezzo dizionari,  una serie di features dai dati grezzi, utili per la classificazione o regressione.

Nella seconda si selezionano le feature salienti dagli ingressi, andando ad escludere quelle che apportano poca informazione utile allo scopo finale ed eliminando la ridondanza delle informazioni. si trasformano infine gli ingressi in modo da ottenere un insieme più piccolo di feature raffinate che meglio si prestano al raggiungimento dell’obiettivo dell’elaborazione, in quanto maggiormente rappresentative di un particolare stato del pattern in ingresso.

Nel campo della computer vision, ad esempio, una feature può essere rappresentata dalla presenza o meno di un contorno, dal suo orientamento, dalla presenza di certi colori, dalla intensità della illuminazione, eccetera.

Feature learning

E’ l’insieme delle tecniche che consentono ad un sistema di scoprire in autonomia quali caratteristiche (o feature) estrarre dai pattern in ingresso.

Rappresenta la principale innovazione del machine learning, in quanto va a sostituire la cosiddetta feature engineering dove è l’uomo che analizza i dati per trovare le feature migliori da utilizzare nel pattern recognition.
Al tempo stesso rappresenta anche un forte effetto collaterale, in quanto l’apprendimento delle feature avviene in autonomia e di fatto trasforma un modello di machine learning in una sorta di blackbox dentro la quale non sappiamo leggere ciò che accade: abbiamo un ingresso, otteniamo un’uscita, quello che avviene nel mezzo possiamo vederlo ma non sappiamo interpretarlo.

Il feature learning si suddivide in tre tipologie:

  • supervised learning (apprendimento supervisionato): al sistema vengono forniti esempi in ingresso e i relativi risultati corretti a cui il sistema deve tendere. Il sistema imparerà ad adeguare progressivamente le proprie caratteristiche in modo tale che applicando in ingresso un pattern qualsiasi, il dato di output sarà quello che ci si aspetta che sia (al netto di un errore).
    Tale apprendimento si applica tipicamente alle classificazioni e alle regressioni.
    Ad esempio: ad un sistema di verifica delle mail, verranno forniti esempi di mail etichettetati come “spam” ed altri esempi etichettettati come “no spam“.
    Durante la fase di apprendimento (training) il sistema elaborerà tutti gli esempi e progressivamente correggerà i propri parametri fino ad ottenere una regola di riconoscimento delle mail che contengono spam. Tale regola è chiamata modello.
  • unsupervised learning (apprendimento non supervisionato): al sistema vengono forniti solo ingressi e si demanda a lui il compito di trovare delle classi di raggruppamento dei pattern.
    Tale apprendimento si applica tipicamente al clustering.
    Ad esempio: ad un sistema vengono forniti i dati delle ricerche, degli acquisti, ed altre informazioni di un sistema di ecommerce.
    Il sistema individuerà caratteristiche comuni ai vari esempi e creerà quindi nuovi cluster che li raggrupperanno, aiutando il marketing a creare campagne mirate per alcuni di essi (ad esempio: offerte speciali per chi pratica un certo sport, consigliare un prodotto da abbinare a quello che il consumatore ha messo nel carrello, eccetera).
  • reinforcement learning (apprendimento con rinforzo): al sistema vengono forniti degli ingressi e in base a quanto l’uscita si discosta dal risultato ottimale, il sistema viene premiato o punito. L’obiettivo del sistema sarà quello di massimizzare i premi e quindi mano a mano che esplorerà nuovi dati in ingresso, facendo tesoro di quanto accaduto in passato, il sistema tenderà ad avvicinarsi al risultato ottimale.
    Tale apprendimento unisce i vantaggi dell’apprendimento supervisionato e di quello non supervisionato:
    – come nell’apprendimento non supervisionato, il sistema non riceve i risultati corretti su cui costruire il proprio apprendimento, ma basa tutto sulla funzione di rinforzo che misura il grado di successo di un’azione o di una decisione rispetto ad un obiettivo predeterminato
    – come nell’apprendimento supervisionato, il sistema è aiutato nel processo di apprendimento, ma in questo caso l’aiuto non gli arriva da etichette applicate da un supervisore, ma dalla funzione di rinforzo che valuta il feed-back dell’azione o della decisione.
    In generale un sistema che utilizza il reinforcement learning tende a ripetere le azioni con ricompensa più alta, evitando le azioni in perdita. Inoltre è in grado di valutare anche situazioni non previste inizialmente dal progettista.

Funzione obiettivo

In generale un sistema di intelligenza artificiale trasforma i dati in ingresso in dati di uscita attraverso una funzione obiettivo F, regolata da un insieme di parametri θ.

L’apprendimento consiste nel trovare i parametri ottimali θ’ per i quali, applicando la funzione obiettivo ad un set di valori di input, ottengo dei dati di output pari a quelli attesi, al netto di un certo errore ε.

La funzione obiettivo può essere più o meno complessa e la ricerca dei parametri ottimali richiede di esplorare lo spazio degli stati del sistema per trovare dei punti di minimo o massimo (a seconda del caso) della funzione obiettivo.
L’esplorazione dello spazio degli stati può richiedere tempi improponibili, quindi si utilizzano tecniche matematiche (che sfruttano derivate, gradienti, eccetera) o anche euristiche che modificano i parametri coerentemente con l’andamento dei risultati in uscita.

Iperparametri

Gli iperparametri sono valori che caratterizzano un modello dall’altro ed influiscono sul funzionamento e sulle prestazioni del modello stesso.

Il loro numero e la loro natura cambia a seconda del modello: ad esempio sono iperparametri il numero di neuroni o il numero di layer di una rete neurale, il grado del polinomio di una regressione, i parametri di un filtro convoluzionale, eccetera.

L’ottimizzazione degli iperparametri di un modello è un problema complesso la cui soluzione, a volte, è empirica e comunque richiede solitamente il confronto con numerose varianti del modello per selezionare quella migliore.

Training set, validation set, test set

Per un ottimale processo di addestramento e valutazione del modello, è necessario utilizzare insiemi disgiunti di pattern di esempio da utilizzare in tre distinte fasi:

  • training set: esempi da fornire al modello per l’ottimizzazione dei parametri θ per il calcolo della funzione obiettivo
  • validation set: esempi da fornire al modello per valutare la bontà degli iperparametri del modello
  • test set: esempi da fornire al modello per valutare le prestazioni finali del sistema e il grado di generalizzazione raggiunto

I tre set di pattern dovrebbero essere disgiunti tra loro in modo da evitare sovrastime delle prestazioni e limitare l’overfitting. Questo perchè se il validation o il test set sono sottoinsiemi del training set, significa che gli esempi forniti in fase di valutazione sono già stati visti ed “imparati” dal modello che quindi fornirà dei buoni risultati. Se i set di valutazione contengono invece esempi mai visti prima dal modello, una buona risposta dello stesso denoterà un buon livello di generalizzazione raggiunto in fase di addestramento.

Epoch, batch size e iterazioni

Durante la fase di addestramento del modello, vengono forniti i pattern contenuti nel training set, in modo che il modello possa adattare i propri parametri alla ricerca della funzione obiettivo ottimale. Non è però sufficiente un unico passaggio per ottenere un risultato ottimale, ma è necessario eseguire più cicli di elaborazione del training set ed adattamento dei parametri.
Tra l’altro, per i limiti imposti dalla memoria e dalla potenza di calcolo disponibile per queste elaborazioni, non è solitamente possibile elaborare l’intero training set in un colpo solo. Quindi vediamo i parametri che entrano in gioco nel definire come deve svolgersi l’elaborazione del training set durante la fase di addestramento.

Quando l’intero training set è stato sottoposto al modello, allora si ha una epoch. La fase di addestramento solitamente si esaurisce dopo diverse epoch (possono servirne anche decine di migliaia). Ma non sempre, aumentando le epoch, il modello migliora. Tra poco approfondiremo questo aspetto.

Come detto sopra, il training set potrebbe essere troppo grande per essere elaborato tutto in una volta (pensiamo ad un training set composto da decine di migliaia di immagini). Quindi si può suddividere il training set in sottogruppi uniformi, chiamati batch.
Il numero di esempi contenuti in ogni batch è chiamato batch size.

Da cui deriva la definizione di iterazione che corrisponde al numero di batch necessari a completare un epoch.

Facciamo un esempio: abbiamo un training set di 2.000 esempi, troppo grande per essere elaborato in una volta sola.
Decidiamo quindi di suddividere il training set in batch con 500 esempi ciascuno.
Avremo quindi che 1 epoch è formata da 4 iterazioni.

Il numero di epoch ed il batch size influiscono sulla velocità di addestramento di un modello, ma anche sul suo modo di perfezionarsi. Come capita spesso nell’ambito dell’intelligenza artificiale e del machine learning, non ci sono regole scolpite nella roccia ma regole empiriche che consigliano di non usare batch size troppo grandi o troppo piccoli.

Se il batch size è troppo piccolo (< 10) allora non si avrà un’ottimizzazione delle performance: in particolare nelle elaborazioni accelerate, i calcoli sono svolti da processori SIMD (Single Instruction Multiple Data) e quindi si ha un beneficio quando si esegue una singola istruzione di calcolo su un numero elevato di dati. Se il batch size è piccolo, ci saranno pochi dati da elaborare e i benefici dell’architettura SIMD non saranno sfruttati appieno.

Viceversa se il batch size è troppo grande si potrebbe avere un problema di esaurimento della memoria o una tendenza all’overfitting più accentuata (questa non è una regola fissa, ma dipende dal singolo caso a da diversi fattori tra cui rientra anche la distribuzione degli esempi nel training set).

Batch size tipici sono 32, 64 o 128 (solitamente potenze di 2 per motivi di allocazione della memoria, ma è possibile utilizzare anche valori diversi).

E’ chiaro che se l’hw a disposizione non consente di spingerci oltre, si utilizzeranno batch size molto piccoli, anche 1 o 2.

Metriche

Come si valuta la bontà dei risultati di un sistema di intelligenza artificiale? Misurando la distanza del risultato ottenuto dal sistema rispetto al risultato atteso. E per fare questo entrano in gioco le metriche, degli strumenti di natura matematica e/o statistica che consentono appunto di valutare quanto la risposta del sistema sia lontana o vicina alla risposta corretta.

A seconda della natura del problema e dei pattern, si utilizzano metriche diverse: si possono utilizzare funzioni di calcolo della distanza euclidea (come quelle che utilizzeremmo per calcolare quanta strada si deve percorrere per andare da un punto ad un altro), si possono utilizzare medie, scarti quadratici, norme, eccetera.

La scelta della giusta metrica è un fattore importante per ottenere un risultato attendibile ed anche per velocizzare il processo di addestramento.

Loss e accuracy

La loss function (o funzione di costo) è una funzione che valuta le prestazioni di un modello. Rappresenta una perdita e quindi l’obiettivo di un buon apprendimento è la minimizzazione della loss function: minore è la loss, migliore è il modello (a meno che il modello non sia in overfitting, come vedremo).

La loss viene calcolata sui set di pattern di allenamento e validazione (training e validation set) e quindi è limitata a valutare quanto il modello si sta comportando bene con questi due set.

E’ un valore numerico che rappresenta una summa degli errori fatti per ogni esempio del training o validation set.

La accuracy di un modello viene in genere determinata dopo che i suoi parametri sono stati appresi.
In un sistema di classificazione, ad esempio, i campioni di test vengono forniti al modello e vengono conteggiati gli esempi correttamente elaborati. Infine viene calcolata l’accuratezza come rapporto tra i campioni correttamente elaborati e il totale dei campioni inviati al modello.
Ad esempio, se su 1.000 esempi il modello ne classifica correttamente 952, si ottiene una accuratezza pari a 0,952 che corrisponde ad una accuratezza percentuale del 95,2%
In generale, quindi, per la classificazione vale:

Nel caso di regressione si utilizza solitamente l’RSME (da Root Mean Squared Error), cioè la radice quadrata della media dei quadrati degli scostamenti tra valore vero e valore predetto.

Matrice di confusione

Un altro modo per evidenziare gli errori di classificazione è la cosiddetta matrice di confusione. Si tratta di disegnare una mappa bidimensionale con le classi vere in riga e le classi predette in colonna. Colorando ogni cella in base al rapporto tra classe predetta e classe vera, vengono evidenziate zone di confusione dove il modello non si comporta adeguatamente.

L’esempio in figura mostra la matrice di confusione di un classificatore di cifre decimali. Un buon risultato di classificazione fornisce una mappa con una diagonale principale molto accentuata e valori molto bassi in tutte le altre zone. Nell’esempio in figura si può notare che lo zero viene classificato correttamente il 46% delle volte, l’uno il 44% e così via. Ci sono però diverse situazioni in cui il modello va in confusione, ad esempio in riga zero si nota che il 25% delle volte la cifra sei viene scambiata per zero, mentre in riga tre, il 28% delle volte lo zero viene scambiato per un tre e così via.

Analizzando la matrice di confusione si può capire quale sia la distribuzione degli errori e quindi si può capire se il problema è del modello o del training set poco equilibrato, agendo di conseguenza.

Precision – Recall

Dato un classificatore binario (cioè con due sole classi, che chiameremo positivo e negativo per comodità), diciamo che la classificazione di un pattern può produrre uno dei seguenti risultati:

  • True Positive (TP) quando un pattern positivo è stato correttamente assegnato alla classe positivo
  • True Negative (TN) quando un pattern negativo è stato correttamente assegnato alla classe negativo
  • False Positive (FP) quando un pattern negativo è stato erroneamente assegnato alla classe positivo
  • False Negative (FN) quando un pattern positivo è stato erroneamente assegnato alla classe negativo

Di seguito  è riportata una rappresentazione di un insieme di pattern positivi (pallini pieni) e negativi (cerchi vuoti). Consideriamo di voler utilizzare un nostro modello di classificazione per ricercare tutti i pattern positivi. Quindi la classe dei pattern positivi sarà il nostro insieme di pattern rilevante o attinente (in figura è l’intera colonna a sinistra sotto la scritta relevant elements). In caso il nostro classificatore non sia perfetto, ci saranno degli errori di classificazione. Quindi è probabile che gli elementi selezionati tramite il nostro classificatore siano quelli riportati nel cerchio selected elements. Quindi, come indicato in figura, ci saranno dei pattern TPTNFP e FN.

Con precision (o precisione) si indica quanto è accurato il sistema, cioè quale percentuale dei pattern selezionati è attinente.

Con recall (o recupero) si indica quanto è selettivo il sistema, che probabilità ha un pattern attinente di ricadere nell’insieme dei pattern selezionati.

Convergenza

L’obiettivo della fase di addestramento del modello è la convergenza della loss function e della accuracy.
Ad ogni epoch la loss dovrebbe decrescere, tendendo asintoticamente ad un valore minimo (più è vicino a 0, meglio è), mentre l’accuracy dovrebbe crescere tendendo asintoticamente ad un valore massimo (più è vicino ad 1, meglio è).

Il comportamento di queste due metriche ci può far capire come si sta evolvendo l’addestramento del modello, se sta rispondendo bene o se è necessario rivedere il tutto perchè si sta inevitabilmente allontanando dalla soluzione desiderata.

Vediamo qualche esempio:

  • Se la loss non decresce o oscilla sensibilmente tra valori alti e bassi, allora non c’è convergenza. I motivi possono essere diversi: l’algoritmo di ottimizzazione dei parametri potrebbe non essere quello giusto, gli iperparametri potrebbero non essere ottimali, ad esempio il learning rate potrebbe essere troppo alto (per learning rate si intende un coefficiente utilizzato in fase di addestramento per accelerare o diminuire la velocità di variazione dei parametri, lo vedremo più avanti).
  • Se l’accuracy resta lontana da 1, è probabile che il modello non sia in grado di gestire la complessità del problema.
  • Se la loss decresce, ma l’accuracy non cresce, è probabile che le metriche scelte per loss e accuracy non siano corrette per quel caso specifico o che il modello stia andando in overfitting

Overfitting

In caso l’accuracy calcolata sul training set tenda ad avvicinarsi ad 1, mentre l’accuracy calcolata sul validation set o sul test set tenda ad allontanarsi da 1, allora il modello è in overfitting.

In pratica è come se il modello, piuttosto che imparare le regole generali di riconoscimento dei pattern, avesse imparato a memoria i pattern di esempio, di fatto riconoscendo molto bene quelli già visti, ma andando in errore facilmente con i pattern non ancora visionati.

Il problema dell’overfitting può dipendere da diversi fattori. Solitamente i gradi di libertà del modello sono eccessivi rispetto dalla complessità del training set. In sostanza, questo può significare due cose:

  • il training set è troppo piccolo o poco vario, quindi il modello non riesce a trovare una regola sufficientemente generalizzata
  • il modello è troppo complesso, quindi trova più facile “aderire” ai singoli esempi che determinare una regola di riconoscimento generalizzata.

Nell’esempio di regressione qui sopra si vede che con un polinomio di grado 1 (una retta) il modello media tra tutti i punti, con un ampio errore su tantissimi pattern di esempio (il modello in questo caso è in underfitting), con un polinomio di grado 4 si ottiene una soluzione ottimale con un errore molto piccolo, aumentando il grado del polinomio (arrivando al grado 15 dell’esempio) il modello diminuisce ulteriormente l’errore perchè praticamente la funzione riesce ad intercettare ogni singolo pattern di esempio, ma tende comunque ad allontanarsi dalla funzione ideale (in verde), andando quindi in overfitting.
Infatti in questa situazione, in caso venissero forniti al modello altri pattern realistici (quindi vicini alla linea verde ideale), l’errore del modello sarebbe molto ampio, nonostante le sue performance calcolate sui pattern di esempio siano ottime.

In caso di overfitting si può intervenire rimodulando gli iperparametri e la complessità del modello o applicando tecniche di dropout (che affronteremo più avanti), aumentando il numero e la varietà degli esempi del training set oppure interrompendo i cicli di addestramento arrivando alla epoch in cui l’accuracy del validation set inizia a ridiscendere (vedi l’immagine ad inizio di questo capitolo). In quest’ultimo caso, la epoch in cui si interrompe l’addestramento è chiamata early stopping epoch e denota il punto di addestramento migliore ottenibile con quel training set e quella configurazione del modello.

Data augmentation

Nel caso in cui il training set fosse molto piccolo e poco bilanciato negli esempi, si possono usare tecniche di data augmentation al set per differenziarlo in modo artificiale.

Queste tecniche, in pratica, applicano ad ogni esempio dei cambiamenti casuali controllati: nel caso di immagini per un classificatore, possono essere applicate rotazioni, tagli, modifiche alla palette dei colori, aggiunta di rumore casuale, eccetera.

A valle dell’elaborazione di data augmentation, si otterrà quindi un nuovo training set con un numero di esempi maggiore e diversificati, consentendo quindi al modello di raggiungere una maggiore generalizzazione.

Ready… Set… GO!

Ok, dopo questa veloce lettura dei termini e strumenti di base, siamo pronti a vedere qualche cosa di più concreto.

Quindi nel frattempo affilate gli artigli, rispolverate Python e noi ci rivediamo ai prossimi articoli.

Cristiano Casadei: Lavoro in Maggioli dal ’96 e ho contribuito a diversi prodotti dell’Azienda: da Concilia a TradeWin, ai prodotti per i Demografici. Dal 2016 entro a far parte a tempo pieno del team dei Progetti Speciali, ora R&D. In questo team ho contribuito allo sviluppo di Revisal, Scacco2 e ora mi occupo di studiare e sperimentare soluzioni che fanno uso di Intelligenza Artificiale. Come si può intuire dalla foto, amo la montagna.
Related Post