Come configurare smartphone e PC. Portale informativo
  • casa
  • In contatto con
  • Limitazioni del deep learning e futuro. Che aspetto hanno le reti neurali profonde e perché richiedono così tanta memoria

Limitazioni del deep learning e futuro. Che aspetto hanno le reti neurali profonde e perché richiedono così tanta memoria

Mi ha detto quanto sia artificiale reti neurali come differiscono da quelli tradizionali programmi per computer e perché questa tendenza ci accompagnerà a lungo.

Cos'è l'apprendimento profondo?

Del successo del deep learning si è sentito parlare per la prima volta nel 2012 e tre anni dopo tutti ne parlano. La stessa cosa è successa con Internet durante l’era della bolla degli investimenti. E poiché ora si stanno facendo investimenti considerevoli nelle reti neurali, possiamo tranquillamente parlare di una nuova bolla.

Internet era facile da dimostrare: all’inizio era veloce (rispetto alla carta) E-mail, quindi siti Web colorati accessibili su qualsiasi computer connesso a Internet. Nel deep learning tutto è diverso: c'è attenzione, ma è impossibile dimostrare qualcosa di specifico. In effetti, ciò che collega programmi e programmi di riconoscimento vocale traduzione automatica, programmi per identificare guasti nelle apparecchiature per petrolio e gas e programmi per sintetizzare testi che descrivono fotografie?



Questa diversità non è casuale: se Internet è solo un tipo di comunicazione, allora lo sono essenzialmente le reti neurali profonde (DNN). nuovo tipo programmi versatili quanto i tradizionali programmi per computer. Questa universalità è stata dimostrata teoricamente: una rete neurale in teoria può approssimare con precisione infinita qualsiasi funzione di molte variabili - ed eseguire anche calcoli equivalenti ai calcoli di una macchina di Turing.

Reti che devi imparare

Le informazioni possono essere trasmesse su Internet in modo molto monotono, in pacchetti unificati, e si basa su questa idea. Ma puoi generare informazioni e consumarle in diversi modi. I programmi per computer che fanno questo sono molto diversi. Le reti neurali sono le stesse, forniscono la stessa varietà di elaborazione.

Descrivere oggi cosa sono le reti neurali significa descrivere alla fine degli anni Cinquanta cosa sono i tradizionali programmi per computer (e il linguaggio FORTRAN è stato rilasciato nel 1957) - se si iniziasse a dire che i computer controlleranno l'accensione in ogni macchina e mostreranno anche film porno sugli schermi dei telefoni verresti deriso.

Se ti dicessi adesso che parlerai con un neurone rete di computer nel tuo tablet e la rete neurale controllerà un'auto senza conducente, non ci crederai neanche tu, ma invano.

A proposito, "immagini porno" in nei social network Non lo scoprono più le persone, ma le reti stesse. Ma 100mila persone nel mondo lo facevano, guardando terabyte e terabyte di foto e video. Con l’avvento del deep learning, il mondo dell’elaborazione dei dati ha cominciato a cambiare improvvisamente e rapidamente.

A differenza dei tradizionali programmi per computer, le reti neurali non hanno bisogno di essere “scritte”, hanno bisogno di essere “insegnate”. E si può insegnare loro ciò che è infinitamente difficile (se non impossibile) da implementare con l’ingegneria del software tradizionale. Ad esempio, le reti neurali hanno già imparato a riconoscere audio e video al livello delle persone, e anche meglio di loro. O viceversa, crea audio e video: se hai una comprensione delle immagini di alcuni oggetti incorporati in una rete neurale profonda addestrata, questa stessa comprensione può essere utilizzata per creare immagini di questi oggetti. La sintesi di voce, testo e immagini non è ancora arrivata sul mercato, ma gli esperimenti stanno già mostrando successi precedentemente irraggiungibili in questo settore. Inoltre, le reti neurali non solo possono analizzare i dati, ma anche impartire comandi. Quindi, hanno imparato a giocare ai giochi Atari 2600, molti anche migliore dell'uomo e non dovevano essere programmati appositamente per questo.

Come è possibile che ciò sia possibile solo oggi? Perché tali risultati non sono stati raggiunti molto tempo fa, anche prima dell’avvento di Internet? Dopotutto, le discussioni sulle capacità delle reti neurali vanno avanti dagli anni '50 del secolo scorso!

In primo luogo, è diventato chiaro come insegnare le reti neurali profonde: che tipo di matematica funziona lì. Una rete neurale profonda significa una rete con una profondità superiore a due strati. Se ci sono meno livelli, allora stiamo parlando di apprendimento superficiale. Se il numero di livelli è superiore a dieci, si parla di apprendimento molto profondo, ma finora questo è raro. In precedenza, hanno cercato di insegnare le reti neurali per tentativi ed errori (noto anche come metodo del "poking scientifico"), e in questo modo potevano addestrare solo piccole reti. Nel corso del tempo, è emersa la comprensione della matematica delle reti neurali multistrato, è diventato possibile progettarle e si è capito come creare nuovi tipi di reti e garantirne la capacità di apprendimento.

In secondo luogo, la rete neurale funziona rapidamente, ma apprende molto lentamente e ciò richiede enormi quantità di dati. grandi dati . E quanti più strati ci sono in una rete neurale, tanto maggiore è la richiesta di potenza di calcolo da parte di tale rete durante l'addestramento. In effetti, fino a poco tempo fa, alle reti neurali era possibile insegnare qualsiasi cosa solo su un supercomputer.



Oggi la situazione è cambiata, poiché le schede video sono state collegate al lavoro con le reti neurali e questo ha accelerato la loro formazione di dieci volte. Ma anche un apprendimento così accelerato spesso significa molte ore e persino giorni, e talvolta settimane, di calcoli. L'unica consolazione è che nel caso della programmazione tradizionale, risolvere gli stessi problemi richiederebbe non solo settimane, ma anni di lavoro da parte dei programmatori.

Ma una volta addestrata, una rete neurale profonda è in genere da centinaia a migliaia di volte più veloce degli algoritmi tradizionali. Il programma impiega centinaia di volte meno memoria ad accesso casuale A migliore qualità risultati.

