Skip to content

(Differentiable) Particle Filter

(Differentiable) particle filter inference for continuous-discrete nonlinear Gaussian SSMs.

inference_dpf

DPFHyperParams

Bases: NamedTuple

Lightweight container for DPF hyperparameters.

diff_particle_filter(key, params: ParamsCDNLSSM, ys: Array, us: Array | None = None, ts: Array | None = None, hyperparams: DPFHyperParams = DPFHyperParams()) -> Union[Tuple[Array, Array, Array, float], Tuple[Array, Array, Array, Array, float]]

Differentiable particle filter with configurable resampling.

A differentiable particle filter (DPF) is a particle filter with the (discrete, non-differentiable) resampling step replaced in some way to allow for gradient-based optimization. This implementation supports three different resampling methods: - Multinomial resampling (biased) - Soft resampling [1] (biased; interpolates between multinomial and uniform resampling) - Stop-gradient resampling [2] (unbiased for score estimates)

Currently, only bootstrap proposals are supported.

References

[1] Karkus P, Hsu D, Lee WS (2018). “Particle filter networks with application to visual localization.” In Proc. Conf. Robot Learn., pp. 169–178. PMLR, Zurich, CH. [2] Scibior A, Wood F (2021). “Differentiable particle filtering without modifying the forward pass.” arXiv:2106.10314

Parameters:

Name Type Description Default
key

Random key.

required
params ParamsCDNLSSM

Parameters of the CDNLSSM.

required
ys Array

Emissions.

required
us Array | None

Inputs.

None
ts Array | None

Times.

None
hyperparams DPFHyperParams

Hyperparameters of the filter.

DPFHyperParams()

Returns:

Name Type Description
particles Union[Tuple[Array, Array, Array, float], Tuple[Array, Array, Array, Array, float]]

Particles.

log_weights Union[Tuple[Array, Array, Array, float], Tuple[Array, Array, Array, Array, float]]

Log weights.

ess_history Union[Tuple[Array, Array, Array, float], Tuple[Array, Array, Array, Array, float]]

(if return_ess_history is True) Effective sample size history.

log_evidence Union[Tuple[Array, Array, Array, float], Tuple[Array, Array, Array, Array, float]]

Log evidence.