Machine Learning

Con il termine Data Science si intende un processo, non un evento. È il processo di utilizzo dei dati per comprendere, scoprire le intuizioni e le tendenze che si nascondono dietro i dati. Il Data Scientist raccoglie i dati da varie fonti. Utilizza quindi software per l'analisi dei dati, algoritmi, metodi statistici e strumenti di machine learning per navigare i database, interrogarli ed estrarre le informazioni utili (data mining). Così il Data Scientist riesce ad individuare all'interno di un gran numero di dati ininfluenti solo quelle specifiche informazioni che rappresentano un valore, costruendo modelli di correlazione, dimostrando causalità, sviluppando scenari e modelli predittivi.

  • Intelligenza: Complesso di facoltà psichiche e mentali che consentono all’uomo di pensare, comprendere o spiegare i fatti o le azioni, elaborare modelli astratti della realtà, intendere e farsi intendere dagli altri, giudicare, e lo rendono insieme capace di adattarsi a situazioni nuove e di modificare la situazione stessa quando questa presenta ostacoli all’adattamento.

  • Intelligenza artificiale: Riproduzione parziale dell’attività intellettuale propria dell’uomo (con particolare riguardo ai processi di apprendimento, di riconoscimento, di scelta) realizzata o attraverso l’elaborazione di modelli ideali, o concretamente, con la messa a punto di macchine che utilizzano per lo più a tale fine elaboratori elettronici.

    Pensare, comprendere, elaborare → Ragionare

Intelligenza Artificiale (AI) è una disciplina molto vasta che copre diverse tematiche:

  1. Trial and Error Search, Heuristics, Evolutionary computing Knowledge

  2. Representation and Reasoning

  3. Automated Theorem Proving

  4. Expert Systems

  5. Planning, Coordination and Manipulation Intelligent Agents

  6. Robotics

  7. Automatic Programming

  8. Natural Language Processing Vision and Speech

  9. Machine Learning (ML). Un sistema di Machine Learning (apprendimento automatico) durante la fase di training apprende a partire da esempi (in modo più o meno supervisionato). Successivamente è in grado di generalizzare e gestire nuovi dati nello stesso dominio applicativo. Più formalmente: “impara dagli esempi a migliorare le proprie prestazioni per la gestione di nuovi dati provenienti dalla stessa sorgente” (Mickey 91).

Il Machine Learning è oggi ritenuto uno dei approcci più importanti dell'intelligenza artificiale. L'apprendimento è una componente chiave del ragionamento: Apprendere → migliorare, evolvere Consente di gestire la complessità di applicazioni reali, talvolta troppo complesse per poter essere modellate efficacemente. Apprendere il comportamento desiderato dai dati/esempi forniti, semplifica lo sviluppo di applicazioni. Rende possibile esplorare/comprendere i dati (mining) senza la necessità di programmazione esplicita: software 2.0? Addestramento end-to-end (es. guida automatica veicolo). Deep learning: superato stato dell'arte in molte applicazioni.

Il termine machine learning si riferisce ad una serie di argomenti relativi alla creazione e alla valutazione di algoritmi che facilitano il riconoscimento, la classificazione e la previsione dei modelli, basati su modelli derivati da dati esistenti. La creazione del classificatore deve essere altamente meccanizzata e non deve comportare un eccessivo contributo umano. L'obiettivo di base è che l'uso dei metodi e di costruzione di algoritmi automatici deve ridurre al minimo la possibilità che i pregiudizi umani possano influenzare la selezione e le prestazioni dell'algoritmo. Sia la creazione dell'algoritmo sia il suo funzionamento per classificare oggetti o prevedere eventi devono essere basati su dati concreti e osservabili.

La comprensione di sistemi biologici complessi è una ricerca costante per molti ricercatori. I costi in rapida diminuzione del sequenziamento ad alto rendimento, lo sviluppo di tecnologie fortemente parallele e le nuove biotecnologie dei sensori hanno consentito la generazione di dati che descrivono sistemi biologici su più dimensioni. Queste comprendono ad esempio: la sequenza del DNA, gli stati epigenomici, l'attività di espressione genica in singola cellula, la proteomica, le misure funzionali e fenotipiche, le proprietà ecologiche e di stile di vita… Questi progressi tecnologici nella generazione dei dati hanno guidato il campo della bioinformatica negli ultimi dieci anni, producendo quantità sempre maggiori di dati di tipi diversi man mano che i ricercatori sviluppano strumenti di analisi dei dati.

Di solito, i fattori necessari per comprendere un fenomeno come ad esempio una malattia, non possono essere catturati da un singolo tipo di dati. Gran parte della complessità in biologia e medicina rimane quindi inspiegabile. Basandosi rigorosamente su tipi di studi a dati singolo, l’evento non verrà mai spiegato. Definizioni utili:

  • Algoritmo: Un insieme di regole e tecniche statistiche utilizzate per apprendere modelli dai dati

  • Modello: Un modello viene addestrato utilizzando un algoritmo di apprendimento automatico

  • Variabile predittore: è/sono una caratteristica/caratteristiche dei dati che può essere utilizzata per prevedere l'output

  • Variabile di risposta: È la caratteristica o la variabile di output che deve essere prevista utilizzando la/le variabile/i predittive

  • Dati di allenamento (training data): sono i dati (70%) con i quali è costruito il modello di machine learning

  • Dati di prova (testing data): sono i dati (30%)con i quali è valutato il modello di machine learning

Step analysis

