AdaGrad is an enhanced SGD that automatically determines a per-parameter learning rate.

AdaGrad maintains a variable $G$ which just accumulates squared norms of the gradients seen so far, e.g. if you try to maximize $\log{p_w}$: