Models#
Both fESN and wESN extend a standard Echo State Network with a second, dedicated memory reservoir. The vanilla reservoir captures short-term nonlinear dynamics; the memory reservoir sustains long-range dependence. Their states are concatenated and mapped to the output by a single trained ridge readout.
Background: the Echo State Network#
With univariate input \(u(t)\in\mathbb{R}\) and reservoir size \(p\), the reservoir state \(\mathbf{x}(t)\in\mathbb{R}^p\) evolves as
where \(\mathbf{W}_{xx}\) and \(\mathbf{W}_{xu}\) are fixed after random initialization and \(\mathbf{W}_{xx}\) is sparsified and rescaled so that its spectral radius \(\rho(\mathbf{W}_{xx}) < 1\) (a sufficient design rule for the echo-state property). Only the linear readout is trained.
fESN, Fractional Echo State Network#
The memory reservoir does not receive \(u(t)\) directly. Instead it receives a pure-past fractional-difference filter of it,
where \(B\) is the backshift operator. The “\(-1\)” removes the present term (\(\omega_0\)), so the memory input depends only on the past; in practice the sum is truncated at \(K\) lags. The weights decay polynomially as \(k^{-d-1}\), a soft attention over the distant past, in contrast to the exponential forgetting of the reservoir. The memory reservoir state \(\mathbf{m}(t)\in\mathbb{R}^q\) evolves as
In code
fESN(n_reservoir=(p, q), d=d, K=K). Passing a list d=[...] stacks several orders as
a multivariate memory input.
wESN, Wavelet Echo State Network#
wESN is fESN with one extra step: the fractional filter is applied to a wavelet-smoothed signal rather than the raw input. A shift-invariant MODWT first extracts the low-frequency trend
and the memory input becomes
Estimating long-range structure from low-frequency dynamics suppresses high-frequency noise and seasonal fluctuation. Any discrete PyWavelets family is available (haar, db, sym, coif, bior, rbio, dmey), and you may keep the smooth component, any detail level(s), or a stacked combination.
In code
wESN(n_reservoir=(p, q), d=d, K=K, wavelet="db4", wavelet_level=2, wavelet_components="smooth"). wavelet_norm switches between the standard MODWT normalization
and the classic DWT filters (model-equivalent).
Readout and training#
At each step the model forms the extended state
and, after discarding a washout of \(T_0=\zeta T\) transient steps, stacks the rows into a design matrix \(\mathbf{Z}\). For each horizon \(h\in\{1,\dots,H\}\) the readout is a ridge regression
Because \(\mathbf{Z}\) (and hence its Cholesky factor) does not depend on \(h\), the same
factorization is reused across horizons, only the right-hand side changes. RidgeCV selects
\(\lambda\) by closed-form leave-one-out, avoiding any refit loop.
Symbol |
Meaning |
Argument |
|---|---|---|
\(p,\ q\) |
vanilla / memory reservoir sizes |
|
\(\rho_x,\ \rho_m\) |
spectral radii |
|
\(\varphi_x,\ \varphi_m\) |
sparsification proportion |
|
\(\psi_x,\ \psi_m\) |
input scalings |
|
\(\sigma_x,\ \sigma_m\) |
state-noise std-dev |
|
\(d,\ K\) |
fractional order, filter lags |
|
\(\zeta\) |
washout ratio \(T_0/T\) |
|