Il processo di machine learning è composto dalla costruzione di un modello predittivo (predictive model) che può essere usati per trovare una soluzione (response variable) ad un problema stabilito (problem statement).

  1. Definizione del Problem Statement: che variabili voglio predire (numero o classe), come classifico i dati?

  2. Data Gathering, manuale o dal web.

  3. Data Preparation, pulizia generale (rimozione dati corrotti/non necessari, identificazione missing values, etc). Ordinare il dataset è molto importante: ogni variabile forma una colonna, ogni osservazione forma una riga ed ugni unità osservazionale forma una tabella.

  4. Analisi esplorativa dei dati (EDA), per comprendere i trend e le caratteristiche dei dati, molto spesso con grafici.

  5. Costruzione di un modello predittivo di machine learning, dividendo il dataset in 70% training data e 30% test data. Perché si fa model optimization? Immagina di voler prevedere sulla base di una radiografia al torace se un determinato paziente è affetto o meno da COVID-19. Ora, supponiamo di formare un modello da un set di dati di 100 radiografie ed i loro risultati (noti). Successivamente, proviamo il modello sull’insieme di dati originale e notiamo che prevede risultati con un’accuratezza del 99%. Ottimo! Ma ora arrivano le cattive notizie: quando eseguiamo il modello su un nuovo set di dati (“invisibile“, ossia dati che il modello non ha mai visto, non presente cioè nel dataset di training) di radiografie al torace, otteniamo solo un’accuratezza del 50%. Come è possibile? Il nostro modello non generalizza bene dai dati di apprendimento ai dati invisibili. Questo problema è noto col nome di overfitting ed è un problema comune nell’apprendimento automatico e nella scienza dei dati.

    Per generalizzazione, si intende l’abilità di una macchina di portare a termine in maniera accurata esempi o compiti nuovi, che non ha mai affrontato, dopo aver fatto esperienza su un insieme di dati di apprendimento. La generalizzazione si riferisce a quanto bene i concetti appresi da un modello di apprendimento automatico si applicano ad esempi specifici non visti dal modello durante l’apprendimento stesso. Non è un caso che l’obiettivo di un buon modello di apprendimento automatico generalizzare bene dai dati di addestramento a tutti i dati del dominio problematico. Questo ci consente di fare previsioni in futuro sui dati che il modello non ha mai visto.

    Basandosi su quest’idea, termini come sovra-adattamento (o meglio overfitting) e sotto-adattamento (underfitting) si riferiscono a carenze che potrebbero subire le prestazioni del modello. Una buona generalizzazione richiede che il modello addestrato sia in grado di riconoscere la differenza tra segnale e rumore. Nella modellazione predittiva, possiamo pensare al “segnale” come al vero modello sottostante che desideri imparare dai dati. “Rumore”, d’altra parte, si riferisce alle informazioni o alle casualità irrilevanti in un set di dati. Infatti, se l’algoritmo è troppo complesso o flessibile (ad esempio ha troppe funzioni di input o non è adeguatamente regolarizzato), può finire per “memorizzare il rumore” invece di trovare il segnale. Questo modello farà quindi previsioni basate su quel rumore. Si mostrerà performante sui suoi dati di allenamento ma non su quelli nuovi, mai visti.

    Oltre alla generalizzazione, per comprendere come un modello di apprendimento automatico “soffre” di overfitting, bisogna avere famigliarità con i concetti di bias (o distorsione) e varianza. Il modello con elevata La distorsione è la differenza tra la previsione media del nostro modello e il valore corretto che stiamo cercando di prevedere. Non è altro che l’errore sistematico, che non dipende dalla casualità dei dati. La distorsione (high bias) presta pochissima attenzione ai dati di addestramento e semplifica eccessivamente il modello. Porta sempre a errori elevati nell’allenamento e nei dati di test. La varianza, invece, rappresenta la variabilità della previsione del modello, se si addestra il modello più volte su diversi dataset. Ci dice, cioè, quanto il modello è sensibile alla casualità dei dati nel set di addestramento. Il modello con varianza elevata presta molta attenzione ai dati di addestramento tuttavia non generalizza i dati che non si sono mai visti prima. Di conseguenza, tali modelli si comportano molto bene sui dati di allenamento, ma presentano elevati tassi di errore sui dati di test.

    Nell’apprendimento supervisionato, la condizione di underfitting si verifica quando un modello non è in grado di acquisire il pattern sottostante dei dati. Questi modelli di solito hanno un bias elevato e una bassa varianza. Succede quando abbiamo una quantità molto limitata di dati per costruire un modello accurato o quando proviamo a costruire un modello lineare con dati non lineari. In tali casi, le regole del modello di apprendimento automatico sono troppo facili e flessibili per essere applicate a dati così minimi e quindi il modello probabilmente farà molte previsioni sbagliate. L’underfitting spesso non viene discusso in quanto è facile da rilevare data una buona metrica delle prestazioni. Per migliorare l’accuratezza di un modello che soffre di underfitting si possono provare algoritmi di apprendimento automatico alternativi, oppure aggiungere alcune caratteristiche/features al problema di studio.

    Nell’apprendimento supervisionato, l’overfitting si verifica quando il modello cattura il rumore insieme al modello sottostante nei dati. Succede quando addestriamo il modello eccessivamente su set di dati rumorosi. Questi modelli hanno un basso bias e una varianza elevata, come accade ad esempio agli alberi decisionali che sono inclini ad un eccesso di adattamento. Per rilevare l’overfitting, un primo passo è quello di verificare cosa accade al test set e al train set. Se il nostro modello fa molto meglio sul set di train (allenamento) che sul set di test, allora probabilmente ci stiamo adattando troppo (c’è un overfitting). Ciò avviene, se ad esempio, il nostro modello vedesse una precisione del 99% sul set di allenamento, ma solo il 55% di precisione sul set di test.

    Evitare l’overfitting risulta più semplice rispetto che evitare l’overfitting: pertanto valutiamo solamente il secondo caso, dove è possibile avvalersi di più soluzioni. Di seguito vengono proposte le principali tecniche:

    • Utilizza la convalida incrociata (cross-validation). La convalida incrociata è una potente misura preventiva per contrastare l’overfitting. L’idea è intelligente: usa i dati di allenamento iniziali per generare più divisioni di mini test sets e utilizza queste divisioni per perfezionare il modello. Nella convalida incrociata k-fold standard, si divide il campione di dati in un numero k definito di sottocampioni o segmenti ad estrazione casuale, disgiunti, che serviranno come fase di allenamento (training). Il modello poi effettuerà previsioni sul segmento k-esimo (ad esempio, utilizzando i segmenti k-1 come esempi) e verrà valutato l’errore. Ciò significa che ogni volta uno dei sottoinsiemi k viene usato come set di test, mentre gli altri sottoinsiemi k-1 sono messi insieme per formare un set di allenamento. Alla fine della procedura, gli errori calcolati vengono mediati per fornire una misura della stabilità del modello (ossia quanto bene il modello prevede nuove istanze). La convalida incrociata consente di ottimizzare gli iperparametri solo con il training dataset originale. Ciò consente di mantenere il test dataset come un set di dati davvero invisibile per la valutazione del modello finale.

    • Allena il modello con più dati. In linea generale, più dati di allenamento vengono forniti al modello e meno è probabile che si adattino troppo. Il motivo è che, quando si aggiungono più dati, il modello diventa incapace di sovrautilizzare tutti i campioni ed è costretto a generalizzare per fare progressi. La raccolta di più dati dovrebbe essere il primo passo in ogni attività di analisi dei dati, poiché un numero maggiore di dati comporterà una maggiore precisione del modello, riducendo al contempo la possibilità di un eccesso di adattamento.

    • Rimuovi le funzionalità/caratteristiche. Alcuni algoritmi hanno una selezione integrata delle funzionalità. Per quelli che non lo fanno, puoi migliorare manualmente la loro generalizzabilità rimuovendo le caratteristiche di input irrilevanti. Quindi, invece di utilizzare tutte le funzionalità, è meglio utilizzare solo quelle più importanti. Questo, da un lato, renderà il processo di allenamento notevolmente più veloce, dall’altro, può aiutare a prevenire un eccesso di adattamento perché il modello non ha bisogno di apprendere quante più funzionalità. Se qualcosa non ha senso oppure è difficile giustificare determinate funzionalità, questo è un buon modo per identificarle.

    • Esegui un arresto anticipato. Quando stai addestrando un algoritmo di apprendimento in modo iterativo, puoi misurare il rendimento di ogni iterazione del modello. Fino a un certo numero di iterazioni, le nuove iterazioni migliorano il modello. Dopo quel punto, tuttavia, la capacità del modello di generalizzare può indebolirsi iniziando a sovrautilizzare i dati di allenamento. L’arresto anticipato indica l’interruzione del processo di allenamento prima che l’algoritmo superi quel punto. Oggi, questa tecnica viene utilizzata principalmente nel deep learning, mentre altre tecniche (ad esempio la regolarizzazione) sono preferite per l’apprendimento automatico classico. Si noti che questa valutazione avviene sul set di validazione, poiché il dataset è consigliabile suddividerlo in tre sottoinsiemi: addestramento (train set), convalida (validation set) e set di test (test set). Il set di training contiene i dati utilizzati per addestrare il modello (come previsto), mentre i set di validazione e test contengono dati non visibili al modello utilizzato per valutarne l’efficacia. La valutazione sul set di validazione si svolge a intervalli regolari durante il processo di addestramento, mentre una valutazione del set di test in genere si svolge sul modello completamente addestrato, quando si desidera confrontare l’accuratezza dei diversi modelli. Quando l’accuratezza sul set di validazione inizia ad essere piatta o addirittura in diminuzione, il processo di addestramento si interrompe. Il punto dove ciò avviene è noto come punto di arresto anticipato, come si può vedere dall’immagine. Una suddivisione tipica del set di dati sarebbe l’80% per il set di addestramento, il 10% per il set di validazione e il 10% per il set di test.

    • La regolarizzazione. La regolarizzazione si riferisce a una vasta gamma di tecniche per forzare artificialmente il modello in modo che sia più semplice possibile. Il metodo dipenderà dal tipo di algoritmo che stai allenando. Ad esempio, è possibile utilizzare la tecnica di pruning su un albero decisionale, utilizzare il dropout su una rete neurale o aggiungere un parametro di penalità alla funzione di costo di una regressione. Spesso, anche il metodo di regolarizzazione è un iperparametro, il che significa che può essere regolato attraverso la convalida incrociata. Tra le più comuni abbiamo la regolarizzazione L1 e L2. La penalità L1 mira a minimizzare il valore assoluto dei pesi mentre la penalità L2 mira a minimizzare la grandezza quadrata dei pesi. Con la penalità, il modello è costretto a scendere a compromessi sui suoi pesi, in quanto non può più renderli arbitrariamente grandi. Questo rende il modello più generale, che aiuta a combattere l’overfitting. La penalità L1 ha l’ulteriore vantaggio di imporre la selezione delle caratteristiche, il che significa che ha la tendenza a impostare su 0 i parametri meno utili. Ciò consente di identificare le funzionalità più rilevanti in un set di dati. L’aspetto negativo è che spesso non è efficiente dal punto di vista computazionale come la penalità L2, che impiega meno tempo e risorse di calcolo.

    Come capire se siamo di fronte ad Underfitting oppure Overfitting? Estrapolo le predizioni e verifico l'accuratezza dei risultati sia sui dati di test (test set) che sui dati di addestramento (training set):

    → Se l'errore sui dati di training è elevato, c'è sicuramente un problema di underfitting. Il modello ha generalizzato troppo.

    → Se l'errore sui dati di training è accettabile ma l'errore sui dati di test è elevato, c'è un problema di overfitting. Il modello non ha generalizzato abbastanza.

  6. Test di valutazione del modello ed ottimizzazione, in base all’accuracy del modello ed eventuali migliorie.

  7. Predizioni.

Supervised & Unsupervised Learning Algorithms

Esistono due principali metodiche nel campo dell'apprendimento automatico: l'apprendimento supervisionato (supervised) e non supervisionato (unsupervised). Entrambi hanno potenziali di applicazione in biologia. Nell'apprendimento supervisionato, gli oggetti in una determinata raccolta di dati sono classificati utilizzando un set di attributi (caratteristiche). Il risultato del processo di classificazione è un insieme di regole che prescrivono le assegnazioni di oggetti alle classi basate esclusivamente sui valori delle caratteristiche. Oltre a prevedere una caratteristica categorica come un'etichetta di classe (simile all'analisi discriminante classica), è possibile applicare anche tecniche supervisionate per prevedere una caratteristica continua degli oggetti (simile all'analisi di regressione). Contrariamente al framework supervisionato, nell'apprendimento non supervisionato, non sono disponibili etichette di classe predefinite per gli oggetti studiati. In questo caso, l'obiettivo è esplorare i dati e scoprire somiglianze tra oggetti. Le somiglianze vengono utilizzate per definire gruppi di oggetti, denominati cluster. In altre parole, l'apprendimento senza supervisione ha lo scopo di svelare raggruppamenti naturali nei dati. Pertanto, i due differenti approcci possono essere definiti come segue:

