{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Why optimization is difficult\n", "\n", "This tutorial shows why optimization is difficult and why you need some knowledge in order to solve optimization problems efficiently. It is meant for people who have no previous experience with numerical optimization and wonder why there are so many optimization algorithms and still none that works for all problems. For each potential problem we highlight, we also give some ideas on how to solve it. \n", "\n", "\n", "If you simply want to learn the mechanics of doing optimization with estimagic, check out the [quickstart guide](../../getting_started/first_optimization_with_estimagic.ipynb)\n", "\n", "\n", "The take-home message of this notebook can be summarized as follows:\n", "\n", "- The only algorithms that are guaranteed to solve all problems are grid search or other algorithms that evaluate the criterion function almost everywhere in the parameter space.\n", "- If you have more than a hand full of parameters, these methods would take too long.\n", "- Thus, you have to know the properties of your optimization problem and have knowledge about different optimization algorithms in order to choose the right algorithm for your problem. \n", "\n", "This tutorial uses variants of the sphere function from the [quickstart guide](../../getting_started/first_optimization_with_estimagic.ipynb)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "\n", "import estimagic as em" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def sphere(params):\n", " return (params[\"value\"] ** 2).sum()\n", "\n", "\n", "def sphere_gradient(params):\n", " return params * 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Why grid search is infeasible\n", "\n", "Sampling based optimizers and grid search require the parameter space to be bounded in all directions. Let's assume we know that the optimum of the sphere function lies between -0.5 and 0.5, but don't know where it is exactly. \n", "\n", "In order to get a precision of 2 digits with grid search, we require the following number of function evaluations (depending on the number of parameters):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# x-axis: \"Dimensionality (number of free parameters) of the problem\"\n", "# y-axis: \"Number of function evaluations\"\n", "dimensions = np.arange(10) + 1\n", "n_evals = 100**dimensions\n", "sns.lineplot(x=dimensions, y=n_evals);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you have 10 dimensions and evaluating your criterion function takes one second, you need about 3 billion years on a 1000 core cluster. Many of the real world criterion functions have hundreds of parameters and take minutes to evaluate once. This is called the curse of dimensionality." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sampling based algorithms typically fix the number of criterion evaluations and apply them a bit smarter than algorithms that rummage the search space randomly. However, these smart tricks only work under additional assumptions. Thus, either you need to make assumptions on your problem or you will get the curse of dimensionality through the backdoor again. For easier analysis, assume we fix the number of function evaluations in a grid search instead of a sampling based algorithm and want to know which precision we can get, depending on the dimension:\n", "\n", "For 1 million function evaluations, we can expect the following precision:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dimensions = np.arange(10) + 1\n", "precision = 1e-6 ** (1 / dimensions)\n", "sns.lineplot(x=dimensions, y=precision);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How derivatives can solve the curse of dimensionality\n", "\n", "Derivative based methods do not try to evaluate the criterion function everywhere in the search space. Instead, they start at some point and go \"downhill\" from there. The gradient of the criterion function indicates which direction is downhill. Then there are different ways of determining how far to go in that direction. The time it takes to evaluate a derivative increases at most linearly in the number of parameters. Using the derivative information, optimizers can often find an optimum with very few function evaluations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How derivative based methods can fail\n", "\n", "To see how derivative based methods can fail, we use simple modifications of the sphere function. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "rng = np.random.default_rng(seed=0)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def sphere_with_noise(params, rng):\n", " return sphere(params) + rng.normal(scale=0.02)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
value
x_01
x_12
x_23
x_34
x_45
\n", "
" ], "text/plain": [ " value\n", "x_0 1\n", "x_1 2\n", "x_2 3\n", "x_3 4\n", "x_4 5" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "start_params = pd.DataFrame(\n", " data=np.arange(5) + 1,\n", " columns=[\"value\"],\n", " index=[f\"x_{i}\" for i in range(5)],\n", ")\n", "start_params" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "grid = np.linspace(-1, 1, 1000)\n", "sns.lineplot(\n", " x=grid,\n", " y=(grid**2) + rng.normal(scale=0.02, size=len(grid)),\n", ");" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=sphere_with_noise,\n", " params=start_params,\n", " algorithm=\"scipy_lbfgsb\",\n", " logging=False,\n", " criterion_kwargs={\"rng\": rng},\n", ")\n", "\n", "res.success" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
value
x_01.0
x_12.0
x_23.0
x_34.0
x_45.0
\n", "
" ], "text/plain": [ " value\n", "x_0 1.0\n", "x_1 2.0\n", "x_2 3.0\n", "x_3 4.0\n", "x_4 5.0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.params" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'ABNORMAL_TERMINATION_IN_LNSRCH'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.message" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So the algorithm failed, but at least tells you that it did not succed. Let's look at a different kind of numerical noise that could come from rounding. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def piecewise_constant_sphere(params):\n", " params = params.copy(deep=True)\n", " params[\"value\"] = params[\"value\"].round(2)\n", " return sphere(params)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.lineplot(x=grid, y=grid.round(2) ** 2);" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Minimize with 5 free parameters terminated successfully after 1 criterion evaluations, 1 derivative evaluations and 0 iterations.\n", "\n", "The value of criterion improved from 55.0 to 55.0.\n", "\n", "The scipy_lbfgsb algorithm reported: CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = em.minimize(\n", " criterion=piecewise_constant_sphere,\n", " params=start_params,\n", " algorithm=\"scipy_lbfgsb\",\n", " logging=False,\n", ")\n", "\n", "res" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This time, the algorithm failed silently." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 4 }