{ "cells": [ { "cell_type": "markdown", "id": "06b92af3", "metadata": {}, "source": [ "## SunODE\n", "https://sunode.readthedocs.io/en/latest/without_pymc.html" ] }, { "cell_type": "code", "execution_count": 1, "id": "dd396fb0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sunode 0.4.0\n" ] } ], "source": [ "%matplotlib inline\n", "import sunode\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "print(\"sunode\", sunode.__version__)" ] }, { "cell_type": "markdown", "id": "1b384ff8", "metadata": {}, "source": [ "## ODE model" ] }, { "cell_type": "code", "execution_count": 2, "id": "0553e453", "metadata": {}, "outputs": [], "source": [ "params = {\n", " 'α': (),\n", " 'β': (),\n", " 'γ': (),\n", " 'δ': (),\n", "}\n", "\n", "states = {\n", " 'hares': (),\n", " 'lynxes': (),\n", "}" ] }, { "cell_type": "code", "execution_count": 3, "id": "716b4af5", "metadata": {}, "outputs": [], "source": [ "def lotka_volterra(t, y, p):\n", " \"\"\"Right hand side of Lotka-Volterra equation.\n", "\n", " All inputs are dataclasses of sympy variables, or in the case\n", " of non-scalar variables numpy arrays of sympy variables.\n", " \"\"\"\n", " return {\n", " 'hares': p.α * y.hares - p.β * y.lynxes * y.hares,\n", " 'lynxes': p.δ * y.hares * y.lynxes - p.γ * y.lynxes,\n", " }" ] }, { "cell_type": "code", "execution_count": 4, "id": "4e2da0b3", "metadata": {}, "outputs": [], "source": [ "problem = sunode.SympyProblem(\n", " params=params,\n", " states=states,\n", " rhs_sympy=lotka_volterra,\n", " derivative_params=[('α',), ('β',), ('γ',), ('δ',)]\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "id": "fa61dfbc", "metadata": {}, "outputs": [], "source": [ "# solver = sunode.solver.Solver(problem, sens_mode=\"simultaneous\")\n", "solver = sunode.solver.AdjointSolver(problem)" ] }, { "cell_type": "code", "execution_count": 6, "id": "8543d464", "metadata": {}, "outputs": [], "source": [ "y0 = np.zeros((), dtype=problem.state_dtype)\n", "y0['hares'] = 1\n", "y0['lynxes'] = 0.1\n", "\n", "# At which time points do we want to evalue the solution\n", "t = np.linspace(0, 10)" ] }, { "cell_type": "code", "execution_count": 7, "id": "2204fa35", "metadata": {}, "outputs": [], "source": [ "α, β, γ, δ = 0.1, 0.2, 0.3, 0.4\n", "θ = α, β, γ, δ\n", "solver.set_params_dict({\n", " 'α': α,\n", " 'β': β,\n", " 'γ': γ,\n", " 'δ': δ,\n", "})" ] }, { "cell_type": "code", "execution_count": 8, "id": "8b028b79", "metadata": {}, "outputs": [], "source": [ "#y, sens = solver.make_output_buffers(tvals)\n", "y, grad, lam = solver.make_output_buffers(t)\n", "# solver.solve(t0=0, tvals=t, y0=y0, y_out=y, sens0=np.zeros_like(sens[0]), sens_out=sens)\n", "solver.solve_forward(t0=t[0], tvals=t, y0=y0, y_out=y)" ] }, { "cell_type": "code", "execution_count": 9, "id": "90f6640b", "metadata": {}, "outputs": [ { "data": { "image/png": "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Ybrx8ggN68YizgDQUZlMZq07nKW3N51U4qmGfwAsSV5uzrrrii76xchu6uTtZsMO26dLuf9ubfx4B5fOZJLKG/8Lw+F4BkpOtv1mefbs2UpKStKRI0e0detWjRgxosG6vXv3avfu3ZKkn//8542+3zPPPKMtW7botttu06xZsxQbG6vMzEy9/vrrWrVqlY4fP66HH35YCxcutDjPyclJc+fOVf/+/VVYWKgZM2Zo165d8vLyqqt59NFHdeTIEUnS66+/btfwBwAcjdFkVtLpPK3al6EvDmQop6R5oU/nAE/d2DdcN/UN16CYTnJ2YhFnAOjonJwMuv6yMF1/WZj2pBbonU0n9cX+DJl+MkWkrMqoN9ef0Nytyfr5lV1078hurBHUThEA4dKV50l/727vLmzn8ROSd7BNLzl16lQ98sgjKi0t1QcffNBoAPT+++9LklxcXDRr1qxG32/Lli3661//qj/96U8W4zfeeKNuvPFGrVmzRsuWLdN//vMfhYSEWNTExMTozTff1LRp03TkyBE98sgjeuuttyRJq1atqns9depUTZ8+/aI/ZwBALZPJrF0p+Vq5L0Or92coq7h5U/G7hXjrpr7huvHyCPXt7MfOXQCARg2MDtDr0wYrNa9Mr397XEt3psn4kySopLJG/1l3XB9sOa37RnbTPVd2ka8HQVB70mHn/GZlZWnlypV65plndNNNNyk4OLhubZO777671a+fkZGhgICAumtec801rX5NtF++vr668847JUmLFy9WWVn9NR2qqqrqHukaO3Zsvce3zjdkyBA9+eST9cYNBoMeeeQRSVJNTY22bt3a4PlTp07VjBkzJEn/+9//9NlnnykrK6tu1lFMTIzeeOONC/gMAQDnM5trQ5/nVx7UlS+t06S3tmrOltNNhj+XR/rp0Rt66euHR2ndo9fo8TF91C/Kn/AHANAs0YFeenFif6179GpNGhKlhiaMFlfU6J9fH9XIl7/VG+uPq7SyxvaN4qJ02BlAYWFhdr3+r3/9axUWFtq1B7Qvs2fP1vvvv6+ioiItX768LoD5weeff66cnBxJ1h//kqRp06Y1ejMwZMiQutcnT55s9D1ef/11fffddzp9+rRmz56tAQMGKCsrS05OTvroo48UEBDQzM8MACDVhj770wu1al+GVu7LUHpBebPOuzzST+P7R2psv3DFBjW8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6OvyANN88803evLJJ3X55ZcrOTlZYWFhio6OVkpKiiZOnKhVq1b5ukTAr0yZMkU2m831+PLLL31dEuAT2dnZeuaZZzRgwAC1bdtWYWFhat++vfr166cHHnhA69at83WJgKlKS0s1d+5cXXbZZWrXrp3rPVWPHj30xz/+UevXr/d1iYDHHDp0SEuWLNHDDz+syy+/XImJia73RhMnTmzy9T799FNdddVVSkpKUlhYmJKSknTVVVfp008/9XzxdbA5nU6nKXeC6dLT0zV+/HgdO3aszvYePXro448/VpcuXUyuDDDX4MGD9dVXXzXY7/rrr9drr72m0NBQE6oC/NeWLVvUp08flZeXu15bsWKFhgwZ4ruiAB947733dOutt+rIkSP19rniiiu0aNEi84oCfCgzM1MjRozQd999d8J+9957r2bOnCmbzWZSZYB3nOj/4QkTJmj+/PmNuo7T6dQtt9yiOXPm1Nvn5ptv1iuvvOLVn5tgr10ZPrVlyxaNHTtWhYWFio6O1tSpU5WWlqaioiItXLhQr776qn788UeNGDFCGzZsUHR0tK9LBrzm119/lSS1b99eY8aM0aBBg9SxY0dVVFRo3bp1mjlzpn799Ve9+eabKi8v11tvveXjigHfcTgcuummm1ReXq7WrVvr0KFDvi4J8IkFCxZo0qRJcjgcat26tW699VYNHDhQCQkJOnDggHbu3KnFixcrJCTE16UCpigvL68V/px99tm677771KNHD+Xn52v16tWaOXOmCgoKNGvWLLVr104PPPCAj6sGPCc5OVmpqalaunRpk8996KGHXOFPr169NGXKFHXt2lU7d+7UM888o82bN2vOnDlq1aqVHn/8cU+XXs0JSxoyZIhTkjM4ONi5du1at/ZnnnnGKckpyfnoo4/6oELAPCNGjHC+8847zvLy8jrbDx8+7ExJSXH9THz11VcmVwj4j1mzZjklOXv27OmcOnWq6+dixYoVvi4NMM0PP/zgDAsLc0pyDho0yHn06NF6+5aUlJhYGeA777//vut3Qv/+/et8X7Vx40ZnSEiIU5IzPj7eWVZW5oNKAc95+OGHnYsXL3YeOHDA6XQ6nbt373b9HEyYMKFR1/j555+dwcHBTknOPn36OAsLC2u1FxQUOPv06eP6/L5jxw5PfxsurAFkQRs2bHCt1XDjjTeqf//+bn3uv/9+paamSpJeeOEFlZWVmVkiYKolS5Zo7NixCgoKqrM9MTFRM2fOdH39/vvvm1Ua4FcyMzP1t7/9TZL08ssvMx0SAevOO+9USUmJEhMT9eGHHyo2NrbevvycIFCsWbPGdTx16tQ631f17t1bI0eOlCTl5uZq+/btptUHeMOjjz6qkSNHqk2bNid9jVmzZrmm1b/44ouKiIio1R4ZGakXX3xRkjHS7oUXXjjpezWEAMiCas5DnzRpUp197Ha7brjhBknGP84s7olAV3Ntk507d/quEMCHbrvtNh0/flwTJkxgvR8ErO3bt2v58uWSpDvuuEOJiYk+rgjwD6Wlpa7jE60h2rVrV9dxSUmJV2sC/J3T6dRHH30kSerZs6cuuOCCOvtdcMEF6tGjhyTj87zTS0s1EwBZUNVuRlFRUerdu3e9/QYPHuw6Xr16tdfrAvxZzTc1djv/NCLwvPvuu1qyZIkSEhL07LPP+rocwGfee+891/GYMWNcx7m5ufr5559PuCA0YGUpKSmu4127dtXbr+oPaTabTd27d/d6XYA/2717t2s90pqfv+tS1Z6VlaU9e/Z4pR4+5VhQRkaGJKlbt24KDq5/ne+ePXu6nQMEqpUrV7qOa/5sAIHg6NGjuvvuuyVJM2bMUKtWrXxcEeA7VVtYx8bGKjU1Vf/5z390zjnnKCEhQSkpKUpMTFSXLl306KOP6vjx4z6uFjDPuHHjFBMTI8n4XVFRUeHWZ/PmzUpPT5ckXXvtta7+QKCq+Tm7oc8YZnw+JwCymOLiYmVnZ0uSkpKSTtg3Pj5eUVFRkox1H4BA5XA49PTTT7u+Hjt2rA+rAcw3ZcoUHThwQBdeeKFuvPFGX5cD+NQPP/wgSerUqZPuvPNOXXfdddq6dWutPrt379b06dPVv39/7du3zxdlAqZr1aqV5s+fr4iICK1Zs0bnn3++FixYoPXr12vZsmV69NFHNXjwYJWWlurcc8/V888/7+uSAZ+r+Tm7oc/nycnJdZ7nSQRAFpOfn+86bszW7lUBEH/BQiCbNWuWvv76a0nS6NGj1adPHx9XBJhn9erVeu211xQcHKxXXnlFNpvN1yUBPpWTkyPJWAvon//8p+Li4vTKK6/o0KFDKi4u1oYNG3T55ZdLkrZt26YxY8bI4XD4smTANKNHj9bGjRt144036ttvv9WECRPUv39/DRs2TNOnT1dkZKSef/55rV69Wm3btvV1uYDPNeXzedVnc8l7n88JgCymuLjYddyYXSnCwsIkSUVFRV6rCfBnK1eu1F/+8hdJUuvWrfXyyy/7uCLAPKWlpbr55pvldDp177336qyzzvJ1SYDPFRQUSDIWrw0KCtInn3yiyZMnq1WrVgoLC1OfPn20ZMkSVwi0du1affjhh74sGTBNWVmZ3nrrLS1evLjORWoPHjyot99+mw1mgEpN+Xxe9dlc8t7ncwIgiwkPD3cd11zUtj5VK/P/dis6IBB8//33Gj16tMrLyxUWFqZ33333lLZ4BJqbJ598UhkZGerYsaMeeeQRX5cD+IWa76XGjBlT544tdru91mLpb7/9tim1Ab5UUFCgSy65RE888YSOHDmiKVOmKCMjQyUlJTp27JiWLl2qgQMHasOGDRo1apRmz57t65IBn2vK5/Oau+Z56/M5AZDFtGjRwnXcmGFjVX/lasx0McBKdu/ereHDhys3N1dBQUF6++23G1yZH7CS7du366mnnpIkvfjii7WGHQOBrOZ7qapRPnU544wz1KFDB0nShg0bvF4X4GuPPPKIvvrqK0nS3LlzNWPGDPXs2VOhoaGKiYnRsGHDtGLFCqWlpcnpdOq+++5zWz8LCDRN+Xxe9dlc8t7n8/q3iEKzFB4ersTERGVnZysrK+uEfXNzc13/k9VccAqwun379umSSy7Rvn37ZLPZ9Prrr2v06NG+Lgsw1axZs1RaWqouXbqosLBQCxcudOuzbds21/EXX3yhAwcOSJJGjRpFYATLSk5Odv2/3pgFO3/99VcdOnTIjNIAn3E6nZo3b54kYzv4CRMm1NkvODhYjz32mAYOHCiHw6F58+Zp1qxZZpYK+JWav0ca+nxec+Fnb30+JwCyoNTUVK1atUo7duxQeXl5vVvBb9++vdY5QCDIzs7WsGHDtGvXLknGyIcbbrjBx1UB5qsaZrxr1y6NGzeuwf6PPfaY63j37t0EQLCsM844wzWip65trmuqaq/vvRZgFQcPHnQtkN6rV68T9u3du7fruObnDSAQnX766a7jhn4ezPh8zhQwCxo4cKAkYwjZpk2b6u23cuVK1/GAAQO8Xhfga8eOHdOll17q2uL36aef1u233+7jqgAA/uSiiy5yHe/cufOEfav+mFA1FQywqpohZ3l5+Qn7lpWV1XkeEIg6d+6s9u3bS6r9+bsuVVMsO3TooE6dOnmlHgIgC7ryyitdx1VDNX/L4XBowYIFkqS4uDilpaWZURrgM4WFhRoxYoS++eYbSdJf//pXPfjggz6uCvCd+fPny+l0nvBRc2HoFStWuF731psSwB/8/ve/V0hIiCSdcHevlStX6siRI5KkQYMGmVIb4CsJCQmKiYmRJK1bt+6EIVDND7mdO3f2em2AP7PZbLriiiskGSN81q9fX2e/9evXu0YAXXHFFbLZbF6phwDIgvr27et6IzJ37lytW7fOrc/MmTOVkZEhSbr77rtdb3QAKyotLdXo0aO1Zs0aScb/848//riPqwIA+KOWLVvqT3/6kyTp888/r3N9rPz8fN1zzz2urydPnmxWeYBP2O12jRgxQpKxluITTzxRZ7/c3Nxaf2AbOXKkKfUB/uyee+5xjYa788473bZ4Lyoq0p133inJGDVX8/eLp9mcTqfTa1eHz2zevFkDBgxQUVGRoqOjNW3aNKWlpamoqEgLFy7UnDlzJBmLuG3cuLHW6uSA1Vx99dWuv+IOHTpUL7zwwglT9dDQUKWkpJhVHuC3pk+frkcffVSSMQJoyJAhvi0IMMnhw4fVp08f7d27V8HBwbrlllt01VVXKSYmRt99951mzJjh+kvtrbfeqpdeesnHFQPet337dvXu3VuFhYWSjA0BJkyYoC5duqi4uFjr16/XCy+8oL1790qSLr74Yi1btsyXJQOnbPXq1dqxY4fr6+zsbD3wwAOSjGVUqv5gUGXixIl1Xmfq1Kl6+umnJRnraD344IPq2rWrdu7cqRkzZmjz5s2ufk8++aQXvhMDAZCFLV68WNddd53y8vLqbE9JSVF6erq6detmcmWAuZo6hPK0007Tnj17vFMM0IwQACGQZWRk6Pe//32tN/6/9cc//lGvvPIKI6kRMJYtW6Zx48YpOzv7hP2GDh2q999/X/Hx8SZVBnjHxIkT9cYbbzS6f33xisPh0E033aTXX3+93nNvvPFGzZkzR3a79yZqMQXMwkaNGqWtW7fq3nvvVUpKiiIjIxUXF6c+ffq4UkbCHwAAAHepqan69ttv9eyzz6pfv35KSEhQaGiokpKSdM011+iLL77Q3LlzCX8QUC655BJt375dM2bM0JAhQ9SqVSuFhIQoIiJCnTt31tixY7Vo0SItW7aM8AeowW63a+7cuUpPT9cVV1yh9u3bKzQ0VO3bt9cVV1yhjz/+WK+99ppXwx+JEUAAAAAAAACWxwggAAAAAAAAiyMAAgAAAAAAsDgCIAAAAAAAAIsjAAIAAAAAALA4AiAAAAAAAACLIwACAAAAAACwOAIgAAAAAAAAiyMAAgAAAAAAsDgCIAAAAAAAAIsjAAIAAAAAALA4AiAAAAAAAACLIwACAAAAAACwOAIgAAAAAAAAiyMAAgAAAAAAsDgCIAAAAAAAAIsjAAIAAAAAALA4AiAAAAAAAACLIwACAAAAAACwOAIgAAAAPzN//nzZbDbZbDbt2bPH1+UAAAALIAACAAAAAACwOAIgAAAAAAAAiyMAAgAAAAAAsDib0+l0+roIAAAASF9++aXS0tIa7LdixQoNGTLE+wUBAADLYAQQAAAAAACAxTECCAAAwE8UFBRo9+7d+uijj/TQQw9Jkj777DO1b9++Vr/OnTsrKirKFyUCAIBmKtjXBQAAAMAQFRWlM888Uxs3bnS9lpKSok6dOvmuKAAAYAlMAQMAAAAAALA4AiAAAAAAAACLIwACAAAAAACwOAIgAAAAAAAAiyMAAgAAAAAAsDgCIAAAAAAAAIsjAAIAAPAzNpvN1yUAAACLIQACAADwM+Hh4a7jkpISH1YCAACsggAIAADAz7Rr1851vHPnTh9WAgAArCLY1wUAAACgtl69eik8PFzFxcX629/+puDgYHXq1El2u/G3uw4dOigiIsLHVQIAgObE5nQ6nb4uAgAAALU9+OCDeuaZZ+psW7FihYYMGWJuQQAAoFljChgAAIAfevrpp/Xqq69q0KBBSkhIUFBQkK9LAgAAzRgjgAAAAAAAACyOEUAAAAAAAAAWRwAEAAAAAABgcQRAAAAAAAAAFkcABAAAAAAAYHEEQAAAAAAAABZHAAQAAAAAAGBxBEAAAAAAAAAWRwAEAAAAAABgcQRAAAAAAAAAFkcABAAAAAAAYHEEQAAAAAAAABZHAAQAAAAAAGBxBEAAAAAAAAAWRwAEAAAAAABgcQRAAAAAAAAAFkcABAAAAAAAYHEEQAAAAAAAABZHAAQAAAAAAGBxBEAAAAAAAAAWRwAEAAAAAABgcQRAAAAAAAAAFkcABAAAAAAAYHEEQAAAAAAAABZHAAQAAAAAAGBx/x+MAhFxw4m2EwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 432, "width": 576 } }, "output_type": "display_data" } ], "source": [ "plt.plot(t, y)\n", "plt.xlabel('t')\n", "plt.ylabel('y')\n", "plt.xlim(t[0], t[-1])\n", "plt.legend(['hares', 'lynx']);" ] }, { "cell_type": "code", "execution_count": 10, "id": "0078b93b", "metadata": {}, "outputs": [], "source": [ "solver.solve_backward(t0=t[-1], tend=t[0], tvals=t, \n", " grads=np.ones((len(t), y.shape[-1])),\n", " grad_out=grad, lamda_out=lam)" ] }, { "cell_type": "code", "execution_count": 11, "id": "5a87288c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([-82.13485284, 25.18562792]),\n", " array([ 465.25049911, -103.50680243, -25.88314792, 38.67576041]))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lam, grad" ] }, { "cell_type": "markdown", "id": "7a256883", "metadata": {}, "source": [ "## Loss and gradient" ] }, { "cell_type": "code", "execution_count": 15, "id": "4f0665dc", "metadata": {}, "outputs": [], "source": [ "def predict(θ):\n", " α, β, γ, δ = θ\n", " solver.set_params_dict({\n", " 'α': α,\n", " 'β': β,\n", " 'γ': γ,\n", " 'δ': δ,\n", " })\n", " y_out, grad, lam = solver.make_output_buffers(t)\n", " solver.solve_forward(t0=t[0], tvals=t, y0=y0, y_out=y_out)\n", " return y_out\n", "\n", "θ_guess = 0.1, 0.1, 0.1, 0.1\n", "yhat = predict(θ_guess)" ] }, { "cell_type": "code", "execution_count": 16, "id": "0b965493", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "14.487093439626495" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def loss(y, θ): # mse\n", " yhat = predict(θ)\n", " resid = y - yhat\n", " return (resid * resid).sum()\n", "\n", "loss(y, θ_guess)" ] }, { "cell_type": "code", "execution_count": 17, "id": "2a05a6d3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([433.82952474, -50.6250329 , 52.96938998, -75.86014686])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def gradient(θ):\n", " α, β, γ, δ = θ\n", " solver.set_params_dict({\n", " 'α': α,\n", " 'β': β,\n", " 'γ': γ,\n", " 'δ': δ,\n", " })\n", " y_out, grad_out, lam_out = solver.make_output_buffers(t)\n", " solver.solve_forward(t0=t[0], tvals=t, y0=y0, y_out=y_out)\n", " res = (y - y_out)\n", " solver.solve_backward(t0=t[-1], tend=t[0], tvals=t, \n", " grads=-2*res,\n", " grad_out=grad_out, lamda_out=lam_out)\n", " return grad_out\n", "\n", "θ_guess = 0.1, 0.1, 0.1, 0.1\n", "grad = gradient(θ_guess)\n", "grad" ] }, { "cell_type": "markdown", "id": "6cbde33a", "metadata": {}, "source": [ "## Gradient checking" ] }, { "cell_type": "code", "execution_count": 18, "id": "3191c190", "metadata": {}, "outputs": [], "source": [ "α, β, γ, δ = θ_guess\n", "Δ = 1e-6" ] }, { "cell_type": "code", "execution_count": 20, "id": "12c4b677", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(433.82952247483786, 433.8295247366786)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# yhat1 = predict((α+Δα/2, β, γ, δ))\n", "# yhat2 = predict((α-Δα/2, β, γ, δ))\n", "# (yhat1.sum() - yhat2.sum())/Δα, grad[0]\n", "\n", "L1 = loss(y, (α+Δ/2, β, γ, δ))\n", "L2 = loss(y, (α-Δ/2, β, γ, δ))\n", "(L1-L2)/Δ, grad[0]" ] }, { "cell_type": "code", "execution_count": 21, "id": "33db0a2e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-50.62503427133436, -50.62503290111857)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# yhat1 = predict((α, β+Δβ/2, γ, δ))\n", "# yhat2 = predict((α, β-Δβ/2, γ, δ))\n", "# (yhat1.sum() - yhat2.sum())/Δβ, grad[1]\n", "\n", "L1 = loss(y, (α, β+Δ/2, γ, δ))\n", "L2 = loss(y, (α, β-Δ/2, γ, δ))\n", "(L1-L2)/Δ, grad[1]" ] }, { "cell_type": "code", "execution_count": 22, "id": "040e69c8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(52.96939328225392, 52.969389983518944)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L1 = loss(y, (α, β, γ+Δ/2, δ))\n", "L2 = loss(y, (α, β, γ-Δ/2, δ))\n", "(L1-L2)/Δ, grad[2]" ] }, { "cell_type": "code", "execution_count": 23, "id": "40a3446a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-75.86015293803428, -75.860146862688)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L1 = loss(y, (α, β, γ, δ+Δ/2))\n", "L2 = loss(y, (α, β, γ, δ-Δ/2))\n", "(L1-L2)/Δ, grad[3]" ] }, { "cell_type": "markdown", "id": "3e16036c", "metadata": {}, "source": [ "## Gredienct descent" ] }, { "cell_type": "code", "execution_count": 41, "id": "388c110b", "metadata": {}, "outputs": [], "source": [ "def average(p, c, β):\n", " return β * p + (1 - β) * c \n", " \n", "class AdamOptimizer:\n", " def __init__(self, α=0.001, β1=0.9, β2=0.999, ϵ=1e-8):\n", " self.α = α\n", " self.β1 = β1\n", " self.β2 = β2\n", " self.ϵ = ϵ\n", " self.m = None\n", " self.v = None\n", " self.t = 0\n", "\n", " def send(self, grad):\n", " if self.m is None:\n", " self.m = 0\n", " if self.v is None:\n", " self.v = 0\n", "\n", " self.t += 1\n", " αt = self.α * np.sqrt(1 - self.β2**self.t) / (1 - self.β1**self.t)\n", " self.m = average(self.m, grad, self.β1) \n", " self.v = average(self.v, (grad*grad), self.β2)\n", "\n", " updates = -αt * self.m / (np.sqrt(self.v) + self.ϵ)\n", " assert np.isfinite(updates).all()\n", " return updates" ] }, { "cell_type": "code", "execution_count": 46, "id": "7362b84d", "metadata": {}, "outputs": [], "source": [ "θ_hat = np.array([0.1, 0.1, 0.1, 0.1])\n", "η = np.array([0.0001, 0.0001, 0.0001, 0.0001])\n", "imax = 10000\n", "opt = AdamOptimizer()" ] }, { "cell_type": "code", "execution_count": 47, "id": "671de937", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "L = 0, θ = ((0.1000, 0.2000, 0.3000, 0.4000))\n", "L = 14, θ_hat = (0.0990, 0.1010, 0.0990, 0.1010) \n", "L = 0.097, θ_hat = (0.0857, 0.1328, 0.0120, 0.1865) \n", "L = 0.054, θ_hat = (0.0925, 0.1573, 0.0141, 0.1865) \n", "L = 0.034, θ_hat = (0.0977, 0.1765, 0.0164, 0.1869) \n", "L = 0.028, θ_hat = (0.1008, 0.1884, 0.0187, 0.1878) \n", "L = 0.026, θ_hat = (0.1024, 0.1943, 0.0211, 0.1891) \n", "L = 0.026, θ_hat = (0.1030, 0.1967, 0.0237, 0.1909) \n", "L = 0.025, θ_hat = (0.1032, 0.1975, 0.0265, 0.1930) \n", "L = 0.025, θ_hat = (0.1032, 0.1978, 0.0297, 0.1953) \n", "L = 0.024, θ_hat = (0.1032, 0.1978, 0.0332, 0.1980) \n", "L = 0.023, θ_hat = (0.1031, 0.1978, 0.0371, 0.2010) \n", "L = 0.022, θ_hat = (0.1030, 0.1978, 0.0415, 0.2042) \n", "L = 0.022, θ_hat = (0.1030, 0.1978, 0.0462, 0.2078) \n", "L = 0.021, θ_hat = (0.1029, 0.1978, 0.0514, 0.2118) \n", "L = 0.02, θ_hat = (0.1028, 0.1978, 0.0570, 0.2160) \n", "L = 0.019, θ_hat = (0.1027, 0.1978, 0.0632, 0.2207) \n", "L = 0.018, θ_hat = (0.1027, 0.1978, 0.0698, 0.2257) \n", "L = 0.017, θ_hat = (0.1026, 0.1978, 0.0769, 0.2310) \n", "L = 0.015, θ_hat = (0.1025, 0.1978, 0.0845, 0.2368) \n", "L = 0.014, θ_hat = (0.1024, 0.1979, 0.0926, 0.2429) \n", "L = 0.013, θ_hat = (0.1022, 0.1979, 0.1012, 0.2495) \n", "L = 0.012, θ_hat = (0.1021, 0.1979, 0.1103, 0.2564) \n", "L = 0.011, θ_hat = (0.1020, 0.1980, 0.1199, 0.2636) \n", "L = 0.0096, θ_hat = (0.1019, 0.1980, 0.1299, 0.2711) \n", "L = 0.0084, θ_hat = (0.1018, 0.1981, 0.1402, 0.2790) \n", "L = 0.0073, θ_hat = (0.1016, 0.1982, 0.1510, 0.2871) \n", "L = 0.0062, θ_hat = (0.1015, 0.1983, 0.1619, 0.2954) \n", "L = 0.0053, θ_hat = (0.1014, 0.1984, 0.1731, 0.3039) \n", "L = 0.0044, θ_hat = (0.1012, 0.1985, 0.1843, 0.3124) \n", "L = 0.0035, θ_hat = (0.1011, 0.1986, 0.1956, 0.3209) \n", "L = 0.0028, θ_hat = (0.1010, 0.1987, 0.2067, 0.3293) \n", "L = 0.0022, θ_hat = (0.1009, 0.1988, 0.2176, 0.3376) \n", "L = 0.0017, θ_hat = (0.1008, 0.1989, 0.2281, 0.3455) \n", "L = 0.0012, θ_hat = (0.1006, 0.1991, 0.2382, 0.3532) \n", "L = 0.00088, θ_hat = (0.1005, 0.1992, 0.2476, 0.3603) \n", "L = 0.00061, θ_hat = (0.1005, 0.1993, 0.2564, 0.3669) \n", "L = 0.00041, θ_hat = (0.1004, 0.1994, 0.2643, 0.3730) \n", "L = 0.00026, θ_hat = (0.1003, 0.1995, 0.2715, 0.3784) \n", "L = 0.00016, θ_hat = (0.1002, 0.1996, 0.2777, 0.3831) \n", "L = 9.2e-05, θ_hat = (0.1002, 0.1997, 0.2830, 0.3871) \n", "L = 5.1e-05, θ_hat = (0.1001, 0.1998, 0.2874, 0.3904) \n", "L = 2.6e-05, θ_hat = (0.1001, 0.1999, 0.2909, 0.3931) \n", "L = 1.3e-05, θ_hat = (0.1001, 0.1999, 0.2937, 0.3952) \n", "L = 5.6e-06, θ_hat = (0.1000, 0.1999, 0.2958, 0.3968) \n", "L = 2.3e-06, θ_hat = (0.1000, 0.2000, 0.2973, 0.3980) \n", "L = 8.4e-07, θ_hat = (0.1000, 0.2000, 0.2984, 0.3988) \n", "L = 2.8e-07, θ_hat = (0.1000, 0.2000, 0.2991, 0.3993) \n", "L = 8.3e-08, θ_hat = (0.1000, 0.2000, 0.2995, 0.3996) \n", "L = 2.2e-08, θ_hat = (0.1000, 0.2000, 0.2997, 0.3998) \n", "L = 7.1e-09, θ_hat = (0.1000, 0.2000, 0.2999, 0.3999) \n" ] } ], "source": [ "print(\"L = {:.2g}, θ = (({:.4f}, {:.4f}, {:.4f}, {:.4f}))\".format(loss(y, θ), *θ))\n", "for i in range(imax):\n", " grad = gradient(θ_hat)\n", " Δθ = opt.send(grad)\n", " θ_hat += Δθ\n", " if i % (imax // 50) == 0:\n", " print(\"L = {:.2g}, θ_hat = ({:.4f}, {:.4f}, {:.4f}, {:.4f}) \".format(loss(y, θ_hat), *θ_hat))" ] }, { "cell_type": "code", "execution_count": null, "id": "2c79f2c1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "be1b5554", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:scipy]", "language": "python", "name": "conda-env-scipy-py" }, "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.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }