lunedì, dicembre 15, 2008

L'alchimista I

Quando lessi questo post di Dario Bressanini rimasi molto affascinato, e decisi immediatamente di fare alcuni esperimenti culinari.

I primi, a dire il vero, furono abbastanza deludenti, ma questo fine settimana, approfitando della visita di un'amica della mia ragazza, ho deciso di provarci ancora.

Così sabato sera ho deciso di estendere il mio risotto radicchio e gorgonzola con qualche sapore un po' fuori dai canoni. Foodpairing sentenziò: salsa di soya.

Ecco come procedere: imbiondite una cipolla e buttateci il radicchio perchè cacci l'acqua (io di solito ci aggiungo un po' di sale, così mi illudo di velocizzare il tutto tramite osmosi). Quando è rimasta c'è un po' d'acqua del radicchio, aggiungeteci una spruzzata abbondante di salsa di soia. Procedete poi col risotto vero e proprio secondo manuale.

Il risultato non è stato affatto male, anzi!

Oggi invece, ho fatto una crema di carote col burro d'arachidi, che normalmente odio con tutta la mia anima. Accettabile secondo me (non ci posso fare niente, non lo sopporto il burro d'arachidi), buona secondo la mia ragazza.

To come: uno studio sistematico sulla parmigiana.

Che domenica non mi è venuta bene e ho deciso di aggredire il problema da un punto di vista scientifico.

domenica, dicembre 14, 2008

MCCN VIII

Giovedì abbiamo trattato il problema delle correlazioni fra variabili casuali - come al solito, la dispensa è qui.

Una famiglia di variabili casuali è detta indipendente se la distribuzione di probabilità si lascia fattorizzare nel prodotto delle probabilità marginali. Evidentemente, se X eY sono indipendenti, allora EXY=EXEY. In questo caso, si dice che X e Y non sono correlate.

Un errore che avviene molto spesso è quello di confondere correlazione e causalità. Cioè, dall'osservazione di una correlazione non nulla fra due variabili si deduce che una relazione causale fra le due variabili è presente. In realtà, ci sono vari effetti che possono indurre correlazioni.

1) Causalità diretta: ovviamente se X è la causa di Y, allora X e Y saranno correlate. In termini matematici: se Y=f(X), allora le due variabili non sono indipendenti; in genere, dunque, la covarianza delle due variabili, che è una possibile misura della loro correlazione, sarà non nulla.

2) Causalità comune: se X e Y sono due effetti della stessa causa, allora X e Y saranno correlate, in genere. Cioè, se Z è una variabile casuale, e f e g sono due funzioni non invertibili tali che X=f(Z) e Y=g(Z), allora, in generale, X e Y saranno correlate.

3) Dinamiche di reti: supponiamo adesso che X e Y siano immerse in una rete di interazioni. Allora, anche se X e Y non sono causalmente collegate, ne' hanno un input comune, di solito saranno correlate.

Qui trovate un breve script in python che mostra come 1) e 2) sono due effetti di dimensioni comparabili. Vengono create tre reti neurali elementari con delle dinamiche neuronali molto semplici. Ogni neurone può essere attivo o meno; se è attivo, ha una certa probabilità di emettere un potenziale d'azione che può cambiare il livello di attività degli altri neuroni.

La prima rete neurale è formata da un neurone di input e uno di output. Viene misurata il coefficiente di correlazione fra l'input e l'output.
La seconda rete (di controllo) è formata da due copie di reti I/O. Viene misurata il coefficiente di correlazione fra i due output.
La terza rete è formata da un input collegato a due diversi neuroni di output. Viene misurata il coefficiente di correlazione fra i due output.

Si può osservare che nel secondo caso il coefficiente di correlazione è 0 come atteso. Nel primo caso è tipicamente di un ordine di grandezza superiore al terzo caso; dato che però, a seconda dei parametri, le grandezza in gioco variano di più di un ordine di grandezza, non è possibile distinguere 1) da 3) a priori.

PS: ovviamente consiglio di installare python. Se l'avete fatto, per far funzionare lo script copiate il file in una cartella, entrate nella cartella e digitate in una console

'run mininetwork.py'

Dopo qualche secondo appariranno i risultati della simulazione. Se dovesse impiegare troppo tempo, aprite il file dello script e diminuite il numero degli steps della simulazione, si spiega da solo come farlo.

martedì, dicembre 09, 2008

MCCN VII

Giovedì scorso abbiamo incominciato ad occuparci di reti. La prima cosa che abbiamo discusso è il principio di autoconsistenza.

Il principio di autoconsistenza per reti è in qualche maniera simile al principio di autoconsistenza di Novikov per la risoluzione del viaggio nel tempo. Lì si richiede che l'effetto di un'azione sia consistente con la sua causa, in quello per reti si richiede che l'output di un'unità sia consistente col suo input.

