Let’s say you have the following (pseudo)code:
probs = Variable(probs, requires_grad=True) # tells autograd to compute gradients for probs
cost = ctc_loss(probs, labels, probs_sizes, label_sizes)
cost_3 = cost * 3
cost_3.backward()

and
probs2 = Variable(probs2, requires_grad=True) # tells autograd to compute gradients for probs
cost = ctc_loss(probs2, labels, probs_sizes, label_sizes)
cost.backward()

You’d expect probs.grad to be 3 times that of probs2.grad, because of the final multiply by 3 in cost_3.
That’s what the 'backward not multiplied by grad_output’ checks: that when the output of the function (ctc_loss in this case) is then operated on by some operator, backpropagation still works.