Purtroppo non esiste un modo generico per determinare a priori il miglior numero di neuroni e il numero di strati per una rete neurale, data solo una descrizione del problema. Non c'è nemmeno molta guida da avere per determinare buoni valori da provare come punto di partenza.
L'approccio più comune sembra essere quello di partire da un'ipotesi approssimativa basata su precedenti esperienze di reti utilizzate su problemi simili. Questa potrebbe essere la tua esperienza o l'esperienza di seconda / terza mano che hai raccolto da un corso di formazione, blog o documento di ricerca. Quindi provare alcune varianti e controllare attentamente le prestazioni prima di sceglierne una migliore.
Le dimensioni e la profondità delle reti neurali interagiscono anche con altri iperparametrici , in modo che cambiare qualcosa altrove possa influire su dove si trovano i valori migliori. Quindi non è possibile isolare una dimensione e una profondità "migliori" per una rete, quindi continuare a mettere a punto altri parametri in modo isolato. Ad esempio, se disponi di una rete molto profonda, potrebbe funzionare in modo efficiente con la funzione di attivazione ReLU, ma non così bene con sigmoid: se hai trovato la dimensione / forma della rete migliore e hai provato un esperimento con diverse funzioni di attivazione, potresti venire alla conclusione sbagliata su ciò che funziona meglio.
A volte potresti leggere delle "regole empiriche" che i ricercatori usano quando iniziano una progettazione di una rete neurale da zero. Queste cose potrebbero funzionare per i tuoi problemi o meno, ma almeno hanno il vantaggio di iniziare il problema. Le variazioni che ho visto sono:
Crea una rete con livelli nascosti di dimensioni simili a quelle dell'input e tutte uguali, in base al fatto che non vi è alcun motivo particolare per variare le dimensioni (a meno che tu non stia creando un codificatore automatico forse).
Inizia semplice e crea complessità per vedere cosa migliora una rete semplice.
Prova a variare la profondità della rete se prevedi che l'output sia spiegato bene dai dati di input, ma con una relazione complessa (piuttosto che intrinsecamente rumorosa).
Prova ad aggiungere un po 'di abbandono, è la cosa più vicina alle reti neurali rispetto alla polvere di fata magica che rende tutto migliore (avvertimento: l'aggiunta di un abbandono può migliorare la generalizzazione, ma può anche aumentare le dimensioni degli strati e i tempi di allenamento richiesti).
Se leggi questi o qualcosa del genere in qualsiasi testo, prendili con un pizzico di sale. Tuttavia, nel peggiore dei casi ti aiutano a superare l'effetto della pagina vuota, a scrivere un qualche tipo di rete e a iniziare il processo di test e perfezionamento.
A parte questo, cerca di non perderti troppo nell'ottimizzare una rete neurale quando qualche altro approccio potrebbe essere migliore e farti risparmiare un sacco di tempo. Prendi in considerazione e usa altri approcci di machine learning e data science. Esplora i dati, magari crea delle trame. Prova prima alcuni semplici approcci lineari per ottenere benchmark da battere, regressione lineare, regressione logistica o regressione softmax a seconda del problema. Prendi in considerazione l'utilizzo di un diverso algoritmo ML rispetto alle NN: gli approcci basati sull'albero decisionale come XGBoost possono essere più veloci ed efficaci dell'apprendimento approfondito su molti problemi.