In che modo la rete neurale riconosce le immagini?


25

Sto cercando di imparare come funziona Neural Network sul riconoscimento delle immagini. Ho visto alcuni esempi e sono diventato ancora più confuso. Nell'esempio del riconoscimento di lettere di un'immagine 20x20, i valori di ciascun pixel diventano il livello di input. Quindi 400 neuroni. Quindi uno strato nascosto di neuroni e 26 neuroni in uscita. Quindi addestrare la rete e quindi funziona, non perfetto.

Ciò che mi ha confuso della rete neurale è come apprende cosa c'è in un'immagine. Non è necessario eseguire soglie, segmentazione o misurazioni, in qualche modo la rete impara a confrontare immagini e riconoscere. Per me è come una magia adesso. Dove iniziare a imparare la rete neurale?


1
Se ho capito bene, una rete neurale è solo una superficie multidimensionale in uno spazio astratto, che gli estremi locali portano a possibili scelte. Insegnare a una rete neurale sta semplicemente adattando questa superficie astratta al suo compito. È la mia comprensione noobish.

Quindi vuoi spiegazioni O risorse per iniziare a lavorare con NN? Sarebbe bello chiarire.

2
C'è (attualmente) un bel corso gratuito sulla corsia che è dedicato alla tua domanda. coursera.org/course/neuralnets
pat

La classe Coursera NN sembra che sarà avanzata, non così buona come un'introduzione. Andrew Ng ha alcune introduzioni più delicate che puoi trovare, ad esempio, su Youtube.
Douglas Zare,

In realtà, il corso di Coursera viene avanzato, ma si accumula sicuramente e risponderebbe abbastanza bene alla domanda del PO. Ha anche molti esempi nel riconoscimento delle cifre.
Chris A.

Risposte:


24

Una grande idea di come una rete neurale possa imparare a classificare qualcosa di così complesso come i dati di immagine dati solo esempi e risposte corrette mi è venuta mentre studiavo il lavoro del professor Kunihiko Fukushima sul neocognitrione negli anni '80. Invece di mostrare alla sua rete un mucchio di immagini e di usare la retro-propagazione per farle capire da sole, ha adottato un approccio diverso e ha addestrato la sua rete strato per strato e persino nodo per nodo. Ha analizzato le prestazioni e il funzionamento di ogni singolo nodo della rete e modificato intenzionalmente quelle parti per farle rispondere nei modi previsti.

Ad esempio, sapeva che voleva che la rete fosse in grado di riconoscere le linee, quindi ha addestrato livelli e nodi specifici per riconoscere linee orizzontali a tre pixel, linee verticali a 3 pixel e variazioni specifiche di linee diagonali a tutti gli angoli. In questo modo, sapeva esattamente su quali parti della rete si poteva contare per sparare quando esistevano gli schemi desiderati. Quindi, poiché ogni strato è altamente collegato, l'intero neocognitron nel suo insieme potrebbe identificare ciascuna delle parti composite presenti nell'immagine, indipendentemente da dove esistessero fisicamente. Quindi, quando un determinato segmento di linea esisteva da qualche parte nell'immagine, ci sarebbe sempre un nodo specifico che si attiva.

Mantenendo sempre presente questa immagine, considera la regressione lineare che sta semplicemente trovando una formula (o una linea) tramite la somma dell'errore al quadrato, che passa più da vicino tra i tuoi dati, è abbastanza facile da capire. Per trovare "linee" curve possiamo fare la stessa somma del calcolo dei prodotti, tranne ora che aggiungiamo alcuni parametri di x ^ 2 o x ^ 3 o anche polinomi di ordine superiore. Ora hai un classificatore di regressione logistica. Questo classificatore può trovare relazioni di natura non lineare. In effetti la regressione logistica può esprimere relazioni arbitrariamente complesse, ma è comunque necessario scegliere manualmente il numero corretto di funzioni di alimentazione per fare un buon lavoro nel prevedere i dati.

Un modo di pensare alla rete neurale è considerare l'ultimo livello come un classificatore di regressione logistica , e quindi i livelli nascosti possono essere considerati "selettori di funzioni" automatici . Ciò elimina il lavoro di scelta manuale del numero corretto e della potenza delle funzioni di input. Pertanto, l'NN diventa un selettore automatico di funzioni di potenza e può trovare qualsiasi relazione lineare o non lineare o fungere da classificatore di insiemi arbitrariamente complessi ** (questo, presuppone solo, che ci siano abbastanza strati e connessioni nascosti per rappresentare la complessità di il modello che deve imparare). Alla fine, un NN ben funzionante dovrebbe apprendere non solo "la relazione" tra input e output, ma invece cerchiamo un'astrazione o un modello chegeneralizza bene.

