calling the backward with an explicitly specified Tensor variable does not help either:
            rloss.backward(torch.Tensor([1]).cuda())

gives
    147 
    148     def register_hook(self, hook):

/home/lex/anaconda2/envs/py27/lib/python2.7/site-packages/torch/autograd/stochastic_function.pyc in _do_backward(self=<torch.autograd._functions.stochastic.Multinomial object>, grad_output=(), retain_variables=True)
     13     def _do_backward(self, grad_output, retain_variables):
     14         if self.reward is _NOT_PROVIDED:
---> 15             raise RuntimeError("differentiating stochastic functions requires "
        global RuntimeError = undefined
     16                                "providing a reward")
     17         result = super(StochasticFunction, self)._do_backward((self.reward,), retain_variables)

RuntimeError: differentiating stochastic functions requires providing a reward
> /home/lex/anaconda2/envs/py27/lib/python2.7/site-packages/torch/autograd/stochastic_function.py(15)_do_backward()
     13     def _do_backward(self, grad_output, retain_variables):
     14         if self.reward is _NOT_PROVIDED:
---> 15             raise RuntimeError("differentiating stochastic functions requires "
     16                                "providing a reward")
     17         result = super(StochasticFunction, self)._do_backward((self.reward,), retain_variables)