Ok, so the problem with the above solution is that train_loss.backward() is not updating the parameters of the learner() model at all.
So, basically, the graph is breaking somewhere thus, learner.parameters()[0].grad is coming out to be None for every parameter.