« Maestri delle reti neurali"

Le proprietà insolite di queste reti hanno portato al fatto che quasi tutte le competizioni internazionali nell'analisi dei dati vengono vinte dalle reti neurali profonde. E se hai una sorta di attività di analisi dei dati e ci sono molti, moltissimi di questi dati, allora ci sono buone probabilità che in questo caso anche le reti neurali profonde ne traggano vantaggio.

La professione di chi si occupa di reti neurali non ha ancora nemmeno un nome. Se agli albori di Internet è apparso il concetto di "webmaster" (ed è durato cinque o sei anni), allora non esiste ancora una professione simile di "master della rete neurale". Nel campo dei big data, questi specialisti si definiscono “data scientist”, ma il loro lavoro è comunque della stessa natura ingegneristica del lavoro dei programmatori. Gli ingegneri misurano, analizzano, progettano, costruiscono e mirano a sistemi e strumenti di ingegneria. L'ingegneria del software è diversa da informatica(informatica). Con le reti neurali è lo stesso: non esiste ancora un nome per la professione, ma ci sono già ingegneri che ti aiuteranno a crearle, formarle e utilizzarle. Fortunatamente, per L'anno scorso infrastrutture sviluppate per nuova professione: Università corsi di addestramento, decine di tutorial, libri, campi di gara e di allenamento, grande quantità Software gratis. Solo nella comunità di deep learning di lingua russa VKontakte oggi

Oggi un grafico è uno dei modi più accettabili per descrivere i modelli creati nel sistema apprendimento automatico. Questi grafici computazionali sono composti da vertici di neuroni collegati da bordi di sinapsi che descrivono le connessioni tra i vertici.

A differenza di un processore grafico scalare centrale o vettoriale, un IPU, un nuovo tipo di processore progettato per l’apprendimento automatico, consente la costruzione di tali grafici. Un computer progettato per gestire i grafici - macchina perfetta per modelli grafici computazionali creati nell'ambito dell'apprendimento automatico.

Una delle più modi semplici Il modo per descrivere il processo dell’intelligenza artificiale è visualizzarlo. Il team di sviluppo di Graphcore ha creato una raccolta di tali immagini che vengono visualizzate sull'IPU. Era basato su Software Pioppo, che visualizza il lavoro intelligenza artificiale. I ricercatori di questa azienda hanno anche scoperto il perché reti profonde richiedono così tanta memoria e quali modi esistono per risolvere il problema.

Poplar include un compilatore grafico creato da zero per tradurre le operazioni standard di machine learning in codice applicativo IPU altamente ottimizzato. Ti consente di assemblare questi grafici insieme utilizzando lo stesso principio con cui vengono assemblati i POPNN. La libreria contiene un set vari tipi vertici per primitive generalizzate.

I grafici sono il paradigma su cui si basa tutto il software. In Poplar, i grafici consentono di definire un processo di calcolo, in cui i vertici eseguono operazioni e gli spigoli descrivono la relazione tra loro. Ad esempio, se vuoi sommare due numeri insieme, puoi definire un vertice con due input (i numeri che desideri aggiungere), alcuni calcoli (una funzione per aggiungere due numeri) e un output (il risultato).

In genere, le operazioni con i vertici sono molto più complesse rispetto all'esempio sopra descritto. Spesso sono determinati piccoli programmi, chiamati codelet (nomi in codice). L'astrazione grafica è interessante perché non fa ipotesi sulla struttura del calcolo e suddivide il calcolo in componenti che l'IPU può utilizzare per funzionare.

Poplar utilizza questa semplice astrazione per costruire grafici molto grandi rappresentati come immagini. La generazione software del grafico ci consente di adattarlo ai calcoli specifici necessari per garantire il massimo utilizzo efficace Risorse dell'IPU.

Il compilatore traduce operazioni standard, utilizzato nei sistemi di apprendimento automatico, in codice applicativo IPU altamente ottimizzato. Il compilatore del grafico crea un'immagine intermedia del grafico computazionale, che viene distribuita su uno o più dispositivi IPU. Il compilatore può visualizzare questo grafico computazionale, quindi un'applicazione scritta a livello di framework di rete neurale visualizza un'immagine del grafico computazionale in esecuzione sull'IPU.


Grafico dell'intero ciclo di allenamento AlexNet nelle direzioni avanti e indietro

Il compilatore grafico Poplar ha trasformato la descrizione di AlexNet in un grafico computazionale di 18,7 milioni di vertici e 115,8 milioni di spigoli. Il clustering chiaramente visibile è il risultato di una forte comunicazione tra i processi in ogni livello della rete, con una comunicazione più semplice tra i livelli.

Un altro esempio è una semplice rete completamente connessa addestrata su MNIST - composizione semplice dati per visione computerizzata, una sorta di "Hello, world" nell'apprendimento automatico. Rete semplice esplorare questo set di dati aiuta a comprendere i grafici guidati dalle applicazioni Poplar. Integrando le librerie di grafici con framework come TensorFlow, l'azienda fornisce uno di modi semplici per l'utilizzo delle IPU nelle applicazioni di machine learning.

Dopo che il grafico è stato costruito utilizzando il compilatore, deve essere eseguito. Ciò è possibile utilizzando il motore grafico. L'esempio di ResNet-50 ne dimostra il funzionamento.


Grafico ResNet-50

L'architettura ResNet-50 consente la creazione di reti profonde da partizioni ripetute. Il processore deve definire queste sezioni solo una volta e richiamarle nuovamente. Ad esempio, il cluster di livello conv4 viene eseguito sei volte, ma mappato solo una volta sul grafico. L'immagine mostra anche la varietà di forme degli strati convoluzionali, poiché ognuno ha un grafico costruito secondo una forma naturale di calcolo.

Il motore crea e gestisce l'esecuzione di un modello di machine learning utilizzando un grafico generato dal compilatore. Una volta distribuito, il motore grafico monitora e risponde alle IPU, o dispositivi, utilizzati dalle applicazioni.

