FastICA

Da Wikipedia, l'enciclopedia libera.

FastICA è un popolare algoritmo per l'analisi delle componenti indipendenti, sviluppato da Aapo Hyvärinen presso la Helsinki University of Technology. L'algoritmo è basato su un punto fisso, schema iterativo per massimizzare la non-gaussianità di una misura statistica di indipendenza. L'algoritmo può anche essere derivato dall'iterazione approssimata di Newton.

Algoritmo[modifica | modifica wikitesto]

FastICA per una componente[modifica | modifica wikitesto]

L'algoritmo iterativo trova la direzione per il vettore di pesi \mathbf{w} massimizzando la non-gaussianità della proiezione \mathbf{w}^T \mathbf{x} per \mathbf{x}. La funzione g(\cdot) è la derivata di una funzione nonquadrata.

  1. Scegliere un vettori pesi iniziale \mathbf{w}
  2. Sia  
   \mathbf{w}^+ \leftarrow E\left\{\mathbf{x} g(\mathbf{w}^T \mathbf{x})\right\} - 
                  E\left\{g'(\mathbf{w}^T \mathbf{x})\right\}\mathbf{w}
  3. Sia  \mathbf{w} \leftarrow \mathbf{w}^+ / \|\mathbf{w}^+\|
  4. se non converge, torna al punto 2

In questo caso, come convergenza si intende il verificarsi della situazione per cui i valori di \mathbf{w} riferiti a 2 iterazioni successive puntano nella stessa direzione.

Alcuni esempi di funzioni g(\cdot) sono:

  •  g(u)= \tanh (au)
  • g(u)=u\  exp \left({-u^2 \over 2}\right)

I massimi relativi all'approssimazione della negentropia di \mathbf{w}^T \mathbf{x} sono ottenuti in corrispondenza di alcuni risultati dell'ottimizzazione della funzione E\left\{G(\mathbf{w}^T \mathbf{x})\right\}; in accordo con le condizioni di Karush-Kuhn-Tucker, gli ottimi della funzione E\left\{G(\mathbf{w}^T \mathbf{x})\right\} con il vincolo E\left\{(\mathbf{w}^T \mathbf{x})^2\right\}=||\mathbf{w}^2||=1 sono ottenuti nei punti in cui si verifica: E\left\{\mathbf{x}g(\mathbf{w}^T \mathbf{x})\right\}-\beta\mathbf{w}=0

Risolvendo l'equazione con il metodo di Newton e definendo la parte sinistra dell'equazione con F, si ottiene la matrice Jacobiana JF(w) come: JF(\mathbf{w}) = E\left\{\mathbf{x} \mathbf{x}^T g'(\mathbf{w}^T \mathbf{x}) \right\} - \beta \mathbf{I} Per semplificare l'inversione di questa matrice, risulta utile approssimare il primo termine; se i dati sono centrati (valore medio nullo) e sbiancati (whitening), si può approssimare così: E\left\{\mathbf{x} \mathbf{x}^T g'(\mathbf{w}^T\mathbf{x})\right\} = E\left\{\mathbf{x}\mathbf{x}^T)\right\} E\left\{g'(\mathbf{w}^T \mathbf{x})\right\} = E\left\{g'(\mathbf{w}^T \mathbf{x})\right\}\mathbf{I}

Applicandola, la matrice jacobiana diventa una matrice diagonale, e può quindi essere facilmente invertibile. Si ottiene quindi un'iterazione di Newton approssimata:

\mathbf{w}^+ = \mathbf{w}-\frac{\left[E\left\{\mathbf{x}g(\mathbf{w}^T \mathbf{x})\right\} - \beta \mathbf{w}\right]} {\left[E\left\{g'(\mathbf{w}^T \mathbf{x})\right\} - \beta \right] }

L'algoritmo può essere ulteriormente semplificato moltiplicando entrambe le parti per  \beta- E\left\{g'(\mathbf{w}^T \mathbf{x})\right\}, dando origine al vero e proprio algoritmo FastICA.

(L'algoritmo usa un'approssimazione della negentropia, che fa uso della curtosi).

FastICA per più componenti[modifica | modifica wikitesto]

L'algoritmo descritto per una componente permette di ricavare una sola delle componenti indipendenti. Per poterne stimare di più è necessario applicare l'algoritmo ad un insieme di n unità, caratterizzati da vettori di pesi \mathbf{w}_1,...,\mathbf{w}_n .

L'applicazione dell'algoritmo è la stessa, ma bisogna impedire che più neuroni presentino una convergenza nei confronti dello stesso massimo, ovvero bisogna scorrelare le uscite della rete \mathbf{w}_1^T\mathbf{x},...,\mathbf{w}_n^T\mathbf{x} alla fine di ciascuna iterazione. Per fare questo esistono almeno tre metodi in letteratura.

Caratteristiche dell'algoritmo[modifica | modifica wikitesto]

  • la convergenza è cubica assumendo un modello ICA, rendendo quindi l'algoritmo più veloce rispetto ai classici metodi basati sulla discesa del gradiente, che sono caratterizzati da convergenza lineare.
  • l'algoritmo gode di una grande facilità d'uso, anche perché non vi sono troppi parametri da impostare.
  • FastICA riesce a trovare le componenti indipendenti di quasi tutte le distribuzioni gaussiane mediante qualsiasi funzione non lineare g, a differenza di altre tecniche che necessitano di informazioni a priori sulle distribuzioni.
  • Le componenti indipendenti possono essere stimate una per una, facendo di questo strumento uno strumento importante per l'analisi esplorativa dei dati e riducendo l'onere computazionale.
  • L'algoritmo condivide con gli approcci neurali le caratteristiche desiderabili: è parallelo, distribuito, computazionalmente flessibile e poco esigente in termini di memoria utilizzata.

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]