Gradient Based Methods For Optimization