Adam is the optimizer most people reach for first, and usually never leave.
Plain gradient descent applies the same learning rate to every weight.
That is a poor fit when some weights need large moves and others tiny ones.
Adam keeps two running averages for each parameter as training goes along.
The first is an average of recent gradients, which is momentum by another name.
The second is an average of recent squared gradients, which measures how noisy that weight is.
The step is the first divided by the square root of the second.
So a weight with consistently large gradients ends up with a smaller effective rate.
A weight that has barely moved gets a relatively larger one.
That is what adaptive means here: every parameter gets its own step size.
Early in training both averages start at zero, so a correction is applied to unbias them.
The name comes from adaptive moment estimation, the two moments being those averages.
It converges quickly and tolerates a badly chosen learning rate far better than SGD.
It stores two extra numbers per parameter, so it needs roughly three times the memory.
The usual defaults of 0.9 and 0.999 are almost never worth changing.