Distributionally Robust Optimization Leads to Better Generalization: on SGD and Beyond