Domanda

Ho fatto ad altre persone con intelligenza artificiale questa domanda, ma non mi è stata data una risposta che mi abbia soddisfatto.

Per chiunque altro abbia già programmato una rete neurale artificiale, come si verifica la sua correttezza?

Immagino, un altro modo per dirlo è, come si fa a eseguire il debug del codice dietro una rete neurale?

È stato utile?

Soluzione

La correttezza è un concetto divertente nella maggior parte del "soft computing". Il meglio che posso dirti è: "una rete neurale è corretta quando soddisfa costantemente i parametri del suo design." Puoi farlo addestrandolo con i dati, quindi verificando con altri dati e avendo un circuito di feedback nel mezzo che ti consente di sapere se la rete neurale funziona in modo appropriato.

Questo è ovviamente vero solo per le reti neurali che sono abbastanza grandi dove non è possibile una prova diretta della correttezza. È possibile dimostrare che una rete neurale è corretta attraverso l'analisi se si sta tentando di costruire una rete neurale che apprende XOR o qualcosa di simile, ma per quella classe di problemi raramente è necessaria una aNN.

Altri suggerimenti

Con le reti neurali, generalmente ciò che sta accadendo è che stai prendendo una rete neurale non addestrata e la stai allenando utilizzando un determinato set di dati, in modo che risponda come ti aspetti. Ecco l'accordo; di solito, lo stai allenando fino a un certo livello di confidenza per i tuoi input. In generale (e ancora, questo è solo in generale; il tuo chilometraggio può variare), non puoi ottenere reti neurali per fornire sempre la risposta giusta; piuttosto, stai ottenendo la stima della risposta giusta, entro un intervallo di confidenza. Conosci quella gamma di confidenza da come hai addestrato la rete.

Sorge la domanda sul motivo per cui si desidera utilizzare le reti neurali se non si è certi che le conclusioni a cui giungono siano verificabili in modo corretto; la risposta è che le reti neurali possono arrivare a risposte ad alta confidenza per determinate classi di problemi (in particolare, problemi NP-Complete) in tempo lineare, mentre le soluzioni verificabili in modo corretto dei problemi NP-Complete possono essere raggiunte solo in tempo polinomiale. In parole povere, le reti neurali possono "risolvere". problemi che il normale calcolo non può; ma puoi essere sicuro solo di una certa percentuale di avere la risposta giusta. Puoi determinare tale sicurezza con il regime di allenamento e di solito puoi assicurarti di avere almeno il 99,9% di fiducia.

Stai aprendo una lattina di vermi più grande di quanto potresti aspettarti.

Le NN sono forse meglio pensate come approssimatori di funzioni universali, tra l'altro, che possono aiutarti a pensare a queste cose.

Comunque, non c'è niente di speciale nelle NN in termini di domanda, il problema si applica a qualsiasi tipo di algoritmo di apprendimento.

La fiducia che hai nei risultati che sta dando dipenderà sia dalla quantità che dalla qualità (spesso più difficile da determinare) dei dati di addestramento che hai.

Se sei davvero interessato a queste cose, potresti voler leggere un po 'i problemi del sovrallenamento e i metodi di ensemble (insaccamento, potenziamento, ecc.).

Il vero problema è che di solito non sei interessato alla " correttezza " (cf qualità) di una risposta su un dato input che hai già visto, piuttosto ti interessa prevedere la qualità della risposta su un input che non hai ancora visto. Questo è un problema molto più difficile. Approcci tipici quindi, implicano "trattenere". alcuni dei tuoi dati di allenamento (vale a dire le cose per le quali conosci la risposta "corretta") e testando il tuo sistema addestrato a tale proposito. Diventa comunque sottile, quando inizi a considerare che potresti non avere abbastanza dati, o che potrebbe essere di parte, ecc. Quindi ci sono molti ricercatori che praticamente passano tutto il loro tempo a pensare a questo tipo di problemi!

Ho lavorato su progetti in cui sono presenti dati di test e dati di addestramento, quindi conosci gli output previsti per un set di input che NN non ha visto.

Un modo comune di analizzare il risultato di qualsiasi classificatore è l'uso di una curva ROC; un'introduzione alle statistiche dei classificatori e delle curve ROC è disponibile all'indirizzo Interpretazione dei test diagnostici

Sono un dilettante completo in questo campo, ma non usi un set di dati predeterminato che sai essere corretto?

Non credo che esista un'unica risposta corretta, ma esistono metodi probabilistici o statistici ben collaudati che possono fornire rassicurazione. I metodi statistici sono generalmente indicati come Ricampionamento .

Un metodo che posso consigliare è il Jackknife .

Il mio insegnante ha sempre affermato che la sua regola empirica era quella di formare l'NN con l'80% dei dati e convalidarlo con l'altro 20%. E, naturalmente, assicurati che il set di dati sia completo quanto ti serve.

Se vuoi scoprire se la backpropagation della rete è corretta, c'è un modo semplice.

Poiché si calcola la derivata del panorama degli errori, è possibile verificare se l'implementazione è numericamente corretta. Calcolerai la derivata dell'errore rispetto a un peso specifico, & # 8706; E / & # 8706; w. Puoi mostrarlo

& # 8706; E / & # 8706; w = (E (w + e) ??- E (w - e)) / (2 * e) + O (e ^ 2).

(Bishop, Machine Learning e Pattern Recognition, p. 246)

In sostanza, si valuta l'errore a sinistra del peso, lo si valuta a destra del peso e si controlla se il gradiente numerico è uguale al gradiente analitico.

(Ecco un'implementazione: http: // github.com/bayerj/arac/raw/9f5b225d6293974f8adfc5f20dfc6439cc1bed35/src/cpp/utilities/utilities.cpp )

Per me probabilmente c'è solo un valore (i) che richiede uno sforzo extra per verificare, il gradiente della propagazione posteriore. Penso che la risposta di Bayer sia effettivamente usata e suggerita comunemente. È necessario scrivere un codice aggiuntivo su questo, ma tutti sono moltiplicazioni della matrice di propagazione diretta che è facile da scrivere e verificare.

Esistono altri problemi che ti impediranno di ottenere la risposta migliore, ad esempio:

  • La funzione di costo di NN non è concava, quindi la discesa del gradiente non è garantita per trovare l'ottimale globale.
  • Sopra / sotto raccordo
  • Non scegliere il "giusto" " Caratteristiche / modello
  • etc

Comunque penso che vadano oltre lo scopo del bug di programmazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top