Normalizing flow
Also: flow-based model
Because every layer is invertible, a flow can both sample (map noise forward) and compute the exact likelihood of data (map it backward and apply the change-of-variables formula). Layers such as coupling layers are designed so the Jacobian determinant is cheap to compute.
log p_X(x) = log p_Z(z) − log |det(∂f/∂z)|, x = f(z)
Example
The flow x = 2z + 1 applied to z ~ N(0, 1) stretches space by |det| = 2, so the density at x = 1 is p_Z(0) / 2 ≈ 0.399 / 2 ≈ 0.199.