Recentemente è uscito , che mostra bene le tendenze nel campo del machine learning degli ultimi anni. In poche parole: il numero di startup nel campo del machine learning è precipitato drasticamente negli ultimi due anni.

Ebbene. Analizziamo «è scoppiata la bolla», «come si vive adesso» e parliamo da dove è venuta in realtà questa situazione.
Per cominciare, parliamo di ciò che ha dato il via a questa curva. Da dove è emersa. Probabilmente tutti ricorderanno del machine learning nel 2012 al concorso ImageNet. È stato il primo evento globale! Ma in realtà non è così. E anche la crescita della curva inizia un po' prima. Io la suddividerei in diversi momenti.
- Il 2008 è l'anno in cui appare il termine «big data». I reali prodotti hanno cominciato dal 2010. I big data sono direttamente legati al machine learning. Senza big data il funzionamento stabile degli algoritmi esistenti in quel periodo non è possibile. E non sono le reti neurali. Fino al 2012 le reti neurali erano patrimonio di una minoranza marginale. Ma allora hanno cominciato a funzionare algoritmi completamente diversi, che esistevano già da anni, se non decenni: (1963, 1993), (1995), (2003),… Le startup di quegli anni erano principalmente legate all'elaborazione automatica dei dati strutturati: registratori di cassa, utenti, pubblicità e molto altro.
La derivata di questa prima ondata è un insieme di framework come XGBoost, CatBoost, LightGBM, ecc.
- Nel 2011-2012 hanno vinto diversi concorsi di riconoscimento delle immagini. Il loro utilizzo pratico è stato ritardato. Direi che startup e soluzioni significative hanno iniziato a emergere a partire dal 2014. Ci sono voluti due anni per assimilare che le reti neurali funzionano, creare framework user-friendly che possano essere installati e avviati in tempi ragionevoli, e sviluppare metodi in grado di stabilizzare e accelerare i tempi di convergenza.
Le reti convoluzionali hanno permesso di affrontare compiti di visione artificiale: classificazione delle immagini e degli oggetti nell'immagine, rilevamento di oggetti, riconoscimento di oggetti e persone, miglioramento delle immagini, ecc.
- Anni 2015-2017. Boom di algoritmi e progetti basati su reti ricorrenti o loro analoghi (LSTM, GRU, TransformerNet, ecc.). Sono emersi algoritmi ben funzionanti per la “trascrizione vocale”, sistemi di traduzione automatica. Parzialmente basati su reti convoluzionali per l'estrazione di caratteristiche di base. Parzialmente sul fatto che abbiamo imparato a raccogliere grandi e buoni dataset.

“La bolla è scoppiata? Il hype è esagerato? Sono morti come il blockchain?”
Certo! Domani Siri smetterà di funzionare sul tuo telefono, e dopodomani Tesla non distinguerà una curva da un canguro.
Le reti neurali sono già attive. Sono in decine di dispositivi. Permettono davvero di guadagnare, cambiano il mercato e il mondo circostante. Il hype appare in modo un po' diverso:

Semplicemente, le reti neurali hanno smesso di essere qualcosa di nuovo. Sì, molte persone hanno aspettative elevate. Ma molte aziende hanno imparato a implementare le reti neurali e creare prodotti basati su di esse. Le reti neurali offrono nuove funzionalità, consentono di ridurre i posti di lavoro e abbassare i costi dei servizi:
- Le aziende manifatturiere integrano algoritmi per l'analisi di difetti sulla catena di montaggio.
- Le fattorie di allevamento acquistano sistemi per il controllo delle mucche.
- Macchine agricole automatizzate.
- Centri chiamate automatizzati.
- Filtri in SnapChat. (quantomeno qualcosa di utile!)
Ma la cosa più importante, e non così ovvia: “Non ci sono più nuove idee, o non porteranno capitale immediato”. Le reti neurali hanno risolto decine di problemi. E ne risolveranno ancora di più. Tutte le idee ovvie che c'erano hanno generato innumerevoli startup. Ma tutto ciò che era evidente è già stato esplorato. Negli ultimi due anni non ho incontrato alcuna nuova idea per l'applicazione delle reti neurali. Nessun nuovo approccio (ok, ci sono un po' di complicazioni con i GAN).
Ogni nuova startup diventa sempre più complessa. Non richiede più solo due ragazzi che addestrano una rete neurale su dati aperti. Richiede programmatori, server, un team di annotatori, supporto complesso, ecc.
Come risultato, il numero di startup diminuisce. Ma la produzione aumenta. Hai bisogno di implementare il riconoscimento delle targhe automobilistiche? Ci sono centinaia di specialisti sul mercato con esperienza pertinente. Puoi assumere qualcuno e in pochi mesi il tuo dipendente realizzerà il sistema. O comprare qualcosa di già pronto. Ma creare una nuova startup?.. È un'assurdità!
È necessario creare un sistema di tracciamento dei visitatori: perché pagare per un sacco di licenze quando in 3-4 mesi puoi costruire il tuo, adattandolo alle esigenze della tua azienda?
Attualmente, le reti neurali stanno seguendo lo stesso percorso che hanno affrontato molte altre tecnologie.
Ricordi come è cambiata, dal 1995, la definizione di «sviluppatore di siti»? Attualmente il mercato non è saturo di specialisti. Ci sono pochissimi professionisti. Ma posso scommettere che tra 5-10 anni non ci sarà una differenza significativa tra un programmatore Java e uno sviluppatore di reti neurali. Entrambi saranno abbondanti nel mercato.
Ci sarà semplicemente una classe di compiti per cui si utilizzano le reti neurali. È emerso un compito: si assume uno specialista.
«E poi? Dove si trova l'intelligenza artificiale promessa?»
Qui c'è un piccolo, ma interessante mistero :)
Il stack tecnologico attuale, a quanto pare, non ci porterà verso l'intelligenza artificiale. Le idee e la loro novità si sono in gran parte esaurite. Parliamo di cosa stia mantenendo il livello di sviluppo attuale.
Limitazioni
Iniziamo con le auto a guida autonoma. Sembra chiaro che realizzare veicoli completamente autonomi con la tecnologia attuale sia possibile. Ma non è chiaro tra quanto tempo accadrà. Tesla crede che ciò avverrà entro un paio d'anni —

Ci sono molti altri , che stimano che ci vorranno 5-10 anni.
Probabilmente, a mio avviso, tra 15 anni le infrastrutture urbane cambieranno in modo tale che l'arrivo delle auto autonome diventerà inevitabile, sarà una loro continuazione. Ma ciò non può essere considerato intelligenza. La moderna Tesla è una macchina complessa per la filtrazione dei dati, la loro ricerca e il riaddestramento. Si tratta di regole-regole-regole, raccolta di dati e filtri su di essi (ecco ho scritto qualcosa in più su questo, oppure guarda con il segno).
Il primo problema
Ed è proprio qui che vediamo il primo problema fondamentale. Grandi dati. È proprio questo che ha generato l'attuale ondata di reti neurali e machine learning. Oggi, per realizzare qualcosa di complesso e automatico, servono molti dati. Non solo molti, ma davvero tantissimi. Sono necessari algoritmi automatizzati per la raccolta, l'annotazione e l'uso di questi dati. Se vogliamo far sì che la macchina riconosca i camion contro il sole, dobbiamo prima raccogliere un numero sufficiente di esempi. Se vogliamo che la macchina non impazzisca per una bicicletta attaccata al portapacchi, servono più campioni.
E uno solo non basta. Centinaia? Migliaia?

Il secondo problema
Il secondo problema — la visualizzazione di ciò che la nostra rete neurale ha compreso. È un compito molto complesso. Finora, poche persone sanno come visualizzarlo. Questi articoli sono piuttosto recenti, sono solo alcuni esempi, anche se distanti:
il focus sulle texture. Mostra bene su cosa la rete neurale tende a focalizzarsi e cosa percepisce come informazioni di base.

l'attenzione nei . In realtà, l'attenzione può essere usata proprio per mostrare cosa ha causato una tale reazione nella rete. Ho incontrato queste cose sia per il debugging che per soluzioni di prodotto. Ci sono moltissimi articoli su questo argomento. Ma più i dati sono complessi, più diventa difficile capire come ottenere una visualizzazione stabile.

E sì, il vecchio ed intramontabile set di "guarda cosa c'è dentro la rete" filtri

. Queste immagini erano popolari 3-4 anni fa, ma tutti hanno rapidamente capito che erano belle da vedere, ma non avevano molto senso.

Non ho menzionato decine di altre funzionalità, metodi, hack e ricerche su come visualizzare l'interno della rete. Funzionano questi strumenti? Aiutano a capire rapidamente qual è il problema e a debugare la rete?.. Estorcere gli ultimi percentuali? Beh, più o meno così:
Puoi guardare qualsiasi competizione su Kaggle. E la descrizione di come le persone realizzano le soluzioni finali. Abbiamo assemblato 100-500-800 milioni di modelli e ha funzionato!
Certo, sto esagerando. Ma questi approcci non forniscono risposte veloci e dirette.
Il terzo problema
Il terzo problema fondamentale — le reti non insegnano logica, ma statistica. Statisticamente è :

Logicamente, non sembra molto. Le reti neurali non apprendono qualcosa di complesso se non vengono costrette. Insegnano sempre le caratteristiche più semplici. Ci sono occhi, naso, testa? Allora è un volto! Oppure porta un esempio in cui gli occhi non rappresentano un volto. E di nuovo — milioni di esempi.
C'è abbondanza di spazio in fondo
Direi che proprio questi tre problemi globali limitano oggi lo sviluppo delle reti neurali e del machine learning. E in luoghi dove queste problematiche non limitavano — sono già ampiamente utilizzate.
È la fine? Le reti neurali si sono fermate?
Non è noto. Ma, certo, tutti sperano di no.
Ci sono molti approcci e direzioni per affrontare i fondamental problemi che ho evidenziato sopra. Ma finora nessuno di questi approcci ha permesso di realizzare qualcosa di genuinamente nuovo, di risolvere qualcosa che non era stato affrontato prima. Fino ad ora, tutti i progetti fondamentali sono stati basati su approcci stabili (Tesla), o rimangono progetti sperimentali di istituzioni o corporazioni (Google Brain, OpenAI).
Se vogliamo semplificare, la direzione principale è la creazione di una vista di alto livello dei dati in ingresso. In un certo senso, una ‘memoria’. Il più semplice esempio di memoria è dato dai vari ‘Embedding’ — rappresentazioni delle immagini. Ad esempio, tutti i sistemi di riconoscimento facciale. La rete impara a ottenere da un volto una rappresentazione stabile che non dipende dall'angolazione, dall'illuminazione o dalla risoluzione. In sostanza, la rete minimizza la metrica ‘volti diversi — lontano’ e ‘volti simili — vicino’.

Per tale apprendimento sono necessari decine e centinaia di migliaia di esempi. Tuttavia, il risultato porta con sé alcuni elementi di ‘One-shot Learning’. Ora non abbiamo bisogno di centinaia di volti per ricordare una persona. Bastano un solo volto e tutto — noi !
Solo che c'è un problema… La rete può imparare solo oggetti relativamente semplici. Quando si cerca di distinguere, ad esempio, “persone in base all'abbigliamento” (compito ) — la qualità diminuisce di molto. E la rete non riesce più a padroneggiare cambiamenti di angolazione apparentemente ovvi.
E anche imparare su milioni di esempi — è davvero un passatempo poco coinvolgente.
Ci sono ricerche mirate a ridurre significativamente il numero di scelte. Ad esempio, si può ricordare subito uno dei primi lavori su OneShot Learning :

Ci sono molti di questi lavori, per esempio o o .
Uno svantaggio è che solitamente l'apprendimento funziona abbastanza bene su esempi semplici, “alla MNIST”. Ma nel passaggio a compiti più complessi — è necessaria una grande base di dati, un modello di oggetti, o qualche tipo di magia.
In generale, i lavori sull'apprendimento One-Shot sono un tema molto interessante. Trovi molte idee. Ma in gran parte i due problemi che ho elencato (pre-addestramento su un vasto dataset / instabilità su dati complessi) — ostacolano molto l'apprendimento.
D'altra parte, per la questione del Embedding, si applicano le GAN — reti generative avversarie. Avete sicuramente letto un sacco di articoli al riguardo su Habr., ,)
La caratteristica del GAN è la creazione di uno spazio interno di stati (praticamente lo stesso Embedding), che consente di disegnare un'immagine. Questi possono essere , possono essere .

Il problema del GAN è che più complesso è l'oggetto generato, più difficile è descriverlo nella logica "generatore-discriminatore". Di conseguenza, tra le applicazioni reali del GAN, che si sentono parlare - c'è solo DeepFake, che manipola nuovamente le rappresentazioni dei volti (per cui esiste un'enorme base).
Ho incontrato pochissime altre applicazioni utili. Di solito sono progetti poco pratici che si limitano a ritoccare immagini.
E di nuovo, nessuno ha chiaro come questo possa portarci verso un futuro luminoso. La rappresentazione della logica/spazio in una rete neurale è positiva. Ma servono un numero enorme di esempi, non capiamo come la rete neurale rappresenti internamente questo, e non sappiamo come far ricordare alla rete neurale una rappresentazione realmente complessa.
Apprendimento per rinforzo è un approccio completamente diverso. Sicuramente ricorderete come Google abbia sorpreso tutti in Go. Recenti vittorie in Starcraft e Dota. Ma qui le cose non sono così ottimistiche e promettenti. La migliore spiegazione sulle difficoltà del RL è fornita da .
Se riassumiamo brevemente ciò che ha scritto l'autore:
- I modelli preconfezionati non si adattano e/o funzionano male nella maggior parte dei casi
- I problemi pratici possono essere risolti in modi più semplici. Boston Dynamics non utilizza RL a causa della sua complessità/imprevedibilità/difficoltà nei calcoli
- Perché il RL funzioni, è necessaria una funzione complessa. Spesso è difficile crearla o scriverla
- È difficile addestrare i modelli. Si deve spendere molto tempo per smuoverli e portarli fuori dai minimi locali
- Di conseguenza, è difficile ripetere il modello; la stabilità del modello è compromessa con i minimi cambiamenti
- Spesso si sovradatta a qualche strana regolarità, fino a un generatore di numeri casuali
Il punto chiave è che il RL non funziona ancora in produzione. Google ha qualche esperimento ( , ). Ma non ho visto nessun sistema di prodotto.
Memoria. Ciò che manca rispetto a quanto descritto sopra è la mancanza di struttura. Uno degli approcci adottati per ordinare tutto questo è fornire alla rete neurale accesso a una memoria separata. In questo modo, può registrare e riscrivere i risultati dei propri passaggi. La rete neurale può quindi essere definita in base allo stato attuale della memoria. Questo è molto simile a processori e computer classici.
Il più noto e popolare — di DeepMind:

Sembra che ecco il codice per comprendere l'intelligenza? Ma probabilmente no. Il sistema ha comunque bisogno di un enorme quantitativo di dati per l'addestramento. Inoltre, funziona principalmente con dati tabulari strutturati. Quando Facebook un problema simile, ha optato per la strada: "dimentichiamoci della memoria, facciamo solo una rete neurale più complessa e mettiamo a disposizione più esempi — e si autonomamente si allenerà".
Disentanglement. Un altro modo per creare una memoria significativa è utilizzare gli stessi embedding, ma durante l'addestramento introdurre criteri aggiuntivi che permettano di estrarre da essi i "significati". Ad esempio, vogliamo addestrare una rete neurale a distinguere il comportamento di una persona in un negozio. Se seguissero il percorso standard, dovremmo creare una dozzina di reti. Una cerca la persona, la seconda determina cosa sta facendo, la terza la sua età, la quarta il sesso. Una logica separata esamina la parte del negozio in cui si trova e si allena su questo. La terza determina la sua traiettoria, e così via.
Oppure, se ci fossero una quantità infinita di dati, si potrebbe addestrare una singola rete su tutti i possibili risultati (è ovvio che un tale insieme di dati non può essere raccolto).
L'approccio del disassemblaggio ci suggerisce di addestrare la rete in modo che possa riconoscere autonomamente i concetti. Dovrebbe creare un embedding dai video, dove un'area definirebbe l'azione, un'altra la posizione nel tempo, una terza l'altezza della persona e un'altra ancora il suo genere. Durante l'addestramento, si vorrebbe ridurre al minimo le indicazioni su concetti chiave, lasciando che la rete identifichi e raggruppi le aree da sola. Ci sono pochi articoli di questo tipo (alcuni di essi , , ) e in generale sono piuttosto teorici.
Tuttavia, almeno teoricamente, questa direzione dovrebbe affrontare i problemi elencati all'inizio.

Disassemblaggio dell'immagine secondo parametri come 'colore delle pareti/colore del pavimento/forma dell'oggetto/colore dell'oggetto/e così via'

Disassemblaggio del volto secondo parametri come 'dimensione, sopracciglia, orientamento, colore della pelle, e così via.'
Altro
Ci sono molte altre direzioni meno globali che consentono di ridurre le basi, lavorare con dati più eterogenei, e così via.
Attenzione. Probabilmente, non ha senso evidenziarlo come un metodo separato. È semplicemente un approccio che potenzia gli altri. Ci sono molti articoli dedicati a questo.,,). Il senso dell'attenzione è quello di rafforzare la reazione della rete verso gli oggetti significativi durante l'addestramento. Spesso con qualche indicazione esterna o una piccola rete esterna.
Simulazione 3D. Se si crea un buon motore 3D, spesso si può coprire il 90% dei dati di addestramento (ho visto persino un esempio in cui quasi il 99% dei dati era coperto da un buon motore). Ci sono molte idee e hack su come fare affinché una rete addestrata su un motore 3D funzioni su dati reali (fine tuning, trasferimento di stile, ecc.). Ma di solito creare un buon motore è di gran lunga più complesso rispetto alla raccolta dei dati. Esempi di quando sono stati creati motori:
Addestramento di robot (, )
Formazione di prodotti nei negozi (ma nei due progetti che abbiamo realizzato — ci siamo tranquillamente arrangiati senza di esso).
Addestramento in Tesla (di nuovo il video di cui si parlava sopra).
Conclusioni
L'intero articolo, in un certo senso, è una conclusione. Probabilmente, il messaggio principale che volevo trasmettere è: «la pacchia è finita, le reti neurali non offrono più soluzioni semplici». Ora bisogna lavorare sodo costruendo soluzioni complesse. Oppure faticare facendo ricerche scientifiche complicate.
In effetti, è un tema discutibile. Magari i lettori hanno esempi più interessanti?
Fonte: habr.com
