È vero che è difficile capire cosa stia imparando una rete neurale, ma c'è stato molto lavoro su questo fronte. Possiamo sicuramente avere un'idea di ciò che la nostra rete sta cercando.
Consideriamo il caso di una rete neurale convoluzionale per le immagini. Abbiamo l'interpretazione per il nostro primo livello che stiamo facendo scorrere i filtri sull'immagine, quindi il nostro primo livello nascosto corrisponde all'accordo tra piccoli pezzi dell'immagine e i nostri vari filtri. Possiamo visualizzare questi filtri per vedere qual è il nostro primo livello di rappresentazione:K
Questa immagine è del primo strato di filtri da un AlexNet ed è presa da questo meraviglioso tutorial: http://cs231n.github.io/understanding-cnn/ . Questo ci consente di interpretare il primo livello nascosto come imparare a rappresentare l'immagine, costituito da pixel grezzi, come un tensore in cui ogni coordinata è l'accordo di un filtro con una piccola regione dell'immagine. Il livello successivo funziona quindi con queste attivazioni di filtro.
Non è così difficile capire il primo livello nascosto perché possiamo semplicemente guardare i filtri per vedere come si comportano, perché vengono applicati direttamente a un'immagine di input. Ad esempio, supponiamo che tu stia lavorando con un'immagine in bianco e nero (quindi i nostri filtri sono 2D anziché 3D) e hai un filtro simile a
⎡⎣⎢0101- 41010⎤⎦⎥.
Immagina di applicarlo a una regione 3x3 di un'immagine (ignorando il termine bias). Se ogni pixel avesse lo stesso colore, otterrai poiché si annullerebbero. Ma se la metà superiore è diversa dalla metà inferiore, diciamo, otterrai un valore potenzialmente elevato. Questo filtro, infatti, è un rilevatore di bordi, e possiamo capirlo applicandolo effettivamente alle immagini e vedendo cosa succede. Ma è molto più difficile capire gli strati più profondi perché l'intero problema è che non sappiamo come interpretare ciò a cui stiamo applicando i filtri.0
Questo articolo di Erhan et al (2009) concorda con questo: affermano che le prime visualizzazioni a strati nascosti sono comuni (e risale al 2009) ma visualizzare gli strati più profondi è la parte difficile. Da quel foglio:
Il principale risultato sperimentale di questa indagine è molto sorprendente: la risposta di un'unità interna alle immagini di input, in quanto funzione nello spazio dell'immagine, sembra essere unimodale, o almeno che il massimo si trova in modo affidabile e coerente per tutte le inizializzazioni casuali testate . Questo è interessante perché trovare questa modalità dominante è relativamente facile e visualizzarla fornisce quindi una buona caratterizzazione di ciò che l'unità fa.
Chris Olah et al ( https://distill.pub/2017/feature-visualization/ ) si basano su questo e discutono di come (1) in generale è possibile generare immagini che portano a grandi attivazioni al fine di avere un'idea di ciò che la rete sta cercando; oppure (2) acquisire immagini di input effettive e vedere come diverse parti dell'immagine attivano la rete. Quel post si concentra su (1).
Nell'immagine seguente, tratta da quell'articolo collegato di Olah et al., Gli autori discutono i diversi aspetti della rete che è possibile controllare. L'immagine all'estrema sinistra mostra il risultato dell'ottimizzazione dell'attivazione di un particolare neurone nello spazio dell'immagine di input e così via.
Consiglio vivamente di leggere questo articolo nella sua interezza se desideri una comprensione più profonda di questo, e leggendo i suoi riferimenti dovresti avere una grande comprensione di ciò che è stato fatto con questo.
Ora, ovviamente, questo era tutto per le immagini in cui noi come umani possiamo dare un senso agli input. Se stai lavorando con qualcosa di più difficile da interpretare, come solo un grande vettore di numeri, potresti non essere in grado di realizzare visualizzazioni così interessanti, ma in linea di principio potresti comunque considerare queste tecniche per valutare i vari neuroni, strati, ecc. .