Padroneggiare il Deep Learning L’arte di approssimare le non-linearità con stime a tratti Parte-2

Comprendere il Deep Learning L'arte di approssimare le non-linearità mediante stime a tratti - Parte 2

Saluti a tutti! Benvenuti al secondo episodio della mia serie Mastering Deep Learning. Questo articolo rappresenta il proseguimento della prima parte, intitolata L’arte dell’approssimazione delle non linearità con stime a tratti Parte-1. Nel primo articolo abbiamo visto che le reti neurali combinano più funzioni lineari dell’input x per stimare un output y attraverso l’apprendimento della mappatura f(x,ϕ) che mappa lo spazio di input allo spazio di output. Abbiamo osservato che queste mappature sono intrinsecamente lineari, ed è grazie alle funzioni di attivazione che vengono introdotte delle non linearità in queste mappature. Vediamo che possiamo approssimare una funzione non lineare utilizzando diverse funzioni lineari a tratti mediante la loro combinazione lineare. La creazione di queste funzioni lineari a tratti è una proprietà unica delle funzioni che impostano una soglia o che limitano l’input ad uno o più punti (ad esempio, ReLU). Man mano che il numero di regioni lineari si avvicina all’infinito, la lunghezza di queste regioni lineari diventa infinitesimale, trasformando quindi la mappatura. Ciò che in precedenza era una struttura lineare a tratti ora si evolve in una funzione non lineare. Il teorema dell’approssimazione universale dimostra che per qualsiasi funzione continua, esiste una rete superficiale che può approssimare questa funzione con una precisione specificata.

Ci sono delle funzioni che richiedono un numero eccessivamente grande di unità nascoste per essere stimate con la precisione desiderata. Questo ha portato alla scoperta delle Reti Neurali Profonde. Le Reti Neurali Profonde possono approssimare molte più regioni lineari rispetto alle reti neurali superficiali per un dato numero di parametri. Capiremo l’intuizione dietro le Reti Neurali Profonde considerando due reti neurali superficiali con 3 unità nascoste, dove l’output della prima rete viene utilizzato come input per la seconda rete.

Rete neurale profonda creata combinando due reti neurali superficiali, ognuna con 3 unità nascoste

Adesso addestriamo questa rete per stimare la funzione y = sin(2x)+cos(x)+x utilizzando la rete neurale profonda rappresentata sopra e comprendiamo come funziona.

f(x) da stimare dalla rete profonda
f(x) stimata dalla rete

Il grafico sopra rappresenta la funzione stimata dalla rete profonda. Cerchiamo di capire questo analizzando le stime strato per strato per comprendere la dinamica.

output dei neuroni dalla prima rete
y’ è la combinazione lineare di h1,h2 e h3 (y’ = ReLU[θ₁h₁ + θ₂h₂ + θ₃h₃ + β])
output dei neuroni dalla seconda rete
y' è la combinazione lineare di h1, h2 e h3 (y' = θ'₁h'₁ + θ'₂h'₂ + θ'₃h'₃ + β')

I grafici non avranno senso in questo momento, una delle ragioni è che la capacità della rete non è sufficiente. Ma cerchiamo di capire di cosa si tratta passo dopo passo osservando la relazione

y = θ’₁h’₁ + θ’₂h’₂ + θ’₃h’₃ + β’

qui y descrive un iperpiano tridimensionale di h’₁, h’₂, e h’₃. Purtroppo, non possiamo visualizzare questo iperpiano, ma se osserviamo attentamente, possiamo riscrivere la relazione nel seguente modo:

y = θ’₁ReLU[ϕ₁y’ + β₁] + θ’₂ReLU[ϕ₂y’ + β₂] + θ’₃ReLU[ϕ₃y’ + β₃] + β’.

La relazione sopra descritta rappresenta un iperpiano lineare a pezzi monodimensionale in y’. qui abbiamo preso l’iperpiano tridimensionale e lo abbiamo srotolato in un iperpiano monodimensionale spostandoci da y a y’. Le reti neurali profonde eseguono esattamente la stessa operazione, ma al contrario. Le reti neurali profonde prendono una superficie a dimensione inferiore e la piegano in dimensioni superiori per produrre rappresentazioni complesse. Lo spazio di dimensioni superiori che si genera come risultato di questa piegatura è spesso noto come spazio latente e la superficie di dimensione superiore stimata è nota come rappresentazione latente dell’input. Nel nostro esempio, la mappatura tra x e y viene ottenuta attraverso le seguenti rappresentazioni latenti da x a y’ e da y’ a y

y’ = ReLU[θ₁h₁ + θ₂h₂ + θ₃h₃ + β]

y = θ’₁h’₁ + θ’₂h’₂ + θ’₃h’₃ + β’

