Un modo abbastanza semplice (almeno a livello teorico) di parallelizzare le reti neurali artificiali (RNA) sarebbe dividere i gruppi di esempi di addestramento durante ogni epoca in modo che diversi lavoratori possano calcolare il loro rispettivo contributo al gradiente di errore in parallelo.
Questo sicuramente aiuta a imparare quando la dimensione del mini-batch è abbastanza grande, ma mi chiedevo se ci fossero altri luoghi di parallelizzazione da sfruttare, specialmente quelli che avrebbero reso l'epoca più veloce (cioè, dal momento che la parallelizzazione a livello di batch richiede tempi lunghi per epoca rispetto a un algoritmo seriale con discesa del gradiente stocastico su lotti più piccoli).
Direi che per certi casi (come le CNN), le architetture vettorializzate consentirebbero una propagazione più rapida, ma mi riferisco alla parallelizzazione su un livello superiore - per esempio, se la RNA è scarsamente connessa allora forse i lavoratori possono correre avanti e backpropogation allo stesso tempo, rispettivamente, dove ogni lavoratore è responsabile di alcuni componenti densamente connessi della RNA, e usa qualche messaggio che passa per i bordi lungo i tagli.
Qualcuna di queste idee è generalizzata? Le RNA sono state parallelizzate con successo, forse usando altri approcci, su questo livello elevato?
Apparentemente, qualcosa nel modo che ho descritto è implementato in SPANN . Da una panoramica del documento sembra che l'approccio di passaggio dei messaggi sia effettivamente appropriato per una massiccia ANN con molte componenti "separabili". Continuerò comunque ad apprezzare gli altri approcci per la parallelizzazione, specialmente per le reti più piccole (forse anche quelle che si adattano a una singola macchina con molti core).