Understanding Optimization Algorithms like Gradient Descent