Perché la ricostruzione negli encoder automatici utilizza la stessa funzione di attivazione dell'attivazione diretta e non l'inverso?


9

Supponiamo di avere un livello di input con n neuroni e il primo livello nascosto m neuroni, con tipicamente m<n. Quindi calcoli l'attivazioneun'j del j-th neurone nello strato nascosto di

aj=f(i=1..nwi,jxi+bj), dove f è una funzione di attivazione come tanh o sigmoid.

Per addestrare la rete, si calcola la ricostruzione dell'input, indicato ze minimizzare l'errore tra z e x. Ora ili-th element in z viene generalmente calcolato come:

zi=f(j=1..mwj,iaj+bi)

Mi chiedo perché vengano ricostruiti z di solito vengono calcolati con la stessa funzione di attivazione invece di utilizzare la funzione inversa e perché separati w e bsono utili invece di usare pesi e inclinazioni legate? Mi sembra molto più intuitivo calcolare il ricostruito con la funzione di attivazione inversaf1, per esempio, arctanh, come segue:

zi=j=1..mf1(aj)bjwj,iT

Si noti che qui vengono utilizzati pesi legati, ovvero w=wTe i pregiudizi bj del livello nascosto vengono utilizzati, invece di introdurre un ulteriore set di distorsioni per il livello di input.

E una domanda molto correlata: per visualizzare le caratteristiche, invece di calcolare la ricostruzione, si creerebbe di solito una matrice di identità con la dimensione del livello nascosto. Quindi, si utilizzerebbe ciascuna colonna della matrice come input per una funzione di riattivazione, che induce un output nei neuroni di input. Per la funzione di riattivazione, sarebbe meglio usare la stessa funzione di attivazione (rispzi) o la funzione inversa (risp zi)?

Risposte:


5

Non penso che il tuo presupposto w'=wTdetiene. O meglio non è necessario, e se lo fa, non è in qualche modo invertire automaticamente il calcolo per creare le funzioni di livello nascoste. Non è possibile invertire la compressione in generale, passando da n a m più piccoli, direttamente in questo modo. Se quello fosse l'obiettivo, allora vorresti una forma di inversione di matrice, non una semplice trasposizione.

Invece vogliamo solo wioj per la rappresentazione di funzionalità di livello superiore compresso e verrà scartato wioj' al termine dell'encoder automatico.

È possibile impostarew'=wTe legare i pesi. Questo può aiutare con la regolarizzazione, aiutando l'autencoder a generalizzare. Ma non è necessario

Per il funzionamento del codificatore automatico non importa quale funzione di attivazione si utilizza dopo il livello che si sta pre-allenando, a condizione che l'ultimo livello del codificatore automatico possa esprimere la gamma di possibili ingressi. Tuttavia, potresti ottenere una qualità dei risultati variabile a seconda di ciò che usi, come di consueto per una rete neurale.

È abbastanza ragionevole usare la stessa funzione di attivazione per la quale stai creando il livello pre-addestrato, in quanto è la scelta più semplice.

È anche possibile usare una funzione inversa, ma non è consigliabile per sigmoide o tanh, perché ad esempio arctanh non è definito <-1 o> 1, quindi probabilmente non sarebbe numericamente stabile.


Grazie! comunque, ilw'=wTsembra essere una pratica comune, in quanto è, ad esempio, utilizzato nell'esercitazione di base per denigrare gli autoencoder di deeplearning.net: ( deeplearning.net/tutorial/dA.html#daa ) Non trovo così ragionevole usare lo stesso funzione di attivazione per ricostruzione, potresti approfondire questo? È vero che è la scelta più semplice, ma mi sembra molto più naturale usare ilzio' con il un'rctun'nh, perché ciò produce effettivamente l'inverso matematico dell'attivazione.
Manfred Eppe,

Puoi Se vuoi. Ad esempio da deeplearning.net/tutorial/dA.html " Opzionalmente , la matrice di pesoW' della mappatura inversa può essere vincolata ad essere la trasposizione della mappatura diretta: W'=WT. Questo è indicato come pesi legati. "(Il mio enfasi). Il punto della mia risposta è che se lo fai, non è per fornire l'inversione automatica della codifica, è solo un vincolo che regolarizzerà l'allenamento.
Neil Slater,

Grazie Neil. Il tuo commento sulw'=wTproblema mi ha aiutato a generalizzare la mia domanda e renderla più precisa, quindi ho modificato la domanda di conseguenza. In realtà, in realtà non capisco perché sia ​​utile separarliw' affatto, invece di usare sempre la matrice trasposta wT. La risposta potrebbe essere "perché dà risultati migliori", ma poi mi chiedo perché dia risultati migliori. Mi sembra poco intuitivo.
Manfred Eppe,

@ManfredEppe: Forse invece dovresti pensare attentamente al perché pensi che la matrice di peso trasposta e la funzione inversa sarebbero utili? Non esiste un motivo specifico per usarli: qual è esattamente la tua intuizione dietro a pensare che sarebbero utili? Se è per "simmetria", allora dai un'altra occhiata all'ordine in cui sono applicati - non è un'inversione simmetrica dello strato input-to-hidden (se lo fosse, la funzione di attivazione inversa dovrebbe essere la prima)
Neil Slater
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.