Il p.d.a. si può formulare nella maniera seguente. Per prima cosa ci serve il concetto di rete computazionale. Questo è un oggetto costruito nella seguente maniera. I nodi sono delle funzioni che trasformano una variabile di stato (che consideriamo essere nello stesso spazio per tutti i nodi) in un output, eventualmente in maniera probabilistica. L'output è sempre nello stesso spazio per tutti i nodi.

I lati e i loro pesi sono specificati da una certa matrice di connessione. Ogni nodo possiede anche una funzione di input che trasforma gli output di altre unità in una variazione della propria variabile di stato.

Poniamo le variabili di stato in uno stato iniziale. Procediamo quindi per tempi discreti. Al tempo 1 questo viene trasformato in un output, che diventa un input per le altre unità. Questo input viene utilizzato per aggiornare le variabili di stato. A questo punto siamo pronti per il tempo 2 e così via iterando.

Esistono stati stazionari di una rete computazionale? Come si trovano?

Si noti che l'output al tempo n+1 è una funzione dell'input al tempo n, che a sua volta una funzione dell'output al tempo n. In formule

O[n+1]=F(I[n])=G(O[n])

Se input e output sono stazionari otteniamo il sistema

O=F(I), I=G(0)

Questa è la prima equazione di autoconsistenza, dove I e O sono vettori. Si noti che abbiamo soppresso (barando) la dipendenza dalla variabile di stato, e quindi l'equazione non aiuta molto, di solito. Supponiamo adesso che la rete sia omogenea, cioè che le funzioni di input e output e le connessioni siano tutte uguali fra loro, o, alternativamente, scelte in maniera indipendente dalla stessa distribuzione. Allora l'equazione vettoriale precedente si riduce ad una equazione scalare, eventualmente per i valori attesi nel caso probabilistico. Inoltre si ha che l'input è identico all'output e quindi si ottiene la seconda equazione di autoconsistenza

O=F(X,O)

dove abbiamo ripristinato la dipendenza dalla variabile di stato.

domenica, dicembre 07, 2008

Operazioni senza riporto

Questo fine settimana l'ho passato ad insegnare matematica alla cugina della mia ragazza. E mentre le spiegavo in ancora un'altra maniera la divisone polinomiale, ho capito a cosa servono i polinomi, e anche perchè i polinomi sono meglio dei numeri.

Consideriamo un numero N. Evidentemente, N si può scrivere come

a_n10^n+ a_{n-1} 10^{n-1} + \ldots + a_0

dove gli a_n altro non sono che le cifre del numero in base 10. Si noti ch la decomposizione è unica, dato che i coefficienti devono essere naturali fra 1 e 10. In efftti, contando in base 10,

N=a_na_{n-1}\ldots a_0

Ovviamente si può fare lo stesso sostituendo 10 con 2 (notazione binaria) o con qualsiasi altro naturale venga in mente.

A cosa serve? Per quale motivo lo scrivere i numeri in questa maniera è stata una delle più grandi conquiste dell'umanità? Principalmente a questo: se abbiamo fissato una base, è possibile addizionare, moltiplicare o dividere numeri fra loro semplicemente applicando degli algoritmi alla sequenza di cifre che lo rappresentano.

Il problema di tutti questi algoritmi è il riporto. Sia sommando, che moltiplicando, che dividendo numeri fra loro, è possibile che i coefficienti di una certa potenza di 10 (o di 2, o della base scelta) si sommino in maniera tale da portare ad un cambio di potenza.

Mi spiego con un esempio. Nella somma di 5 e 5, ognuno dei due sommandi e una potenza zeresima di 10, mentre il risultato è una potenza prima di 10. Le potenze della base si sono mischiate! Per tenere conto di questo fatto è necessario "fare il riporto", cioè tenere conto di come le potenze di un certo grado si sono sommate per dare origine ad una potenza di grado superiore.

Nei polinomi tutto questo non esiste! Per prima cosa notiamo che scrivere un polinomio mi da una rappresentazione parametrica dei numeri, in cui la base scelta è un parametro. Per capire cosa voglio dire, si osservi che la forma di un polinomio

a_nx^n+ a_{n-1} x^{n-1} + \ldots + a_0

e analoga alla rappresentazione di un numero in somme di potenze di 10, se sostitutiamo i coefficienti interi fra 0 e 9 con coefficienti reali e 10 con x.

Il grande vantaggio dei polinomi è che le potenze della variabile non possono sommarsi per ottenere un elemento di grado maggiore! Quello che voglio dire è che

ax +bx \quad \mbox{differisce da} \quad x^2

per ogni scelta dei valori a e b. Nel senso che il primo polinomio non è mai uguale al secondo nel senso dell'uguaglianza di funzioni, anche se possono assumere lo stesso valore per un certo valore di x.

A rigore, dunque, addizione, moltiplicazione e divisione di polinomi sono più facili di quelle fra numeri, dato che possono essere eseguite senza riporto. Un esempio? Voglio eseguire la moltiplicazione

(x^3 + 3x^2 + 5)(2x^2 -5 x)

A scuola avreste insultato l'insegnate, dato che sono un trinomio e un binomio: fanno sei termini da sommare appropriatamente! Eseguiamo invece la moltiplicazione dei coefficienti senza riporto

\begin{array}{ccccccc}&&1& 3 & 0& 5 & \times \\&&&2&-5& 0 & =\\\hline\\&&0& 0 & 0& 0\\& -5& -15& 0& -25 & - \\ 2 & 6& 0 & 10& -&\\\hline\\ 2 & 1& -15& 10& -25& 0\end{array}

Il risultato della moltiplicazione dei polinomi è dunque

 2x^5 + x^4 -15x^3 +10x^2 -25x

Eseguire la moltiplicazione nella maniera convenzionale porta, ovviamente, allo stesso risultato.

C'è un prezzo da pagare per questa semplicità: il problema dell'unicità della rappresentazione di un numero è molto più complesso che nel caso delle basi fisse.

giovedì, dicembre 04, 2008

Giovedì

Oggi riflettevo che per qualche motivo esoterico ed astrale, da quando sono venuto in Germania, il giovedì è sempre il giorno in cui più ho da fare.

mercoledì, dicembre 03, 2008

Processi puntuali con interazioni

Giovedì scorso ho tenuto la mia prima presentazione al BCCN.

Ciò su cui lavoro al momento è un'estensione non-lineare del modello di Hawkes per famiglie di processi puntuali che si influenzano a vicenda.

Un processo puntuale è una successione di tempi: se stiamo trattando un neurone, il processo puntuale sarà un modello dei tempi ai quali il neurone emette un potenziale d'azione. In un processo puntuale singolo la grandezza più significativa è l'intensità condizionata.

L'intensità condizionata è la probabilità al tempo t di avere un evento, dato che l'ultimo evento si sia verificato a t-T. Nel modello lineare di Hawkes, eventi di un processo puntuale producono un aumento nell'intensità condizionata di un altro processo puntuale, che poi ritorna lentamente alla sua intensità condizionata originale. Ovviamente, il primo processo influenza il secondo nella stessa maniera.

Il problema è che questo modello non permette interazioni inibitorie fra processi. Se il primo processo abbassasse di un certo livello l'intensità condizionata del secondo, allora si correrrebbe il rischio di un'intensità condizionata minore di 0, che è assurdo, dato che è una probabilità.

La soluzione, allora, è quella di far si che l'abbassamento dell'intensità condizionata dipenda dal livello attuale, in maniera da evitare che vada sotto zero. La maniera più semplice di realizzare questo meccanismo è una regola moltiplicativa. Questo è esattamente quello che faccio io: processi puntuali che interagiscono moltiplicativamente.

martedì, dicembre 02, 2008

MCCN VI

L'ultima volta ci siamo occupati di derivare l'equazione di Fokker-Planck.

Più che spiegare la derivazione, che, come al solito, si trova qua, e forse più interessare spiegare cosa descrive.

Il punto di partenza è una particella singola che si muova sotto l'azione di un'equazione differenziale


\dot{u}(t)= F(t,u(t)) + s(t)


Ovviamente, supponiamo che lo stato iniziale u(0) sia noto. Nell'equazione, s(t) è un segnale casuale che "disturba" il movimento della particella. Supponiamo adesso di avere un insieme di particelle identiche, tutte sottoposte alla stessa dinamica, e che NON interagiscono.

Chiamiando p(t,x) la distribuzione degli stati di queste particelle, possiamo supporre che p(t,x) sarà sottoposta ad una equazione dinamica che sia in qualche maniera derivabile dall'espressione di F e dalle statistiche di s.

Non è sembre possibile farlo, ma in alcuni casi si. Per esempio se s(t) è un rumore bianco e F=0, allora otteniamo un moto browniano, e la corrispondente equazione di Fokker-Planck è l'equazione di diffusione.

Se invece s(t) è un rumore bianco e F(u)=-Cu è una funzione lineare, allora otteniamo un processo di Ornstein–Uhlenbeck. L'equazione di Fokker-Planck è un'equazione di diffusione con un termine di primo grado.

Le cose diventano più complicate se s(t) non è un rumore bianco. Ma questi argomenti sono ben al di la di quanto possiamo trattare su un blog.

lunedì, dicembre 01, 2008

Frustrazione

Nell'ultima settimana sono falliti altri due tentativi per calcolare la distribuzione asintotica delle intensità del mio integratore stocastico.

Le corna che tiene!