L'immagine ResNet-50 mostra l'intero modello. A questo livello è difficile identificare le connessioni tra i singoli vertici, quindi vale la pena guardare le immagini ingrandite. Di seguito sono riportati alcuni esempi di sezioni all'interno dei livelli della rete neurale.

Perché le reti profonde hanno bisogno di così tanta memoria?

Grandi quantità di memoria occupata sono uno dei più grossi problemi reti neurali profonde. I ricercatori stanno cercando di combattere ciò che è limitato portata Dispositivi DRAM che dovrebbero essere utilizzati sistemi moderni per memorizzare un numero enorme di pesi e attivazioni in una rete neurale profonda.

Le architetture sono state progettate utilizzando chip processore progettati per l'elaborazione sequenziale e l'ottimizzazione DRAM per memoria ad alta densità. L'interfaccia tra questi due dispositivi rappresenta un collo di bottiglia che introduce limitazioni di larghezza di banda e aggiunge un notevole sovraccarico in termini di consumo energetico.

Anche se non abbiamo ancora una conoscenza completa del cervello umano e del suo funzionamento, è generalmente riconosciuto che non esiste un grande magazzino di memoria separato. Si ritiene che la funzione della memoria a lungo e breve termine nel cervello umano sia incorporata nella struttura dei neuroni + sinapsi. Anche organismi semplici come i vermi, con una struttura cerebrale neurale di poco più di 300 neuroni, hanno qualche funzione di memoria.

Costruire memoria nei processori convenzionali è un modo per aggirare il problema colli di bottiglia memoria, sbloccando un'enorme larghezza di banda con un consumo energetico molto inferiore. Tuttavia, la memoria su chip è costosa e non è progettata per le grandi quantità di memoria collegate alle CPU e alle GPU attualmente utilizzate per addestrare e distribuire reti neurali profonde.

Quindi è utile osservare come viene utilizzata oggi la memoria nelle CPU e nei sistemi di deep learning basati su GPU e chiedersi perché hanno bisogno di tale memoria. dispositivi di grandi dimensioni memoria quando il cervello umano funziona bene senza di loro?

Le reti neurali necessitano di memoria per archiviare dati di input, pesi e funzioni di attivazione mentre l'input si propaga attraverso la rete. Nell'apprendimento, l'attivazione sull'input deve essere mantenuta finché non può essere utilizzata per calcolare gli errori dei gradienti di output.

Ad esempio, una rete ResNet a 50 livelli ha circa 26 milioni di parametri di peso e calcola 16 milioni di attivazioni in avanti. Se utilizzi un float a 32 bit per memorizzare ogni peso e attivazione, saranno necessari circa 168 MB di spazio. Usarne di più basso valore precisione per memorizzare questi pesi e attivazioni, potremmo dimezzare o addirittura quadruplicare questo requisito di archiviazione.

Un grave problema di memoria deriva dal fatto che le GPU si basano su dati rappresentati come vettori densi. Pertanto, possono utilizzare il thread di istruzione singola (SIMD) per ottenere un'elevata densità di elaborazione. La CPU utilizza unità vettoriali simili per il calcolo ad alte prestazioni.

Le GPU hanno una larghezza della sinapsi di 1024 bit, quindi utilizzano dati in virgola mobile a 32 bit, quindi spesso li dividono in mini-batch paralleli di 32 campioni per creare vettori di dati a 1024 bit. Questo approccio all'organizzazione del parallelismo vettoriale aumenta il numero di attivazioni di 32 volte e la necessità di memoria locale con una capacità superiore a 2 GB.

Anche le GPU e altre macchine progettate per l'algebra delle matrici sono soggette al carico di memoria dovuto a pesi o attivazioni di reti neurali. Le GPU non possono eseguire in modo efficiente le piccole convoluzioni utilizzate nelle reti neurali profonde. Pertanto, viene utilizzata una trasformazione chiamata "riduzione" per convertire queste convoluzioni in moltiplicazioni matrice-matrice (GEMM), con le quali acceleratori grafici può far fronte in modo efficace.

È inoltre necessaria memoria aggiuntiva per memorizzare dati di input, valori temporanei e istruzioni di programma. Misurazione dell'utilizzo della memoria durante l'addestramento di ResNet-50 su HPC GPU ha dimostrato che richiede più di 7,5 GB di DRAM locale.

Alcuni potrebbero pensare che una minore precisione computazionale possa ridurre la quantità di memoria richiesta, ma non è così. Cambiando i valori dei dati a metà precisione per pesi e attivazioni, riempirai solo metà della larghezza del vettore SIMD, sprecando metà delle risorse di calcolo disponibili. Per compensare ciò, quando si passa dalla precisione completa alla precisione parziale sulla GPU, sarà necessario raddoppiare la dimensione del mini-batch per forzare un parallelismo dei dati sufficiente a utilizzare tutto il calcolo disponibile. Pertanto, il passaggio a pesi e attivazioni di precisione inferiori sulla GPU richiede ancora più di 7,5 GB di memoria dinamica ad accesso libero.

Con così grande quantità dati che devono essere archiviati, è semplicemente impossibile inserirli tutti nella GPU. Ciascun livello della rete neurale convoluzionale deve memorizzare lo stato della DRAM esterna, caricare il livello di rete successivo e quindi caricare i dati nel sistema. Di conseguenza, l’interfaccia è già limitata dalla larghezza di banda e dalla latenza della memoria. memoria esterna soffre di oneri aggiuntivi riavvio costante pesi e funzioni di attivazione di memorizzazione e recupero. Ciò rallenta notevolmente i tempi di allenamento e aumenta significativamente il consumo energetico.

Esistono diversi modi per risolvere questo problema. Innanzitutto, operazioni come le funzioni di attivazione possono essere eseguite “sul posto”, consentendo la riscrittura dei dati di input direttamente sull’output. Così, memoria esistente può essere riutilizzato. In secondo luogo, l'opportunità di riutilizzo La memoria può essere ottenuta analizzando la dipendenza dei dati tra le operazioni sulla rete e l'allocazione della stessa memoria alle operazioni che in quel momento non la utilizzano.

