A widely-used optimization algorithm that adapts learning rates per parameter using estimates of first and second moments of gradients.