Convex and Non-convex Optimization Methods for Machine Learning