If you want to learn the hidden layer initial state, starting from 0:
class SequenceModel(nn.Module):

    def __init__(self):
        super().__init__()
        self.lstm = nn.LSTM(input_size = 3, hidden_size = 3, bidirectional=False)
        self.hidden = nn.ParameterList((nn.Parameter(torch.zeros(1, 1, 3),
                                        nn.Parameter(torch.zeros(1, 1, 3)))

    def forward(self,x):
        lstm_out, _ = self.lstm(x.view(-1, 1, 3),self.hidden)
        return lstm_out

And now it will be picked up by the .parameters() and so the optimizer will take care of updating your hidden state with the rest of the parameters.