What do you mean by plain autodiff being mostly useless with normal/discrete branching? Wouldn't branches normally just be "ignored" by autodiff - each training sample being a different computational graph (but with parts in common) due to branching points, so the only effect of branching is which computational graph gets executed and backpropagated through?
What's the general type of use case where this default behavior is useless, and "non-discrete" (stochastic?) branching helps?
What's the general type of use case where this default behavior is useless, and "non-discrete" (stochastic?) branching helps?