Il secondo approccio è particolarmente efficace quando l’intera rete neurale può essere analizzata in fase di compilazione per creare una memoria allocata fissa, poiché il sovraccarico di gestione della memoria è ridotto quasi a zero. Si è scoperto che la combinazione di questi metodi può ridurre l'utilizzo della memoria di una rete neurale da due a tre volte.
Un terzo approccio significativo è stato recentemente scoperto dal team di Baidu Deep Speech. Hanno fatto domanda vari metodi risparmiando memoria per ottenere una riduzione di 16 volte nel consumo di memoria delle funzioni di attivazione, che ha permesso loro di addestrare reti con 100 livelli. In precedenza, con la stessa quantità di memoria, potevano addestrare reti a nove livelli.

La combinazione di memoria e risorse di elaborazione in un unico dispositivo ha un potenziale significativo per migliorare le prestazioni e l’efficienza delle reti neurali convoluzionali, così come di altre forme di apprendimento automatico. È possibile effettuare dei compromessi tra memoria e risorse di elaborazione per raggiungere un equilibrio tra funzionalità e prestazioni nel sistema.

Le reti neurali e i modelli di conoscenza in altri metodi di apprendimento automatico possono essere pensati come grafici matematici. C'è un'enorme quantità di parallelismo concentrato in questi grafici. Un processore parallelo progettato per sfruttare il parallelismo nei grafici non si basa sul mini-batch e può ridurre significativamente la quantità di spazio di archiviazione locale richiesto.

I risultati attuali della ricerca hanno dimostrato che tutti questi metodi possono migliorare significativamente le prestazioni delle reti neurali. Le GPU e le CPU moderne hanno una memoria integrata molto limitata, solo pochi megabyte in totale. Le nuove architetture dei processori progettate specificatamente per l’apprendimento automatico bilanciano la memoria e l’elaborazione su chip, offrendo miglioramenti significativi in ​​termini di prestazioni ed efficienza rispetto alle tecnologie attuali. processori centrali e acceleratori grafici.

Oggi un grafico è uno dei modi più accettabili per descrivere i modelli creati in un sistema di apprendimento automatico. Questi grafici computazionali sono composti da vertici di neuroni collegati da bordi di sinapsi che descrivono le connessioni tra i vertici.

A differenza di un processore grafico scalare centrale o vettoriale, un IPU, un nuovo tipo di processore progettato per l’apprendimento automatico, consente la costruzione di tali grafici. Un computer progettato per manipolare i grafici è una macchina ideale per calcolare modelli di grafici creati tramite l'apprendimento automatico.

Uno dei modi più semplici per descrivere il processo dell’intelligenza artificiale è visualizzarlo. Il team di sviluppo di Graphcore ha creato una raccolta di tali immagini che vengono visualizzate sull'IPU. Si basa sul software Poplar, che visualizza il lavoro dell'intelligenza artificiale. I ricercatori di questa azienda hanno anche scoperto perché le reti profonde richiedono così tanta memoria e quali soluzioni esistono per risolvere il problema.

Poplar include un compilatore grafico creato da zero per tradurre le operazioni standard di machine learning in codice applicativo IPU altamente ottimizzato. Ti consente di assemblare questi grafici insieme utilizzando lo stesso principio con cui vengono assemblati i POPNN. La libreria contiene un insieme di diversi tipi di vertici per primitive generalizzate.

I grafici sono il paradigma su cui si basa tutto il software. In Poplar, i grafici consentono di definire un processo di calcolo, in cui i vertici eseguono operazioni e gli spigoli descrivono la relazione tra loro. Ad esempio, se vuoi sommare due numeri insieme, puoi definire un vertice con due input (i numeri che desideri aggiungere), alcuni calcoli (una funzione per aggiungere due numeri) e un output (il risultato).

In genere, le operazioni con i vertici sono molto più complesse rispetto all'esempio sopra descritto. Sono spesso definiti da piccoli programmi chiamati codelet (nomi in codice). L'astrazione grafica è interessante perché non fa ipotesi sulla struttura del calcolo e suddivide il calcolo in componenti che l'IPU può utilizzare per funzionare.

Poplar utilizza questa semplice astrazione per costruire grafici molto grandi rappresentati come immagini. La generazione software del grafico ci consente di adattarlo ai calcoli specifici necessari per garantire l'uso più efficiente delle risorse IPU.

Il compilatore traduce le operazioni standard utilizzate nei sistemi di apprendimento automatico in codice applicativo altamente ottimizzato per l'IPU. Il compilatore del grafico crea un'immagine intermedia del grafico computazionale, che viene distribuita su uno o più dispositivi IPU. Il compilatore può visualizzare questo grafico computazionale, quindi un'applicazione scritta a livello di framework di rete neurale visualizza un'immagine del grafico computazionale in esecuzione sull'IPU.


Grafico dell'intero ciclo di allenamento AlexNet nelle direzioni avanti e indietro

Il compilatore grafico Poplar ha trasformato la descrizione di AlexNet in un grafico computazionale di 18,7 milioni di vertici e 115,8 milioni di spigoli. Il clustering chiaramente visibile è il risultato di una forte comunicazione tra i processi in ogni livello della rete, con una comunicazione più semplice tra i livelli.

Un altro esempio è una semplice rete completamente connessa addestrata su MNIST, un semplice set di dati di visione artificiale, una sorta di “Hello, world” nell’apprendimento automatico. Una semplice rete per esplorare questo set di dati aiuta a comprendere i grafici guidati dalle applicazioni Poplar. Integrando le librerie di grafici con framework come TensorFlow, l'azienda fornisce uno dei modi più semplici per utilizzare le IPU nelle applicazioni di machine learning.

Dopo che il grafico è stato costruito utilizzando il compilatore, deve essere eseguito. Ciò è possibile utilizzando il motore grafico. L'esempio di ResNet-50 ne dimostra il funzionamento.


Grafico ResNet-50

L'architettura ResNet-50 consente la creazione di reti profonde da partizioni ripetute. Il processore deve definire queste sezioni solo una volta e richiamarle nuovamente. Ad esempio, il cluster di livello conv4 viene eseguito sei volte, ma mappato solo una volta sul grafico. L'immagine mostra anche la varietà di forme degli strati convoluzionali, poiché ognuno ha un grafico costruito secondo una forma naturale di calcolo.