Anche queste sono iperpiani tridimensionali poiché la mappatura sottostante da x a y è 1-D. Queste relazioni latenti possono essere srotolate per ottenere la mappatura sottostante 1-D da x a y. Pertanto, possiamo pensare alle reti profonde come alla piegatura dello spazio di input. Se tutta questa matematica e queste dimensioni ti confondono, immagina semplicemente il tuo spazio di input come un foglio di carta da piegare, per piegare la carta, devi muoverti nella terza dimensione, una rete neurale profonda fa esattamente la stessa cosa, ma in dimensioni molto più alte.

Fino ad ora, abbiamo considerato un esempio semplice in cui abbiamo pensato alla rete profonda come una composizione di due reti superficiali, adesso esaminiamo reti profonde più pratiche utilizzate in pratica:

Un esempio di rete neurale profonda con due livelli nascosti

Addestriamo la rete sopra per vedere come effettua le stime. Vediamo se siamo in grado di catturare la piegatura. Questa volta, useremo 7 neuroni in ogni livello invece di 3. La funzione a tratti stimata dalla rete è visualizzata di seguito:

Stima a tratti di y da parte della rete profonda

Possiamo vedere che la rete ha fatto un lavoro discreto nell’effettuare la stima della funzione. Ora, vediamo se ci sono indicazioni di piegatura visualizzando le rappresentazioni latenti. Se la piegatura è avvenuta, come discusso in precedenza, potremmo osservare uno o più dei seguenti segni:

  1. Cambiamento nell’intervallo di valori: Rileveremmo le alterazioni nell’intervallo di valori che la funzione rappresenta lungo l’asse x, l’asse y o entrambi, a seconda di come la rete neurale profonda ha eseguito l’operazione di piegatura.
  2. Sovrapposizioni o cicli: Potremmo osservare che la funzione si avvolge su se stessa in determinati casi, creando strutture simili a cicli.
7 diverse rappresentazioni latenti di x come y' da ogni neurone
Spazio di input piegato

Come previsto, la rete ha piegato lo spazio di input per creare rappresentazioni latenti, come è chiaramente visibile dal grafico precedente. Ad esempio, se osserviamo la linea rosa, notiamo che i suoi intervalli di x e y sono stati invertiti a causa di questa trasformazione. Allo stesso modo, la linea blu ha subito una trasformazione che ha creato un ciclo, insieme a una riduzione dell’intervallo dell’asse x. Queste trasformazioni possono essere semplici come lo scambio degli assi di coordinate o, nei casi più complessi, dar luogo a intricate strutture a forma di ciclo.

Il concetto di piegatura nelle reti neurali profonde può essere paragonato a una semplice e intuitiva analogia. Immaginate di avere un foglio di carta con una curva disegnata su di esso. Quando piegate il foglio lungo la curva e fate dei tagli, noterete che questi tagli si raddoppiano efficacemente quando si sbatte il foglio. Le reti neurali profonde utilizzano un principio simile, sebbene con una distinzione cruciale. Invece di creare manualmente i tagli, queste reti utilizzano un processo di apprendimento durante la procedura di allenamento. Regolano le rappresentazioni latenti “tagliando” o trasformandole in modo efficace, al fine di creare regioni più lineari all’interno dei dati. Questo processo di piegatura appreso consente alla rete di adattare meglio la distribuzione dei dati adattando le trasformazioni il più possibile.

Costruiamo un set di dati utilizzando una funzione più complessa, f(x) = sin(x) + sin(2x)cos(3x) + 0.2sin(5x)cos(7x) + 0.1sin(10x), combinata con rumore gaussiano. Il nostro obiettivo è valutare se le reti neurali profonde possono stimare efficacemente la distribuzione sottostante in presenza di questo rumore.

1000 punti campionati in modo uniforme dalla distribuzione dei dati
Stima dei modelli della distribuzione del rumore

Evidentemente, il modello ha catturato con successo la distribuzione sottostante in modo ragionevole. Se aumentassimo la capacità del modello, è probabile che la nostra stima migliorerebbe ulteriormente. Ciò dimostra il notevole potenziale delle reti neurali profonde come potenti stimatori, che hanno guadagnato un posto significativo nel panorama contemporaneo dell’apprendimento automatico.

Questo blog trae ispirazione significativa dal libro “Understanding Deep Learning” di Simon J.D. Prince (udlbook.github.io/udlbook/). Nella sezione finale, approfondiremo come queste reti effettuano stime per input e output multivariati. Il codice che ho utilizzato per generare i grafici può essere trovato di seguito. Se hai trovato interessante questo blog, apprezzerei molto il tuo supporto mettendo un like.

Understanding-Deep-Learning/Mastering_Deep_Learning_The_Art_of_Approximating_Non_Linearities_with_Pi…

Contribuisci a Raagulbharatwaj/Understanding-Deep-Learning sviluppando creando un account su GitHub.

github.com