From a9da41ac48d74b6a72dc2735d564a86f0a1587d6 Mon Sep 17 00:00:00 2001 From: NT Date: Sat, 16 Apr 2022 12:20:54 +0200 Subject: [PATCH] updated PG comparison notebook --- physgrad-comparison.ipynb | 181 +++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 91 deletions(-) diff --git a/physgrad-comparison.ipynb b/physgrad-comparison.ipynb index 5c17e93..9f89300 100644 --- a/physgrad-comparison.ipynb +++ b/physgrad-comparison.ipynb @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -92,14 +92,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 18, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [] - }, { "name": "stdout", "output_type": "stream", @@ -117,43 +112,43 @@ " DeviceArray(90., dtype=float32))" ] }, - "execution_count": 2, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# \"physics\" function y\n", - "def fun_y(x):\n", + "def physics_y(x):\n", " return np.array( [x[0], x[1]*x[1]] )\n", "\n", "# simple L2 loss\n", - "def fun_L(y):\n", + "def loss_y(y):\n", " #return y[0]*y[0] + y[1]*y[1] # \"manual version\"\n", " return np.sum( np.square(y) )\n", "\n", - "# composite function with L & y\n", - "def fun(x):\n", - " return fun_L(fun_y(x))\n", + "# composite function with L & y , evaluating the loss for x\n", + "def loss_x(x):\n", + " return loss_y(physics_y(x))\n", "\n", "\n", "x = np.asarray([3,3], dtype=np.float32)\n", "print(\"Starting point x = \"+format(x) +\"\\n\")\n", "\n", "print(\"Some test calls of the functions we defined so far, from top to bottom, y, manual L(y), L(y):\") \n", - "fun_y(x) , fun_L( fun_y(x) ), fun(x) " + "physics_y(x) , loss_y( physics_y(x) ), loss_x(x) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we can evaluate the derivatives of our function via `jax.grad`. E.g., `jax.grad(fun_L)(fun_y(x))` evaluates the Jacobian $\\partial L / \\partial \\mathbf{y}$. The cell below evaluates this and a few variants, together with a sanity check for the inverse of the Jacobian of $\\mathbf{y}$:" + "Now we can evaluate the derivatives of our function via `jax.grad`. E.g., `jax.grad(loss_y)(physics_y(x))` evaluates the Jacobian $\\partial L / \\partial \\mathbf{y}$. The cell below evaluates this and a few variants, together with a sanity check for the inverse of the Jacobian of $\\mathbf{y}$:" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -175,22 +170,22 @@ ], "source": [ "# this works:\n", - "print(\"Jacobian L(y): \" + format(jax.grad(fun_L)(fun_y(x))) +\"\\n\")\n", + "print(\"Jacobian L(y): \" + format(jax.grad(loss_y)(physics_y(x))) +\"\\n\")\n", "\n", - "# the following would give an error as y (and hence fun_y) is not scalar\n", - "#jax.grad(fun_y)(x) \n", + "# the following would give an error as y (and hence physics_y) is not scalar\n", + "#jax.grad(physics_y)(x) \n", "\n", "# computing the jacobian of y is a valid operation:\n", - "J = jax.jacobian(fun_y)(x)\n", + "J = jax.jacobian(physics_y)(x)\n", "print( \"Jacobian y(x): \\n\" + format(J) ) \n", "\n", "# the code below also gives error, JAX grad needs a single function object\n", - "#jax.grad( fun_L(fun_y) )(x) \n", + "#jax.grad( loss_y(physics_y) )(x) \n", "\n", "print( \"\\nSanity check with inverse Jacobian of y, this should give x again: \" + format(np.linalg.solve(J, np.matmul(J,x) )) +\"\\n\")\n", "\n", "# instead use composite 'fun' from above\n", - "print(\"Gradient for full L(x): \" + format( jax.grad(fun)(x) ) +\"\\n\")\n" + "print(\"Gradient for full L(x): \" + format( jax.grad(loss_x)(x) ) +\"\\n\")\n" ] }, { @@ -218,7 +213,7 @@ "in our setting gives the following update step in $\\mathbf{x}$:\n", "\n", "$$\\begin{aligned}\n", - "\\Delta \\mathbf{x} \n", + "\\Delta \\mathbf{x}_{\\text{GD}}\n", "&= \n", "- \\eta ( J_{L} J_{\\mathbf{y}} )^T \\\\\n", "&=\n", @@ -233,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -259,7 +254,7 @@ "historyGD = [x]; updatesGD = []\n", "\n", "for i in range(10):\n", - " G = jax.grad(fun)(x)\n", + " G = jax.grad(loss_x)(x)\n", " x += -eta * G\n", " historyGD.append(x); updatesGD.append(G)\n", " print( \"GD iter %d: \"%i + format(x) )\n" @@ -276,22 +271,22 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 5, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -307,7 +302,7 @@ "axes = plt.figure(figsize=(4, 4), dpi=100).gca()\n", "historyGD = onp.asarray(historyGD)\n", "updatesGD = onp.asarray(updatesGD) # for later\n", - "axes.scatter(historyGD[:,0], historyGD[:,1], lw=0.5, color='blue', label='GD')\n", + "axes.scatter(historyGD[:,0], historyGD[:,1], lw=0.5, color='#1F77B4', label='GD')\n", "axes.scatter([0], [0], lw=0.25, color='black', marker='x') # target at 0,0\n", "axes.set_xlabel('x0'); axes.set_ylabel('x1'); axes.legend()" ] @@ -329,7 +324,7 @@ "\n", "$$\n", "\\begin{aligned}\n", - "\\Delta \\mathbf{x} &= \n", + "\\Delta \\mathbf{x}_{\\text{QN}} &= \n", "- \\eta \\left( \\frac{\\partial^2 L }{ \\partial \\mathbf{x}^2 } \\right)^{-1}\n", " \\frac{\\partial L }{ \\partial \\mathbf{x} }\n", "\\\\\n", @@ -374,14 +369,15 @@ "eta = 1./3.\n", "historyNt = [x]; updatesNt = []\n", "\n", + "Gx = jax.grad(loss_x)\n", + "Hx = jax.jacobian(jax.jacobian(loss_x))\n", "for i in range(10):\n", - " G = jax.grad(fun)(x)\n", - " H = jax.jacobian(jax.jacobian(fun))(x)\n", - " #H = jax.jacfwd(jax.jacrev(fun_Ly))(x) # alternative\n", - " Hinv = np.linalg.inv(H)\n", + " g = Gx(x)\n", + " h = Hx(x)\n", + " hinv = np.linalg.inv(h)\n", " \n", - " x += -eta * np.matmul( Hinv , G)\n", - " historyNt.append(x); updatesNt.append( np.matmul( Hinv , G) )\n", + " x += -eta * np.matmul( hinv , g )\n", + " historyNt.append(x); updatesNt.append( np.matmul( hinv , g) )\n", " print( \"Newton iter %d: \"%i + format(x) )\n", "\n" ] @@ -397,22 +393,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 7, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAFtCAYAAADrr7rKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAqEUlEQVR4nO3df3RU5b3v8fc3Qwg/QgIWIXiAoodK+WEPVGpVKqCQg9gef9badWwrt6dXLbrUHqot6/qrakVOW2utWi32FLGnHpf3enFp9SDoIVahglapXjCWFim0EKBKEqoJkHzvH3smDsnMJAMzs2eyP6+19gqz59kz3wyTT3ae/czzmLsjIiLRUBZ2ASIiUjgKfRGRCFHoi4hEiEJfRCRCFPoiIhGi0BcRiRCFvohIhCj0RUQipE/YBRSamRlwDNAcdi0iIjk0CPiLd/OJ28iFPkHgbw+7CBGRPBgJ/DlTgyiGfjPAtm3bqKqqCrsWEZEj1tTUxKhRo6AHPRhRDH0AqqqqFPoiEjm6kCsiEiEKfRGRCFHoi4hESGT79DNxdw4ePEhbW1vYpQgQi8Xo06cPwWhbETkSCv1O9u/fz44dO3j//ffDLkWSDBgwgBEjRtC3b9+wSxEpaQr9JO3t7WzZsoVYLMYxxxxD3759dXYZMndn//797N69my1btvCxj32MsjL1Skrv5e3tWB7f46GGvpl9Hfg6MCa+6/8Bt7j7MxmOuRC4NX7M74FvufvTuahn//79tLe3M2rUKAYMGJCLh5Qc6N+/P+Xl5WzdupX9+/fTr1+/sEsSyal9Te/x5sPX8tE9q4l5G20WY+vQmUz68veorBqS0+cK+5RpO/Bt4ERgKvA88ISZTUzV2MxOBR4BfgZMAZYDy81sUi6L0plk8dH/ifRW+5reY89d0/nUrv/NCN/NMN5lhO9m6q7/w567prOv6b2cPl+oP0nu/qS7P+3uv3f3t939fwH7gJPTHHI18F/u/j133+TuNwC/Ba4sVM0iIrn05sPXMqptGzE7dMqcPtbOyLbtvPnwtTl9vqI5fTKzmJl9ERgIrE3T7BRgVad9K+L70z1uhZlVJTaCSYlERIrCR/es7hL4CX2sndF76nL6fKGHvpmdYGb7gFbgfuA8d9+YpnkN0NBpX0N8fzoLgcakTZOtiUhR8PZ2Yp55aHgfP4i3t+fsOUMPfaAemAx8GvgJ8JCZTcjh4y8CqpO2kTl87KKyc+dOrr76asaOHUu/fv0YPnw406ZN4yc/+UnHENQxY8ZgZpgZ/fv3Z8yYMXzhC1/g+eefD7l6keixsjLaLJaxTZvFcjqaJ/TQd/f97r7Z3V9194XABoK++1R2AsM77Rse35/u8VvdvSmxUeB59LuZ2jpn/vjHPzJlyhSeffZZbr/9dl577TXWrl3Lddddx1NPPcWqVR/2it1yyy3s2LGD+vp6li1bxuDBg5k9ezbf/e53C1KriHxo69CZHPTUUXzQy9g6dGZOn68Yx+mXARVp7lsLzALuStpXS/prAKHY13qQ76+oZ9WmBg60OeUxY/b44XxzzjgqK/Lzks+fP58+ffrwyiuvMHDgwI79xx13HOecc84hv3wGDRpETU3QIzZ69GimT5/OiBEjuPHGG/n85z/PuHHj8lKjiHQ16cvfY/tdLzOybTt97MNunINexrbYSCZ9+Xs5fb5Qz/TNbJGZTTezMfG+/UXATOA/4vcvi+9L+BFwppktMLOPm9nNBEM97yl07ensaz3I+fe9xLK177D9vQ9oaGph+3sfsGztO5x/30vsaz2Y8+f861//yrPPPssVV1xxSOAn6+5DZldffTXuzhNPPJHz+kQkvcqqIQy95gVeGXYBf7Fh7OIo/mLDeGXYBRx9zQs5H6cf9pn+MGAZMILgIuvvgDnuvjJ+/2ig41efu68xs38GbgNuJ/hw1rnu/mZBq87g+yvq2bxrH+2denXaHTbv2scPVtRz09kpP4Zw2DZv3oy7dzlDHzp0KC0tLQBcccUVLF68OO1jHHXUUQwbNox33nknp7WJSPcqq4Zw8hUPAh9+IveYPD1XqKHv7v/Szf0zU+x7DHgsXzUdqVWbGroEfkK7w8pNDTkP/XTWrVtHe3s7F198Ma2trd22d3dNOyESsnxOwQDhn+n3Ku7OgbbMF24PtnnOw3Xs2LGYGfX19YfsP+6444BgGoPu/PWvf2X37t0ce+yxOatLRIpP6KN3ehMzozyWOcz7xCznZ9Mf+chHqK2t5Z577uFvf/vbYT3Gj370I8rKyjj33HNzWpuIFBeFfo7NHj+csjSZXmZQO77ziNPcuO+++zh48CBTp07l0UcfZdOmTdTX1/OLX/yCt956i1jsw7HAzc3N7Ny5k23btvHCCy9w6aWXctttt/Hd736XsWPH5qU+ESkOVqhx5MUiPhVDY2NjY5eF0VtaWtiyZQvHHnvsYc/kmBi90/libpnB2GGVPD5/Wt6Gbe7YsYPbb7+dX/3qV2zfvp2KigomTJjAhRdeyPz58xkwYABjxoxh69atAPTt25eamhpOPvlkLr/8ck4//fS81JULufi/EemtmpqaqK6uBqiOfx4pLYV+klwFy77Wg/xgRT0rNzVwsM3pEzNqxw9nQR7H6fd2Cn2R9LIJfSVQHlRW9OGmsydy09kTNSJGRIqK+vTzTIEvIsVEoS8iEiEKfRGRCFHoi4hEiEJfRCRCFPoiIhGi0BcRiRCFvohIhCj0e4l58+ZhZtxxxx2H7F++fHnePitw8803M3ny5Lw8tojkh0K/F+nXrx+LFy/mvffeC7sUESlSCv18K+DcRrNnz6ampoZFixalbfPiiy9y2mmn0b9/f0aNGsVVV13VMR3zPffcw6RJkzraJv5KuP/++w95juuvv56lS5fyne98hw0bNmAWTBe9dOlSAP70pz9xzjnnUFlZSVVVFV/4whdoaGjoeIzEXwgPP/wwY8aMobq6mi9+8Ys0Nxd0zXqRSFLo50NrMzx9Hdx1Atw5Pvj69HXB/jyKxWLcfvvt/PjHP2b79u1d7v/DH/7AmWeeyQUXXMDvfvc7Hn30UV588UWuvPJKAGbMmMHGjRvZvXs3AHV1dQwdOpTVq1cDcODAAdauXcvMmTO56KKLWLBgARMnTmTHjh3s2LGDiy66iPb2ds455xzeffdd6urqWLlyJX/84x+56KKLutSyfPlynnrqKZ566inq6uq6dE2JSO4p9HOttRkerIV1S2Dvn6B5R/B1/ZJgf56D/7zzzmPy5MncdNNNXe5btGgRF198Mddccw0f+9jHOPXUU7n77rtZtmwZLS0tTJo0iaOOOoq6ujoAVq9ezYIFCzpur1u3jgMHDnDqqafSv39/Kisr6dOnDzU1NdTU1NC/f3+ee+453njjDX75y19y4okn8ulPf5ply5ZRV1fH+vXrO2ppb29n6dKlTJo0idNOO40vf/nLPPfcc3l9bUREoZ97z90Ku+tJWs894O2wpx6evy3vJSxevJiHHnqITZs2HbJ/w4YNLF26lMrKyo5tzpw5tLe3s2XLFsyM6dOns3r1avbu3cvGjRuZP38+ra2tvPXWW9TV1fGpT32KAQMGpH3uTZs2MWrUKEaNGtWxb8KECQwePPiQesaMGcOgQYM6bo8YMYJdu3bl8FWQIxaxadejQlMr59rbz9Al8BO8HeqfhrmL81rC9OnTmTNnDgsXLmTevHkd+/ft28dll13GVVdd1eWY0aNHAzBz5kx++tOf8utf/5opU6ZQVVXV8Yugrq6OGTNm5KTG8vLyQ26bGe3taV43KZzW5uDE5e1noO0AxMrh+Lkw6waoGNT98VL0FPq55B78oGTSdiBol+cpl++44w4mT57MuHHjOvZ98pOfZOPGjRmXRJwxYwbXXHMNjz32GDNnzgSCXwSrVq3ipZdeYsGCBR1t+/btS1tb2yHHjx8/nm3btrFt27aOs/2NGzeyd+9eJkyYkMPvUHIu0TXZ+S/V9UtgywvwtZUK/l5A3Tu5ZBacGWUSK8974AOccMIJXHzxxdx9990d+771rW+xZs0arrzySl5//XV+//vf88QTT3RcyAX4xCc+wZAhQ/jlL395SOgvX76c1tZWpk2b1tF2zJgxbNmyhddff509e/bQ2trK7NmzO577t7/9LevWreMrX/kKM2bMYOrUqXn/vuUIFEHXpOSfQj/Xjp8LluZltTIYd1bBSrnlllsO6TL5xCc+QV1dHW+//TannXYaU6ZM4cYbb+SYY475sEQzTjvtNMyMz3zmMx3HVVVVMXXqVAYOHNjR9oILLuDMM8/k9NNP5+ijj+aRRx7BzHjiiScYMmQI06dPZ/bs2Rx33HE8+uijBfu+5TD1pGtSSp7WyE2Sk3VYE38i76kPflA6nrgMho7Tn8iHSWvk5pl7MLy4eUf6NoNGwL9uKshfqpKdbNbI1Zl+rlUMCoL9pEth8OjgB2Xw6OC2Al+KVRF1TUp+6UJuPlQMCkbozF1ckIu2Ijlx/Nzgoq2n6OIpcNek5I/O9PNNgS+lYtYNQRdk52tSia7JM64Ppy7JKYW+iATUNRkJ6t4RkQ+pa7LX05l+ClEb0VQK9H8SAgV+r6TQT5KYGuD9998PuRLpLPF/0nn6BhHJjrp3ksRiMQYPHtwx8deAAQPytuqU9Iy78/7777Nr1y4GDx5MLBYLuySRkqbQ76SmpgZAMz4WmcGDB3f834jI4VPod2JmjBgxgmHDhnHgQDeTp0lBlJeX6wxfJEdCDX0zWwicD3wc+ABYA3zL3eszHDMP+Hmn3a3untPP5sdiMQWNiPQ6YV/InQHcC5wM1ALlwLNmNjDjUdAEjEjaPprPIkVEeotQz/Td/czk2/Gz+F3AicALmQ/1nXksTUSkVwr7TL+z6vjXd7tpV2lmW81sm5k9YWYT0zU0swozq0psgD5WKCKRVTShb2ZlwF3AS+7+Zoam9cBXgXOALxF8D2vMbGSa9guBxqRte65qFhEpNUUzn76Z/QSYC3zG3XsczGZWDmwCHnH3G1LcXwFUJO0aBGxPNZ++iEgpymY+/aIYsmlm9wCfA6ZnE/gA7n7AzF4DUi786u6tQGvScx1JqSIiJS3U7h0L3AOcB5zh7lsO4zFiwAlAhiV/REQEwj/Tvxf4Z4L++WYzS3zkstHdPwAws2XAn919Yfz2jcBvgM3AYOBagiGbDxa2dBGR0hN26H89/nV1p/3/A1ga//doDl2teQiwBKgB3gNeBU519415q1JEpJcomgu5hZJpYXQRkVKkhdFFciliJ0bSu4XdvSNSnFqb4blb4e1noO0AxMqDhcNn3aBlA6WkKfRFOmtthgdrYXc9h1xOWr8Etryg9WKlpKl7R6Sz527tGvgA3g576uH520IpSyQXFPoinb39DF0CP8Hbof7pgpYjkksKfZFk7kEffiZtB3RxV0qWQl8kmVlw0TaTWHnQTqQEKfRFOjt+LliaHw0rg3FnFbYekRxS6It0NusGGDqua/BbWbD/jOvDqUskBxT6Ip1VDAqGZZ50KQweDYNGBF9PulTDNaXkaRoGke64qw9fipqmYRDJJQW+9CIKfRGRCFHoi4hEiEJfRCRCFPoiIhGi0BcRiRCFvohIhCj0RUQiRKEvIhIhCn0RkQhR6IuIRIhCX0QkQhT6IiIRotCX8ERshleRYtAn7AIkYlqb4blbg8XH2w4ESw8ePzdYuETz1IvknUJfCqe1GR6shd31QPuH+9cvgS0vaIESkQJQ944UznO3dg18AG+HPfXw/G2hlCUSJQp9KZy3n6FL4Cd4O9Q/XdByRKJIoS+F4R704WfSdkAXd0XyTKEvhWEWXLTNJFaupQlF8kyhL4Vz/FywNG85K4NxZxW2HpEIUuhL4cy6AYaO6xr8VhbsP+P6cOoSiRCFvhROxaBgWOZJl8Lg0TBoRPD1pEs1XFOkQMwjduHMzKqAxsbGRqqqqsIuJ9rc1YcvkgNNTU1UV1cDVLt7U6a2oZ7pm9lCM1tvZs1mtsvMlpvZuB4cd6GZvWVmLWb2hpmpM7gUKfBFCi7s7p0ZwL3AyUAtUA48a2YD0x1gZqcCjwA/A6YAy4HlZjYp79WKiJS4oureMbOjgV3ADHd/IU2bR4GB7v65pH2/AV5398t78Bzq3hGRXqVkundSqI5/fTdDm1OAVZ32rYjv78LMKsysKrEBulooIpFVNKFvZmXAXcBL7v5mhqY1QEOnfQ3x/aksBBqTtu1HVqmISOkqmtAn6NufBHwxx4+7iOAviMQ2MsePLyJSMopiamUzuwf4HDDd3bs7E98JDO+0b3h8fxfu3gq0Jj3XEVQqIpI77l7wTAo19C34bn8MnAfMdPctPThsLTCLoCsooTa+X0SkqO1rPcj3V9SzalMDB9qc8pgxe/xwvjlnHJUV+Y/ksM/07wX+GTgHaDazRL98o7t/AGBmy4A/u/vC+H0/AurMbAHwK4LuoKnApQWtXEQkS/taD3L+fS+xedc+2pMGTi5b+w5r/rCHx+dPy3vwh92n/3WCfvbVwI6k7aKkNqOBEYkb7r6G4BfFpcAG4PPAud1c/BURCd33V9R3CXyAdofNu/bxgxX1ea8h1DN9d++2M8vdZ6bY9xjwWD5qEhHJl1WbGroEfkK7w8pNDdx09sS81hD2mb4UkyL6oJ5Ib+PuHGjL/DN2sM3J9wdmw+7Tl7C1Ngdr1779TLByVaw8mPd+1g2a9VIkh8yM8ljmzo0+Mcv7aB6d6UdZazM8WAvrlsDeP0HzjuDr+iXB/tbmsCsU6VVmjx9OWZpMLzOoHd95NHruKfSj7LlbYXc9XRYr93bYUw/P3xZKWSK91TfnjGPssMouwV9mMHZYJQvmdDvJ8BFT6EfZ28/QJfATvB3qny5oOSK9XWVFHx6fP41LThnDyCH9qanqx8gh/bnklDEFGa4J6tOPLvegDz+TtgNa6EQkxyor+nDT2RO56eyJoXwiV2f6UWUWXLTNJFauwBfJozCmhVHoR9nxc7suUp5gZTBOC5KJ9DYK/SibdQMMHdc1+K0s2H/G9eHUJSJ5o9CPsopB8LWVcNKlMHg0DBoRfD3p0mC/xumL9DpFtVxiIWi5xAx00VakJJXycokSJgW+SK+n0BcRiRCFvohIhCj0RUQiRKEvIhIhCn0RkQhR6IuIRIhCX0QkQhT6pS5iH64TkSOjqZVLkZY4FJHDpNAvNYklDjuveLV+CWx5QXPmiBShMObNT0ehX2p6ssTh3MWhlCYiH9rXepDvr6hn1aYGDrQ55TFj9vjhfHPOuIKskJWO+vRLjZY4FCl6+1oPcv59L7Fs7Ttsf+8DGppa2P7eByxb+w7n3/cS+1oPhlabQr+UZLPEoYiE5vsr6tm8ax/tnX4U2x0279rHD1bUh1MYCv3SoiUORUrCqk0NXQI/od1h5aaGwhaURKFfarTEoUhRc3cOtGX+a/tgmxPWWiYK/VKjJQ5FipqZUR7L/Nd2n5iFNppHoV9qtMShSNGbPX44ZWkyvcygdvzwwhaURMslljotcShSdBKjdzpfzC0zGDusksfnT8vpsM1slktU6IuI5MG+1oP8YEU9Kzc1cLDN6RMzascPZ0Eexukr9DNQ6ItIoeX7E7laGF1EpIgUyxQMoNAXEYmUnIW+mY03sz9mecx0M3vSzP5iZm5m53bTfma8Xeet5oiKFxGJiFye6fcFPprlMQOBDcAVWR43DhiRtO3K8ngRkUjq8SVkM7uzmyZHZ/vk7v4M8Ez88bM5dJe77832+UqChmCKSB5lM27oauB1IN2V4cojrqbnXjezCuBN4GZ3f6mAz517WhRFpNcoprnzU8km9DcDP3T3X6S608wmA6/moqgMdgCXA68AFcDXgNVm9ml3/22auiribROKK0W1KIpIySvWufNTyaZP/xXgxAz3O5DXX2/uXu/uD7j7q+6+xt2/CqwBvpHhsIVAY9K2PZ81Zq0ni6KISNEq5rnzU8km9BcAd6W70903uHsYQ0DXAWMz3L8IqE7aRhaiqB7ToigiJa2Y585Ppcch7e473X2rmZ2ero2ZXZabsrIymaDbJyV3b3X3psQGNBessu5oURSRklfMc+encjhn5v9lZt8zs47VPMxsqJk9CdyRzQOZWaWZTY5fDwA4Nn57dPz+RWa2LKn9NWZ2jpmNNbNJZnYXcAZw72F8H+HToigiJa3Y585P5XBC/3TgPGC9mU0ws88SjKKpIjjrzsZU4LX4BnBn/N+3xG+PAEYnte8L/AB4A6gD/gGY7e7PZf9tFAktiiJSsop97vxUsg59d19DEO5vAr8F/i/wQ2Cmu2/N8rFWu7ul2ObF75/n7jOT2v+bu4919/7u/hF3P93d/zvb76GoaFEUkZJWzHPnp3K4F16PJzhL3w4cJPiE7IBcFRUpWhRFpKR9c844xg6r7BL8ibnzF8wZF05haWQ9tbKZfRv4DvBT4FqCkTMPE3TvfMnd1+a6yFwq+qmV9YlckZJTyLnzU8nrfPpmtgP4anwKhcS+cuB24Cp3r0h7cBEo+tAXkZIWxidyswn9w/kVdIK770ne4e4HgGvN7KnDeDwRkV6jmC7apnI4F3L3ZLiv7sjKEREpDcU0DDMbxTUphIhIESulOXbSKY0qexNdqBUpSYk5djpPubBs7Tus+cMeHp8/rSSCX8slFkJrMzx9Hdx1Atw5Pvj69HXBfhEpCaU2x046Cv18S0ydvG4J7P0TNO8Ivq5fEuxX8IuUhFKbYycdhX6+aepkkZJXinPspKPQzzdNnSxS8kpxjp10FPr5pKmTRXqNUptjJx2Ffj5p6mSRXsHdS26OnXSKf3xRqTt+bnDR1lN08WjqZJGilWpM/ozjj+akMUex+u3docyxkwtZz71T6go+905i9M6e+kODPzF1smbSFCk66cbkJ87qH58/jYF9Y0XTh5/N3Dvq3sk3TZ0sUnJ6Mia/WAI/WzrTLzR9Ilek6H1m8fNsf++DtPePHNKfF791RgErykxn+sVMgS9S1HrTmPxUFPoiIkl605j8VBT6+VKiZwEiUefuvWZMfiqlMcaoVLQ2B9MuvP1M8KGrWHkwZHPWDbpgK1LEOg/PjJUZVf360PjBQZJP30ptTH4qCv1cSQzN7DzPzvolsOUFjdQRKVKZhmdW9y9nQEWM9nZKckx+KqVbebHpycRqcxeHUpqIpJdpeGZTywHOm/J33PhPE0q2D78z9enniiZWEylJPZkyubcEPij0c0MTq4mUpN4+PDMVhX4uaGI1kZLVm4dnpqI+/VzRxGoiJaHzSJ2/tab/K73Uh2emotDPlVk3BKN00k2sdsb14dUmIkD6kTqp9Ibhmako9HMlMbHa87cFF20T4/THnRUEvoZrioQu3UidhIF9YwzqV95rhmem0ru+m7BVDAqGZc5drInVRIpQppE6AEMG9uXX153eq/rwO9OF3HzpxW8akVLU3t7eo5E6vZ3O9HNJZ/ciRaXzRds9+1oztu9tI3VSUegfKc23I1KUsrloC71zpE4qCv0jofl2RIpWdxdtk/XWkTqpqE//SPRkvh0RKTh37/aibazMqKnqx8gh/bnklDE8Pn9arxupk0qo36GZTQeuBU4ERgDnufvybo6ZCdwJTAS2Abe5+9J81plWT+bb0SRrIgVxaP99O7ubM/ffH11ZwZpvn05ZWbTOfcP+tTYQ2AD8O/B4d43N7FjgV8D9wMXALOBBM9vh7ivyWWgX2cy308svDImELdv+ewgu2kYt8CHk0Hf3Z4BngJ5eMb8c2OLuC+K3N5nZZ4BvAIUNfc23I1I0sum/h+hctE2l1H7NnQKs6rRvRXx/SmZWYWZViQ3I3ZXV4+cG0yykfGLNtyNSKCs37swq8KNy0TaVsLt3slUDNHTa1wBUmVl/d/8gxTELgZvyUo3m2xEJTUcf/sYGdjS2ZGxbZkEffnmfsl47vUJPReG7XkRw4TdhELA9J4+s+XZEQpFtH/4xg/v3+ukVeqrUQn8n0LkjbjjQlOYsH3dvBTou4+f8P71vpebbESmwbMfg144frsCPK7XQXwt07iivje8vHH0KVyRU3Y3BT4h6/30qYY/TrwTGJu061swmA++6+5/MbBHwd+7+lfj99wNXmtm/EQzzPAP4AvDZghWtT+GKhKonSxyWGYyo7sc/TqiJdP99KmG/ElOB/066neh7fwiYR/CBrdGJO919i5l9FvghcDVB3/zXCjpGvyefwtUHskTyxsy6XeLwmOr+vPjtMwpUUWkJdcimu692d0uxzYvfP8/dZ6Y4Zoq7V7j73xf807g9+RSuiOTV7PHDKUuT+2UGtROiOQa/J0ptnH64svkUrojkzTfnjGPssMouwa8+/O6F3b1TWvQpXJGiUFnRh8fnT+MHK+pZuamBg23eq5c4zCW9Mtk6fm5w0dZTdPHoU7giBVNZ0Yebzp7ITWdPxN01JLOH1L2TrVk3BJ+27Tz9gj6FKxIaBX7PKfSzlfgU7kmXwuDRMGhE8PWkSzVcU0SKnnnELjrGJ11rbGxspKqq6sgfUJ/CFZGQNTU1UV1dDVDt7k2Z2upM/0gp8EWkhCj0RUQiRKEvIhIhCn0RkQhR6IuIRIhCX0QkQhT6IiIRotAXEYkQhb6ISIQo9EVEIkShLyISIQp9EZEIUeiLiESIQl9EJEIU+iIiEaLQFxGJEIW+iEiEKPRFRCJEoS8iEiEKfRGRCFHoi4hEiEJfRCRCFPoiIhGi0BcRiRCFvohIhCj0RUQiRKEvIhIhCn0RkQhR6IuIREhRhL6ZXWFm75hZi5m9bGYnZWg7z8y809ZSyHpFREpV6KFvZhcBdwLfAT4JbABWmNmwDIc1ASOSto/mu04Rkd4g9NAH/hVY4u4/d/eNwOXA+8BXMxzj7r4zaWsoSKUiIiUu1NA3s77AicCqxD53b4/fPiXDoZVmttXMtpnZE2Y2McNzVJhZVWIDBuWqfhGRUhP2mf5QIAZ0PlNvAGrSHFNP8FfAOcCXCL6HNWY2Mk37hUBj0rb9CGsWESlZYYd+1tx9rbsvc/fX3b0OOB/YDVyW5pBFQHXSlu6Xg4hIr9cn5OffA7QBwzvtHw7s7MkDuPsBM3sNGJvm/lagNXHbzA6vUhGRXiDUM3133w+8CsxK7DOzsvjttT15DDOLAScAO/JRo4hIbxL2mT4EwzUfMrNXgHXANcBA4OcAZrYM+LO7L4zfvhH4DbAZGAxcSzBk88FCFy4iUmpCD313f9TMjgZuIbh4+zpwZtIwzNFAe9IhQ4Al8bbvEfylcGp8uKeIiGRg7h52DQUVH7bZ2NjYSFVVVdjliIgcsaamJqqrqwGq3b0pU9uSG70jIiKHT6EvIhIhCn0RkQhR6IuIRIhCX0QkQhT6IiIRotAXEYkQhb6ISIQo9EVEIkShLyISIQp9EZEIUeiLiESIQl9EJEIU+iIiEaLQFxGJEIW+iEiEKPRFRCJEoS8iEiEKfRGRCFHoi4hEiEJfRCRCFPoiIhGi0BcRiRCFvohIhCj0RUQiRKEvIhIhCn0RkQhR6IuIRIhCX0QkQhT6IiIRotAXEYkQhb6ISIQo9EVEIkShLyISIQp9EZEIKYrQN7MrzOwdM2sxs5fN7KRu2l9oZm/F279hZmflo64nn3ySlpaWlPe1tLTw5JNP5uNpRUTyJvTQN7OLgDuB7wCfBDYAK8xsWJr2pwKPAD8DpgDLgeVmNinXtdXW1vLAAw90Cf6WlhYeeOABamtrc/2UIiJ5Ze4ebgFmLwPr3f3K+O0yYBvwY3e/I0X7R4GB7v65pH2/AV5398t78HxVQGNjYyNVVVXd1pcI+Msuu4x+/fp1uS0iErampiaqq6sBqt29KVPbUM/0zawvcCKwKrHP3dvjt09Jc9gpye3jVqRrb2YVZlaV2IBB2dTYr18/LrvsMh544AH27t2rwBeRktYn5OcfCsSAhk77G4CPpzmmJk37mjTtFwI3HW6BEAT/JZdcwoknnsirr76qwBeRkhV6n34BLAKqk7aR2T5AS0sLDz30EK+++ioPPfRQ2ou7IiLFLuzQ3wO0AcM77R8O7ExzzM5s2rt7q7s3JTagOZsCk/vwBw8e3NHVo+AXkVIUaui7+37gVWBWYl/8Qu4sYG2aw9Ymt4+rzdD+sKW6aJvcx6/gF5FSE/aZPgTDNf+nmV1iZuOBnwADgZ8DmNkyM1uU1P5HwJlmtsDMPm5mNwNTgXtyXdjKlStTXrRNBP/KlStz/ZQiInkV+pBNADO7EriW4GLs68BV7v5y/L7VwDvuPi+p/YXAbcAY4PfAde7+dA+fK6shmyIixS6bIZtFEfqFpNAXkd6mZMbpi4hIYSn0RUQiRKEvIhIhCn0RkQhR6IuIRIhCX0QkQsKecC00TU0ZRzWJiJSMbPIsiuP0/w7YHnYdIiJ5MNLd/5ypQRRD34BjyHLiNYJ5+LcTzNKZ7bFhU+3hUO3hiGrtg4C/eDehHrnunfgLkvE3YSrB7woAmrv7xFuxUe3hUO3hiHDtPWqvC7kiIhGi0BcRiRCFfs+1At+Jfy01qj0cqj0cqj2DyF3IFRGJMp3pi4hEiEJfRCRCFPoiIhGi0BcRiRCFfhIzu8LM3jGzFjN72cxO6qb9hWb2Vrz9G2Z2VqFqTVFLj2s3s3lm5p22lkLWm1TLdDN70sz+Eq/j3B4cM9PMfmtmrWa22czm5b/SlHVkVXu87s6vu5tZTYFKTtSx0MzWm1mzme0ys+VmNq4Hx4X+fj+c2ovl/W5mXzez35lZU3xba2Zzuzkm56+5Qj/OzC4C7iQYLvVJYAOwwsyGpWl/KvAI8DNgCrAcWG5mkwpS8KG1ZFV7XBMwImn7aL7rTGMgQb1X9KSxmR0L/Ar4b2AycBfwoJnNyVN9mWRVe5JxHPra78pxXd2ZAdwLnAzUAuXAs2Y2MN0BRfR+z7r2uGJ4v28Hvg2cCEwFngeeMLOJqRrn7TV3d23BsNWXgXuSbpcRTNfw7TTtHwWe6rTvN8D9JVD7PGBv2K95irocOLebNouBNzvt+0/gv0qg9pnxdoPDfq071XV0vK7pGdoUzfv9MGovyvd7vLZ3gX8p5GuuM33AzPoS/PZdldjn7u3x26ekOeyU5PZxKzK0z4vDrB2g0sy2mtk2M0t7tlGEiuJ1P0Kvm9kOM1tpZtPCLgaojn99N0ObYn3de1I7FNn73cxiZvZFgr8W16ZplpfXXKEfGArEgIZO+xuAdP2tNVm2z5fDqb0e+CpwDvAlgvfBGjMbma8icyjd615lZv1DqCcbO4DLgQvi2zZgtZl9MqyCzKyMoIvsJXd/M0PTYnm/d8ii9qJ5v5vZCWa2j+ATt/cD57n7xjTN8/KaR26WTQF3X0vS2YWZrQE2AZcBN4RVV2/n7vUEAZSwxsz+HvgG8OVwquJeYBLwmZCe/0j0qPYie7/XE1yLqgY+DzxkZjMyBH/O6Uw/sAdoA4Z32j8c2JnmmJ1Zts+Xw6n9EO5+AHgNGJvb0vIi3eve5O4fhFDPkVpHSK+7md0DfA443d27W1ioWN7vQNa1HyLM97u773f3ze7+qrsvJBgIcHWa5nl5zRX6BP8RwKvArMS++J+Os0jf37Y2uX1cbYb2eXGYtR/CzGLACQTdD8WuKF73HJpMgV93C9wDnAec4e5benBYUbzuh1l758copvd7GVCR5r78vOZhX70ulg24CGgBLgHGAw8A7wHD4/cvAxYltT8VOAAsAD4O3AzsByaVQO03Av8IHEcwxPMR4ANgQgi1VxIE32SCURjfiP97dPz+RcCypPbHAn8D/i3+us8HDgJzSqD2awj6lccSdEvcRfBX2qwC130fsJdg+GNN0tY/qU1Rvt8Ps/aieL/H3w/TgTEEv3QWAe1AbSFf84L+kBT7BlwJbCW4yPIy8Omk+1YDSzu1v5Cgj64VeBM4qxRqB36Y1HYnwbj3KSHVPTMemJ23pfH7lwKrUxzzWrz+PwDzSqF24Dpgczxw/krwWYPTQ6g7Vc2e/DoW6/v9cGovlvc7wXj7d+J17CIYmVNb6NdcUyuLiESI+vRFRCJEoS8iEiEKfRGRCFHoi4hEiEJfRCRCFPoiIhGi0BcRiRCFvohIhCj0RfKsWJZ3FAGFvkheFdnyjiKahkHkSJjZ0cAbwN3ufnt836kE86jMJZjo67PuPinpmP8kWDLxzMJXLFGnM32RI+DuuwlWZbrZzKaa2SDgYYI1i5+jeJcZlIjSylkiR8jdnzazJcB/AK8QTP28MH53xuUdvTQXfpESpjN9kdz4JsFJ1IXAxe7eGnI9Iikp9EVy4++BYwh+psYk7e9tyztKiVP3jsgRMrO+wC+ARwkWvHjQzE5w910ES9ud1emQUl7eUUqcRu+IHCEz+x7weeAfgH1AHdDo7p+LD9l8E7gX+HfgDOBughE9K0IqWSJMoS9yBMxsJrCSYNnDF+P7xgAbgG+7+0/ibX4ITAC2A7e6+9LCVyui0BcRiRRdyBURiRCFvohIhCj0RUQiRKEvIhIhCn0RkQhR6IuIRIhCX0QkQhT6IiIRotAXEYkQhb6ISIQo9EVEIkShLyISIf8felRNogzktxsAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] @@ -427,8 +423,8 @@ "axes = plt.figure(figsize=(4, 4), dpi=100).gca()\n", "historyNt = onp.asarray(historyNt)\n", "updatesNt = onp.asarray(updatesNt) \n", - "axes.scatter(historyGD[:,0], historyGD[:,1], lw=0.5, color='blue', label='GD')\n", - "axes.scatter(historyNt[:,0], historyNt[:,1], lw=0.5, color='orange', label='Newton')\n", + "axes.scatter(historyGD[:,0], historyGD[:,1], lw=0.5, color='#1F77B4', label='GD')\n", + "axes.scatter(historyNt[:,0], historyNt[:,1], lw=0.5, color='#FF7F0E', label='Newton')\n", "axes.scatter([0], [0], lw=0.25, color='black', marker='x') # target at 0,0\n", "axes.set_xlabel('x0'); axes.set_ylabel('x1'); axes.legend()" ] @@ -446,18 +442,18 @@ "source": [ "## Inverse simulators\n", "\n", - "Now we also use an analytical inverse of y for the optimization:\n", + "Now we also use an analytical inverse of $\\mathbf y$ for the optimization. It represents our inverse simulator $\\mathcal P^{-1}$ from the previous sections:\n", "$\\mathbf{y}^{-1}(\\mathbf{x}) = [x_0 \\ x_1^{1/2}]^T$, to compute the scale-invariant update denoted by PG below. As a slight look-ahead to the next section, we'll use a Newton's step for $L$, and combine it with the inverse physics function to get an overall update. This gives an update step:\n", "\n", "$$\\begin{aligned}\n", - "\\Delta \\mathbf{x} &= \n", + "\\Delta \\mathbf{x}_{\\text{PG}} &= \n", "\\mathbf{y}^{-1} \\left( \\mathbf{y}(\\mathbf{x}) - \\eta\n", " \\left( \\frac{\\partial^2 L }{ \\partial \\mathbf{y}^2 } \\right)^{-1}\n", " \\frac{\\partial L }{ \\partial \\mathbf{y} }\n", "\\right) - \\mathbf{x}\n", "\\end{aligned}$$\n", "\n", - "Below, we define our inverse function `fun_y_inv_analytic` (we'll come to a variant below), and then evaluate an optimization with the PG update for ten steps:\n" + "Below, we define our inverse function `physics_y_inv_analytic`, and then evaluate an optimization with the PG update for ten steps:\n" ] }, { @@ -487,23 +483,25 @@ "eta = 0.3\n", "historyPG = [x]; historyPGy = []; updatesPG = []\n", "\n", - "def fun_y_inv_analytic(y):\n", + "def physics_y_inv(y):\n", " return np.array( [y[0], np.power(y[1],0.5)] )\n", "\n", + "Gy = jax.grad(loss_y)\n", + "Hy = jax.jacobian(jax.jacobian(loss_y))\n", "for i in range(10):\n", " \n", " # Newton step for L(y)\n", - " zForw = fun_y(x)\n", - " GL = jax.grad(fun_L)(zForw)\n", - " HL = jax.jacobian(jax.jacobian(fun_L))(zForw)\n", - " HLinv = np.linalg.inv(HL)\n", + " zForw = physics_y(x)\n", + " g = Gy(zForw)\n", + " h = Hy(zForw)\n", + " hinv = np.linalg.inv(h)\n", " \n", " # step in y space\n", - " zBack = zForw -eta * np.matmul( HLinv , GL)\n", + " zBack = zForw -eta * np.matmul( hinv , g)\n", " historyPGy.append(zBack)\n", "\n", " # \"inverse physics\" step via y-inverse\n", - " x = fun_y_inv_analytic(zBack)\n", + " x = physics_y_inv(zBack)\n", " historyPG.append(x)\n", " updatesPG.append( historyPG[-2] - historyPG[-1] )\n", " print( \"PG iter %d: \"%i + format(x) )\n", @@ -521,22 +519,22 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 9, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -552,9 +550,9 @@ "updatesPG = onp.asarray(updatesPG) \n", "\n", "axes = plt.figure(figsize=(4, 4), dpi=100).gca()\n", - "axes.scatter(historyGD[:,0], historyGD[:,1], lw=0.5, color='blue', label='GD')\n", - "axes.scatter(historyNt[:,0], historyNt[:,1], lw=0.5, color='orange', label='Newton')\n", - "axes.scatter(historyPG[:,0], historyPG[:,1], lw=0.5, color='red', label='PG')\n", + "axes.scatter(historyGD[:,0], historyGD[:,1], lw=0.5, color='#1F77B4', label='GD')\n", + "axes.scatter(historyNt[:,0], historyNt[:,1], lw=0.5, color='#FF7F0E', label='Newton')\n", + "axes.scatter(historyPG[:,0], historyPG[:,1], lw=0.5, color='#D62728', label='PG')\n", "axes.scatter([0], [0], lw=0.25, color='black', marker='x') # target at 0,0\n", "axes.set_xlabel('x0'); axes.set_ylabel('x1'); axes.legend()" ] @@ -619,22 +617,22 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 11, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -650,7 +648,7 @@ "\n", "axes = plt.figure(figsize=(4, 4), dpi=100).gca()\n", "axes.set_title('y space')\n", - "axes.scatter(historyPGy[:,0], historyPGy[:,1], lw=0.5, color='red', marker='*', label='PG')\n", + "axes.scatter(historyPGy[:,0], historyPGy[:,1], lw=0.5, color='#D62728', marker='*', label='PG')\n", "axes.scatter([0], [0], lw=0.25, color='black', marker='*') \n", "axes.set_xlabel('z0'); axes.set_ylabel('z1'); axes.legend()" ] @@ -685,9 +683,9 @@ "\n", "**Newton's method** does not fare much better: we compute first-order derivatives like for GD, and the second-order derivatives for the Hessian for the full process. But since both are approximations, the actual intermediate states resulting from an update step are unknown until the full chain is evaluated. In the _Consistency in function compositions_ paragraph for Newton's method in {doc}`physgrad` the squared $\\frac{\\partial \\mathbf{y}}{\\partial \\mathbf{x}}$ term for the Hessian already indicated this dependency.\n", "\n", - "With **PGs** we do not have this problem: PGs can directly map points in $\\mathbf{y}$ to $\\mathbf{x}$ via the inverse function. Hence we know eactly where we started in $\\mathbf{y}$ space, as this position is crucial for evaluating the inverse.\n", + "With **inverse simulators** we do not have this problem: they can directly map points in $\\mathbf{y}$ to $\\mathbf{x}$. Hence we know eactly where we started in $\\mathbf{y}$ space, as this position is crucial for evaluating the inverse.\n", "\n", - "In the simple setting of this section, we only have a single latent space, and we already stored all values in $\\mathbf{x}$ space during the optimization (in the `history` lists). Hence, now we can go back and re-evaluate `fun_y` to obtain the positions in $\\mathbf{y}$ space." + "In the simple setting of this section, we only have a single latent space, and we already stored all values in $\\mathbf{x}$ space during the optimization (in the `history` lists). Hence, now we can go back and re-evaluate `physics_y` to obtain the positions in $\\mathbf{y}$ space." ] }, { @@ -702,8 +700,8 @@ "historyNty = []\n", "\n", "for i in range(1,10):\n", - " historyGDy.append(fun_y(historyGD[i]))\n", - " historyNty.append(fun_y(historyNt[i]))\n", + " historyGDy.append(physics_y(historyGD[i]))\n", + " historyNty.append(physics_y(historyNt[i]))\n", "\n", "historyGDy = onp.asarray(historyGDy)\n", "historyNty = onp.asarray(historyNty)\n" @@ -711,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 27, "metadata": { "scrolled": true }, @@ -719,16 +717,16 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 13, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAGDCAYAAAA26pu1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAv+klEQVR4nO3de3xU9Z3/8deHXMGQoAa5LFIwKNQLq+VmowJSENvtr2i1YrXtUrq7rUqrrb+ttXWR+itS29+a1tJaFi9oK0r72620dKuoNBEUxVrRVASVAuqKkEgTiEASku/vj+9MmIQM5DIz55zk/Xw8zmNyvvOdOZ9MJp858z3fiznnEBGR6OoTdAAiItI9SuQiIhGnRC4iEnFK5CIiEadELiIScUrkIiIRp0QuIhJxSuQiIhGnRC4iEnFK5CIiEadELiIScUrkIiIRp0QuIhJxSuQSGWZ2oZk5M7u0nfuuit330aM8PsfMbjWzN8zsoJm9b2brzGxGQp1lZlZnZqeY2eNm9oGZvWtm883M2jzf/zazZ2PPc8DMXjSzy5Mc+3NmtsHM9pvZ38zsaTO7qE2dj5vZ2tgx95nZ783sjM6/UtLbKJFLlJQDbwNXt3Pf1cBW59z6ozx+AXAr8EdgHrAQeAv4SJt6WcBjwC7gm8CLwHdjW6LrgZeA+cC3gUPAr83sHxIrmdmtwC+AxljdW2O/x7SEOp8Hfg/UATcB/wc4HVhnZiOO8juJgHNOm7bIbMDtwEGgKKFsID5JLjjGYzcCq45RZxnggLsSygxYBdQDxQnlfds8NgeoBJ5KKBsFNAH/BfRpU99itwXA34D/aHP/IKCmbbk2bW03nZFL1DwI5AGJTRizgWzgl8d4bA1whpmd2oHjLI7/4Jxzsf1cYHpC+YH4z2Z2PFAErKX1Gf4l+G++tznnmhMPEHtegBnAAOBhMyuOb/gPgOeBCzsQr/Ri2UEHINIZzrnNZvYCvinl3ljx1cBzzrk3j/Hw+cBK4HUz+wu++eQXzrlX2tRrBv7apuz12O2IeIGZfRK4BTgb/+HSEmbCzyWx59t0lLjiHyxrkty/9yiPFVEil0h6EPixmQ3DJ9Bz8W3eR+Wce9rMSoBZwEXAPwFfN7OvOOfu6UwAZnYB8FvgaeBaYCe+eeeLwFWdeS4OX6v6PPBeO/cf6uTzSS+jRC5R9AhwJ/BZoC8+ga7oyAOdc3uA+4H7zawAn4gXAImJvA9wCofPwgFOi91uj91ehm+rn+mcq49XMrMvtjnk1tjznY5vo2/P1tjtbufckx35PUQSqY1cIsc5Vw38AfgcvlnlsVjZUZnZiW2epw54k9bNInEtZ/ixbofz8B8YT8WKm/BNKFkJ9Ubg28QTPYpvWplvZq3+3xK6Mz6Obz75tpnltBP3wKP+YtLr6YxcoupB4P/Ffv63Dj5mk5mV47sT7gHG4y+aLm5T7yBwsZk9gL/Y+HHgH4DbnXNVsTq/B74BPGZmy4GTgOvwHwxj40/knHvTzBbGYlxrZv+F7/0yAXgXuNk5t9fMrsF3UfyzmT0CVAHDY8d9hg40HUnvZYcvnItEh5nl4tuT+wCDnXMHO/CY7wCfwjeT5AE78Mnzh865xlidZfjkPha4Gzgf2Af8nDY9T8xsLvAtfMLdBtyBvxh6q3Ou7eChLwJfxTex7AdeAb6X2JRiZlNjz3duLL7/wfeCWeyce7GDL430QkrkEklmlo0/o/2dc+5LKXzeZcDlzrmCVD2nSLqpjVyi6hL8QKAHA45DJHBqI5dIMbNJ+GaPfwNecs5VBBySSOB0Ri5Rcw2+7Xo38IWAYxEJBbWRi4hEnM7IRUQiTolcRCTiIn2xMzYybii+n6+ISE/RH3jXdbDtO9KJHJ/E3wk6CBGRNBiGHxR2TFFP5PsA3n77bQoLC4OORUSk2/bu3cvJJ58MnWhpiHoiB6CwsFCJXER6LV3sFBGJOCVyEZGIUyIXEYm4HtFGfjTOOQ4dOkRTU1PQoQiQlZVFdnY2h9dUEJHu6tGJvKGhgZ07d7J///6gQ5EE/fr1Y8iQIeTm5gYdikiP0GMTeXNzM9u2bSMrK4uhQ4eSm5urs8CAOedoaGigqqqKbdu2ceqpp9Knj1r3AuEc6P+hx+ixibyhoYHm5mZOPvlk+vXrF3Q4EtO3b19ycnLYsWMHDQ0N5OfnBx1S79PcBI9PhJkboE/WsetL6PX40yGd8YWP/iYBq1oLtZVQtS7oSCRFeuwZuYgkOFgNjbX+581l0NwIW8qg3zBfllME+cXBxSfdokQu0hu8uhBeXwy5J0Bzgy/bVQGrS6FhD5w2D8aVBRujdJm+44r0BuPKYOISsCxorPFljTVg2TBxqZJ4xAWayM1su5m5drafBhlXGLz33ntcf/31jBo1ivz8fAYNGsR5553H3Xff3dKdcsSIEZgZZkbfvn0ZMWIEV1xxBWvWrAk4egmlkrkwaFrrssHToGROIOFI6gR9Rj4BGJKwzYiV/zqwiI4iU6vi/fWvf+Wcc85h9erV3H777bz00kusX7+eb37zm6xatYonn3yype5tt93Gzp072bJlCw8++CADBgxg+vTpLFy4MDPBSnQ4B7srIK8YTpzkb3eVZ+6NLWkTaBu5c64qcd/MvgVsBUK3MnpTE0ycCBs2QFaae2xde+21ZGdn86c//YnjjjuupfyUU05h1qxZJM41379/fwYPHgzA8OHDmTx5MkOGDGH+/PlcfvnljB49Or3BSnTUVMKhOjj/VzBkBuxcDetm+/LjxwYdnXRD0GfkLcwsF/gccF+yVTHMLM/MCuMbfhWNjFi7FiorYV2ae2y9//77rF69muuuu65VEk90rIFN119/Pc45Vq5cmY4QJaoKR8MlO3wSBxhyEcza7ssl0kKTyIFLgAHAsqPUuRmoTdjSujpQdTVs3eq3sjJobPS38bLq6tQf880338Q5d8SZdHFxMQUFBRQUFHDTTTcd9TlOOOEETjrpJLZv3576ACW6svIgp828/blFvlwiLUyJ/EvAH5xz7x6lziKgKGEbls6AFi6EMWOgtBSeftqXVVT4/TFj/P2ZsmHDBjZu3MgZZ5xBfX39Mes75zQlgUgvEYp+5Gb2IWA68Omj1XPO1QMtWSzdiaqsDM46C265BWpqfFlNDQwdCkuXwpw5qT/mqFGjMDO2bNnSqvyUU04B/BD3Y3n//fepqqpi5MiRqQ9QREInLGfkXwR2A78POpC25s6FaW16bE2blp4kDnDiiScyY8YMFi9ezAcffNCl5/jxj39Mnz59uOSSS1IbnIiEUuBn5GbWB5/IH3DOHQo6nrac880pxcVQUuLbxsvL0zt53M9+9jPOO+88xo8fz4IFCxg7dix9+vThhRdeYPPmzYwbN66l7r59+3jvvfdobGxk27Zt/PKXv+See+5h0aJFjBo1Kj0Biki4OOcC3YCLAAec1oXHFgKutrbWtXXgwAG3adMmd+DAgSPu64yXX3ZuwADnVq/2+48/7vdffrlbT3tM7777rps3b54bOXKky8nJcQUFBW7ixInuhz/8ofvggw+cc8596EMfcrHXzuXm5rrhw4e7K664wq1Zsya9wXVTqv42Ij1RbW1t/P+60HUwF5qL8GCAWBfE2traWgoLW1+NP3jwINu2bWPkyJHdmiq1vt5viU9fWwv5+ZCni/1dkqq/jUhPtHfvXoqKigCKnHN7O/KYwJtWwi4v78iE7V9jEZFwCMvFThER6SIlchGRiFMiFxGJOCVyEZGIUyIXEYk4JXIRkYhTIhcRiTglchGRiFMiFxGJOCXyEJozZw5mxve///1W5Y8++mjapu5dsGABZ599dlqeW0TSS4m8MzI4L01+fj533HEHf/vb3zJ2TBGJJiXyjmpugsfG+9sMmD59OoMHD2bRokVJ66xbt44LLriAvn37cvLJJ/O1r32tZQ7zxYsXc+aZZ7bUjZ/N//znP291jFtuuYVly5bx3e9+l5dffhkzw8xYtmwZAG+99RazZs2ioKCAwsJCrrjiCnbt2tXyHPEz+V/84heMGDGCoqIirrzySvbt25fiV0REklEi76iqtVBbCVVpXn05Jisri9tvv52f/OQnvPPOkUuTbt26lYsvvpjLLruMV155hRUrVrBu3TrmzZsHwJQpU9i0aRNVVVUAVFRUUFxcTHl5OQCNjY2sX7+eqVOnMnv2bG688UbOOOMMdu7cyc6dO5k9ezbNzc3MmjWLPXv2UFFRwRNPPMFf//pXZs+efUQsjz76KKtWrWLVqlVUVFQc0SwkIumjRH40B6th31a/bS6D5kbYUna47GAaVl9OcOmll3L22Wdz6623HnHfokWLuPrqq7nhhhs49dRTKS0t5a677uLBBx/k4MGDnHnmmZxwwglUVFQAUF5ezo033tiyv2HDBhobGyktLaVv374UFBSQnZ3N4MGDGTx4MH379uWpp56isrKS5cuXM27cOCZNmsSDDz5IRUUFL7zwQksszc3NLFu2jDPPPJMLLriAz3/+8zz11FNpfW1E5DAl8qN5dSGsGgOrS2F3bPXlXRV+f9UYf3+a3XHHHTzwwAO89tprrcpffvllli1bRkFBQcs2c+ZMmpub2bZtG2bG5MmTKS8vp6amhk2bNnHttddSX1/P5s2bqaioYMKECfTr1y/psV977TVOPvlkTj755Jay008/nQEDBrSKZ8SIEfTv379lf8iQIezevTuFr4IEJsLrFfQmSuRHM64MJi4By4LGGl/WWAOWDROX+vvTbPLkycycOZObb765VXldXR1f/vKX2bhxY8v28ssv88Ybb1BSUgLA1KlTKS8vZ+3atZxzzjkUFha2JPeKigqmTJmSkhhzcnJa7ZsZzc3NKXluCVBTE4wf728l1JTIj6VkLgxqs/ry4GlQMidjIXz/+9/nd7/7HevXr28p+8hHPsKmTZsYNWrUEVtubi5wuJ3817/+NVOnTgV8cn/yySd55plnWsoAcnNzaWrzD/vhD3+Yt99+m7fffrulbNOmTdTU1HD66aen7xeWcFi7FiorYV1mrgtJ1ymRH4tzsLsC8orhxEn+dld5Rr9ynnXWWVx99dXcddddLWU33XQTzz77LPPmzWPjxo288cYbrFy5suViJ8DYsWM5/vjjWb58eatE/uijj1JfX895553XUnfEiBFs27aNjRs3Ul1dTX19PdOnT2859p///Gc2bNjAF77wBaZMmcL48eMz9vtLBlVX+xXGt26FsjJobPS38bLq9F4Xkq5RIj+Wmko4VAely2Hmc1D6kN+vqcxoGLfddlur5oqxY8dSUVHB66+/zgUXXMA555zD/PnzGTp0aEsdM+OCCy7AzDj//PNbHldYWMj48eM57rjjWupedtllXHzxxVx44YUMHDiQhx9+GDNj5cqVHH/88UyePJnp06dzyimnsGLFisz94pJZCxfCmDFQWgpPx64LVVT4/TFj/P0SOlp8+Via6qG5HnISnr+hFrLyIUurL3eFFl8Oufvug1tugZ07D5cNHeqT+Jw5gYXVW3Rl8WWdkR9LVl7rJA6QW6QkLj3X3Lkwrc11oWnTlMRDLDvoAEQkZJzzzSnFxVBS4tvGy8t9eZrm+pHu0Rm5iLRWWQl1dbB8OTz3HDz0kN+vzOx1Iek4nZGLSGujR8OOHRC/7nTRRbB9O+h6RmgpkYtIa3l5fkvkL75JSKlpRUQk4gJP5Gb2d2b2SzN738wOmFmlmWm0iYhIBwXatGJmxwPPAH8EPg5UAacCWk1BRKSDgm4jvwl42zn3xYSybUEFIyISRUE3rXwK+JOZ/drMdpvZS2b2z8kqm1memRXGN6B/sroiIr1F0In8FOAa4A1gJnA3cJeZ/WOS+jcDtQnbkUvnpFOGpjOIL75sZuTm5jJq1Chuu+02Dh06FAvDsXTpUj760Y9SWFhIQUEBZ5xxBtdffz1vvvlmRmIUkfAIOpH3Af7snPu2c+4l59x/AEuBrySpvwgoStiGZSZMMj4388UXX8zOnTt54403uPHGG1mwYAE//OEPcc5x1VVX8bWvfY1PfOITrF69mk2bNnHvvfeSn5/P9773vYzEJyLhEXQb+U5gU5uy14DL2qvsnKsH6uP7lsnhwolzM6doQYajycvLY/DgwQBcc801/OY3v+G3v/0tI0eO5JFHHmHlypV86lOfaqk/fPhwzj33XKI8CZqIdE3QifwZYHSbstOAHQHEcqTqaqit9T8nzs08LPZFoKjIz0eRAX379uX999/n4YcfZvTo0a2SeKKMfriJSCgE3bRSBpxrZt82s1FmdhXwL8BPA47LC8HczM45nnzySR5//HGmTZvG66+/zujRrT/7brjhhpZ1O4cNy1xrk4iEQ6CJ3Dn3AnAp8FngL8C/ATc45x4KMq4WZWWwZAlkZUFNjS+rqYHsbFi61N+fJqtWraKgoID8/Hw+/vGPM3v2bBYsWNBu3e985zts3LiR+fPnU1dXl7aYRCScgm5awTm3ClgVdBxJzZ0La9b4GeDiMjA384UXXsjdd99Nbm4uQ4cOJTvb/6lOPfVUtmzZ0qruwIEDGThwICeddFJaYxKRcAq6aSX8EudmnjTJ38bnZk6j4447jlGjRjF8+PCWJA7w2c9+li1btrBy5cq0Hl9EokOJ/FhCNjfzlVdeyeWXX86VV17JbbfdxvPPP8/27dupqKhgxYoVZGVlBRKXiAQn8KaV0AvZ3MxmxooVK1i6dCn3338/P/jBD2hsbGTYsGF87GMf48477wwkLhEJjhZflowLxd9Gy5ZJSGnxZZGOaG6Cx8b7W5EeQIlcep+qtVBbCVXrgo5EJCXURi69w8FqaIyN0t1cBs2NsKUM+sUGUOUUQX5mRumKpJoSufQOry6E1xdD7gnQ3ODLdlXA6lJo2AOnzYNx6RvgJZJOPb5pJcoXc3uqQP4m48pg4hKwLGis8WWNNWDZMHGpkrhEWo9N5Dk5OQDs378/4EikrfjfJP43ypiSuTBoWuuywdOgZE5m4xBJsR7btJKVlcWAAQPYvXs3AP369dPMgAFzzrF//352797NgAEDMj94yTnYXQF5xVBQAnVbYVe5uiJK5PXYRA60zOcdT+YSDgMGDGj522RUTSUcqoPzfwVDZsDO1bButi8/fmzm4xFJkR47IChRU1MTjY2NmQtMksrJyQluGoGmemiuh5yE90pDLWTlQ1ZeMDGJtNGVAUE9+ow8LisrS3OQiE/WbRN2blEwsYikUI+92Cki0lsokYuIRJwSuYhIxCmRi4hEnBK5iEjEKZGLiEScErmISMQpkYuIRJwSuYhIxCmRi4hEnBK5iEjEKZGLiEScErmISMQpkYuIRFygidzMFpiZa7NtDjImEZGoCcN85K8C0xP2DwUViIhIFIUhkR9yzr0XdBAiIlEVhjbyU83sXTP7q5k9ZGbDk1U0szwzK4xvQP8MxikiEkpBJ/LngTnAxcA1wEhgrZklS9A3A7UJ2zsZiFFEJNRCtfiymQ0AdgDfcM7d2879eUDioov9gXeOtfiyiEhURH7xZedcjZm9DoxKcn89UB/fN7NMhSYiElpBN620YmYFQAmwM+hYRESiIuh+5P/XzKaY2QgzKwV+AzQBDwcZl4hIlATdtDIMn7RPBKqAdcC5zrmqQKMSEYmQQBO5c+7KII8vItIThKqNXEREOk+JXEQk4pTIRUQiTolcRCTilMhFRCJOiVxEJOKUyEVEIk6JXEQk4pTIRUQiTolcRCTilMgldUI0t71Ib6JELqnR3ASPjfe3PZU+qCSklMglNarWQm0lVK0LOpL0aGqC8eP9rUjIKJFL1x2shn1b/ba5DJobYUvZ4bKD1UFHmDpr10JlJazroR9UEmlBz0cuUfbqQnh9MeSeAM0NvmxXBawuhYY9cNo8GFcWbIzdUV0NtbX+57IyaGz0t8OG+bKiIiguDi4+kRidkUvXjSuDiUvAsqCxxpc11oBlw8Sl0U7iAAsXwpgxUFoKTz/tyyoq/P6YMf5+kRBQIpfuKZkLg6a1Lhs8DUrmBBJOSpWVwZIlkJUFNTW+rKYGsrNh6VJ/v0gIKJFL9zgHuysgrxhOnORvd5X3nB4ec+fCtDYfVNOmwZw5gYQj0h4lcumemko4VAely2Hmc1D6kN+vqQw6stRwzjenFBfDpEn+try853xQSY+gRC7dUzgaLtkBQ2b4/SEXwaztvrwnqKyEujpYvhyeew4eesjvV/aQDyrpEcxF+MzCzAqB2traWgoLC4MOR3qi+nq/Jb6/amshPx/y8oKLS3qsvXv3UlRUBFDknNvbkceo+6HI0eTlHZmw/T+ZSGioaUVEJOKUyEVEIk6JXEQk4pTIRUQiTolcRCTilMhFRCIuNInczL5lZs7MfhR0LCIiURKKRG5mE4AvA68EHYuISNQEnsjNrAB4CPhn4G8BhyMiEjmBJ3Lgp8DvnXNPHquimeWZWWF8A/qnPzwRkXALdIi+mV0JfASY0MGH3Azcmr6IRESiJ7AzcjM7GfgxcLVz7mAHH7YIKErYhqUpPBGRyAjyjHwccBLwZzOLl2UBk81sHpDnnGu1ZLlzrh6oj+8nPE5EpNcKMpE/BZzVpux+YDNwR9skLiIi7QsskTvn9gF/SSwzsw+A951zf2n/USIi0lYYeq2IiEg3hGphCefc1KBjEBGJGp2Ri4ikSaZW0lQiFxFJg6YmGD/e36abErmISBqsXQuVlbBuXfqPFao2chGRKKuuhtpa/3NZGTQ2+tthsaGLRUVQXJz64+qMXEQkRRYuhDFjoLQUnn7al1VU+P0xY/z96ZDSRG5mf29mGsgjIr1SWRksWQJZWVBT48tqaiA7G5Yu9fenQzrOyDVuXkR6rblzYdq01mXTpsGcOek7ZqfayM3sv45RpQjIUIcbOSbnQPPRiGSUc745pbgYSkpg61YoL0/vv2Nnz8j/F5AP1CbZ6lIanXRdcxM8Nt7fikjGVFZCXR0sXw7PPQcPPeT3KyvTd8zO9lp5DfhP59y97d1pZmcDn+xuUJICVWuhthKq1sGgKUFHI9JrjB4NO3ZAYaHfv+gi2L4d8vPTd8zOJvIX8QtBtJvI8VPMvtWtiKTrDlZDY6zv0+YyaG6ELWXQL9b3KacI8tPQ90lEWuTl+S1RUVF6j2muE2NIzSwPyHLO7U9fSB0XW+6ttra2lsL4x19v9uLX4fXFkHsCNDdAYw3kDIA+udCwB06bB+PSdNlcRFJi7969FPnMX+Sc29uRx3Sqjdw5V++c229ma8zsiCXXzOx4M1vTmeeUFBpXBhOXgGX5JA7+1rJh4lIlcZEeqqvdD6cC88zsUTM7LqE8F1CDbJBK5sKgNn2fBk+DkjmBhCMi6dedfuTTgcHAc2Y2IjXhSLc5B7srIK8YTpzkb3eVZ24aNhHJuO4k8p34s+9K4AUzm5qKgKSbairhUB2ULoeZz0HpQ36/Jo19n0QkUF2dNMtBy2LIV5nZLcBjwB2pCky6qHA0XLIDcmIXf4dcBLO2Q1Ya+z6JSKC6mshbjU9yzn3PzF4DHuh+SNItWXl+S5Sb5r5PIhKoribykUBVYoFz7j/NbDMwvttRiYhIh3UpkTvndiQpfxV4tVsRiYhIp2g+chGRiFMiFxGJOCVyEZGIUyKX4Gmwkki3KJFLsJqaYPx4fysiXaJELsFau9bPuL9uXdCRiERWV/uRi3RddTXUxuZNLyuDxkZ/Oyw2b3pRkV8nS0Q6JNAzcjO7xsxeMbO9sW29mX08yJgkAxYuhDFjoLQUnn7al1VU+P0xY/z9ItJhQTetvAN8CxiHHxG6BlhpZmcEGpWkV1kZLFkCWVlQU+PLamogOxuWLvX3i0iHBZrInXO/c879t3PuDefc68657+AXcD43yLgkA+bOhWlt5k2fNg3mzAkkHJEoC00buZllAZ8BjgPWJ6mTByTOCNU/A6FJOjjnm1OKi6GkBLZuhfJyX252zIeLyGFBN61gZmeZWR1+4eafA5c65zYlqX4zUJuwvZOZKCXlKiuhrg6WL4fnnoOHHvL7lZo3XaSzOrX4cloCMMsFhgNFwOXAPwFT2kvmSc7I39HiyxFUX++3xL9bbS3k5x+5BLlIL9KVxZcDb1pxzjUAb8Z2XzSzCcD1wJfbqVuPP3MHwPQVPLry8o5M2EWaN12kKwJvWmlHH1qfdYuIyFEEekZuZouAPwBv4ZtJrgKmAjMDDCtYutgnIp0U9Bn5ScCDwBbgKWACMNM590SgUQWluQkeG+9vRUQ6KNAzcufcl4I8fuhUrYXaSqhaB4OmBB2NiERE4Bc7e72D1dAYm3dkcxk0N8KWMugXm3ckpwjyNe+IiCSnRB60VxfC64sh9wRobvBluypgdSk07IHT5sE4DVkXCbOgL20F3UYu48pg4hKwLGis8WWNNWDZMHGpkrhIyIVhSn0l8jAomQuD2sw7MngalMwJJBwR6bgwTKmvppUwcA52V0BeMRSUQN1W2FUe/Pc1EWlX2KbU1xl5GNRUwqE6KF0OM5+D0of8fo3mHREJo7BNqR/4XCvdYWaFQG3k51ppqofmeshJ+B0aaiErH7I0yFUkjO67D265BXbuPFw2dKhP4t2Zjbkrc63ojDwMsvJaJ3GA3CIlcZEQC9OU+mojFxHpgjBNqa8zchGRLgjTlPpqIxcR6YJ0TakfyfnIRUSiKExT6qtpRUQk4pTIRUQiTolcRCTilMhFRCJOiVxEJOKUyEVEIk6JXEQk4pTI0ynCg61EJDqUyNOluQkeG+9vRUTSSIk8XarWQm0lVAW4bEhn6RuESCQpkafSwWrYt9Vvm8uguRG2lB0uO1gddITJhWHhQZEICOP5jhJ5Kr26EFaNgdWlsDu2bMiuCr+/aoy/P6zCsPCgSMiF9XxHiTyVxpXBxCVgWdBY48saa8CyYeJSf3+YVFf7SZS3bm298GC8rDrE3yBEAhDW8x0l8lQrmQuD2iwbMngalMwJJJyjCtvCgyIhFIXzHSXyVHMOdldAXjGcOMnf7ioPZ8NaWRksWQJZWVBT48tqaiA7G5Yu9feL9HJRON9RIk+1mko4VAely2Hmc1D6kN+vCWDZkI4I08KDIiEUhfOdQFcIMrObgU8DY4ADwLPATc65LR18fPhWCGqqh+b61ospN9RCVn44F1N2DoYPh4MHDy88mJ8Pb72V+YUHRULsc5/zy7kl7v/iF6k/TldWCAr6jHwK8FPgXGAGkAOsNrPjAo2qO7LyWidxgNyicCZxCNfCgyIhlbjQ8qRJ/ja+0HIYhGrNTjMbCOwGpjjnnu5A/fCdkUdNuhYeFOlBXnkFpkyBX/0KZsyA1ath9myf3MeOTe2xesKanfEV7/a0d6eZ5QGJ2aV/2iPq6cK08KBISI0eDTt2HD7fuegi2L7dn++EQdBNKy3MrA/wI+AZ59xfklS7GahN2N7JTHQi0pvl5bX+0gr+fCcsX1pDk8jxbeVnAlcepc4i/Fl7fBuWgbhEREItFE0rZrYY+CQw2TmX9CzbOVcP1Cc8LgPRiYiEW6CJ3Hwm/glwKTDVObctyHhEROKci04P3KCbVn4KfA64CthnZoNjW9+A4xKRXiysk2MlE3Qivwbf1l0O7EzYZgcYU8eFqOumiKROWCfHSibQphXnXES+uLSjuQkenwgzN0CfrKCjEZFuqq72Qyig9eRYw2JdKoqK/ECgMAr6jDy6orgCkIgkFYXJsZJRIu+MKK8AJCJHFYXJsZJRIu+MKK8AJCLHFNXJQJXIOyNqKwCJSKeEfXKsZJTIOytKKwCJSKdEdTLQUIzsjJTEFYAKSqBu6+EVgKIyekBE2hX2ybGS0Rl5Z0VtBSAROaZ400nYJ8dKJlTzkXdWIPORh2kFIH0LEOm2piaYOBE2bPA9VoIWxRWCoicsKwBFbQyxSEhFbRRne9RGHlWJ774pU4KORiRSojyKsz1K5FHS0959IgFZuBAWL4YTToCGBl8WH8W5Zw/MmxfuAUBtqWklSqI8hlgkRKI8irM9SuQdEZYLwj3t3ScSoKiO4myPEvmxNDfBY+P9bRj0pHefSADi52VRHcXZHiXyYwnbLIc96d0nkmGJnb2iOoqzPbrY2Z6D1dAYu6iYOMthv9hFxZwiyA/oomL83ferX8GMGbB6Ncye7cvHjg0mJpGISOzsde650RzF2R4NCGrPi1+H1xdD7gnQ3OAnxsoZAH1yoWEPnDYvuAmy6uv9lvj71tb6d1/Yh5+JBCCxs9c3vgG//S3MmgX//u++LGydvTQgKFXCPMthVMcQiwSkN3T2UiJPRrMcikSec72js5cSeTKJsxyeOMnfxmc5FJHQS7yw2dM7eymRJ6NZDkUiLfHCZk/v7KVeK8kUjoZLdhyeIGvIRTBru5/lUERCKdksFnV1vvy+++Dyy3teZy8l8mSy8o6c0TC3KJhYRKRDks2h8uyzcOAAPPOMT+RR7mrYHjWtJNNTvnOJ9BJHu7CZk3Pkhc2e1NlLibw9mRyWrw8MkW7rTRc226NE3p5MDcvX4hAiKdGbLmy2R4k87mA17Nvqt8Rh+fGyg9WpP2ZPWJpEJADO+QubW7f6LfHC5n//t7+weffd0Z9DpaMCvdhpZpOBfwXGAUOAS51zjwYSzKsLWw/LB9hVAatLUzssX4tDiHRLfI3N88+Hn/2s913YbE/QZ+THAS8D1wUcR+aG5feG8cIiaRT/IvvpT/fOC5vtCTSRO+f+4Jy7xTn3myDjaJGJYfm9YbywSIola0aZMgUmTGhdt6df2GxPpPqRm1kekPi52j+lB0gcll9QAnVbDw/LN0vdcebOhTVrfONdXG9894l00NHW2Ny92zeb/P3f+0Qfv7CZyn/ZsAu6aaWzbgZqE7Z3UvrsmRqW3xsvq4t0Q7Ivss5B375+atrecmGzPVFL5IuAooRtWEqfPT4sf8gMvx8fll84OqWH6VFLk4hkSHv9w6dPh/fe82uswOELm6NT/C8bdqFZWMLMHJ3stZK2hSXSTYtDiHSaczB8OBw8CCUlvhklPx/eeqtnNaNoYYmo0OIQIp2mL7LJBd2PvAAYlVA00szOBvY4594KJioRCaPRo3vOGpupFnSvlfHAHxP274zdPgDMyXg0qdTbLpuLpFle3pFfWos0ISkQcCJ3zpUDPS/bxYeebdjgL7OLiKSR2sjTQXOoiEgGBd200nNoDhURCYjOyFNFc6iISECUyFNFc6iISECUyFOpNy5NIiKBUxt5KiXOoRIfetYbZ/ARkYzSGXkqaeiZiAQgNHOtdEXgc620PdPWHCoi0k2aayWT2ls4WXOoiEgAlMi7SoN+RCQkdLGzMzToR0RCSGfknaFBPyISQkrknaFBPyISQkrkHRXv3aNBPyISMkrkHZHYQ0ULJ4tIyCiRd0RiDxUN+hGRkFEiT6a62g+x37q1dQ+V7Gz44x/hnHN8vd66bLeIhIYSeTLf+177PVQuvBAmTGjdQ0WDfkQkQErk7Wlq8s0pd9+tHioiEnpK5O2Jt4mfeqp6qIhI6GlkZ1yyUZvPPw/HHw8jR8Jbb2laWhEJHZ2Rx7U3anPNGti1C/buhcmT1UNFREJJZ+RxZWVw1llwyy2H28T37YPBg2HRosPNKdu3+2lpRURCQmfkidobtTl9eus2cfVQEZGQ0Rl5Ii3VJiIRpDPyRBq1KSIRpKXeEmmpNhEJWFeWelPTSqK8vCMTtn9BRURCKxRNK2Z2nZltN7ODZva8mU1M9zHnz5+f7kOIiGRE4InczGYDdwLfBT4CvAw8bmYnpeuYVVVV3HvvvVRXV6frECIiGRN4Ige+ASx1zt3vnNsEfAXYD8xN1wGXLl3Ku+++yz333JOuQ4iIZEygidzMcoFxwJPxMudcc2z/o+3UzzOzwvgG9O/osZYvX05JSQklJSXcddddAPzoRz9qKVu+fHl3fx0RkUAEfUZeDGQBu9qU7wIGt1P/ZqA2YXunowe66qqreOSRRyguLmbXLn+4Xbt2MXDgQFasWMFVV13VlfhFRAIXdCLvrEVAUcI2rDMPnjBhAldccUWrss985jOMHz8+ZQGKiGRa0Im8GmgCBrUpHwS817ayc67eObc3vgH7OnvAtWvXUlJSwle/+lVKSkpYu3ZtlwIXEQmLQBO5c64BeBH4WLzMzPrE9ten+nj79++nurqaJ554grvuuosnnniC6upqDhw4kOpDiYhkTOAjO2PdDx8AvgxsAG4ArgDGOOfatp23fWynRnbGf1dLmDelvTIRkaBEcmSnc26FmQ0EbsNf4NwIXHysJN4V7SVrJXARibrAEzmAc24xsDjoOEREoijoi50iItJNSuQiIhGnRC4iEnFK5CIiEadELiIScUrkIiIRF4ruh921d2+H+syLiIReV/JZ4CM7u8PM/o5OzIAoIhIhw5xz/9ORilFP5AYMpfOTZ/XHfwAM68Jjw0DxB0vxB6s3xN8feNd1MEFHumkl9kt26BMrUcKw/H0dncsgTBR/sBR/sHpJ/J36vXSxU0Qk4pTIRUQirrcm8nrgu7HbKFL8wVL8wVL8bUT6YqeIiPTeM3IRkR5DiVxEJOKUyEVEIk6JXEQk4npsIjez68xsu5kdNLPnzWziMep/xsw2x+pXmtknMhVrkng6HL+ZzTEz12Y7mMl428Qz2cx+Z2bvxmK5pAOPmWpmfzazejN708zmpD/SpLF0Kv5Y7G1ff2dmgzMUcmIsN5vZC2a2z8x2m9mjZja6A48Lxfu/K/GH6f1vZteY2Stmtje2rTezjx/jMd1+7XtkIjez2cCd+C4+HwFeBh43s5OS1C8FHgbuBc4BHgUeNbMzMxLwkfF0Kv6YvcCQhO1D6Y7zKI7Dx3xdRyqb2Ujg98AfgbOBHwH3mNnMNMV3LJ2KP8FoWv8Ndqc4ro6YAvwUOBeYAeQAq83suGQPCNn7v9Pxx4Tl/f8O8C1gHDAeWAOsNLMz2qucstfeOdfjNuB5YHHCfh/8UP5vJam/AljVpuw54OcRiX8OUBP0654kNgdccow6dwB/aVP2CPBYROKfGqs3IOh424ltYCy2yUepE6r3fxfiD+37PxbfHuBL6Xzte9wZuZnl4j8Nn4yXOeeaY/sfTfKwjybWj3n8KPXTpovxAxSY2Q4ze9vMkp4BhFRoXv9u2mhmO83sCTM7L+hgYopit3uOUifMr39H4ocQvv/NLMvMrsR/w1ufpFpKXvsel8iBYiAL2NWmfBeQrM1ycCfrp1NX4t8CzAVmAZ/D/12fNbNh6QoyxZK9/oVm1jeAeDprJ/AV4LLY9jZQbmYfCTIoM+uDb6Z6xjn3l6NUDdP7v0Un4g/V+9/MzjKzOvzIzZ8DlzrnNiWpnpLXPtKzH4rnnFtPwie+mT0LvAZ8Gfi3oOLqLZxzW/DJJO5ZMysBvg58PpioAN/WfCZwfoAxdEeH4g/h+38L/lpPEXA58ICZTTlKMu+2nnhGXg00AYPalA8C3kvymPc6WT+duhJ/K865RuAlYFRqQ0ubZK//XufcgQDiSYUNBPj6m9li4JPAhc65Yy2+Eqb3P9Dp+FsJ+v3vnGtwzr3pnHvROXcz/sL59Umqp+S173GJ3DnXALwIfCxeFvuK9jGSt1OtT6wfM+Mo9dOmi/G3YmZZwFn4r/xREJrXP4XOJoDX37zFwKXANOfctg48LDSvfxfjb/scYXv/9wHyktyXmtc+6Cu6abpKPBs4CPwj8GFgCfA3YFDs/geBRQn1S4FG4EZgDLAAaADOjEj884GLgFPw3RUfBg4ApwcUfwE+kZ2N73Hw9djPw2P3LwIeTKg/EvgA+EHs9b8WOATMjEj8N+DbZ0fhmwJ+hP9W9bEAYv8ZUIPvxjc4YeubUCe07/8uxh+a93/svTEZGIH/MFkENAMz0vnaZ/yfJIMv6DxgB/6Cw/PApIT7yoFlbep/Bt+2VQ/8BfhEVOIHyhLqvofvk31OgLFPjSXAttuy2P3LgPJ2HvNS7HfYCsyJSvzAN4E3Y8njfXx/+AsDir29uF3i6xnm939X4g/T+x/fH3x7LJbd+B4pM9L92msaWxGRiOtxbeQiIr2NErmISMQpkYuIRJwSuYhIxCmRi4hEnBK5iEjEKZGLiEScErmISMQpkYuIRJwSuUgnmNlYM1sbW1/xbTP7ZtAxiSiRi3SQmRUCq/HzeowD/hVYYGb/Emhg0utprhWRBGY2Amhv6tQK/PqKC4HBzk83jJl9H7+m55iMBSnShs7IRVp7m9arsZ+Dn9Hwafw6ik/Hk3jM48BoMzs+04GKxCmRiyRwzjU5595zzr2Hnxf75/hJ/heQfH1FCHh9S+ndtGanSHL3Af3x80k3m1nQ8Yi0S4lcpB1mdgswE5jonNsXK062vmL8PpFAqGlFpA0zuwy/fNgVzrmtCXetByabWU5C2Qxgi3Pub5mMUSSReq2IJDCzM/FL690J/DThrgb8Opxb8F0Q78Cvz3kf8HXn3H9kOFSRFkrkIgnMbA5wfzt3VTjnpprZWHyCnwBUAz9xzt2RwRBFjqBELiIScWojFxGJOCVyEZGIUyIXEYk4JXIRkYhTIhcRiTglchGRiFMiFxGJOCVyEZGIUyIXEYk4JXIRkYhTIhcRibj/D0AlztulUrzCAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -742,9 +740,9 @@ "source": [ "axes = plt.figure(figsize=(4, 4), dpi=100).gca()\n", "axes.set_title('y space')\n", - "axes.scatter(historyGDy[:,0], historyGDy[:,1], lw=0.5, marker='*', color='blue', label='GD')\n", - "axes.scatter(historyNty[:,0], historyNty[:,1], lw=0.5, marker='*', color='orange', label='Newton')\n", - "axes.scatter(historyPGy[:,0], historyPGy[:,1], lw=0.5, marker='*', color='red', label='PG')\n", + "axes.scatter(historyGDy[:,0], historyGDy[:,1], lw=0.5, marker='*', color='#1F77B4', label='GD')\n", + "axes.scatter(historyNty[:,0], historyNty[:,1], lw=0.5, marker='*', color='#FF7F0E', label='Newton')\n", + "axes.scatter(historyPGy[:,0], historyPGy[:,1], lw=0.5, marker='*', color='#D62728', label='PG')\n", "axes.scatter([0], [0], lw=0.25, color='black', marker='*') \n", "axes.set_xlabel('z0'); axes.set_ylabel('z1'); axes.legend()" ] @@ -784,7 +782,7 @@ "\n", "## Approximate inversions\n", "\n", - "If an analytic inverse like the `fun_y_inv_analytic` above is not readily available, we can actually resort to optimization schemes like Newton's method or BFGS to obtain a local inverse numerically. This is a topic that is orthogonal to the comparison of different optimization methods, but it can be easily illustrated based on the inverse simulator variant from above.\n", + "If an analytic inverse like the `physics_y_inv_analytic` above is not readily available, we can actually resort to optimization schemes like Newton's method or BFGS to obtain a local inverse numerically. This is a topic that is orthogonal to the comparison of different optimization methods, but it can be easily illustrated based on the inverse simulator variant from above.\n", "\n", "Below, we'll use the BFGS variant `fmin_l_bfgs_b` from `scipy` to compute the inverse. It's not very complicated, but we'll use numpy and scipy directly here, which makes the code a bit messier than it should be." ] @@ -813,31 +811,31 @@ } ], "source": [ - "def fun_y_inv_opt(target_y, x_ini):\n", + "def physics_y_inv_opt(target_y, x_ini):\n", " # a bit ugly, we switch to pure scipy here inside each iteration for BFGS\n", " import numpy as np\n", " from scipy.optimize import fmin_l_bfgs_b\n", " target_y = onp.array(target_y)\n", " x_ini = onp.array(x_ini)\n", "\n", - " def fun_y_opt(x,target_y=[2,2]):\n", - " y = onp.array( [x[0], x[1]*x[1]] ) # we cant use fun_y from JAX here\n", + " def physics_y_opt(x,target_y=[2,2]):\n", + " y = onp.array( [x[0], x[1]*x[1]] ) # we cant use physics_y from JAX here\n", " ret = onp.sum( onp.square(y-target_y) )\n", " return ret\n", " \n", - " ret = fmin_l_bfgs_b(lambda x: fun_y_opt(x,target_y), x_ini, approx_grad=True )\n", + " ret = fmin_l_bfgs_b(lambda x: physics_y_opt(x,target_y), x_ini, approx_grad=True )\n", " #print( ret ) # return full BFGS details\n", " return ret[0]\n", "\n", "print(\"BFGS optimization test run, find x such that y=[2,2]:\")\n", - "fun_y_inv_opt([2,2], [3,3])\n" + "physics_y_inv_opt([2,2], [3,3])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Nonetheless, we can now use this numerically inverted $\\mathbf{y}$ function to perform the inverse simulator optimization. Apart from calling `fun_y_inv_opt`, the rest of the code is unchanged." + "Nonetheless, we can now use this numerically inverted $\\mathbf{y}$ function to perform the inverse simulator optimization. Apart from calling `physics_y_inv_opt`, the rest of the code is unchanged." ] }, { @@ -867,14 +865,16 @@ "eta = 0.3\n", "history = [x]; updates = []\n", "\n", + "Gy = jax.grad(loss_y)\n", + "Hy = jax.jacobian(jax.jacobian(loss_y))\n", "for i in range(10): \n", " # same as before, Newton step for L(y)\n", - " y = fun_y(x)\n", - " GL = jax.grad(fun_L)(y)\n", - " y += -eta * np.matmul( np.linalg.inv( jax.jacobian(jax.jacobian(fun_L))(y) ) , GL)\n", + " y = physics_y(x)\n", + " g = Gy(y)\n", + " y += -eta * np.matmul( np.linalg.inv( Hy(y) ) , g)\n", "\n", - " # optimize for inverse physics, assuming we dont have access to an inverse for fun_y\n", - " x = fun_y_inv_opt(y,x)\n", + " # optimize for inverse physics, assuming we dont have access to an inverse for physics_y\n", + " x = physics_y_inv_opt(y,x)\n", " history.append(x)\n", " updates.append( history[-2] - history[-1] )\n", " print( \"PG iter %d: \"%i + format(x) )\n" @@ -911,7 +911,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "\n", "---\n", "\n", @@ -921,7 +920,7 @@ "\n", "- Instead of the simple L(y(x)) function above, try other, more complicated functions.\n", "\n", - "- Replace the simple \"regular\" gradient descent with another optimizer, e.g., commonly used DL optimizers such as AdaGrad, RmsProp or Adam. Compare the versions above with the new trajectories." + "- Replace the simple \"regular\" gradient descent with another optimizer, e.g., commonly used DL optimizers such as AdaGrad, RmsProp or Adam. Compare the existing versions above with the new trajectories." ] } ], @@ -946,4 +945,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} \ No newline at end of file +}