Optimization Techniques for Neural Networks