Hi,
I think all of these are pretty correct yes.
Just keep in mind the distinction between autograd (that just runs the backward pass and compute gradients) and torch.nn (that is a set of utilities to work with neural nets).


We actually build the graph under the hook. The only place where you can see it is from the .grad_fn field.  The .grad attribute exists for every Tensor, it is just None by default.


We accumulate in the .grad fields of all the leaf Tensors (t.is_leaf()) that require gradients yes. (Or the ones on which you called retain_grad() that can be used to get the .grad field populated for non-leaf Tensors).


In no_grad mode, no graph is actually built, new Tensors will have requires_grad=False and grad_fn=None.


Here we enter the torch.nn realm. Your description is correct


Autograd is called auto from Automatic Differentiation. In comparison to Symbolic Differentiation or Numerical Differentiation that are other ways to compute gradients.