Decoding heterogeneous single-cell perturbation responses