→ nell'apprendimento supervisionato, i dati hanno le etichette delle classi sistema apprende come associare i dati etichettati alle classi; → nell'apprendimento non supervisionato, tutti i dati sono senza etichette e la procedura di apprendimento consiste sia nel definire le etichette sia nell'associare gli oggetti (osservazioni) alle etichette.

Le applicazioni di tecniche di apprendimento automatico (supervised e/o unsupervised) alle scienze biologiche, abbondano in letteratura. Ad esempio, i dati di espressione genica sono stati utilizzati con successo sia per classificare i pazienti nuovi gruppi di malattie. in diversi gruppi clinici, sia per identificare La previsione di una variabile continua con algoritmi di apprendimento automatico, ad esempio invece viene utilizzata con successo per stimare la distorsione nei dati di microarray di cDNA. In questo corso valuteremo solo metodi di tipo supervised.

Supervised Learning Algorithms

Un approccio di classificazione standard, applicabile quando le caratteristiche sono variabili continue. Esempio: Dati di espressione genica, una procedura di analisi discriminante lineare utile quando il numero di feautures (geni) supera di gran lunga il numero di campioni. I classificatori sopra presentati funzionano in modo ottimale quando vengono soddisfatte le loro ipotesi sottostanti, come il presupposto della normalità.

Si utilizza la regressione lineare per variabili continue, l’output sarà quindi il valore della variabile, l’accuratezza si misura con la perdita, con R^2, adjusted R^2. Per variabili categoriche si utilzza la regressione logistica, l’utput è la probabilità dell’evento rappresentata linearmente in cominazione con le laltre variabili, l’accuratezza si misura con la precizione, f1 score etc.

La classificazione è il processo di divisione del dataset in categorie o gruppi aggiungendo un’etichetta (quindi è un supervised). Tra le classificazioi ricordiamo:

  • Decision tree. Si usa per varibili discrete. Rappresentazione grafica di tutte le possibili risposte ad una decisione prese in base a delle condizioni. La classificazione è formata da una selezione iterativa di singole caratteristiche che sono le più salienti in ciascun nodo dell'albero. Lo spazio di input X viene ripetutamente suddiviso in sottoinsiemi discendenti, a partire da X stesso. Nel machine learning un albero di decisione è un modello predittivo, dove ogni nodo interno rappresenta una variabile, un arco verso un nodo figlio rappresenta un possibile valore per quella proprietà e una foglia il valore predetto per la variabile obiettivo a partire dai valori delle altre proprietà, che nell'albero è rappresentato dal cammino (path) dal nodo radice (root) al nodo foglia.

    Normalmente un albero di decisione viene costruito utilizzando tecniche di apprendimento a partire dall'insieme dei dati iniziali (data set), il quale può essere diviso in due sottoinsiemi: il training set sulla base del quale si crea la struttura dell'albero e il test set che viene utilizzato per testare l'accuratezza del modello predittivo così creato. Nel data mining un albero di decisione viene utilizzato per classificare le istanze di grandi quantità di dati (per questo viene anche chiamato albero di classificazione). In questo ambito un albero di decisione descrive una struttura ad albero dove i nodi foglia rappresentano le classificazioni e le ramificazioni l'insieme delle proprietà che portano a quelle classificazioni. Di conseguenza ogni nodo interno risulta essere una macro-classe costituita dall'unione delle classi associate ai suoi nodi figli. In molte situazioni è utile definire un criterio di arresto (halting), o anche criterio di potatura (pruning) al fine di determinarne la profondità massima. Questo perché il crescere della profondità di un albero (ovvero della sua dimensione) non influisce direttamente sulla bontà del modello. Infatti, una crescita eccessiva della dimensione dell'albero potrebbe portare solo ad aumento sproporzionato della complessità computazionale rispetto ai benefici riguardanti l'accuratezza delle previsioni/classificazioni.

  • Una foresta casuale (random forest) è un classificatore d'insieme ottenuto dall'aggregazione tramite bagging di alberi di decisione. Si usa per variabili discrete con features>>n (features=colonne). Le foreste casuali si pongono come soluzione che minimizza l'overfitting del training set rispetto agli alberi di decisione. Il metodo combina la selezione casuale delle caratteristiche per costruire una collezione di alberi di decisione con la variazione controllata. La foresta casuale costruisce numerosi decisioni trees e li unisce insieme (dalla loro media), fornendo una predizione più accurata e stabile.

  • Il k-nearest neighbors, abbreviato in K-NN, è un algoritmo utilizzato nel riconoscimento di pattern per la classificazione di oggetti basandosi sulle caratteristiche degli oggetti vicini a quello considerato. Si usa per variabili discrete in cui le features<<n (features=colonne). L'input è costituito dai k esempi di addestramento più vicini nello spazio delle funzionalità. L'output dipende dall'utilizzo di k-NN per la classificazione o la regressione:

    • Nella classificazione k-NN, l'output è un'appartenenza a una classe. Un oggetto è classificato da un voto di pluralità dei suoi vicini, con l'oggetto assegnato alla classe più comune tra i suoi k vicini più vicini (k è un numero intero positivo dispari, tipicamente piccolo). Se k = 1, l'oggetto viene semplicemente assegnato alla classe di quel singolo vicino più prossimo.

    • Nella regressione k-NN, l'output è il valore della proprietà per l'oggetto. Questo valore è la media dei valori di k vicini più vicini.

