Types of Optimization Algorithms used in Neural Networks and Ways to Optimize Gradient Descent