Il motore crea e gestisce l'esecuzione di un modello di machine learning utilizzando un grafico generato dal compilatore. Una volta distribuito, il motore grafico monitora e risponde alle IPU, o dispositivi, utilizzati dalle applicazioni.

L'immagine ResNet-50 mostra l'intero modello. A questo livello è difficile identificare le connessioni tra i singoli vertici, quindi vale la pena guardare le immagini ingrandite. Di seguito sono riportati alcuni esempi di sezioni all'interno dei livelli della rete neurale.

Perché le reti profonde hanno bisogno di così tanta memoria?

Le grandi impronte di memoria sono una delle maggiori sfide delle reti neurali profonde. I ricercatori stanno cercando di combattere la larghezza di banda limitata dei dispositivi DRAM, che i sistemi moderni devono utilizzare per memorizzare enormi quantità di pesi e attivazioni in una rete neurale profonda.

Le architetture sono state progettate utilizzando chip processore progettati per l'elaborazione sequenziale e l'ottimizzazione DRAM per memoria ad alta densità. L'interfaccia tra questi due dispositivi rappresenta un collo di bottiglia che introduce limitazioni di larghezza di banda e aggiunge un notevole sovraccarico in termini di consumo energetico.

Anche se non abbiamo ancora una conoscenza completa del cervello umano e del suo funzionamento, è generalmente riconosciuto che non esiste un grande magazzino di memoria separato. Si ritiene che la funzione della memoria a lungo e breve termine nel cervello umano sia incorporata nella struttura dei neuroni + sinapsi. Anche organismi semplici come i vermi, con una struttura cerebrale neurale di poco più di 300 neuroni, hanno un certo grado di funzione di memoria.

Integrare memoria nei processori convenzionali è un modo per aggirare il problema del collo di bottiglia della memoria, sbloccando un'enorme larghezza di banda e consumando molta meno energia. Tuttavia, la memoria su chip è costosa e non è progettata per le grandi quantità di memoria collegate alle CPU e alle GPU attualmente utilizzate per addestrare e distribuire reti neurali profonde.

Quindi è utile osservare come viene utilizzata oggi la memoria nelle CPU e nei sistemi di deep learning basati su GPU e chiedersi: perché richiedono dispositivi di archiviazione di memoria così grandi quando il cervello umano funziona perfettamente senza di essi?

Le reti neurali necessitano di memoria per archiviare dati di input, pesi e funzioni di attivazione mentre l'input si propaga attraverso la rete. Nell'apprendimento, l'attivazione sull'input deve essere mantenuta finché non può essere utilizzata per calcolare gli errori dei gradienti di output.

Ad esempio, una rete ResNet a 50 livelli ha circa 26 milioni di parametri di peso e calcola 16 milioni di attivazioni in avanti. Se utilizzi un float a 32 bit per memorizzare ogni peso e attivazione, saranno necessari circa 168 MB di spazio. Utilizzando un valore di precisione inferiore per memorizzare questi pesi e attivazioni, potremmo dimezzare o addirittura quadruplicare questo requisito di archiviazione.

Un grave problema di memoria deriva dal fatto che le GPU si basano su dati rappresentati come vettori densi. Pertanto, possono utilizzare il thread di istruzione singola (SIMD) per ottenere un'elevata densità di elaborazione. La CPU utilizza unità vettoriali simili per il calcolo ad alte prestazioni.

Le GPU hanno una larghezza della sinapsi di 1024 bit, quindi utilizzano dati in virgola mobile a 32 bit, quindi spesso li dividono in mini-batch paralleli di 32 campioni per creare vettori di dati a 1024 bit. Questo approccio al parallelismo vettoriale aumenta il numero di attivazioni di 32 volte e la necessità di archiviazione locale con una capacità superiore a 2 GB.

Anche le GPU e altre macchine progettate per l'algebra delle matrici sono soggette al carico di memoria dovuto a pesi o attivazioni di reti neurali. Le GPU non possono eseguire in modo efficiente le piccole convoluzioni utilizzate nelle reti neurali profonde. Pertanto, una trasformazione chiamata "riduzione" viene utilizzata per convertire queste convoluzioni in moltiplicazioni matrice-matrice (GEMM), che le GPU possono gestire in modo efficiente.

È inoltre necessaria memoria aggiuntiva per memorizzare dati di input, valori temporanei e istruzioni di programma. Misurando l'utilizzo della memoria durante l'addestramento di ResNet-50 su una GPU di fascia alta è emerso che richiedeva più di 7,5 GB di DRAM locale.

Alcuni potrebbero pensare che una minore precisione computazionale possa ridurre la quantità di memoria richiesta, ma non è così. Cambiando i valori dei dati a metà precisione per pesi e attivazioni, riempirai solo metà della larghezza del vettore SIMD, sprecando metà delle risorse di calcolo disponibili. Per compensare ciò, quando si passa dalla precisione completa alla precisione parziale sulla GPU, sarà necessario raddoppiare la dimensione del mini-batch per forzare un parallelismo dei dati sufficiente a utilizzare tutto il calcolo disponibile. Pertanto, il passaggio a pesi e attivazioni di precisione inferiori sulla GPU richiede ancora più di 7,5 GB di memoria dinamica ad accesso libero.

Con così tanti dati da archiviare, è semplicemente impossibile inserirli tutti in una GPU. Ciascun livello della rete neurale convoluzionale deve memorizzare lo stato della DRAM esterna, caricare il livello di rete successivo e quindi caricare i dati nel sistema. Di conseguenza, l'interfaccia di memoria esterna, già limitata in larghezza di banda, soffre del peso aggiuntivo di ricaricare costantemente la bilancia e di memorizzare e recuperare le funzioni di attivazione. Ciò rallenta notevolmente i tempi di allenamento e aumenta significativamente il consumo energetico.

