Spero che tu mi possa aiutare, poiché ho alcune domande su questo argomento. Sono nuovo nel campo dell'apprendimento profondo e, mentre ho fatto alcuni tutorial, non riesco a mettere in relazione o distinguere i concetti gli uni dagli altri.
Spero che tu mi possa aiutare, poiché ho alcune domande su questo argomento. Sono nuovo nel campo dell'apprendimento profondo e, mentre ho fatto alcuni tutorial, non riesco a mettere in relazione o distinguere i concetti gli uni dagli altri.
Risposte:
Proviamo innanzitutto a risolvere un compito di classificazione molto semplice. Supponiamo che tu moderi un forum Web che a volte è invaso da messaggi spam. Questi messaggi sono facilmente identificabili - molto spesso contengono parole specifiche come "acquista", "porno", ecc. E un URL per risorse esterne. Vuoi creare un filtro che ti avviserà di tali messaggi sospetti. Diventa abbastanza semplice: ottieni un elenco di funzioni (ad esempio un elenco di parole sospette e la presenza di un URL) e addestra una semplice regressione logistica (nota anche come perctron), ovvero un modello come:
g(w0 + w1*x1 + w2*x2 + ... + wnxn)
dove x1..xn
sono le tue caratteristiche (o presenza di una parola specifica o un URL), w0..wn
- coefficienti appresi ed g()
è una funzione logistica per rendere il risultato compreso tra 0 e 1. È un classificatore molto semplice, ma per questa semplice attività può dare ottimi risultati, creando confine di decisione lineare. Supponendo che tu abbia usato solo 2 funzioni, questo limite potrebbe assomigliare a questo:
Qui 2 assi rappresentano funzionalità (ad esempio il numero di occorrenze di una parola specifica in un messaggio, normalizzato intorno allo zero), i punti rossi rimangono per lo spam e i punti blu - per i messaggi normali, mentre la linea nera mostra la linea di separazione.
Ma presto noti che alcuni buoni messaggi contengono molte occorrenze della parola "buy", ma nessun URL, o discussione estesa sul rilevamento del porno , che in realtà non si riferisce ai film porno. Il confine di decisione lineare semplicemente non può gestire tali situazioni. Invece hai bisogno di qualcosa del genere:
Questo nuovo confine di decisione non lineare è molto più flessibile , cioè può adattarsi molto più vicino ai dati. Esistono molti modi per ottenere questa non linearità: è possibile utilizzare le funzionalità polinomiali (ad esempio x1^2
) o la loro combinazione (ad esempio x1*x2
) o proiettarle su una dimensione superiore come nei metodi del kernel . Ma nelle reti neurali è comune risolverlo combinando percetroni o, in altre parole, costruendo percetron multistrato. La non linearità qui deriva dalla funzione logistica tra i livelli. Più strati, più schemi sofisticati possono essere coperti da MLP. Il singolo strato (perceptron) può gestire il rilevamento di spam semplice, la rete con 2-3 livelli può catturare combinazioni complicate di funzionalità e le reti di 5-9 strati, utilizzate da grandi laboratori di ricerca e aziende come Google, possono modellare l'intera lingua o rilevare i gatti sulle immagini.
Questa è la ragione essenziale per avere architetture profonde : possono modellare modelli più sofisticati .
Con una sola caratteristica e un limite di decisione lineare è infatti sufficiente avere solo 2 esempi di allenamento: uno positivo e uno negativo. Con diverse funzionalità e / o limiti di decisione non lineari sono necessari più ordini più esempi per coprire tutti i casi possibili (ad esempio non è necessario trovare solo esempi con word1
, word2
e word3
, ma anche con tutte le possibili combinazioni). E nella vita reale devi avere a che fare con centinaia e migliaia di funzioni (ad esempio parole in una lingua o pixel in un'immagine) e almeno diversi livelli per avere abbastanza non linearità. Le dimensioni di un set di dati, necessarie per la formazione completa di tali reti, superano facilmente 10 ^ 30 esempi, rendendo totalmente impossibile ottenere dati sufficienti. In altre parole, con molte caratteristiche e molti livelli la nostra funzione decisionale diventa troppo flessibileper poterlo imparare con precisione .
Ci sono, tuttavia, modi per impararlo approssimativamente . Ad esempio, se lavorassimo in contesti probabilistici, invece di apprendere le frequenze di tutte le combinazioni di tutte le caratteristiche potremmo supporre che siano indipendenti e apprendano solo frequenze individuali, riducendo il classificatore Bayes completo e senza vincoli a un Bayes naive e quindi richiedendo molto, molti meno dati da imparare.
Nelle reti neurali ci sono stati diversi tentativi di ridurre (significativamente) la complessità (flessibilità) della funzione decisionale. Ad esempio, le reti convoluzionali, ampiamente utilizzate nella classificazione delle immagini, assumono solo connessioni locali tra pixel vicini e quindi provano solo a imparare combinazioni di pixel all'interno di piccole "finestre" (diciamo 16x16 pixel = 256 neuroni di input) rispetto alle immagini complete (diciamo, 100x100 pixel = 10000 neuroni di input). Altri approcci includono l'ingegnerizzazione delle caratteristiche, ovvero la ricerca di descrittori specifici di dati di input scoperti dall'uomo.
Le funzionalità scoperte manualmente sono in realtà molto promettenti. Nell'elaborazione del linguaggio naturale, ad esempio, a volte è utile utilizzare dizionari speciali (come quelli che contengono parole specifiche dello spam) o catturare la negazione (ad esempio " non buono"). E nella visione artificiale cose come i descrittori SURF o le caratteristiche simili ad Haar sono quasi insostituibili.
Ma il problema con l'ingegnerizzazione manuale delle caratteristiche è che ci vogliono letteralmente anni per trovare buoni descrittori. Inoltre, queste funzionalità sono spesso specifiche
Ma si scopre che possiamo ottenere automaticamente buone funzionalità direttamente dai dati usando algoritmi come autoencoder e macchine Boltzmann riservate . Le ho descritte in dettaglio nell'altra mia risposta , ma in breve permettono di trovare ripetuti pattern nei dati di input e trasformarli in funzionalità di livello superiore. Ad esempio, dati solo i valori dei pixel di riga come input, questi algoritmi possono identificare e passare bordi interi più alti, quindi da questi bordi costruiscono figure e così via, fino a ottenere descrittori di alto livello come le variazioni delle facce.
Dopo tale rete di pretrattamento (senza supervisione) viene di solito convertita in MLP e utilizzata per il normale allenamento supervisionato. Si noti che la predicazione viene eseguita in base al livello. Ciò riduce significativamente lo spazio della soluzione per l'algoritmo di apprendimento (e quindi il numero di esempi di addestramento necessari) in quanto deve solo apprendere i parametri all'interno di ogni livello senza tener conto di altri livelli.
La predicazione senza supervisione è qui da un po 'di tempo ormai, ma recentemente sono stati trovati altri algoritmi per migliorare l'apprendimento sia insieme che con la pre-produzione e senza di essa. Un esempio notevole di tali algoritmi è il dropout - tecnica semplice, che "elimina" casualmente alcuni neuroni durante l'allenamento, creando una distorsione e impedendo alle reti di seguire i dati troppo da vicino. Questo è ancora un argomento di ricerca caldo, quindi lascio questo ad un lettore.
Innanzitutto dobbiamo capire perché abbiamo bisogno dell'apprendimento profondo. Per creare modelli ML sono necessari dati di test con etichette (supervisionati o non supervisionati). In molti settori man mano che i dati crescono, è difficile mantenere i dati con le etichette. Le reti di apprendimento profondo non hanno bisogno di dati etichettati. Gli algoritmi di apprendimento profondo possono capire le etichette. Quindi questo ovvia alla necessità per gli esperti di dominio di presentare etichette per i dati che è molto importante nelle aree del riconoscimento vocale, della visione computerizzata e della comprensione del linguaggio. Il riconoscimento delle immagini di Google Cat è un esperimento molto interessante. Inoltre è interessante conoscere "Geoffrey hinton" il professore che è stato assunto da Google.
http://www.wired.com/2014/01/geoffrey-hinton-deep-learning/
Potresti ottenere maggiori informazioni mentre esplori in questo framework.
Il Deep Learning è in circolazione da molto tempo. CNN, RNN, Boltzmann Le macchine sembrano sicuramente nuove tecniche ma sono state sviluppate molto tempo fa. Controlla la storia del deep learning
https://en.wikipedia.org/wiki/Deep_learning#History
La rinascita del Deep Learning è dovuta al fatto che i poteri computazionali sono aumentati esponenzialmente da quel momento. Con un laptop dotato di GPU è possibile addestrare un modello di Deep Learning complesso in tempi molto ridotti rispetto ai giorni precedenti. I modelli di apprendimento profondo sono anche molto efficienti empiricamente. Lo stato dell'arte attuale in immagini, linguaggio e molti campi è rappresentato dai modelli di apprendimento profondo.
Credo che a causa di questi fattori possiamo vedere che molta comunità NLP / ML ha spostato la sua attenzione sul Deep Learning.