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.
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 ...