Thanks Simon.  The question is more around learning hidden states.  Currently I assign zero initial states, and I actually don’t make them volatile so they do have a grad_fn.  However, I don’t see the point of that, since I feed a new initial state to every sequence I get (before training the network with a new batch sequence, I call init_hidden() above.
This pdf 95 (by Hinton) mentions that it’s better to actually learn the hidden states of the network, which got me thinking to maybe assigning one hidden state to the network and essentially replicate it across each element in the batch, so it can learn the hidden state.
What do you think?