Open tommyod opened 11 months ago
$$X_\text{updated} = \text{cov}(X, X) G^T (G \text{cov}(X, X) G^T + \alpha C_D)^{-1} (D - Y)$$
Let there be $n$ parameters, $m$ responses and $N$ ensemble members. Consider a single $y_j$, a row vector corresponding to resonse $j$. Then $C_D$ becomes a number (diagonal $(j, j)$ ) and we have shapes
X_\text{updated} = \underbrace{\text{cov}(X, X)}_{n \times n} \underbrace{G^T}_{n \times 1} (\underbrace{G}_{1 \times n} \underbrace{\text{cov}(X, X)}_{n \times n} \underbrace{G^T}_{n \times 1} + \underbrace{\alpha C_D}_{1 \times 1})^{-1} \underbrace{(d_j - y_j)}_{1 \times N}
or
X_\text{updated} = \underbrace{\text{cov}(X, X)}_{n \times n} \underbrace{G^T}_{n \times 1}
\underbrace{(G \text{cov}(X, X) G^T + \alpha C_D)^{-1}}_{1 \times 1}
\underbrace{(d_j - y_j)}_{1 \times N}
If we know that $X$ is sampled from a multivariate normal, then we know $\text{cov}(X, X)$ and it becomes diagonal. Assume it's the identity, then
X_\text{updated} = \underbrace{G^T}_{n \times 1} (\underbrace{G}_{1 \times n} \underbrace{G^T}_{n \times 1} + \underbrace{\alpha C_D}_{1 \times 1})^{-1} \underbrace{(d_j - y_j)}_{1 \times N}
which has the structure of a rank-1 update.
Så litt på å loope over observasjoner $y_i$. Problemet slik jeg ser det er at vi ikke vet hvilke parametre som korrelerer med $y_i$. Når vi vet det må disse lastes fra disk. Så hvis $y_1$ er korrelert med ett parametersett $X_1$, og $y_2$ med $X_2$, etc så må vi laste disse fra disk for å oppdatere.
Se for deg en situasjon der det er lite overlapp. Det blir mye lasting og skriving til disk. Eksempel: vi har $10$ parametre i $X$. Vi kan kun holde $3$ i minnet samtidig. $y_1$ sier at $\{1, 2, 3, 4\}
$ skal oppdateres, da må vi laste 2 grupper, f.eks. $\{1, 2\}
$ og $\{3, 4\}
$. Så sier $y_2$ at $\{1, 2\}
$ skal oppdateres - selv om vi hadde disse i minne for litt siden er de nå skrevet til disk, så da må vi laste de på nytt. Så sier $y_3$ at $\{1, 7\}
$ skal oppdateres, da må vi nesten hente 7 fra disk også - sikkert ved å skrive $\{1,2\}
$ først så laste $\{1, 7\}
$ på nytt.
Problemet du beskriv er ikkje gitt er eit problem, men ein trade-off mellom skriving til og frå disk vs. invertering av dense store matriser svært mange gangar. I algoritmen over har vi ein loop over observasjonar, så ein loop over realisasjonar, så ein loop over parametrar. Parametrar kan lastast i store batchar, så det bør ikkje vere eit kjempeproblem?
Der er to problem eg ser som er urelaterte til det over:
H = LLS coefficients yj on X[mask,:] # 1xp
dersom dette krevjer samtlege parametrar i minnet er det eit problem for minne. Eg er dog ikkje sikker på om alle i minnet er nødvendig for LLS. Veit du noko her?yji
blir approksimert med H_j @ x_i
medan i ES++ har vi yji = h_j(x_i)
(H
er average gradient på h
). Dette introduserer difor ein approksimasjon, som kan eller ikkje kan vere gjev.Did a first stab at this here: https://github.com/Blunde1/iterative_ensemble_smoother/blob/es-observation-loop/docs/source/LinearRegression.py
@Blunde1 writes: