Gradient Based Optimization Methods