BIFMMessagePassingRules
Backward-information-filter forward-marginal (BIFM) smoothing of a linear state-space model, as two factor nodes: BIFM, a whole time slice, and BIFMHelper, which starts the chain. Use it to smooth a long linear Gaussian chain with known matrices in two passes, without inverting a covariance at every step.
The Bethe free energy of a model with BIFM is not supported. Asking for it throws a BIFMFreeEnergyError; run the inference without it.
BIFMMessagePassingRules — Module
BIFMMessagePassingRulesBackward-information-filter forward-marginal (BIFM) smoothing of a linear state-space model:
BIFM, a whole time slice,znext = A zprev + B inandout = C znext, as one deterministic node, underBIFMSmoother, which carriesA,BandCand which the model must give;BIFMHelper, at the start of the chain, which turns the backward pass into the forward one.
The backward pass sends information-form messages, the forward pass the marginals themselves; on a chain the result is the Rauch–Tung–Striebel smoother's. The rules take multivariate normal messages only, and the free energy of a model with BIFM is not supported: asking for it throws a BIFMFreeEnergyError.
Examples
julia> result = @call_message_update_rule(
node = BIFM, target = :zprev, algorithm = BIFMSmoother([1.0;;], [1.0;;], [1.0;;]),
m = (
out = MvNormalMeanPrecision([1.0], [1.0;;]),
in = MvNormalMeanPrecision([0.0], [1.0;;]),
znext = MvNormalWeightedMeanPrecision([0.0], [0.0;;]),
),
);
julia> mean(getresult(result)) ≈ [1.0]
trueReactiveMP runs these rules on a factor graph, which RxInfer builds from a GraphPPL model. The examples here call the rules directly, as a test does.
Pages
- BIFM: the time slice, its algorithm
BIFMSmoother, and the equations of both passes. - BIFMHelper: the node at the start of the chain.