diff options
Diffstat (limited to 'jax_optimization_tutorial')
-rw-r--r-- | jax_optimization_tutorial/linear-regression.ipynb | 442 |
1 files changed, 327 insertions, 115 deletions
diff --git a/jax_optimization_tutorial/linear-regression.ipynb b/jax_optimization_tutorial/linear-regression.ipynb index 403c55d..f9147e2 100644 --- a/jax_optimization_tutorial/linear-regression.ipynb +++ b/jax_optimization_tutorial/linear-regression.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "id": "36893279", "metadata": {}, "outputs": [ @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 3, "id": "11fa0b53", "metadata": {}, "outputs": [ @@ -166,106 +166,106 @@ " [1. 1.]\n", " [1. 1.]\n", " [1. 1.]]\n", - "[[-0.49573565 1. ]\n", - " [-0.75743556 1. ]\n", - " [-0.10826278 1. ]\n", - " [-0.06045723 1. ]\n", - " [-0.6449168 1. ]\n", - " [-0.73400044 1. ]\n", - " [-0.37836146 1. ]\n", - " [-0.01198149 1. ]\n", - " [ 0.61107445 1. ]\n", - " [ 0.29680896 1. ]\n", - " [ 0.9514713 1. ]\n", - " [-0.94317484 1. ]\n", - " [ 0.5943241 1. ]\n", - " [-0.00902605 1. ]\n", - " [ 0.28311515 1. ]\n", - " [-0.1576097 1. ]\n", - " [ 0.50905204 1. ]\n", - " [ 0.40418315 1. ]\n", - " [-0.13876987 1. ]\n", - " [-0.10519576 1. ]\n", - " [ 0.4820497 1. ]\n", - " [ 0.16001129 1. ]\n", - " [-0.78287053 1. ]\n", - " [-0.83056164 1. ]\n", - " [-0.45683146 1. ]\n", - " [ 0.65588903 1. ]\n", - " [-0.30958128 1. ]\n", - " [-0.57034206 1. ]\n", - " [ 0.11413717 1. ]\n", - " [ 0.30006003 1. ]\n", - " [ 0.3948493 1. ]\n", - " [ 0.93246984 1. ]\n", - " [ 0.08236265 1. ]\n", - " [ 0.5821161 1. ]\n", - " [ 0.01212478 1. ]\n", - " [ 0.9328327 1. ]\n", - " [ 0.09593153 1. ]\n", - " [ 0.71609616 1. ]\n", - " [ 0.5419252 1. ]\n", - " [-0.78604007 1. ]\n", - " [ 0.9995785 1. ]\n", - " [-0.48301148 1. ]\n", - " [ 0.93194747 1. ]\n", - " [ 0.6257863 1. ]\n", - " [-0.42878604 1. ]\n", - " [-0.11879826 1. ]\n", - " [-0.60145855 1. ]\n", - " [ 0.25006437 1. ]\n", - " [ 0.4595716 1. ]\n", - " [ 0.48950648 1. ]\n", - " [ 0.77740407 1. ]\n", - " [ 0.17917514 1. ]\n", - " [ 0.52525926 1. ]\n", - " [ 0.7628691 1. ]\n", - " [-0.6807344 1. ]\n", - " [ 0.14769888 1. ]\n", - " [ 0.8373101 1. ]\n", - " [-0.90767694 1. ]\n", - " [ 0.90058756 1. ]\n", - " [-0.4039154 1. ]\n", - " [-0.9033947 1. ]\n", - " [ 0.8437958 1. ]\n", - " [-0.75383854 1. ]\n", - " [-0.7118697 1. ]\n", - " [ 0.2737422 1. ]\n", - " [-0.9684801 1. ]\n", - " [ 0.20652676 1. ]\n", - " [ 0.01346517 1. ]\n", - " [-0.9524138 1. ]\n", - " [-0.08028603 1. ]\n", - " [-0.71781445 1. ]\n", - " [ 0.08346677 1. ]\n", - " [ 0.6743789 1. ]\n", - " [ 0.01168156 1. ]\n", - " [ 0.0992105 1. ]\n", - " [-0.10572052 1. ]\n", - " [-0.07284904 1. ]\n", - " [-0.66415024 1. ]\n", - " [ 0.37942672 1. ]\n", - " [ 0.16580987 1. ]\n", - " [ 0.15668988 1. ]\n", - " [-0.4482379 1. ]\n", - " [-0.9518373 1. ]\n", - " [-0.22508144 1. ]\n", - " [-0.87991786 1. ]\n", - " [ 0.02797484 1. ]\n", - " [ 0.5076406 1. ]\n", - " [-0.40049028 1. ]\n", - " [ 0.55776215 1. ]\n", - " [-0.44021344 1. ]\n", - " [ 0.17129445 1. ]\n", - " [-0.4132347 1. ]\n", - " [ 0.4849968 1. ]\n", - " [ 0.7109468 1. ]\n", - " [ 0.66096044 1. ]\n", - " [-0.56528807 1. ]\n", - " [-0.55501866 1. ]\n", - " [-0.38958454 1. ]\n", - " [-0.17273688 1. ]\n", - " [-0.00741458 1. ]]\n" + "[[ 0.56719136 1. ]\n", + " [ 0.90619564 1. ]\n", + " [ 0.8181107 1. ]\n", + " [-0.07588315 1. ]\n", + " [ 0.65934706 1. ]\n", + " [ 0.70064425 1. ]\n", + " [ 0.28244472 1. ]\n", + " [-0.07778668 1. ]\n", + " [ 0.9808245 1. ]\n", + " [ 0.05257344 1. ]\n", + " [-0.38835692 1. ]\n", + " [ 0.74025965 1. ]\n", + " [-0.8808477 1. ]\n", + " [-0.80188036 1. ]\n", + " [ 0.7314439 1. ]\n", + " [-0.69432974 1. ]\n", + " [ 0.6456201 1. ]\n", + " [-0.13038063 1. ]\n", + " [ 0.7454684 1. ]\n", + " [-0.17364717 1. ]\n", + " [ 0.8420925 1. ]\n", + " [ 0.32458067 1. ]\n", + " [-0.23971272 1. ]\n", + " [-0.841902 1. ]\n", + " [-0.9334514 1. ]\n", + " [ 0.8027196 1. ]\n", + " [-0.76277256 1. ]\n", + " [-0.3472433 1. ]\n", + " [-0.18131876 1. ]\n", + " [-0.81412005 1. ]\n", + " [ 0.742816 1. ]\n", + " [ 0.29102564 1. ]\n", + " [-0.12259459 1. ]\n", + " [ 0.7445142 1. ]\n", + " [ 0.4648075 1. ]\n", + " [ 0.97792006 1. ]\n", + " [ 0.98037124 1. ]\n", + " [-0.74772596 1. ]\n", + " [-0.9600477 1. ]\n", + " [ 0.29590702 1. ]\n", + " [ 0.8539684 1. ]\n", + " [ 0.7292776 1. ]\n", + " [-0.35773468 1. ]\n", + " [ 0.06983089 1. ]\n", + " [-0.1719327 1. ]\n", + " [ 0.3244648 1. ]\n", + " [-0.66061735 1. ]\n", + " [-0.9326389 1. ]\n", + " [-0.48183155 1. ]\n", + " [ 0.60397077 1. ]\n", + " [-0.24433494 1. ]\n", + " [ 0.9065745 1. ]\n", + " [-0.53917074 1. ]\n", + " [-0.26952457 1. ]\n", + " [-0.03242016 1. ]\n", + " [-0.6970415 1. ]\n", + " [-0.8621006 1. ]\n", + " [ 0.64250565 1. ]\n", + " [ 0.3600428 1. ]\n", + " [ 0.1736505 1. ]\n", + " [ 0.8175428 1. ]\n", + " [-0.4976089 1. ]\n", + " [ 0.99707437 1. ]\n", + " [ 0.61124754 1. ]\n", + " [ 0.4626403 1. ]\n", + " [ 0.7739856 1. ]\n", + " [ 0.18812919 1. ]\n", + " [ 0.9244573 1. ]\n", + " [ 0.55314875 1. ]\n", + " [ 0.99845624 1. ]\n", + " [ 0.9773083 1. ]\n", + " [ 0.87139964 1. ]\n", + " [ 0.32497478 1. ]\n", + " [ 0.76745677 1. ]\n", + " [-0.75871634 1. ]\n", + " [-0.10237694 1. ]\n", + " [-0.10543108 1. ]\n", + " [-0.19929266 1. ]\n", + " [-0.67447877 1. ]\n", + " [-0.54395914 1. ]\n", + " [ 0.4002776 1. ]\n", + " [-0.7200577 1. ]\n", + " [ 0.17349315 1. ]\n", + " [ 0.5890646 1. ]\n", + " [ 0.32220316 1. ]\n", + " [ 0.870471 1. ]\n", + " [-0.4356978 1. ]\n", + " [-0.54046607 1. ]\n", + " [ 0.60255 1. ]\n", + " [ 0.08106732 1. ]\n", + " [ 0.7314334 1. ]\n", + " [-0.59192777 1. ]\n", + " [-0.43610024 1. ]\n", + " [ 0.36425257 1. ]\n", + " [-0.91518784 1. ]\n", + " [ 0.3074093 1. ]\n", + " [-0.43152308 1. ]\n", + " [-0.32482266 1. ]\n", + " [ 0.7852454 1. ]\n", + " [ 0.57705736 1. ]]\n" ] } ], @@ -289,12 +289,12 @@ " y = X\\beta + \\epsilon\n", "$$\n", "\n", - "where $\\beta = [\\beta_0, \\beta_1]$ where $\\beta_0$ a slope relating x and y abd $\\beta_1$ is an offset bias, and $\\epsilon$ is an uncorrelated noise modeled as a normal distribution, $\\mathcal{N}(0, 1)$." + "where $\\beta = [\\beta_0, \\beta_1]$ where $\\beta_0$ is an offset bias and $\\beta_1$ a relating x and y, and $\\epsilon$ is an uncorrelated noise modeled as a normal distribution, $\\mathcal{N}(0, 1)$." ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 4, "id": "7bf67529", "metadata": {}, "outputs": [], @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 5, "id": "5a6d3ce8", "metadata": {}, "outputs": [], @@ -317,23 +317,23 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 6, "id": "462c84ec", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "<matplotlib.collections.PathCollection at 0x7f8b306678b0>" + "<matplotlib.collections.PathCollection at 0x7fbd01976f40>" ] }, - "execution_count": 19, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAc/klEQVR4nO3dfZAlVXkG8OdhGGBQ46yyURhYd4mKsSTZ1Sk/somG9WOJWrAiBkiR+JXaaBJLygQdgn+YlBabbFU0qVjRLUWTSJAEZCRBXcFdigrlIjNZZPlaXVGEK8r4MUZkxGF588ftCz13uvt23z7dfU7f51e1tTN97+0+0z3z9ulz3nMOzQwiIhKuI5ougIiIlKNALiISOAVyEZHAKZCLiAROgVxEJHBHNnHQ4447ztavX9/EoUVEgjU/P/9DM1vbv72RQL5+/XrMzc01cWgRkWCRvDdpu5pWREQCp0AuIhI4BXIRkcApkIuIBE6BXEQkcI1krYiItM3s/g527j6I7y0u4YTJCVy49RRs2zRVy7EVyEVESprd38FFnzuApeXDAIDO4hIu+twBAKglmDtpWiE5SfJKkneTvIvky1zsV0QkBDt3H3w8iPcsLR/Gzt0Hazm+qxr5PwD4kpmdTfIoAMc62q+IiPe+t7hUaLtrpWvkJJ8K4OUAPgkAZvZLM1ssu18RkVCcMDlRaLtrLppWNgBYAPApkvtJfoLkkxzsV0QkCBduPQUT42Mrtk2Mj+HCrafUcnwXgfxIAC8E8M9mtgnAzwHM9L+J5HaScyTnFhYWHBxWRMQP2zZN4ZKzTsXU5AQIYGpyApecdWptWSssu2YnyWcC2Gdm66PvfwfAjJm9Lu0z09PTpkmzRESKITlvZtP920vXyM3s+wDuI9l7hnglgDvL7ldERPJxlbXyLgCXRRkr9wB4q6P9iojIAE4CuZndCmBVdV9ERKqnuVZERAKnQC4iEjjNtSIirdXkRFZ1UiAXkVYqMpFV6AFfTSsi0kp5J7LqBfzO4hIMTwT82f2dGktbjgK5iLRS3omsmp650AUFchFppbwTWTU9c6ELCuQi0kp5J7JqeuZCFxTIRaSV8k5k1fTMhS4oa0VEnPEt+2PbpqmBx++97lO5i1IgFxEnml63sow8Ad9naloRESfakP0RKgVyEXGiDdkfoVIgFxEn2pD9ESoFchFxog3ZH6FSZ6eIONGG7I9QOQnkJL8D4GcADgN4NGlNORFpv9CzP0LlskZ+mpn90OH+REQkB7WRi4gEzlUgNwBfJjlPcnvSG0huJzlHcm5hYcHRYUVExFXTym+bWYfkrwK4juTdZnZj/A1mtgvALgCYnp42R8cVkSH4NpQ+VL6cRyeB3Mw60f8PkrwawIsB3Jj9KRFpQshD6X3i03ks3bRC8kkkn9L7GsBrANxedr8iUg0NpXfDp/Pookb+DABXk+zt79/N7EsO9isiFdBQejd8Oo+lA7mZ3QPgNx2URURqcMLkBDoJwUZD6Yvx6Twq/VBkxGgovRs+nUcN0RcZMRpK74ZP55Fm9WcCTk9P29zcXO3HFREJGcn5pClQ1LQiIhI4BXIRkcCpjVxEaufLiMi2UCAXkVr5NCKyLdS0IiK1ShsRecEVt2Lzjj2Y3d9pqGThUiAXkVpljXzs1c4VzItRIBeRWg0a+ah5X4pTIBeRWiWNiOwXyrwvs/s72LxjDzbMXNtos5A6O0WkVvERkUlzlQD55itpOvOlaKdtleVVIBeRoZQJTL1FmvuDIZBvvhIfMl+yprHtL0PV5VXTiogU1gtMncUlGIbvpNy2aQqXnHUqpiYnQABTkxO45KxTBwY3H+YCLzKNbdXlVY1cRAorUhsdpFc7L8KHucCLTGNbdXmdBXKSYwDmAHTM7PWu9iviq6bbaJvUdCBtYi7w/ut92vPW4qr5Tq5moarL67Jp5d0A7nK4PxFvuWpaCEV/dsZTJ8YT31fXogp1zwWedL2vmu/gjS+aytUsVHV5ndTISZ4I4HUAPgTgPS72KeIzl00LRTTxFJDUUTc+RowfQSw/9sQ02HUuqlD3XOBp13vv3Qu4aWZL4+V11bTyEQDvBfCUtDeQ3A5gOwCsW7fO0WFFmtFE00JTmRpJQWz5sGHNseM49qgj0Vlcwhi5ovOujiamYdrWh+XieldZ3tJNKyRfD+BBM5vPep+Z7TKzaTObXrt2bdnDijQqrQmhyqaFpjI10oLV4sPLjzcZHI4WqPGlicn1QJ0mrncRLtrINwM4g+R3AHwWwBaSn3GwXxFvNbFeY1MdjFlBzIc0wH5V9F/4tD5nktKB3MwuMrMTzWw9gHMB7DGz80uXTMRjw+Y/l9FUrTAriDWdvZKkiptLE9e7COWRiwypzjZaoBtQhxkFWVZWR13aMPu0m0sdnbVV3Vzqvt5FOA3kZnYDgBtc7lNEuppctT0tiBW5udTVWdtEjnnTVCMXCYhvtcIiN5e6UjabenJpkgK5iJSSdHNJakKpqz296JNLG0boKpCLiFNpTShPnRjH4tLyqvdX0eSR98nFh1kUXVAgl5HUhlpYE/Kct7QmlGPGj8DE+JhXTR5NjdB1TYFcRk5bamF1y3vesgYQfficjYVuoFXfcH1MnxyGArmMnLbUwuqW97xlZY0U6azNunH0ylM2wJfNcPHlyU4LS8jIaUstrG55z5urUZBpN44PXHOHs5GbZcrq0wyYCuQycnyfN8NXec+bq1GQqU00S8vORm6WKatP0xOoaUVGzijmGbtQ5Ly5yHdPa/ZIM+wT1bBl9enJTjVyGTm+z5vhq7rPW1qzx5pjm13UYtDxmniyU41cRlLdIyR96RQrW5Zhz9swx0wb2APAiycqn57sFMhFKuZTumMTZRnmmP2B/8PnbEzMV2/yxtjk3Df9aGaD3+XY9PS0zc3N1X5cEReK1i4379iT2NY7NTmRa5kwl5ooS9Fj9gd+oFvTVfMXQHLezKb7t6tGXiGfHqfFjWFqlz51ijVRlqLHVJ5/cersrIhPOabizjApZz51ijVRlqLH9OnGFwoF8or4lGMq7gwTZHxaJqyJshQ9pk83vlC4WHz5GJJfI/l1kneQ/GsXBQudahXtNEyQ8SndsYmyFD2mTze+ULhoI38EwBYze4jkOID/IflFM9vnYN/BGsVVSkIzTB/GsClnPi0I0URZihzTp2yQUJQO5NZNe3ko+nY8+ld/KoxnfMoxldWGTcNTkKmHTze+EDhJPyQ5BmAewLMBfNTM3pfwnu0AtgPAunXrXnTvvfeWPq7vlLXiL59SAkXyqjT90MwOA9hIchLA1SRfYGa3971nF4BdQDeP3MVxfadahb/UhyFt4jSP3MwWSe4FcDqA2we9X6QpdfVhtOmprE0/S9u4yFpZG9XEQXICwKsB3F12vyJVqiMzok1jCdr0s7SRizzy4wHsJXkbgFsAXGdm/+1gvyKVKZOGN7u/g8079mDDzLXYvGNPajBr01iCtJ/lgituzTwHUg8XWSu3AdjkoCwitRqmD6NItktae3uRObZ9kdV3oDVPm6eRnRK0vLVjV4rUstPa2wkEV4Md1HcQ6pNGWyiQS7CaaLctku1y4dZTwIT3GlA46NV9w+qX1KfQTxk/zVEgl2A10QZdZIj+tk1TqSPjigQ9Hzoa430KaTRquTkK5BKsJnLBi2S7zO7vYIxJdfJiQc+XTtNtm6Zw08wWfOScjZoLxTOaj1yC1cR8NnmH6Pdq0YcTRk4XDXq+DV7SNAX+USCXYDU1n02ebJekWjQAjJGFZxv0cQI2jVr2i5pWJFg+TQ/bL622/JhZ4fJpWlcZRDVyCVpSzdCHoeQua9Gj1pThw/ULjQK5tIovK9a7bvYZlaYMX65faNS0Iq1SNsPDVb62z80+PvMlQyc0qpFLq5TJ8HBdGwy9Ft1EE4dvGTqhUI1cWqXMwr2qDT6hqUFIWnh5OArk4p0yzRtlMjxUG3xCUzc1ZegMR00r4pWyzRtlMjx8zNduSlM3tVHL0HFFgVy8klUTLLIK+zB/+Fow+wlN3tRC71togosVgk4iuZfknSTvIPluFwWT0ZQ1h3fVs/4p0+QJauIIi4sa+aMA/sLM/pfkUwDMk7zOzO50sG8ZMWk1QaB4M8swWRdtrg0WOR9q4giLixWCHgDwQPT1z0jeBWAKgAK5FJbUvBEX73DLCjIaWLLSMOejzTe1tnGatUJyPbrLvt2c8Np2knMk5xYWFlweVlokz7zXncUlXHjl1zNT45RKuJLOR7s5C+QknwzgKgAXmNn/9b9uZrvMbNrMpteuXevqsNJCvXmvs4L58uGV08P2ByWlEq6k89FuTgI5yXF0g/hlZvY5F/sUybO8WFw8KGlgyUo6H+3mImuFAD4J4C4z+/vyRZKqNL3uY1G9Zpa84kFJWRcr6Xy0m4uslc0A/hDAAZK3Rtv+ysy+4GDf4kionX/bNk1h5+6DqZksPf1Bqe1ZF++fPYDLb74Ph80wRuK8l5yED25Lv+m1/XyMOlrCUlRVm56etrm5udqPO8o279iTGAynJidw08yWx7/3cS7o/psQAIwfQTz5mCOx+PCyN+V0Le1avH/2AD6z77ur3n/+S9dlBnMJH8l5M5vu366RnSMiT2eXr7X2Ntcm04J11rW4/Ob7Evd1+c33KZCPKAXyEZFnyLWL4fFVaWNOc1awzroWSQs6A0jdLu2n2Q9HRJ7OLqWo1SsrWGddizEy8bW07dJ+CuQjIs88IiGmqIWWiROXFayzrsV5Lzkp8bW07dJ+aloZIYOaJ0Kb/e/9swdw2b7voteg4Eubfl5ZzV1Z16L3sxXJWpF2UyCXx4XUqTi7v7MiiPf40qafR55gnXYtPrjtVAVueZwC+YgZlF4YSqfizt0HVwXxnlDa9AcF61CuhTRPgXyE+JpeOIysYO1zm34/BWtxQZ2dKULuREvTphnwsoL1zx95tFXXTWQQBfIETa0gXrU2pRemTah1BIHFpeVWXTeRQRTIE7Sp5hoXYnphmqR0yjXHjuOxvobzrOvWxqcuGU1qI0/QppprXGjphYP0ty9vmLk28X1J161N/QUiqpEnaFPNNa7tiwsXuW5tfeqS0aQaeYK21Vzj2pwlUeS6tfWpS0aTauQJ2l5zbasi1y2t9m6A2sslOJqPXEZS0hzncRPjY7p5i3fS5iN3tWbnpSQfJHm7i/2JVC1ee0+i9nIJiaumlU8DON3RvqQGSr3rBvObZrYgbfJXtZdLKJwEcjO7EcCPXexLqtfWAU/DamuWkoyO2jo7SW4nOUdybmFhoa7DSgKl3q104dZTMH7Eynr5+BFsRZaSjIba0g/NbBeAXUC3s7Ou48pqSr1L0N++UnCxHR8XrZbRofTDEaSmhJV27j6I5cMr6xbLhy33E0qRpir1TUgVFMhHUJ71O0dJ2SeUvE1V6puQqrhKP7wcwFcBnELyfpJvd7FfqYYGPK1U9gkl741AfRNSFSdt5GZ2nov9SH3aPFS/qLJTMmStvRmnvgmpippWZOSVfULJ21SlvgmpiibNqoEyGvxX5gkl76LVbZ6MTZqluVYqljSnB9GdnGlKQX3k6KYuZaTNtaIaecWSOrh6t84iixkoALSD+iakCmojr9igjqw8WQtKWxORLArkGVwM3sjTkTUo2CttTUSyKJCncFULTlvtPW5QsFfamohkURt5iqxacJE2znhGQ2dx6fGOzp48WQuTx47jJw8vr9ruIm2tbNv7MJ9vS3t/kZ+jLT+z+EmBPIXLWnC8g6voH/Ts/g4e+sWjq7aPj5Wfna/sSvLDfL4tq9cX+Tna8jOLv9S0kqKqwRu9xQy+veN1uGlmy8A/5J27D2L5sdUpok866sjSQaBs2/swn29Le3+Rn6MtP7P4SzXyFE0M3kiqrac9Afx0aXVTS5H9bts0lbrvzuISZvd3Bt4ohnlqaUt7f5Gfoy0/s/hLNfIUdU8slda5OnnseOL78z4ZZHXaZu0jT8fuME8tbRmmXuTnaMvPLP5SIM9QtBmkjLTHbzOUmnI267E+K6NmafkwLrji1sy0y2Gmw23LFLpFfo62/MziLwVyT2Q1oZR5Msh6rO89dWTJSrsc5qmlLVPoFvk52vIzi78014onNu/YkzgV6tTkBG6a2VLpftPe47IcIlJe2lwrrhaWOJ3kQZKHSM642OeoqerxO89+8wxaUseciL9KZ62QHAPwUQCvBnA/gFtIXmNmd5bd9yjJOxVqFfvtH7SURB1zIv4q3bRC8mUAPmBmW6PvLwIAM7sk7TNtbFppy8i9pGl3J8bH1KYr4oEqp7GdAnBf7Pv7AbwkoQDbAWwHgHXr1jk4rD9CH7nXfxN644umsPfuheBvSiKjorYBQWa2C8AuoFsjr+u4dXA1L0sTkm5CV813VAMXCYiLzs4OgJNi358YbRsZae3KIXQQavi4SPhc1MhvAfAckhvQDeDnAvgDB/sNwuz+zqoZDXtC6CDU8PGutvRxyGgqHcjN7FGSfw5gN4AxAJea2R2lSzaAL394O3cfTAziBIIYuXfC5ETiE0UINyFXQu/jEHGSR25mXzCz55rZr5nZh1zsM4tPS5+l1VwNYQQBDR9X85KEL8gh+j794aXVXKcCqdFq+LialyR8QU5j69MfXhPT3bo26iu7q3lJQhdkjdynaUF9rNG6WDR6lKh5SUIXZI38tOetxWX7vlt47cuq+FSjVcddcVVNjyBSl+AC+ez+Dq6a76wI4gTwxhf5E0ybFPLgpCb5dDMWKSq4ppWkQGUA9t690EyBPONT/4GI1CO4GrkvgcqXPPZ+6rgTGT3B1ch96Oj0KY+9nzruREZPcIG8yUDVywa54Ipbvcljj+s9JSwtH8YYCcCPLBoRqVZwTStNZRgkzdPdr8l26P7yHTZ7/AanIC7SbsEE8qbbpJM6Wfs12Q6tbBWR0RVEIPchN3pQbbvpdmhfOoFFpH5BtJH7MLdKVm3bh3ZoHzqBRaQZQQRyH2qbaZ2sHzlnI26a2dJ484WyVURGVxBNKz7kRvs+jNv38olIdWhW//KZ09PTNjc3l/v9WtldRAQgOW9m0/3bSzWtkHwTyTtIPkZy1c5d8XGGQRERX5RtWrkdwFkAPu6gLJk0qZGISLJSgdzM7gIARqMIRUSkfrVlrZDcTnKO5NzCgmYqFBFxZWCNnOT1AJ6Z8NLFZvb5vAcys10AdgHdzs7cJRQRkUwDA7mZvaqOgoiIyHCCGBAkIiLpyqYfvoHk/QBeBuBakrvdFEtERPIqm7VyNYCrHZVFRESGEMQQ/SKanu5WRKRuQQbytGDtw3S3IiJ1Cy6QZwVrLa4gIqMouECeFayLTnerZhgRaYPg0g+zgnWRxRV6NfvO4hIMT9TsZ/d3XBZXRKRywQXyrGBdZHEFH1YdEhFxIbhAnhWsi0x368OqQ3nM7u9g84492DBzLTbv2KMnBhFZJbg28kEr4fRPd9sLhP3v9WHVoUGUhSMieQSxQtCwslYWAuD9qkObd+xJvNlMTU7gppktDZRIRJpUyQpBvhuUjuj7qkOhNP+ISLOCa1opYlAgLLrqUN3piiE0/4hI81pdIy+SjjhIE+mKRbJwRGR0tTqQuwyETaQrhtD8IyLNa3XTyqAMlyKaaq/WotMiMkirAzngLhCqvVpEfFV2YYmdJO8meRvJq0lOOirX0KoaQKP2ahHxVdk28usAvMDMfgPANwBcVL5Iw6uyQ1Lt1SLiq7IrBH059u0+AGeXK045VU9jq/ZqEfGRy6yVtwH4YtqLJLeTnCM5t7Cw4PCwT9AAGhEZRQMDOcnrSd6e8O/M2HsuBvAogMvS9mNmu8xs2sym165d66b0fVzmjYuIhGJg04qZvSrrdZJvAfB6AK+0JiZuiblw6ymJ86eoQ1JE2qxUGznJ0wG8F8ArzOxhN0Uansu8cRGRUJSa/ZDkIQBHA/hRtGmfmb1j0Ofqmv1QRKRN0mY/LJu18uwynxcRkfJaPdeKiMgoUCAXEQmcArmISOAUyEVEAtfImp0kFwDcm+OtxwH4YcXFGZbKVpyv5QJUtmH4Wi6gvWV7lpmtGlHZSCDPi+RcUqqND1S24nwtF6CyDcPXcgGjVzY1rYiIBE6BXEQkcL4H8l1NFyCDylacr+UCVLZh+FouYMTK5nUbuYiIDOZ7jVxERAZQIBcRCVzjgZzkm0jeQfIxkqkpOSRPJ3mQ5CGSM7HtG0jeHG2/guRRDsv2NJLXkfxm9P+ahPecRvLW2L9fkNwWvfZpkt+OvbaxrnJF7zscO/Y1se1Nn7ONJL8aXffbSJ4Te835OUv73Ym9fnR0Hg5F52V97LWLou0HSW4tW5aC5XoPyTujc/QVks+KvZZ4bWss21tILsTK8Mex194cXf9vknxzzeX6cKxM3yC5GHut6nN2KckHSd6e8jpJ/mNU9ttIvjD2WrlzZmaN/gPw6wBOAXADgOmU94wB+BaAkwEcBeDrAJ4fvfYfAM6Nvv4YgHc6LNvfAZiJvp4B8LcD3v80AD8GcGz0/acBnF3BOctVLgAPpWxv9JwBeC6A50RfnwDgAQCTVZyzrN+d2Hv+FMDHoq/PBXBF9PXzo/cfDWBDtJ+xGst1Wux36Z29cmVd2xrL9hYA/5Tw2acBuCf6f0309Zq6ytX3/ncBuLSOcxbt/+UAXgjg9pTXX4vucpgE8FIAN7s6Z43XyM3sLjM7OOBtLwZwyMzuMbNfAvgsgDNJEsAWAFdG7/sXANscFu/MaJ959302gC9a9YtsFC3X43w4Z2b2DTP7ZvT19wA8CKCa9f9SfncyynwlgFdG5+lMAJ81s0fM7NsADkX7q6VcZrY39ru0D8CJjo5dumwZtgK4zsx+bGY/AXAdgNMbKtd5AC53dOyBzOxGdCtyac4E8K/WtQ/AJMnj4eCcNR7Ic5oCcF/s+/ujbU8HsGhmj/Ztd+UZZvZA9PX3ATxjwPvPxepfnA9Fj1EfJnl0zeU6ht0Fr/f1mnvg2Tkj+WJ0a1ffim12ec7SfncS3xOdl5+ie57yfLbKcsW9HSsXN0+6tq7kLdsbo+t0JcmTCn62ynIhaobaAGBPbHOV5yyPtPKXPmelFpbIi+T1AJ6Z8NLFZvb5OsqQJqts8W/MzEim5mpGd9ZTAeyObb4I3WB2FLq5o+8D8Dc1lutZZtYheTKAPSQPoBukSnF8zv4NwJvN7LFo89DnrK1Ing9gGsArYptXXVsz+1byHirxXwAuN7NHSP4Juk80W2o8/iDnArjSzA7HtjV9zipTSyC3AQs459ABcFLs+xOjbT9C9/HkyKgm1dvupGwkf0DyeDN7IAo6D2bs6vcBXG1my7F992qmj5D8FIC/rLNcZtaJ/r+H5A0ANgG4Ch6cM5K/AuBadG/m+2L7HvqcpUj73Ul6z/0kjwTwVHR/t/J8tspygeSr0L1BvsLMHultT7m2roLSwLKZ2Y9i334C3b6R3md/t++zN9RVrphzAfxZfEPF5yyPtPKXPmehNK3cAuA57GZbHIXuRbrGuj0Fe9FtmwaANwNwWcO/Jtpnnn2vao+LAlmvXXobgMTe7CrKRXJNr1mC5HEANgO404dzFl3Dq9FtL7yy7zXX5yzxdyejzGcD2BOdp2sAnMtuVssGAM8B8LWS5cldLpKbAHwcwBlm9mBse+K1dVSuvGU7PvbtGQDuir7eDeA1URnXAHgNVj6lVlquqGzPQ7fT8KuxbVWfszyuAfBHUfbKSwH8NKq4lD9nVfbi5vkH4A3otgk9AuAHAHZH208A8IXY+14L4Bvo3kEvjm0/Gd0/rkMA/hPA0Q7L9nQAXwHwTQDXA3hatH0awCdi71uP7l31iL7P7wFwAN1g9BkAT66rXAB+Kzr216P/3+7LOQNwPoBlALfG/m2s6pwl/e6g21xzRvT1MdF5OBSdl5Njn704+txBAL/n+Hd/ULmuj/4meufomkHXtsayXQLgjqgMewE8L/bZt0Xn8hCAt9ZZruj7DwDY0fe5Os7Z5ehmYC2jG9PeDuAdAN4RvU4AH43KfgCxLL2y50xD9EVEAhdK04qIiKRQIBcRCZwCuYhI4BTIRUQCp0AuIhI4BXIRkcApkIuIBO7/AbD57RrvT+FXAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -371,7 +371,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 7, "id": "61ad3658", "metadata": {}, "outputs": [ @@ -379,7 +379,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2.9267178 1.855265 ]\n" + "[3.0753026 1.8672338]\n" ] } ], @@ -390,13 +390,13 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 8, "id": "2430ba06", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -424,15 +424,227 @@ "id": "380ba33a", "metadata": {}, "source": [ - "# TBC..." + "# Gradient Descent\n", + "\n", + "Minimize the error metric, in this case MSE:\n", + "$$\n", + " MSE = \\frac{1}{n}\\Sigma^n_{i=1}(\\hat{y_i}-y_i)^2\n", + "$$" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "cbd1bd0d", "metadata": {}, "outputs": [], + "source": [ + "def mse(y_hat, y): return jnp.power(y_hat - y, 2).mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "97540a87", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9.145107\n" + ] + } + ], + "source": [ + "test = jnp.array([-1., 1.])\n", + "print(mse(x@test, y))" + ] + }, + { + "cell_type": "markdown", + "id": "699cb172", + "metadata": {}, + "source": [ + "Now we can use the power of JAX for automatic differentiation" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5c497e02", + "metadata": {}, + "outputs": [], + "source": [ + "from jax import grad" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "48ec93e0", + "metadata": {}, + "outputs": [], + "source": [ + "def predict(beta, x): return x @ beta\n", + "def loss_fn(beta, x, y=y): return mse(predict(beta, x), y)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "0ab92e2f", + "metadata": {}, + "outputs": [], + "source": [ + "grad_loss_fn = grad(loss_fn, argnums=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4dad4a6b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[-1. 1.] [-3.3981533 -2.7396417]\n" + ] + } + ], + "source": [ + "print(test, grad_loss_fn(test, x))" + ] + }, + { + "cell_type": "markdown", + "id": "5ca4a041", + "metadata": {}, + "source": [ + "We will find the optimal value of $\\beta$ by iteratively updating it with the old value subtracted by a learning rate times the derivative of the loss function w.r.t. $\\beta$, i.e.:\n", + "\n", + "$$\n", + " \\beta_{n+1} = \\beta_{n} - \\gamma \\frac{\\partial\\mathcal{L}(\\beta)}{\\partial\\beta}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "af4d03ca", + "metadata": {}, + "outputs": [], + "source": [ + "def gradient_descent(beta, lr=1e-1, x=x, y=y): return beta - lr * grad_loss_fn(beta, x, y=y)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "70d53e9e", + "metadata": {}, + "outputs": [], + "source": [ + "beta_gd = jnp.array([-1., 1.])\n", + "lr = 5e-2" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "b2ec519b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 [0.17539409 1.7678423 ]\n", + "10 [1.766862 2.0548797]\n", + "20 [2.4689775 1.9785113]\n", + "30 [2.7926652 1.9215833]\n", + "40 [2.9433815 1.8928522]\n", + "50 [3.0137112 1.8792199]\n", + "60 [3.0465453 1.8728325]\n", + "converged -> relative error: 0.0009619885240681469)\n" + ] + } + ], + "source": [ + "for epoch in range(200):\n", + " if (epoch % 10) == 0: print(epoch, beta_gd)\n", + " \n", + " beta_new = gradient_descent(beta_gd)\n", + " \n", + " rel_err = np.sqrt(np.mean((beta_gd - beta_new)**2))\n", + " \n", + " if rel_err < 1e-3:\n", + " print(f\"converged -> relative error: {rel_err})\")\n", + " break\n", + " \n", + " beta_gd = beta_new" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9cb25f99", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DeviceArray([3.0570934, 1.8707792], dtype=float32)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "beta_gd" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "079e59f7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(x[:, 0], y)\n", + "\n", + "xs = np.linspace(-1, 1)\n", + "xs = np.stack([xs, np.ones_like(xs)], axis=1)\n", + "ys_true = xs@beta_true\n", + "ys_fit = xs@beta_gd\n", + "plt.plot(xs[:, 0], ys_true, color='k', lw=2, label=\"True\")\n", + "plt.plot(xs[:, 0], ys_fit, color='orange', lw=1, label='Gradient Descent fit')\n", + "plt.legend();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a2afcb6e", + "metadata": {}, + "outputs": [], "source": [] } ], |