Il classificatore k-NN può essere visto come un metodo non parametrico di stima e non utilizza alcuna ipotesi sulla distribuzione dei dati, ad eccezione della continuità della variabile caratteristica. Un oggetto è classificato in base alla maggioranza dei voti dei suoi k vicini. k è un intero positivo tipicamente non molto grande. Se k=1allora l'oggetto viene assegnato alla classe del suo vicino. In un contesto binario in cui sono presenti esclusivamente due classi è opportuno scegliere k dispari per evitare di ritrovarsi in situazioni di parità.

Reti neurali (ANN)

Nel campo dell'apprendimento automatico, una rete neurale artificiale (in inglese artificial neural network, abbreviato in ANN o anche come NN) è un modello computazionale composto di "neuroni" artificiali, ispirato vagamente dalla semplificazione di una rete neurale biologica.

Questi modelli matematici sono troppo semplici per ottenere una comprensione delle reti neurali biologiche, ma sono utilizzati per tentare di di intelligenza risolvere problemi artificiale come quelli che si pongono in diversi ambiti.

Una rete neurale artificiale è costituita da n gruppo di interconnessioni di informazioni costituite da neuroni artificiali e processi che utilizzano un approccio di connessionismo di calcolo. Nella maggior parte dei casi una rete neurale artificiale è un sistema adattivo che cambia la propria struttura in base a informazioni esterne o interne che scorrono attraverso la rete stessa durante la fase di apprendimento. In termini pratici le reti neurali sono strutture non-lineari di dati statistici organizzate come strumenti di modellazione. Esse possono essere utilizzate per simulare relazioni complesse tra ingressi e uscite che altre funzioni analitiche non riescono a rappresentare. Una rete neurale artificiale riceve segnali esterni su uno strato di nodi (unità di elaborazione) d'ingresso, ciascuno dei quali è collegato con numerosi nodi interni, organizzati in più livelli. Ogni nodo elabora i segnali ricevuti e trasmette il risultato a nodi successivi.

Le reti neurali si basano principalmente sulla simulazione di neuroni artificiali opportunamente collegati. Il modello rappresentato in figura è quello proposto da McCulloch e Pitts.

I suddetti neuroni ricevono in ingresso degli stimoli e li elaborano. L'elaborazione può essere anche molto sofisticata ma in un caso semplice si può pensare che i singoli ingressi vengano moltiplicati per un opportuno valore detto peso, il risultato delle moltiplicazioni viene sommato e se la somma supera una certa soglia il neurone si attiva attivando la sua uscita. Il peso indica l'efficacia sinaptica della linea di ingresso e serve a quantificarne l'importanza, un ingresso (features, variabile predittrice) molto importante avrà un peso elevato, mentre un ingresso poco utile all'elaborazione avrà un peso inferiore.

La funzione di attivazione decide se un neurone artificiale deve essere attivato o meno. Aiuta la rete neurale ad apprendere schemi complessi nei dati e aiuta anche a normalizzare l'output di ciascun neurone in un intervallo compreso tra 1 e 0 o tra -1 e 1. Esistono tre tipi di funzioni di attivazione: funzione lineare, funzione passo binario e Funzione non lineare. Quindi, quali funzioni di attivazione utilizzare nella rete? Non c’è una regola definita, ma un setup molto frequente è quello di utilizzare la Rectifier Function (ReLu) per gli Hidden Layer o la Sigmund Function (sigmoide o logistica). In un paper intitolato Deep Sparse Rectifier Neural Networks, gli autori individuano i Rectifier Neurons come rappresentazione migliore dei neuroni biologici, motivo per cui tale configurazione è tra le più popolari.

Si può pensare che se due neuroni comunicano fra loro utilizzando maggiormente alcune connessioni allora tali connessioni avranno un peso maggiore, fino a che non si creeranno delle connessioni tra l'ingresso e l'uscita della rete che sfruttano "percorsi preferenziali". La rete produce più percorsi di connessione: tutte le combinazioni infatti avranno un certo peso, e quindi contribuiscono al collegamento ingresso/uscita. Il modello in figura rappresenta una classica rete neurale pienamente connessa.

Normalmente una rete è formata da tre strati. Nel primo abbiamo gli ingressi (I), questo strato si preoccupa di trattare gli ingressi in modo da adeguarli alle richieste dei neuroni. Il secondo strato è quello nascosto (H, hidden), si occupa dell'elaborazione vera e propria e può essere composto anche da più colonne di neuroni. Il terzo strato è quello di uscita (O) e si occupa di raccogliere i risultati ed adattarli alle richieste del blocco successivo della rete neurale. Queste reti possono essere anche molto complesse e coinvolgere migliaia di neuroni e decine di migliaia di connessioni. Per costruire la struttura di una rete neurale multistrato si possono inserire N strati nascosti (hidden layers).

Come scegliere il numero di hidden layer e numero di neuroni in una rete neurale? Le situazioni in cui le prestazioni migliorano con un secondo (o terzo, ecc.) livello nascosto sono pochissime. Un livello nascosto è sufficiente per la maggior parte dei problemi. E per quanto riguarda la dimensione dello/degli strato/i nascosto/i: quanti neuroni? Una regola pratica che aiuta per i problemi di apprendimento supervisionato e di solito può prevenire l'over-fitting è mantenere il numero di neuroni al di sotto di:

→ Pregi. Le reti neurali per come sono costruite lavorano in parallelo e sono quindi in grado di trattare molti dati. Si tratta in sostanza di un sofisticato sistema di tipo statistico dotato di una buona immunità al rumore (quindi overfitting); se alcune unità del sistema dovessero funzionare male, la rete nel suo complesso avrebbe delle riduzioni di prestazioni ma difficilmente andrebbe incontro ad un blocco del sistema. Come evitare l'overfitting: Rimuovi le funzionalità/ caratteristiche. Alcuni algoritmi hanno una selezione integrata delle funzionalità. Per quelli che non lo fanno, puoi migliorare manualmente la loro generalizzabilità rimuovendo le caratteristiche di input irrilevanti. Quindi, invece di utilizzare tutte le funzionalità, è meglio utilizzare solo quelle più importanti. Questo, da un lato, renderà il processo di allenamento notevolmente più veloce, dall'altro, può aiutare a prevenire un eccesso di adattamento perché il modello non ha bisogno di apprendere quante più funzionalità. Se qualcosa non ha senso o è difficile giustificare determinate funzionalità, questo è un buon modo per identificarle.

→ Difetti. I modelli prodotti dalle reti neurali, anche se molto efficienti, non sono spiegabili in linguaggio simbolico umano: i risultati vanno accettati "così come sono", da cui anche la definizione inglese delle reti neurali come "black box": in altre parole, a differenza di un sistema algoritmico come decision tree, random forest, ecc, dove si può esaminare passo-passo il percorso che dall'input genera l'output, una rete neurale è in grado di generare un risultato valido, o comunque con un’alta probabilità di essere accettabile, ma non è possibile spiegare come e perché tale risultato sia stato generato. Non esistono teoremi o modelli che permettano di definire la rete ottima, quindi la riuscita di una rete dipende molto dall'esperienza del creatore. → Utilizzi. Negli ultimi anni è aumentata notevolmente la loro importanza anche nel campo della bioinformatica nel quale vengono utilizzate per la ricerca di pattern funzionali e/o strutturali in proteine e acidi nucleici. Mostrando opportunamente una lunga serie di input (fase di training o apprendimento), la rete è in grado di fornire l'output più probabile.