Come regola generale, la rete neurale non può apprendere nulla che un essere umano ragionevolmente intelligente non possa teoricamente apprendere dato abbastanza tempo dagli stessi dati, tuttavia,

  • potrebbe essere in grado di imparare qualcosa che nessuno ha ancora capito
  • per grossi problemi una banca di computer che elabora reti neurali può trovare soluzioni davvero buone molto più velocemente di un team di persone (a un costo molto più basso)
  • una volta addestrati, le NN produrranno risultati coerenti con gli input su cui sono state addestrate e dovrebbero generalizzare bene se ottimizzate
  • NN non si annoia o si distrae mai

1
+1 per il paragrafo su come l'ultimo livello esegue la regressione logistica oltre alla selezione delle funzioni del livello nascosto. Questo è un bel modo di pensare alle NN.
jlund3,

Grazie, ma dovrei chiarire che non sto esattamente dicendo che l'ultimo strato di ogni ANN è in realtà un livello di regressione logistica, ma solo che questa è una possibile configurazione che potrebbe risolvere molti problemi. A causa del modo per lo più casuale, in genere alleniamo la regressione di ANN molto probabilmente ogni regressione risultante si sviluppa su molti nodi e strati in modo molto casuale. Si potrebbe formare sottoreti per rispondere in modi specifici e quindi pompare l'output di quelli in uno strato di regressione per creare reti specializzate per problemi particolari. Rendere un ANN altamente efficiente in memoria e velocità.
Mcstar

1
Questa risposta continua a ricevere visualizzazioni, quindi ho pensato di sottolineare che ormai ha più di 5 anni e considera solo le reti completamente connesse feed forward. Sebbene le intuizioni concettuali qui siano ancora valide, non danno al professionista abbastanza per capire i concetti di NN profondi che sono diventati standard nell'ultimo decennio. La CNN (rete neurale di convoluzione) è un adattamento moderno molto importante che fornisce alle reti profonde superpoteri consentendo loro di individuare bordi, contrasto, nitidezza, spazi colore, ombre e altro e di usarli per determinare il contesto delle caratteristiche di basso livello.
mcstar

10

Potresti aver sentito dire che le reti neurali sono " approssimatori di funzioni universali ". In sostanza, il teorema di Cybenko afferma che per qualsiasi funzione che associa i reali ai reali, è possibile approssimarlo con una rete neurale con funzioni di attivazione sigmoide. In effetti, si scopre che le reti neurali ti consentono di calcolare qualsiasi funzione calcolabile da una macchina di Turing (cioè tutto ciò che puoi scrivere un algoritmo per calcolare). Sfortunatamente, queste prove dicono solo che per una configurazione finita di neuroni e pesi, è possibile approssimare qualsiasi funzione.

La teoria è tutta carina e dandy, ma la tua domanda sembra essere più sulla falsariga di come codificare effettivamente il calcolo di alcune funzioni in un insieme di neuroni e pesi. Per illustrare, considera un semplice esempio: l'esclusivo o. XOR accetta due input, passa quegli input. Quando uno e solo uno degli ingressi sono attivati, viene attivato il nodo di uscita. Con entrambi o nessuno degli ingressi è attivato, il nodo di uscita non è attivato.

Una rete Perceptron a tre strati in grado di calcolare XOR presa in prestito da Wikipedia.

Si noti che i tre nodi nascosti fanno cose diverse. I nodi più a sinistra e più a destra passano semplicemente attraverso le rispettive attivazioni dei nodi di input. Il neurone medio prende i due input e in qualche modo li nega se sono entrambi attivi. Questa intelligente combinazione e ricombinazione di input è essenzialmente il modo in cui viene svolto il lavoro in una rete neurale.

Ovviamente per funzioni più complesse la combinazione e la ricombinazione devono essere fatte in modi più intelligenti e complicati, ma questo è essenzialmente ciò che accade a basso livello. La cosa folle è che questo è davvero tutto ciò che serve per calcolare qualsiasi funzione calcolabile! Ancora una volta, anche le macchine turing risultano ingannevolmente semplici ...