Esistono diversi modi per risolvere questo problema. Innanzitutto, operazioni come le funzioni di attivazione possono essere eseguite “sul posto”, consentendo la riscrittura dei dati di input direttamente sull’output. In questo modo è possibile riutilizzare la memoria esistente. In secondo luogo, l’opportunità di riutilizzo della memoria può essere ottenuta analizzando la dipendenza dei dati tra le operazioni sulla rete e l’allocazione della stessa memoria alle operazioni che attualmente non la utilizzano.

Il secondo approccio è particolarmente efficace quando l’intera rete neurale può essere analizzata in fase di compilazione per creare una memoria allocata fissa, poiché il sovraccarico di gestione della memoria è ridotto quasi a zero. Si è scoperto che la combinazione di questi metodi può ridurre l'utilizzo della memoria di una rete neurale da due a tre volte.
Un terzo approccio significativo è stato recentemente scoperto dal team di Baidu Deep Speech. Hanno applicato varie tecniche di risparmio di memoria per ottenere una riduzione di 16 volte del consumo di memoria delle funzioni di attivazione, consentendo loro di addestrare reti con 100 livelli. In precedenza, con la stessa quantità di memoria, potevano addestrare reti a nove livelli.

La combinazione di memoria e risorse di elaborazione in un unico dispositivo ha un potenziale significativo per migliorare le prestazioni e l’efficienza delle reti neurali convoluzionali, così come di altre forme di apprendimento automatico. È possibile effettuare dei compromessi tra memoria e risorse di elaborazione per raggiungere un equilibrio tra funzionalità e prestazioni nel sistema.

Le reti neurali e i modelli di conoscenza in altri metodi di apprendimento automatico possono essere pensati come grafici matematici. C'è un'enorme quantità di parallelismo concentrato in questi grafici. Un processore parallelo progettato per sfruttare il parallelismo nei grafici non si basa sul mini-batch e può ridurre significativamente la quantità di spazio di archiviazione locale richiesto.

I risultati attuali della ricerca hanno dimostrato che tutti questi metodi possono migliorare significativamente le prestazioni delle reti neurali. Le GPU e le CPU moderne hanno una memoria integrata molto limitata, solo pochi megabyte in totale. Le nuove architetture dei processori progettate specificatamente per l'apprendimento automatico bilanciano la memoria e l'elaborazione su chip, offrendo miglioramenti significativi in ​​termini di prestazioni ed efficienza rispetto alle CPU e GPU odierne.

Cos'è l'apprendimento profondo? 3 marzo 2016

Oggigiorno si parla delle tecnologie di deep learning alla moda come se fosse una manna dal cielo. Ma i relatori capiscono di cosa si tratta realmente? Ma questo non ha alcun concetto definizione formale e combina un intero insieme di tecnologie. In questo post voglio spiegare nel modo più popolare possibile ed essenzialmente cosa c'è dietro questo termine, perché è così popolare e cosa ci danno queste tecnologie.


In breve, questo termine nuovo(apprendimento profondo) su come assemblare un'astrazione (rappresentazione) più complessa e profonda da alcune semplici astrazioni nonostante il fatto che anche le astrazioni più semplici debbano essere assemblate dal computer stesso, non da una persona. Quelli. Non si tratta più solo di apprendimento, ma di meta-apprendimento. In senso figurato, il computer stesso deve imparare come apprendere al meglio. E, in effetti, questo è esattamente ciò che implica il termine “profondo”. Quasi sempre, questo termine viene applicato alle reti neurali artificiali che utilizzano più di uno strato nascosto, quindi formalmente “profondo” significa anche un’architettura di rete neurale più profonda.

Qui nella diapositiva di sviluppo puoi vedere chiaramente come l'apprendimento profondo differisce dall'apprendimento regolare. Io ripeto, La particolarità del deep learning è che la macchina trova le funzionalità da sola(le caratteristiche chiave di qualcosa con cui è più semplice separare una classe di oggetti da un'altra) e struttura questi segni gerarchicamente: quelli più semplici vengono combinati in quelli più complessi. Di seguito lo vedremo con un esempio.

Diamo un'occhiata ad un esempio di un compito di riconoscimento di immagini: prima ne avevano inserito uno enorme in una normale rete neurale con un livello (1024×768 - circa 800.000 valori numerici) foto e guardavo il computer morire lentamente, soffocato dalla mancanza di memoria e dall'incapacità di capire quali pixel sono importanti per il riconoscimento e quali no. Per non parlare dell’efficacia di questo metodo. Ecco l'architettura di una rete neurale così regolare (superficiale).

Poi hanno ascoltato come il cervello distingue le caratteristiche, e lo fa in modo strettamente gerarchico, e hanno anche deciso di estrarre una struttura gerarchica dalle immagini. Per fare ciò, è stato necessario aggiungere più strati nascosti (strati che si trovano tra l'input e l'output; in parole povere, fasi di trasformazione delle informazioni) alla rete neurale. Anche se hanno deciso di farlo quasi immediatamente quando sono stati inventati i neuroni, le reti con un solo strato nascosto sono state addestrate con successo. Quelli. In linea di principio, le reti profonde esistono da circa lo stesso tempo di quelle normali, semplicemente non siamo riusciti a formarle. Cosa è cambiato?

Nel 2006, diversi ricercatori indipendenti hanno risolto questo problema contemporaneamente (inoltre, le capacità hardware erano già sufficientemente sviluppate e sono apparse schede video abbastanza potenti). Questi ricercatori sono: Geoffrey Hinton (e il suo collega Ruslan Salakhutidinov) con la tecnica di pre-addestramento di ogni strato di una rete neurale con una macchina Boltzmann vincolata (perdonatemi questi termini...), Yann LeCun con reti neurali convoluzionali e Yoshuay Bengio con autoencoder in cascata. I primi due sono stati subito reclutati rispettivamente da Google e Facebook. Ecco due conferenze: una - Hinton, l'altro - Lyakuna, in cui raccontano cos'è il deep learning. Nessuno può raccontartelo meglio di loro. Un altro bello conferenza Schmidhuber sullo sviluppo del deep learning, anch’esso uno dei pilastri di questa scienza. E Hinton ha anche un ottimo corso sui neuroni.

Cosa possono fare ora le reti neurali profonde? Sono in grado di riconoscere e descrivere gli oggetti, si potrebbe dire che “capiscono” di cosa si tratta. Riguarda sul riconoscimento dei significati.

Basta guardare questo video sul riconoscimento in tempo reale di ciò che vede la telecamera.

Come ho già detto, le tecnologie di deep learning sono un intero gruppo di tecnologie e soluzioni. Ne ho già elencati diversi nel paragrafo precedente, un altro esempio sono le reti ricorrenti, che vengono utilizzate proprio nel video qui sopra per descrivere ciò che vede la rete. Ma il rappresentante più popolare della tecnologia di questa classe- queste sono ancora reti neurali convoluzionali LyaKun. Sono costruiti per analogia con i principi di funzionamento della corteccia visiva del cervello del gatto, in cui sono state scoperte le cosiddette cellule semplici che rispondono a linee rette ad angoli diversi, e cellule complesse - la cui reazione è associata all'attivazione di un certo insieme di cellule semplici. Anche se, a dire il vero, LaCun stesso non era concentrato sulla biologia, decise compito specifico(guarda le sue lezioni), e poi ha coinciso.

Per dirla semplicemente, le reti convoluzionali sono reti in cui il main elemento strutturale l'apprendimento è un gruppo (combinazione) di neuroni (di solito un quadrato di 3 × 3, 10 × 10, ecc.) e non uno. E a ogni livello della rete vengono formati dozzine di gruppi di questo tipo. La rete trova combinazioni di neuroni che massimizzano le informazioni sull'immagine. Al primo livello, la rete estrae gli elementi più basilari e strutturalmente semplici dell'immagine - si potrebbe dire, costruendo unità: confini, tratti, segmenti, contrasti. Più in alto ci sono già combinazioni stabili di elementi del primo livello, e così via lungo la catena. Vorrei sottolinearlo ancora una volta caratteristica principale deep learning: le reti stesse formano questi elementi e decidono quali di essi sono più importanti e quali no. Questo è importante perché nel campo dell’apprendimento automatico la creazione di funzionalità è fondamentale e ora stiamo passando alla fase in cui il computer stesso impara a creare e selezionare funzionalità. La macchina stessa identifica una gerarchia di caratteristiche informative.

Pertanto, durante il processo di apprendimento (visualizzazione di centinaia di immagini), la rete convoluzionale forma una gerarchia di caratteristiche con diversi livelli di profondità. Al primo livello possono evidenziare, ad esempio, tali elementi (contrasto riflettente, angolo, bordo, ecc.).


Al secondo livello, questo sarà già un elemento degli elementi del primo livello. Al terzo - dal secondo. Dobbiamo capirlo questa immagine- solo una dimostrazione. Oggi nell'uso industriale, tali reti hanno da 10 a 30 strati (livelli).

Dopo che tale rete è stata addestrata, possiamo usarla per la classificazione. Dopo aver dato un'immagine come input, gruppi di neuroni del primo strato percorrono l'immagine, attivandosi nei punti in cui c'è un elemento dell'immagine corrispondente a un elemento specifico. Quelli. questa rete analizza l'immagine in parti: prima in linee, tratti, angoli di inclinazione, poi in parti più complesse e alla fine giunge alla conclusione che l'immagine proviene da questo tipo di combinazione Elementi basici- questa faccia.

Maggiori informazioni sulle reti convoluzionali -

Intelligenza artificiale, reti neurali, machine learning: cosa significano realmente tutti questi concetti attualmente popolari? Per la maggior parte delle persone non iniziate, come me, sono sempre sembrati qualcosa di fantastico, ma in realtà la loro essenza sta in superficie. Da tempo avevo l’idea di scrivere in un linguaggio semplice sulle reti neurali artificiali. Scoprilo tu stesso e racconta agli altri cos'è questa tecnologia, come funziona, considera la sua storia e le sue prospettive. In questo articolo, ho cercato di non entrare nel merito, ma di parlare in modo semplice e popolare di questa direzione promettente nel mondo dell'alta tecnologia.

Intelligenza artificiale, reti neurali, machine learning: cosa significano realmente tutti questi concetti attualmente popolari? Per la maggior parte delle persone non iniziate, come me, sono sempre sembrati qualcosa di fantastico, ma in realtà la loro essenza sta in superficie. Da tempo avevo l'idea di scrivere in un linguaggio semplice sulle reti neurali artificiali. Scoprilo tu stesso e racconta agli altri cos'è questa tecnologia, come funziona, considera la sua storia e le sue prospettive. In questo articolo, ho cercato di non entrare nel merito, ma di parlare in modo semplice e popolare di questa direzione promettente nel mondo dell'alta tecnologia.

Un po' di storia

Per la prima volta, il concetto di reti neurali artificiali (ANN) è nato nel tentativo di simulare i processi cerebrali. Il primo grande passo avanti in questo settore può essere considerato la creazione del modello di rete neurale McCulloch-Pitts nel 1943. Gli scienziati hanno sviluppato per la prima volta un modello di neurone artificiale. Hanno inoltre proposto la progettazione di una rete di questi elementi da eseguire operazioni logiche. Ma soprattutto, gli scienziati lo hanno dimostrato rete simile capace di apprendere.

Prossimo passo importante fu lo sviluppo da parte di Donald Hebb del primo algoritmo per il calcolo di una RNA nel 1949, che divenne fondamentale per diversi decenni successivi. Nel 1958 Frank Rosenblatt sviluppò il parceptron, un sistema che imita i processi cerebrali. Un tempo la tecnologia non aveva analoghi ed è ancora fondamentale nelle reti neurali. Nel 1986, quasi contemporaneamente, indipendentemente l'uno dall'altro, gli scienziati americani e sovietici migliorarono significativamente il metodo fondamentale per addestrare un percettrone multistrato. Nel 2007, le reti neurali hanno vissuto una rinascita. L’informatico britannico Geoffrey Hinton ha sviluppato per primo un algoritmo di deep learning per reti neurali multistrato, che ora viene utilizzato, ad esempio, per far funzionare le auto a guida autonoma.

Brevemente sulla cosa principale

IN in senso generale parole, le reti neurali lo sono modelli matematici, lavorando secondo il principio delle reti di cellule nervose nel corpo animale. Le ANN possono essere implementate sia in soluzioni programmabili che hardware. Per rendere le cose più facili da capire, un neurone può essere pensato come una cellula che ha molti fori di input e un foro di output. Il modo in cui più segnali in ingresso vengono trasformati in un segnale in uscita è determinato dall'algoritmo di calcolo. A ciascun input neuronale vengono forniti valori effettivi, che vengono poi distribuiti lungo le connessioni interneuronali (sinossi). Le sinapsi hanno un parametro: il peso, a causa del quale le informazioni di input cambiano quando si spostano da un neurone all'altro. Il modo più semplice per immaginare il principio di funzionamento delle reti neurali è mescolare i colori. Hanno neuroni blu, verdi e rossi pesi diversi. L'informazione del neurone il cui peso è maggiore sarà dominante nel neurone successivo.

La stessa rete neurale è un sistema composto da molti di questi neuroni (processori). Individualmente questi processori sono abbastanza semplici (molto più semplici di a personal computer), ma essendo connesso grande sistema i neuroni sono in grado di svolgere compiti molto complessi.

A seconda del campo di applicazione, una rete neurale può essere interpretata in diversi modi. Ad esempio, dal punto di vista dell'apprendimento automatico, una ANN è un metodo di riconoscimento di modelli. Da un punto di vista matematico, questo è un problema multiparametrico. Dal punto di vista della cibernetica: un modello di controllo adattivo della robotica. Per l’intelligenza artificiale, l’ANN è una componente fondamentale per modellare l’intelligenza naturale utilizzando algoritmi computazionali.

Il vantaggio principale delle reti neurali rispetto agli algoritmi informatici convenzionali è la loro capacità di apprendere. Nel senso generale del termine, l'apprendimento riguarda la ricerca dei coefficienti di accoppiamento corretti tra i neuroni, nonché il riepilogo dei dati e l'identificazione delle dipendenze complesse tra i segnali di ingresso e di uscita. Infatti, un addestramento di successo di una rete neurale significa che il sistema sarà in grado di identificare il risultato corretto sulla base di dati che non sono presenti nel set di addestramento.

Situazione attuale

E non importa quanto promettente possa essere questa tecnologia, le ANN sono ancora molto lontane dall’essere possibili cervello umano e pensare. Tuttavia, le reti neurali sono già utilizzate in molti settori dell’attività umana. Finora non sono in grado di prendere decisioni altamente intelligenti, ma sono in grado di sostituire una persona dove prima era necessaria. Tra i numerosi ambiti di applicazione delle ANN si segnalano: la realizzazione di sistemi di autoapprendimento processi di produzione, senza equipaggio veicoli, sistemi di riconoscimento delle immagini, sistemi di sicurezza intelligenti, robotica, sistemi di monitoraggio della qualità, interfacce di interazione vocale, sistemi di analisi e molto altro. Questo uso diffuso delle reti neurali è dovuto, tra l'altro, alla comparsa di reti neurali in vari modi accelerare la formazione delle ANN.

Oggi il mercato delle reti neurali è enorme: miliardi e miliardi di dollari. Come dimostra la pratica, la maggior parte delle tecnologie di rete neurale nel mondo differiscono poco l'una dall'altra. Tuttavia, l’utilizzo delle reti neurali è un’attività molto costosa, che nella maggior parte dei casi può essere sostenuta solo da grandi aziende. Lo sviluppo, l’addestramento e il test delle reti neurali richiedono una grande potenza di calcolo, ed è ovvio che questa è disponibile in abbondanza. principali attori nel mercato informatico. Tra le principali aziende che guidano lo sviluppo in questo settore figurano la divisione Google DeepMind, la divisione Microsoft Research, IBM, Facebook e Baidu.

Certo, tutto questo va bene: le reti neurali si stanno sviluppando, il mercato sta crescendo, ma finora il compito principale ancora non risolto. L’umanità non è riuscita a creare una tecnologia nemmeno lontanamente vicina a quelle del cervello umano. Diamo un'occhiata alle principali differenze tra il cervello umano e le reti neurali artificiali.

Perché le reti neurali sono ancora lontane dal cervello umano?

La differenza più importante, che cambia radicalmente il principio e l'efficienza del sistema, è marcia diversa segnali in reti neurali artificiali e in una rete biologica di neuroni. Il fatto è che in una ANN i neuroni trasmettono valori che sono valori reali, cioè numeri. Nel cervello umano, gli impulsi vengono trasmessi con un'ampiezza fissa e questi impulsi sono quasi istantanei. Ciò porta ad una serie di vantaggi della rete umana di neuroni.

Innanzitutto, le linee di comunicazione nel cervello sono molto più efficienti ed economiche di quelle nella ANN. In secondo luogo, circuito ad impulsi garantisce la semplicità dell'implementazione della tecnologia: è sufficiente utilizzare circuiti analogici invece di complessi meccanismi informatici. In definitiva, le reti pulsate sono immuni alle interferenze audio. I numeri reali sono soggetti a rumore, il che aumenta la probabilità di errori.

Linea di fondo

Naturalmente nell’ultimo decennio si è assistito ad un vero e proprio boom nello sviluppo delle reti neurali. Ciò è dovuto principalmente al fatto che il processo di formazione delle ANN è diventato molto più rapido e semplice. Hanno iniziato a svilupparsi attivamente anche le cosiddette reti neurali “pre-addestrate”, che possono accelerare notevolmente il processo di introduzione della tecnologia. E se è troppo presto per dire se un giorno le reti neurali saranno in grado di riprodurre pienamente le capacità del cervello umano, la probabilità che nel prossimo decennio le ANN saranno in grado di sostituire l’uomo in un quarto delle professioni esistenti diventa sempre più reale .

Per chi vuole saperne di più

  • La Grande Guerra Neurale: cosa sta realmente facendo Google
  • Come i computer cognitivi potrebbero cambiare il nostro futuro

I migliori articoli sull'argomento