use more efficient version of backprop