Il problema è che non abbiamo davvero un modo per generare magicamente la rete neurale che calcola alcune funzioni arbitrarie. Le prove ci dicono solo che c'è qualche rete là fuori che potrebbe farlo. Quando formiamo le nostre reti neurali, stiamo semplicemente cercando di trovare una rete abbastanza vicina.

Nel contesto del riconoscimento delle immagini, è possibile immaginare la codifica di schemi nella rete. Ad esempio, per riconoscere il numero "1", è possibile immaginare nodi nascosti che prevedono che una colonna di pixel sia per lo più o tutta attivata, con i pixel vicini disattivati. Questo nodo nascosto potrebbe essere abbastanza bravo a riconoscere una linea retta in quella particolare colonna. Metti insieme abbastanza di questi e abbastanza presto hai un mucchio di nodi che lo fanno in abbastanza punti della tua immagine che se mostrerò alla rete uno, saranno attivati ​​abbastanza nodi nascosti in linea retta, indicando un '1'. Il problema ovviamente diventa la generalizzazione della rete in modo che possa riconoscere una vasta gamma di input.

Speriamo che questo ti aiuti a capire più o meno i concetti di come una rete neurale può eseguire calcoli. Tuttavia, hai toccato un punto che è piuttosto importante per le reti neurali: in generale, nella migliore delle ipotesi, è difficile capire perché la rete sputa un determinato output, specialmente se si considera che per qualcosa come il riconoscimento delle immagini, le reti sono generalmente abbastanza grande che gli umani hanno difficoltà a comprendere ciascuna delle parti mobili della macchina. A complicare ulteriormente la questione è che, in generale, la maggior parte delle reti neurali in realtà non ha un singolo nodo nascosto per ogni piccola funzionalità che la rete potrebbe apprendere sui dati. Invece, rilevare qualcosa come una linea retta per classificare il numero "1" avverrebbe in modo non centralizzato su molti nodi nascosti. Altri algoritmi,

Se stai cercando più lettura, ti consiglio vivamente di leggere questo tutorial su ai junkie. Ti guida attraverso le basi di come funziona una rete neurale e fornisce anche un semplice esempio di codice che induce le reti neurali a guidare un carro armato verso un obiettivo. Il tutorial non copre tuttavia la backpropagation, che è di gran lunga il modo più comune di addestrare le reti neurali e utilizza invece un semplice algoritmo genetico. Una volta che inizia a parlare di genetica, immagino che tu possa smettere di leggere ...


Grazie per tutto il tempo e gli sforzi per mettere insieme tutte queste parole e pensieri. Sono particolarmente interessato a NN convoluzionale per il riconoscimento delle immagini. Ho provato l'esempio di rilevamento del volto nella libreria OpenCV, ma ho scoperto che è adatto solo agli oggetti rigidi. La rete neurale ha un limite simile al riconoscimento degli scalpellini, vale a dire solo brava con oggetti rigidi?
user1731927

Non vi è alcuna ragione teorica per cui la NN (o la CNN per quella materia) avrebbe un limite al suo riconoscimento di schemi, ma come hai già scoperto, alcuni problemi sono più facili da imparare rispetto ad altri. Come molti problemi nell'apprendimento automatico, probabilmente dovrai modificare un po 'il tuo modello in modo che possa fare bene sul tipo specifico di problema che stai cercando di risolvere, e le NN non fanno eccezione.
jlund3,

1
Ecco un articolo interessante su come strutturare meglio le NN insieme per risolvere i problemi della griglia 2D come la classificazione delle immagini. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3

1
Tangenzialmente, la difficoltà nel classificare correttamente oggetti visivi "non rigidi", o detto in altro modo, oggetti i cui bordi non hanno linee pulite, è esattamente il motivo per cui anche la natura ha determinato che il camuffamento è un'eccellente strategia di evasione. Cibo per la mente.
Mcstar

2

Questo è ciò che ti confonde

come apprende cosa c'è in un'immagine.

Ciò che è in un'immagine è rappresentato digitalmente dai valori nei pixel dell'immagine. Se prendi un esempio di colore nell'immagine. Il pixel può avere tre valori, ciascuno per i tre colori principali: rosso, verde e blu ( RGB). Un pixel con ( 10,50,100) significa che ha "meno" elementi di colore blu rispetto a un pixel con ( 40,50,100). Pertanto, nell'immagine il primo pixel rappresenta una regione con meno colore blu. Questa è l'informazione che la rete neurale apprende, da una posizione / regione dell'immagine all'altra e finisce per "conoscere" ciò che è nell'immagine. Lo stesso principio viene applicato per altre caratteristiche dell'immagine (oltre al colore) che possono essere utilizzate come input per la rete neurale. Vedi questo e questo per i concetti di base delle immagini e poi passa a questo per sapere come funziona la rete neurale.


1

Tutti i problemi di apprendimento automatico sono gli stessi. Hai alcuni dati del treno, apprendi un modello che rappresenta questi dati e hai la capacità di generalizzare questa conoscenza in quel modo raggruppa, classifica, apprendi con algoritmi diversi.

In Riconoscimento immagini hai di nuovo una serie di immagini che vuoi imparare.

  1. Queste immagini vengono inizialmente elaborate e alcune funzionalità vengono estratte dalle immagini (molti possibili schemi di funzionalità immagine come SIFT, Bag of WORDS) come se si usassero i pixel e i loro valori.
  2. Dai a queste immagini i corrispondenti vettori di funzioni per il tuo algoritmo ML (Neural Net, SVM o altri).
  3. Impara un modello
  4. Utilizzare questo modello per riconoscere oggetti che sono visti sufficientemente nei dati di addestramento.

Se vuoi riconoscere più di una cosa, usa più classificatori per ognuno.


1

Vorrei anche menzionare molto popolare per le reti neurali convoluzionali di riconoscimento delle immagini. Ecco un link alla spiegazione semplificata di una CNN .

In breve, nell'immagine CNN viene prima suddivisa in caratteristiche, come bordi, forme, raccolte di forme. Quindi queste funzionalità vengono "immesse" in una rete neurale multistrato "regolare" (percettrone multistrato).

Più in dettaglio, viene applicato un set di filtri per estrarre funzionalità in una forma di una mappa funzionalità. Un filtro è solo una matrice (casuale all'inizio) che viene applicata all'immagine originale in modo che venga calcolato il prodotto punto della matrice dell'immagine originale e della matrice del filtro e il risultato venga sommato. Il filtro si sposta lungo l'immagine originale di un pixel (il passaggio) alla volta e la matrice della mappa delle caratteristiche viene riempita. Viene creata una mappa delle caratteristiche per ciascun filtro. Quindi la non linearità introdotta con RELU (Unità lineare rettificata) per ciascun pixel in ciascuna mappa delle caratteristiche. Il pooling, tramite l'applicazione di max (), sum () o media (), viene eseguito dopo la convoluzione. Infine, le funzioni estratte in questo modo sembrano pezzi "ingranditi" dell'immagine originale. Queste caratteristiche sono inserite in una rete neurale completamente connessa (tutte le unità sono connesse) e le probabilità per ogni immagine (supponiamo che abbiamo addestrato la nostra rete sulle immagini di automobili, alberi e barche) sono calcolate dopo ogni passaggio feedforward attraverso la rete. La rete è addestrata, il che significa che i parametri (pesi) e le matrici dei filtri sono ottimizzati tramite backpropagation (minimizzazione dell'errore di classificazione errata). Quando una nuova immagine viene immessa nella rete addestrata, è necessario solo feedforward per identificare l'immagine (a condizione che la rete sia sufficientemente accurata, ovvero l'abbiamo addestrata con esempi sufficienti ecc.) ciò significa che i parametri (pesi) e le matrici dei filtri sono ottimizzati tramite backpropagation (minimizzazione dell'errore di classificazione errata). Quando una nuova immagine viene immessa nella rete addestrata, è necessario solo feedforward per identificare l'immagine (a condizione che la rete sia sufficientemente accurata, ovvero l'abbiamo addestrata con esempi sufficienti ecc.) ciò significa che i parametri (pesi) e le matrici dei filtri sono ottimizzati tramite backpropagation (minimizzazione dell'errore di classificazione errata). Quando una nuova immagine viene immessa nella rete addestrata, è necessario solo feedforward per identificare l'immagine (a condizione che la rete sia sufficientemente accurata, ovvero l'abbiamo addestrata con esempi sufficienti ecc.)


0

È bene sapere che ANN può creare qualsiasi funzione f (x) o f (x, y, z, ..) o qualsiasi funzione multifunzione. Ma è anche importante sapere che le funzioni hanno dei limiti nel modo in cui possono classificare i dati ... ci sono sottoinsiemi di relazioni più complessi di gruppi di oggetti, che sono importanti nella classificazione e che non sono descritti da tali funzioni in modo elegante o naturale, ma sono importanti nel linguaggio e nella classificazione degli oggetti. Anche ANN può farlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.