diff --git a/doc/pub/week40/html/._week40-bs001.html b/doc/pub/week40/html/._week40-bs001.html
index 59d315e61..65a59cfb5 100644
--- a/doc/pub/week40/html/._week40-bs001.html
+++ b/doc/pub/week40/html/._week40-bs001.html
@@ -339,7 +339,9 @@ MathJax.Hub.Config({
- Stochastic Gradient descent with examples and automatic differentiation
- - Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ - Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ - Video of lecture
+ - "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2023/NotesOct5.pdf
- Readings and Videos:
- These lecture notes
diff --git a/doc/pub/week40/html/week40-reveal.html b/doc/pub/week40/html/week40-reveal.html
index f0a25f5a1..f2e6c76fe 100644
--- a/doc/pub/week40/html/week40-reveal.html
+++ b/doc/pub/week40/html/week40-reveal.html
@@ -222,6 +222,10 @@ MathJax.Hub.Config({
- Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+- Video of lecture
+
+- "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2023/NotesOct5.pdf
+
- Readings and Videos:
diff --git a/doc/pub/week40/html/week40-solarized.html b/doc/pub/week40/html/week40-solarized.html
index 8c7c57f23..0b0ee1ee8 100644
--- a/doc/pub/week40/html/week40-solarized.html
+++ b/doc/pub/week40/html/week40-solarized.html
@@ -295,7 +295,9 @@ MathJax.Hub.Config({
- Stochastic Gradient descent with examples and automatic differentiation
- - Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ - Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ - Video of lecture
+ - "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2023/NotesOct5.pdf
- Readings and Videos:
- These lecture notes
diff --git a/doc/pub/week40/html/week40.html b/doc/pub/week40/html/week40.html
index cb0187b6a..1daf0eb0f 100644
--- a/doc/pub/week40/html/week40.html
+++ b/doc/pub/week40/html/week40.html
@@ -372,7 +372,9 @@ MathJax.Hub.Config({
- Stochastic Gradient descent with examples and automatic differentiation
- - Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ - Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ - Video of lecture
+ - "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2023/NotesOct5.pdf
- Readings and Videos:
- These lecture notes
diff --git a/doc/pub/week40/ipynb/ipynb-week40-src.tar.gz b/doc/pub/week40/ipynb/ipynb-week40-src.tar.gz
index 289359a68..ae359a73a 100644
Binary files a/doc/pub/week40/ipynb/ipynb-week40-src.tar.gz and b/doc/pub/week40/ipynb/ipynb-week40-src.tar.gz differ
diff --git a/doc/pub/week40/ipynb/week40.ipynb b/doc/pub/week40/ipynb/week40.ipynb
index 9a1dfc983..8793fb0fb 100644
--- a/doc/pub/week40/ipynb/week40.ipynb
+++ b/doc/pub/week40/ipynb/week40.ipynb
@@ -2,8 +2,10 @@
"cells": [
{
"cell_type": "markdown",
- "id": "c410abdb",
- "metadata": {},
+ "id": "5e0e70d9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
@@ -12,8 +14,10 @@
},
{
"cell_type": "markdown",
- "id": "ffdc5797",
- "metadata": {},
+ "id": "e55708b1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"# Week 40: Gradient descent methods (continued) and start Neural networks\n",
"**Morten Hjorth-Jensen**, Department of Physics, University of Oslo, Norway and Department of Physics and Astronomy and Facility for Rare Ion Beams, Michigan State University, USA\n",
@@ -23,8 +27,10 @@
},
{
"cell_type": "markdown",
- "id": "4bab315b",
- "metadata": {},
+ "id": "61cd0b77",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Plans for week 40\n",
"\n",
@@ -44,7 +50,11 @@
"\n",
" * Stochastic Gradient descent with examples and automatic differentiation\n",
"\n",
- " * Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model. \n",
+ " * Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.\n",
+ "\n",
+ " * [Video of lecture](https://youtu.be/75pr3hKY20U)\n",
+ "\n",
+ " * \"Whiteboard notes at \n",
"\n",
" * Readings and Videos:\n",
"\n",
@@ -67,8 +77,10 @@
},
{
"cell_type": "markdown",
- "id": "1ba76140",
- "metadata": {},
+ "id": "2d29f596",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Summary from last week, using gradient descent methods, limitations\n",
"\n",
@@ -87,8 +99,10 @@
},
{
"cell_type": "markdown",
- "id": "a8b56c00",
- "metadata": {},
+ "id": "2fd3582c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Overview video on Stochastic Gradient Descent\n",
"\n",
@@ -97,8 +111,10 @@
},
{
"cell_type": "markdown",
- "id": "eba32497",
- "metadata": {},
+ "id": "8b66d4a6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Batches and mini-batches\n",
"\n",
@@ -116,8 +132,10 @@
},
{
"cell_type": "markdown",
- "id": "55578599",
- "metadata": {},
+ "id": "f66592fc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Stochastic Gradient Descent (SGD)\n",
"\n",
@@ -146,8 +164,10 @@
},
{
"cell_type": "markdown",
- "id": "140607b7",
- "metadata": {},
+ "id": "8579605c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Stochastic Gradient Descent\n",
"\n",
@@ -161,8 +181,10 @@
},
{
"cell_type": "markdown",
- "id": "c1a00332",
- "metadata": {},
+ "id": "a241b669",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"C(\\mathbf{\\beta}) = \\sum_{i=1}^n c_i(\\mathbf{x}_i,\n",
@@ -172,8 +194,10 @@
},
{
"cell_type": "markdown",
- "id": "2c04bdee",
- "metadata": {},
+ "id": "c2b272cc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Computation of gradients\n",
"\n",
@@ -183,8 +207,10 @@
},
{
"cell_type": "markdown",
- "id": "087684a4",
- "metadata": {},
+ "id": "28bf4ae5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\nabla_\\beta C(\\mathbf{\\beta}) = \\sum_i^n \\nabla_\\beta c_i(\\mathbf{x}_i,\n",
@@ -194,8 +220,10 @@
},
{
"cell_type": "markdown",
- "id": "e0362df4",
- "metadata": {},
+ "id": "d8aadc3d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Stochasticity/randomness is introduced by only taking the\n",
"gradient on a subset of the data called minibatches. If there are $n$\n",
@@ -206,8 +234,10 @@
},
{
"cell_type": "markdown",
- "id": "24051a4e",
- "metadata": {},
+ "id": "874c962f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## SGD example\n",
"As an example, suppose we have $10$ data points $(\\mathbf{x}_1,\\cdots, \\mathbf{x}_{10})$ \n",
@@ -226,8 +256,10 @@
},
{
"cell_type": "markdown",
- "id": "7723f927",
- "metadata": {},
+ "id": "4b45bf8b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\nabla_{\\beta}\n",
@@ -239,8 +271,10 @@
},
{
"cell_type": "markdown",
- "id": "59221981",
- "metadata": {},
+ "id": "3cd5f271",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The gradient step\n",
"\n",
@@ -249,8 +283,10 @@
},
{
"cell_type": "markdown",
- "id": "a7d27b48",
- "metadata": {},
+ "id": "9b2e441b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\beta_{j+1} = \\beta_j - \\gamma_j \\sum_{i \\in B_k}^n \\nabla_\\beta c_i(\\mathbf{x}_i,\n",
@@ -260,8 +296,10 @@
},
{
"cell_type": "markdown",
- "id": "c7595344",
- "metadata": {},
+ "id": "0a8f7dc4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $k$ is picked at random with equal\n",
"probability from $[1,n/M]$. An iteration over the number of\n",
@@ -272,8 +310,10 @@
},
{
"cell_type": "markdown",
- "id": "0d7024b5",
- "metadata": {},
+ "id": "df7f8fc6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Simple example code"
]
@@ -281,8 +321,11 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "0f9dc38b",
- "metadata": {},
+ "id": "69a76043",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np \n",
@@ -303,8 +346,10 @@
},
{
"cell_type": "markdown",
- "id": "df447303",
- "metadata": {},
+ "id": "e23c73f4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Taking the gradient only on a subset of the data has two important\n",
"benefits. First, it introduces randomness which decreases the chance\n",
@@ -317,8 +362,10 @@
},
{
"cell_type": "markdown",
- "id": "976aef35",
- "metadata": {},
+ "id": "3a803678",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## When do we stop?\n",
"\n",
@@ -336,8 +383,10 @@
},
{
"cell_type": "markdown",
- "id": "0fab1ae1",
- "metadata": {},
+ "id": "0a1fbe83",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Slightly different approach\n",
"\n",
@@ -354,8 +403,10 @@
},
{
"cell_type": "markdown",
- "id": "2db0116b",
- "metadata": {},
+ "id": "17c5ae48",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Time decay rate\n",
"\n",
@@ -371,8 +422,11 @@
{
"cell_type": "code",
"execution_count": 2,
- "id": "a9ca6f9a",
- "metadata": {},
+ "id": "0642c400",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import numpy as np \n",
@@ -403,8 +457,10 @@
},
{
"cell_type": "markdown",
- "id": "fcf9b69b",
- "metadata": {},
+ "id": "afc9e6aa",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Code with a Number of Minibatches which varies\n",
"\n",
@@ -413,37 +469,13 @@
},
{
"cell_type": "code",
- "execution_count": 1,
- "id": "861b050f",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[3.63874668]\n",
- " [3.37526214]]\n",
- "Eigenvalues of Hessian Matrix:[0.3264563 4.16231773]\n",
- "theta from own gd\n",
- "[[3.63874668]\n",
- " [3.37526214]]\n",
- "theta from own sdg\n",
- "[[3.61336727]\n",
- " [3.40721708]]\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHFCAYAAADxOP3DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABY+ElEQVR4nO3dd3xT5eIG8CdtacsohZbVEWhV9miZglCGMkRAoEBwIc6rggPBQUUvoIwfXBVQVC5XBFeRAGW4UIQWUEGZZS8tUEYpsy2FljZ5f3/EhKZN2iQ9JznJeb6fTz+1Jycn7zlJPA/v1AghBIiIiIhUys/TBSAiIiLyJIYhIiIiUjWGISIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1hiEiBVqyZAk0Go3lJyAgABEREXjggQdw7Ngxj5VrypQp0Gg0Hnt9b3DixAloNBq8++67ni4KETkowNMFICL7Fi9ejGbNmqGgoAC//fYbpk+fjtTUVBw+fBi1a9f2dPGIiHwCwxCRgrVq1QodOnQAAPTs2RMGgwGTJ0/G6tWr8fjjj3u4dORJRUVFllpDIqocNpMReRFzMDp//rxlW0FBASZMmID4+HiEhoYiLCwMXbp0wZo1a8o8X6PR4Pnnn8eXX36J5s2bo1q1aoiLi8N3331XZt/vv/8e8fHxCAoKQmxsrN1mn4KCAiQlJSE2NhaBgYGIiorC2LFjcfXqVav9YmJiMHDgQHz33Xdo27YtqlatiubNm1tee8mSJWjevDmqV6+OTp06YceOHRVeD3NzYmpqKp577jnUqVMH4eHhSExMxNmzZ8uc+5QpU8ocIyYmBo899liZY27cuBFPP/00wsPDUbNmTTz66KPIz89HVlYWdDodatWqhYiICLzyyisoKioqc1yj0Yjp06ejYcOGCA4ORocOHbBhw4Yy+x07dgwPPfQQ6tWrh6CgIDRv3hwfffSR1T5paWnQaDT48ssvMWHCBERFRSEoKAjHjx/H9evX8corryA2NhbBwcEICwtDhw4dsHTp0gqvHxGZ8J8URF4kIyMDANCkSRPLtsLCQly+fBmvvPIKoqKicPPmTfzyyy9ITEzE4sWL8eijj1od4/vvv8f27dvx9ttvo0aNGpg9ezaGDh2KI0eO4LbbbgMAbNiwAYMHD0aXLl3wzTffwGAwYPbs2VYhDACEEBgyZAg2bNiApKQkJCQkYO/evZg8eTK2bt2KrVu3IigoyLJ/eno6kpKSMGnSJISGhmLq1KlITExEUlISNmzYgBkzZkCj0eD111/HwIEDkZGRgapVq1Z4XZ566ikMGDAAycnJyMzMxKuvvopHHnkEGzdudPlaP/XUU0hMTMQ333yD3bt344033kBxcTGOHDmCxMRE/Otf/8Ivv/yCWbNmITIyEuPHj7d6/vz589GoUSPMnTsXRqMRs2fPRv/+/bFp0yZ06dIFAHDw4EHcddddaNiwId577z00aNAAP/30E1588UVcvHgRkydPtjpmUlISunTpggULFsDPzw/16tXD+PHj8eWXX2LatGlo27Yt8vPzsX//fly6dMnlcydSHUFEirN48WIBQGzbtk0UFRWJvLw8sW7dOtGgQQPRvXt3UVRUZPe5xcXFoqioSDz55JOibdu2Vo8BEPXr1xe5ubmWbVlZWcLPz0/MnDnTsu3OO+8UkZGR4saNG5Ztubm5IiwsTJT838a6desEADF79myr11m2bJkAIBYuXGjZ1qhRI1G1alVx+vRpy7Y9e/YIACIiIkLk5+dbtq9evVoAEGvXrnXoOo0ZM8Zq++zZswUAce7cOatznzx5cpljNGrUSIwePbrMMV944QWr/YYMGSIAiPfff99qe3x8vGjXrp3l74yMDAHA7vXr3bu3ZVu/fv1EdHS0yMnJsTrm888/L4KDg8Xly5eFEEKkpqYKAKJ79+5lyt+qVSsxZMiQMtuJyHFsJiNSsM6dO6NKlSoICQnBvffei9q1a2PNmjVl+oksX74cXbt2RY0aNRAQEIAqVapg0aJFOHToUJlj9urVCyEhIZa/69evj3r16uHkyZMAgPz8fGzfvh2JiYkIDg627BcSEoJBgwZZHctc81KymQkARowYgerVq5dpFoqPj0dUVJTl7+bNmwMw9YeqVq1ame3mMlXk/vvvt/q7TZs2Tj3floEDB1r9bS7TgAEDymy39Tr2rt/mzZthMBhQUFCADRs2YOjQoahWrRqKi4stP/fddx8KCgqwbds2q2MOGzaszOt06tQJP/74IyZOnIi0tDTcuHHD5XMmUiuGISIF++KLL7B9+3Zs3LgRzzzzDA4dOoQHH3zQap+UlBTodDpERUXhq6++wtatW7F9+3Y88cQTKCgoKHPM8PDwMtuCgoIsN9ErV67AaDSiQYMGZfYrve3SpUsICAhA3bp1rbZrNBo0aNCgTFNNWFiY1d+BgYHlbrdVfltKn5O5aa4ywcCZstoqp73rd/PmTVy7dg2XLl1CcXExPvzwQ1SpUsXq57777gMAXLx40er5ERERZY75wQcf4PXXX8fq1avRq1cvhIWFYciQIR6dgoHI27DPEJGCNW/e3NJpulevXjAYDPj000+xYsUKDB8+HADw1VdfITY2FsuWLbOaA6iwsNCl16xduzY0Gg2ysrLKPFZ6W3h4OIqLi3HhwgWrQCSEQFZWFjp27OhSGeQQFBRk85rI1bfG3vULDAxEjRo1UKVKFfj7+2PUqFEYO3aszWPExsZa/W1rjqfq1atj6tSpmDp1Ks6fP2+pJRo0aBAOHz4szckQ+TjWDBF5kdmzZ6N27dr497//DaPRCMB0gwwMDLS6UWZlZdkcTeYI82iulJQUqxqPvLw8fPvtt1b73nPPPQBMgayklStXIj8/3/K4EsTExGDv3r1W2zZu3Ihr167J8nr2rl9CQgL8/f1RrVo19OrVC7t370abNm3QoUOHMj+2avHKU79+fTz22GN48MEHceTIEVy/fl3q0yLySawZIvIitWvXRlJSEl577TUkJyfjkUcewcCBA5GSkoIxY8Zg+PDhyMzMxDvvvIOIiAiXm0reeecd3HvvvejTpw8mTJgAg8GAWbNmoXr16rh8+bJlvz59+qBfv354/fXXkZubi65du1pGk7Vt2xajRo2S6tQrbdSoUXjrrbfw73//Gz169MDBgwcxf/58hIaGyvJ6/v7+6NOnD8aPHw+j0YhZs2YhNzcXU6dOtewzb948dOvWDQkJCXjuuecQExODvLw8HD9+HN9++61Do+HuvPNODBw4EG3atEHt2rVx6NAhfPnll+jSpYtVPywiso9hiMjLvPDCC5g/fz7efvttPPjgg3j88ceRnZ2NBQsW4LPPPsNtt92GiRMn4vTp01Y3Xmf06dMHq1evxptvvomRI0eiQYMGGDNmDG7cuGF1TI1Gg9WrV2PKlClYvHgxpk+fjjp16mDUqFGYMWOG1bB6T3v11VeRm5uLJUuW4N1330WnTp2g1+sxePBgWV7v+eefR0FBAV588UVkZ2ejZcuW+P7779G1a1fLPi1atMCuXbvwzjvv4M0330R2djZq1aqFxo0bW/oNVeTuu+/G2rVrMWfOHFy/fh1RUVF49NFHMWnSJFnOi8gXaYQQwtOFICIiIvIU9hkiIiIiVWMYIiIiIlVjGCIiIiJVYxgiIiIiVWMYIiIiIlVjGCIiIiJVU8U8Q0ajEWfPnkVISIjN6eyJiIhIeYQQyMvLQ2RkJPz85Ku/UUUYOnv2LLRaraeLQURERC7IzMxEdHS0bMdXRRgKCQkBYLqYNWvW9HBpiIiIyBG5ubnQarWW+7hcVBGGzE1jNWvWZBgiIiLyMnJ3cWEHaiIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1hiEiIiJSNY+Hoc2bN2PQoEGIjIyERqPB6tWr7e77zDPPQKPRYO7cuW4rHxEREfk2j4eh/Px8xMXFYf78+eXut3r1avzxxx+IjIx0U8mIiIhIDQI8XYD+/fujf//+5e5z5swZPP/88/jpp58wYMAAN5WMiIiI1MDjNUMVMRqNGDVqFF599VW0bNnS08UhIiIiH+PxmqGKzJo1CwEBAXjxxRcdfk5hYSEKCwstf+fm5spRNCIiIvIBiq4Z2rlzJ+bNm4clS5ZAo9E4/LyZM2ciNDTU8qPVamUsJREREXkzRYehLVu2IDs7Gw0bNkRAQAACAgJw8uRJTJgwATExMXafl5SUhJycHMtPZmam+wpNREREXkXRzWSjRo1C7969rbb169cPo0aNwuOPP273eUFBQQgKCpK7eEREROQDPB6Grl27huPHj1v+zsjIwJ49exAWFoaGDRsiPDzcav8qVaqgQYMGaNq0qbuLSkRERD7I42Fox44d6NWrl+Xv8ePHAwBGjx6NJUuWeKhUREREpBYeD0M9e/aEEMLh/U+cOCFfYYiIiEh1FN2BmoiIiEhuDENERESkagxDREREpGoMQ0RERKRqDENERESkagxDREREpGoMQ0RERKRqDENERESkagxDREREpGoMQ0RERKRqDENERESkagxDREREpGoMQ0RERKRqDENERESkagxDREREpGoMQ0RERKRqDENERESkagxDREREpGoMQ0RERKRqDENERESkagxDREREpGoMQ0RERKRqDENERESkagxDREREpGoMQ0RERKRqAZ4uABEREfk4gwHYsgU4dw6IiAASEgB/f0+XyoJhiIiIiOSTkgK89BJw+vStbdHRwLx5QGKi58pVApvJiIiISB4pKcDw4dZBCADOnDFtT0nxTLlKYRgiIiIi6RkMphohIco+Zt42bpxpPw9jGCIiIiLpbdlStkaoJCGAzEzTfh7GMERERETSO3dO2v1kxDBERERE0ouIkHY/GTEMERERkfQSEkyjxjQa249rNIBWa9rPwxiGiIiISHr+/qbh80DZQGT+e+5cRcw3xDBERERE8khMBFasAKKirLdHR5u2K2SeIU66SERERPJJTAQGD+YM1ERERKRi/v5Az56eLoVdbCYjIiIiVWMYIiIiIlXzeBjavHkzBg0ahMjISGg0GqxevdryWFFREV5//XW0bt0a1atXR2RkJB599FGcPXvWcwUmIiIin+LxMJSfn4+4uDjMnz+/zGPXr1/Hrl278NZbb2HXrl1ISUnB0aNHcf/993ugpERERCUYDEBaGrB0qem3AtbYItdohLC1gppnaDQarFq1CkOGDLG7z/bt29GpUyecPHkSDRs2dOi4ubm5CA0NRU5ODmrWrClRaYmISLVSUkyLkJZceys62jSvjkKGi/sCd92/PV4z5KycnBxoNBrUqlXL7j6FhYXIzc21+iEiIpJESgowfHjZRUjPnDFtT0nxTLnIZV4VhgoKCjBx4kQ89NBD5SbEmTNnIjQ01PKj1WrdWEoiIvJZBoOpRshWo4p527hxbDLzMl4ThoqKivDAAw/AaDTi448/LnffpKQk5OTkWH4yMzPdVEoiIvJpW7aUrREqSQggM9O0H3kNr5h0saioCDqdDhkZGdi4cWOF7YZBQUEICgpyU+mIiEg1zp2Tdj9SBMWHIXMQOnbsGFJTUxEeHu7pIhERkVpFREi7n9oYDIpclsPjYejatWs4fvy45e+MjAzs2bMHYWFhiIyMxPDhw7Fr1y589913MBgMyMrKAgCEhYUhMDDQU8UmIiI1SkgwjRo7c8Z2vyGNxvR4QoL7y6Z0Ch6B5/Gh9WlpaejVq1eZ7aNHj8aUKVMQGxtr83mpqano6eA6JxxaT0REkjGPJgOsA5FGY/qtoNXYFcN8zUpHjgqumbvu3x4PQ+7AMERERJKyVcuh1QJz5zIIlWYwADEx9juem2vTMjLKNJm56/7t8WYyIiIir5OYCAwerMj+L4rjzAg8D61szzBERETkCn9/j928vYoXjMDzmnmGiIiIyAt5wQg8hiEiIiKSj3kEnrmzdGkajam/lQdH4DEMERERkXz8/U3D54Gygcj899y5Hu1vxTBERERE8kpMNA2fj4qy3h4drYipCNiBmoiIiOSn4BF4DENERETkHgodgcdmMiIiIlI1hiEiIiJSNTaTERERkXtw1XoiIiJSLQWvWs9mMiIiIpKXedX60muUnTlj2p6S4ply/YNhiIiIiORjMJhqhIQo+5h527hxpv08hGGIiIiI5OPMqvUewjBERERE8uGq9URERKRqXLWeiIiIVI2r1hMREZGqcdV6IiIiUj2uWk9ERESqx1XriYiISPW4aj0RERGR8jAMERERkaqxmYyIiMgbKXQFeG/EMERERORtFLwCvDdiMxkREZE3UfgK8N6IYYiIiMhbeMEK8N6IYYiIiMhbeMEK8N6IYYiIiMhbeMEK8N6IYYiIiMhbeMEK8N6IYYiIiMhbeMEK8FIRRoE9y4645bUYhoiIiLyFJ1aANxiAtDRg6VLTbxk7Z5sD0Bt3paFx0Cn0+FdT2V6rJM4zRERE5E3MK8Dbmmdo7lxp5xlyw3xGwiiwd8VR6Oedw/LtjXCsqCkAUwgKwnkUSvIq5dMIYWt8nm/Jzc1FaGgocnJyULNmTU8Xh4iIqPLknoHaPJ9R6ZhgroFascLlQCSMAvtXHYN+7lno/2iEo0WxlseCcQP3RaZDN9yIhOdjENUkSvb7N8MQERERWTMYgJgY+8P4NRpTDVFGhmMB7J/glvntbvzyiwbvHroPB4uawA8GJGALGuIkGoblo9UDrTFgUjxCIkMAuO/+zWYyIiIisubMfEY9e5Z7qMykj1Dz/akIvXkBWgCPA+iN97AMOjzm9xXqGLNNO14GsDYauMf9S4owDBEREZG1Ss5ndOi7v7D8/Uxc3rIf7xe/CMC6ESoapzEB70NjLPVE85IilWiCc4XHR5Nt3rwZgwYNQmRkJDQaDVavXm31uBACU6ZMQWRkJKpWrYqePXviwIEDniksERGRGrgwn9GRH//GO/ekoXXwMbQYdDumpiZgQvEsAKJM2ND881OGh5YU8XgYys/PR1xcHObPn2/z8dmzZ+P999/H/PnzsX37djRo0AB9+vRBXl6em0tKRETkxZwZIu/gfEZHr0djep80xFU9gmb33YZ/b+yJ/YWNEYAivBr6P2hx2vmg4YElRTzeTNa/f3/079/f5mNCCMydOxeTJk1C4j/VZZ9//jnq16+P5ORkPPPMM+4sKhERkXdydoi8eT6j4cNNwafEWCsB098Tsl7FnAF3ALgDABCAIvSpuwcjBhZgyFutUXtbKPBQJcrsxiVFPF4zVJ6MjAxkZWWhb9++lm1BQUHo0aMHfv/9d7vPKywsRG5urtUPERGRKpmHyJfuEG3un5OSYvt55vmMoqKsNmciGsOwEnOKXoA/itEvfAcWPbYF549fww/ZHfH4ZwmoHVur8kuCuHFJEUWHoaysLABA/fr1rbbXr1/f8pgtM2fORGhoqOVHq9XKWk4iIiJFMhhMNUK2ZtGpoH/O32mnMOt/Yeh48Uf0RCoeRDJ6IhV34Bjywxvif49uwfmjuVh3sQOeWJyAsNtrWx+goqY2ezywpIjHm8kcoSl1IYUQZbaVlJSUhPHjx1v+zs3NZSAiIiL1cXKI/IlfT2P5zOPQp9XDjustADQEAPjBgLvD9uDhAflYMeka6jTtUPFrl9PUZpdcS4pUQNFhqEGDBgBMNUQRJarLsrOzy9QWlRQUFISgoCDZy0dERKRoDva7+e7lDXj7WF1sz28JIBqAKQD1qp2OEf2vIfHNFqjbvL3zr29v6RCtFnjgAVNnbrmXFHGAosNQbGwsGjRogPXr16Nt27YAgJs3b2LTpk2YNWuWh0tHRESkcA72u3l3zz3YjpbwgwE9au2Frn8eEic1R72W7SpfhsREYPBg20uHzJwp75IiDvJ4GLp27RqOHz9u+TsjIwN79uxBWFgYGjZsiHHjxmHGjBlo3LgxGjdujBkzZqBatWp46KHKdFEnIiJSAXO/nTNnbDZTGaHBaUTDr2YIPuq/CYlvNEeDNm2lL4e/v+2Zqu1tdzOPh6EdO3agV69elr/NfX1Gjx6NJUuW4LXXXsONGzcwZswYXLlyBXfeeSd+/vlnhISEeKrIRETkC8pb6FTuRVDd5MzubOyO/BcGnJ4MAQ38SswEbYQGGgiEvDsFGye40ATmQ7hQKxERleUjYcCulBTgxRdNNSZmUVHABx+Y/tuZOXkU5uyuLKyccQT69bXwa24cAGAoUjAPL0GLUv12PNA/xxnuun8zDBERkTVnJ+jzNikpwLBhzj3HPMqpsmtmyRQyz+05j5XTD0P/cy38mtvaagGMriF7oetzBcNeux1RN457VcBlGJIQwxAReT131dSYJ+grfWuQKgx4msEA1K8PXLrk/HM1GlMozMhw7dpLHDKz9mYjZcYh6NeFYnNOG6sA1KXGPuh6X8bwN5oguqP7Ji+UGsOQhBiGiMiruaumxmAAYmLsz0tT2TCgBBs2AL17V+4YqanOd/qVKGSe338BKdMPQb8uBJuvtoERt96HzjX2YcTdlzB8YmM07NTAJ5o53XX/9ngHaiIiKoe9m6h5KQUpa2qcnKDPK6WlVf4Yzq6ZVdEs0BqNaRbowYNtBpYLhy4iZdpB6H+sgbQrcTCiu+WxTtX3Q9frIoZPvAONurY2bUxJAWJ8uJlTBgxDRERKVcmbqNMcvcm7cQFNRXJ2zSwXQubFI5eQ8s4BLP+xOjZejrcKQB2rH8CIHhcwIukOxHRrZX0sd4ZnH8IwRESkVO6uqXH0Ju/GBTQl17MnMG2aa881NxM6u2aWg+Exb/cxLFvsD/131bDxchwMJQJQ+2oHoeuRjRETb0ds95a2D+Du8OxDGIaIiJTK3TU1FUzQ53IYcAdHO5j37AmEhzvfgboya2Y5GB6HjL8NG3Hr2rategi67ucx4rVY3H53CwAtyj+ArzRzlnwv3dTPl2GIiEip3F1TU97Cmh5aQNMhznQw9/cHFi4sf2j9q69Ku2aWg7NAp6En4qsehi4hCyNei8Ud9zQH0Nzx15EiPHt6filb76U7CBXIyckRAEROTo6ni0JE5LjiYiGio4XQaIQw3UatfzQaIbRa035SWrnS9LolX0urNW1XmpUrbV8fjcb0Y6/Mts4xOvrW/sXFQqSmCpGcbPpdyWuc9/EXwggIQ6lyGqARBmjE8jZTxZF1f1fqNURqqu3PSemf1FTbz6/omsjNxnuZA7jl/s2h9URESmbuEAvYrqmRq0Osp2sIHFHZqQBkPsecUzlYM20f9GsC8XN2PAbiuzKzQBfViUCV/86X5j00X4+KmjltXQ9Pzy9l573MBRAKcJ4hKTAMEZFXs9V04AVLKcguLQ0osbalXa7MC+Si3NO5WDt9H/SrAvDT+XjcRJDlsZZBxzCyyyk82jcLjWL8rAOYVMHMlfCshPml7LyX7gpD7DNERKR0iYmmEUBKr6mxR64aGIVMBZB7OhffzjAFoHVZ8biJrpbHmgf+hZF3ZWLEy9FocX9jAI3LHkDKSTUTE02Bx9bx7IVnJXS89vB0DQxDRETewN9f2SOA7JFz9mwPTgWQdzYP383cB/1KP/x4Lh6FJQJQs8C/oOucCd34aLQcfAeA2+0fSI55gZwNz0oIlR6eroHNZEREJA+5+6FUpo+MC65lXcN3M/ZCv8IPP56LQwGqWh5rUiUDIzufxIiXItFqaGNo/DSOl9/Ty58oobnRznvJPkMSYhgiInIzd93oZe5gnp+dj+9npkO/XIPvz8RbBaA7qpzAyE4noBsXidaJDgagkt5+G5g8ueL95O7z5OZQaZeN99JdYciv4l2IiIic5Ew/lMow95GJirLeHh3tchDKz87H8vFbodNuRd36GoycexdWnumCAlTF7QEnkdQlDbu/OYKjBY0w7deeaDO8ifNBKCXFsSAEyNc8ZTCYaoX0euDpp2/NUl2SO+eXsvdeugH7DBERkfTc2Q9Fgg7m1y9ex4+z0qFfJvBdZhyuo4vlsdsCTkLXIQO6FxsgfmRTaPwaVa685mUzHCVHfxpbfbnCw02/S87O7chkk1J2kC/9XtasCQwc6NqxnMAwRERE0vPE7NlONiXduHwD62alQ/+NEd+eaoP8EgEoNuAURrT7G7oX6qPdQ80qH4BKqqjWrCStVvrlT+z15bp82fR76lSgcWPHgo0cHeRLvpe5ua4dw0kMQ0REJD2FrnNWcLXAFICWFuPbk21wDZ0tjzXyPw1du+PQPV8P7R9pDo1fQ3kK4UxtmNTNU44s5vrpp471D5JjJJyHMAwREZH0FLTOWcHVAvz8n3Tok4ux9kRr5OFOy2Na/zPQxR+DbmxddBzdAhq/aNnL43Bt2NSp0ocJqeYUciRUjRtnavLygvmwGIaIiEgerkwAKJHC3EJTAPr6JtZktLEKQNH+Z6GLP4oRz9bBnU+0hMbPzR12K6o1A0yPT5ok/WtL1ZdLCRM1SohhiIjIU7xh/a/KcuPs2Tev3cT6d9Oh/7IQq/9ujVx0sjwW5XcOI+KOQvdsGO58oiX8AiIlf32HOVJrNm+ePJ8FqfpyKWGiRgkxDBEReYKcMzMrjYyzZ9+8dhO/vPdPAPqrNXLQ0fJYpN85jGhzFCP+VRtdnm4FvwAnO2vLGVY9VWsmVV8uD87+LQdOukhE5G6eXiHcyxVdL8KG99Oh/+IGVh1vjauiluWxCL8sDG91BLpnauOuf7WCX4CL0+m5K6x6onZQiokq3TRRo7vu3wxDRETupJQlGLxM0fUibJyTDv3nN7DqeCtcEbUtjzXwO49hLQ9D93QtdH2mFfwDK3nd1BBWbYU9rda5WimZZ/8GGIYkxTBERIpRmXWg1NDHqITigmKkzk2Hfkk+Uo62wmURZnmsnuYChrc8CN1Toej2XOvKByAzNYVVKT5PUoSqcrjr/s0+Q0RE7uRqx1OV9DEqLihG2gd7oV98DSlHWuKSaG95rK7mAoY1PwTd49XQPS4H/hezgQgBSJlJfGyUVLmk6Mvlxg7ycmIYIiJyJ1c6nvrQ5Ha2FBcUY/NH+6BflIeVh1vgomhneayO5iKGNTsI3ZMh6D62NQJ+uChvKPSxUVJuIWMHeXdhMxkRkTs52/FUzmYbDza7GW4asHn+Xiz/LA8rDzZHtqhreSxccwmJTQ9AN7oqerXLhf+lbFP5LlwARo6Uty9PZZoxSXJsJiMi8kXOzswsV7ONB5rdDDcN+PWTfdB/moOVB5vjvLGt5bEwzWUkNtkP3WPV0fPFNqiyzkYNkL+//DMeK3QZEZKXi2MOiYjIZeY5ZqJKzXwcHV22dkOOZhtzs1vpkGVudktJcfxYFTDcNGDzh+l4oc0mRFe9iJ7j4vHx/h44b6yH2poreKLxFqybtgNZ10Lwv8Pd0Wdie1RZ963t8hkM9l+oZCisDHNYBW6FUzM3LyNC7sOaISKSnspGPbnE0Y6nUk9u54Y1pYzFRvy+cD/0/72CFfub4pwxzvJYLc1VDL1jH3SPVsXd49ogsEapGpbyyucIKfryeHAZEfIM9hkiImmpZNSTXVIHQaknt5OpT4yx2Ihtiw5Av+Aylu9tgrPGW+EsFDkYcvs+6EYFofeEOATWCKx8+SQqd7kY6j2OfYaIyPv4+KinCskRBKVe/V3CZjdjsRF/fGYKQCv2NsZpQ2vLYzWRgyG37cOIhwPR55U4BNXsJm35SpOjL48PjJIixzAMEZE03ND8omhyBUGDAQgLM13br74CLl689ZgrzTaVbHYTRoE/Fx+A/pOLWL6nMTJLBKAQ5GJw7F7oHg5E31edCECulK8k9uWhSmIzGRFJQ81DkuUa/m6rpqluXeDhh02h0pVmGxea3YRRYPvnB7H84wvQ774DpwzRlt1rIA+DY/ZixIMB6PdaHIJrBTtXHmfLB9yacsBMwhmPSVnYTEZE3kXNk9XJMfzdXk3TxYumZjNX+6842OwmNH7Y+cVB6OdnY/nu23GiuKVlt+q4hvsbpUP3YAD6vdoGVcO6Ol+OypTvm2+AOnXYl4ckwzBERNKQetSTN5E6CMrd5GhntJSIjsbfQ1/B/2aHQT8yExnFLQC0AABUQz4GadOhe8AP/SfGSRuAHCwfR3ORXBTfTFZcXIwpU6bg66+/RlZWFiIiIvDYY4/hzTffhJ+fY9MksZmMfIpSR7hIPerJm0jdROiuJkeDAWLTZpxctQs/b/DHf47ej+OG2ywPV0M+BmrToRupQf/X41CtTjXXX8vF8inys05uw2ayf8yaNQsLFizA559/jpYtW2LHjh14/PHHERoaipdeesnTxSNyLyUPW5d61JM3kXrWYpmbHIVRIH35USz/4Bz022NxvOhW8KqK6xgQlQ6dDrhvYhtUr3eXS68hCY7mIjdRfBjaunUrBg8ejAEDBgAAYmJisHTpUuzYscPDJSNyM28Ytq7W5g2pg6AMTY7CKLAv5Rj0c89C/2cjHCtqCqApACAYNzAgag90IwTue70NajTo4vBxiXyB4sNQt27dsGDBAhw9ehRNmjRBeno6fv31V8ydO9fTRSNyH28atu7ozMq+RqogaDDcGk5/+bLtfRysaRJGgf2rjmH5vLPQ/9EQR242AdAEABCEAtwXsQe64UYMfIMBiNRN8WHo9ddfR05ODpo1awZ/f38YDAZMnz4dDz74oN3nFBYWorCw0PJ3bm6uO4pKJB+5FuuUi1qbNyobBG01g5bmQE3TgTXHoX//NPTbtDhcKgD1j9gD3TAjBia1RkhkZ8fPjciHKT4MLVu2DF999RWSk5PRsmVL7NmzB+PGjUNkZCRGjx5t8zkzZ87E1KlT3VxSIhmpedi6t3E1CNprBi3NTk3TwbXHsXzOaei3RuNg4R0A7gAABKIQ9zbYA93QYgx6ozVqRjMAEZWm+NFkWq0WEydOxNixYy3bpk2bhq+++gqHDx+2+RxbNUNarZajych7OTq6aOpU4N//lr04JLGKJm0ETM1mer0paP1TI3T4h7+hf/cU9L9H4UBhY8uuVXAT99bfbQpASa0Q2jBU3vITyYSjyf5x/fr1MkPo/f39YTQa7T4nKCgIQUFBcheNyH0qGq1kNmUK0KqV73ZU9lUVNYMCpv5D/v44+ssp6P9zEvrfIrGvoAkA01D4KriJvvX2QDf4Ju6f1Bq1Gt0pf7mJfITiw9CgQYMwffp0NGzYEC1btsTu3bvx/vvv44knnvB00YjcxzxaadiwivdVSkdqcpyDzZsT++7ErKKeAGIBAAEoQp+6e6C7vxCDJ7VC7dhO8pWRyIcpPgx9+OGHeOuttzBmzBhkZ2cjMjISzzzzDP7NpgBSm8REUzPY5Mn291FaR2pyjIND5LcVtUcAitC7zh7oBhVg8KRWCLu9o8yFI/J9ig9DISEhmDt3LofSEwFA48YV7wOwI7W7SDVD8j/NoOL0GWhQthnUCA0u+tXDow8DK9/KQ3hjBiAiKTm2ngURKYOa1/9SmpQUU6fnXr2Ahx4y/Y6JMW13QsbmTMwetAWvZr8CAVPwKUnANJq+3vKP8cQXPRHeOEyqMyCifyh+NJkUuDYZ+Qw1r/+lJPaGwZvnAKpgNvCTv53G8pnHoU+ri+35t1aDH4YV+FgzFvVE9q2dtVrfnr2bqBzuun87FYYyMzOh1WplK4xcGIbIp5hvxIDtZR+UsCyHL6toGLydQHpq6xksn3EM+tQ6+DO/lWW7HwzoWTsduv7XMPSN5qjXLEx9s3cT2aHIMFS9enWMHz8eEydORPXq1WUrlNQYhsjn2JqpmDUI7uHEivKZVZtgxcyj0G8Ix7ZrrS0PaWBEj1rp0N2bh8RJzVG/VV35ykvkxRQ5z9D69evx8ssvY9GiRZg+fToef/xxucpFROVR6/pfSuBg5/TJ9/6Btwt7AogEYApA3UP3YkTfHAx7szkatGkrXxmJyCku9Rn64osvMGnSJNSpUwdz5sxBT4UP4WXNEBFJxsGaoZ5IxWZ0R7ea+6DrexXDJjVDRHx9+ctH5EPcdf92aTTZo48+iqNHj2LQoEEYMGAAhg4diuPHj0tdNiIiZSmxory9f0UaocF5TX0MG2pE5vbz2JwTh+eX92AQIlIwl4fWCyHQt29f/Otf/8LatWvRqlUrTJgwAXl5eVKWj4hIGVJSYIjSAr17A5cvQwOUCUQCgAZA/RUf44WUuxHVgVMcEHkDp/oMLViwANu3b8f27dtx6NAh+Pv7o02bNhg7dizi4+Px9ddfo0WLFli1ahU6dOggV5mJyBdJNYGhxM7vv4Ddzy5Av98m25wQsSQNO7ETeSWn+gxptVp07tzZ8tOhQ4cyC6LOmDEDycnJ2L9/v+SFdRX7DBEpnK3RcdHRpvXYPBAssg9cQMr0Q9D/GIItV1vib9yOKJy2X5VuY0V5Iqo8RQ6td8T58+cRGRkJg8Eg5WErhWGISMEqOYGhVC4cuohV0w9C/0MNpF6JgxGmUNMDaUiDY0PpuR4ckbQUObTeEfXq1cPGjRulPix5E4U2d/gEX7u2BoOpRsjWv8mEMAWiceNM0wjIcJ4Xj1zCqukHoP++OlIvx8GA7pbHOlQ7CF3PbIxuvx94x4GDcT04Iq8leRjSaDTo0aOH1Iclb6Gw5g6f4ovXdssW+zM5A6ZAlJlp2k+iWpdLxy5j9fQD0H9XFRsuxVsFoHZVD0HX4zxGvH4bbuvZAkALIA2OhSGuB0fktRS/aj15EXvNHWfOmLZzmQjX+eq1dbQ2pZK1Lpf/uoLV0/ZD/21VbLgUh2IkWB5rW/UQdN3PY8Rrsbj97uYAmls/+Z8V5StcDy4hoexjROQVuGo9SaOi5g7A1NyhoL5kXsOXr62jtSku1LpcybiKJU/9ivvqbUf9O2rgySUJ+OlSBxSjCuKCj2B6nzQc/fkEdl1vjonreuL2uxvZP9jTT9sPQoBpBJk3N1cSqRxrhkgaHmjuUA1fvrYS17pcPZmDNdP2Qb8mCOsvxKEI3SyPtQk+ghFdz2HEhIZo2r8pgKYVH9BW02RJ0dEcSk/l87V+fj6KYYik4abmDlVy97V15/+8/f1NfZ6GDzcFn5KByMFal5xTOVg7Yx/0qwLxU3a8VQBqFXQMuq5nMGJCQzS7z8EAZGavadJs6lRg0iTe2Mg+X+zn56PYTEbSkLG5Q/XceW1TUoCYGNPaWw89ZPodE2PaLpfERFOfp6go6+3R0Xb7QuWezsXXY37D4Ig/0KBRFSz6bzFqZP+Fu/A7WgcexpSeaTiw5jj2FTTGWxt6otl9tzlXpvKaJgFTUPv0U+eOSepiDtOlaxXN/fzk/E6R0ySfZ0iJOM+QGxgMpptmRc0dGRn8l7Sz3HVtPT3fTwU1Unln8/Dt9L3QpwRgXVYcChGMoUjBPLwELST+l7eDi7FybiGyyfydtde8yv8fOsxr5xkilZKguaPSfLVtvrLX1pHr4uH5fgCYjlsqWFzLuobvZuyFfoUffjgXj0J0tTz2fMAn+KB4TNnjSDHCzh1Nk776eSXf7ufnq4QK5OTkCAAiJyfH00XxfStXChEdLYTp62760WpN2939utHR8r+uq4qLhUhNFSI52fS7uLji57hybR29Lqmp1vvY+0lNdf2cHZR3Lk988+JvIjFyqwjGdauXb1zlb/Fmt1SR/s1BYSx9XiV/NBrTtXHkutoi9/Xwts8rOSc52bHPT3Kyp0uqeO66fzMMkfRcudFXxsqVppufrRuiRqO8G0xlboTOXFtnrouH/+d97fw1oX/5dzE86ndRFflWL3lHlQzxxl2pYs+yw8JoMJqeIHdYKS42vSe2rl9lw5a3fV7JeQr6x4W3YxiSEMOQG7k7CJlvWnLVEEjNXTdCZ6+LB/7nnX8hXywf/7sYEf27qIZrVi9ze8AJkdQlVexKPnQrAJXkjvBmfq9Kv1+Vea+87fNKrpEzTKsMw5CEGIbcxBNV/970LzB33gidvS5u+p/39UvXxcpXt4qR2t/KBKDYgJPi9TtTxc6vDtoOQJU5P0eVDvN6vbTNvt70eaXKkSNMq5C77t/sQE3S8NRyEd40v5E7O1U6e11k7AB/4/INrJuVDv03Rnx7qg3y0dnyWExAJnTt/sKIsfXQ/pHm0Pg1dOygciyRYW9OmDlzgDp1TK914QJQty4QFmbqAO3s9fCmzytVjnnKCFufKU7UqTgMQ1R5coxEcnSkjTfNb+TOG6Er10XC/3kXXC3AT7PToU8uxtqTbXCtRABq6H8aurbHoXu+HjqMag6Nn9bh41pIHd7KC/M6HfDKK8DSpZWfPM+bPq9UeYmJpv/vcdSg8sla76QQbCaTmdRV/840t3lT27w7m0gqc11c7PdVkFMg1ryxTTwc86sIQY51y5L/aTGhfarY9um+ipvAnCHF6MWKmi/La9Z0trnDmz6vRArAPkMSYhiSmZSdWV3pYOyptnlnQ4O7b4RuuC4FOQXi27f+EKNu2yJq4qp1fvU/I15ulyq2/m+fMBQZJDghOyrbad/RkCrVe8a+JEQOYxiSEMOQzKSq8ahMB2N3z2/kamdxd98IZbguhXmF4rvJf4rRt28RoaUCUJTfWTGubZr4bcFeeQOQlBwN81LW5nlqPi4iL+Ou+zeX46DKk2q5iMougeCuGX0ru2yFrY66Wq18nSorui4OXLeb125iw/vp0H9ZgNV/tcZVUcvyWIRfFka0PgLdM7XR5elW8AvwsiUPHf3clSc5GXjwQeeewxmoiSrkrvs3wxBJwxwQAOuQ4My6VkuXmhYHrYgrNx6pSLXmkFJuhOWsql107yBseD8dy7+4gVXHW+GKqG3ZpYHfeQxveRi6f9VC12dbe18AKqmiMO8IrlFGJAuuTUbeRYqRSN4w0kaq4fE21uFyOzs1XOL0aWDYMDyFJfgCoy3b6/tlY3jLQ9A9XQtdn2kF/8Ae7i6xayoKnuWNTKuIK0P4iUhxvPifc6Q4iYnAiROmfyUnJ5t+Z2Q43vRjnjvGXJtUmkZjak7y5I3HV+aJKWc6BA0AAQ3ewVtogCw813IzUufswZkb4Zi/twe6vxAH/0Avac5JSTHV+vTqZap17NXL9HdKivV+5jAfFWW9XasFXn3V9Nkr/bl01wLERCQ71gyRtCpT4yHjxH+S8YbaKwcYNqTBv5waLj8INEQmTv90AP5973FjySTk7ESg5c0J07kzJ88j8mHsM0TK4+4Oxs6QqrO4BxhuGrB5/l7oF+XBePAQ/otnK36SJ/tnVcRW8xdg2nbmDPDyy6YZo21x5X1SSj8vIhVhnyFSLyXP2uoNtVclGG4asOXjfdB/mouVB5sjW7QFAPSA0bEDKLWGy1ZgDg83/b50qeLnO9q3q6TStZ4Gg2kkmtI+o0TkNIYhUiYldDC2xWAwrUv10kvAV18BFy/eekwhzSaGmwb89t/90P/vKlYcaI7zxnjLY7U1V5DYeD90j1aD+CQKmrNny6/hUmLHYHvNX46EoNJc7dtVzig8T7//ROQ8hiEiR9m6AdatCzz8sKkmy4M1A8ZiI35bsA/6hVex8kBTnDPGWR6rpbmKoXfsg+7RqrhnfByqVPsn4DT/wGtquCzKWwfPFa7UfHlqUWIikg37DBE5orITLcrAWGzE1v/th/6/V7BiXxOcNd66sYciB0Pv2AvdqGDcMz4OgTUCbR+kvP5ZSmyqlGKCRMD1vl1SzTNFRA5x1/3bK4bWnzlzBo888gjCw8NRrVo1xMfHY+fOnZ4uFqlFebUR5m3jxpn2k5mx2Ijf/7sPL7fbhIZB59FtTBt8kN4DZ40RCEUOHr3tV3w3eTuy86pi8bEE9P93R/tBCLA/HQJQdkh6gwbA8uWyn2O5pJiyoDI1X87MM0VEXkPxzWRXrlxB165d0atXL/z444+oV68e/vrrL9SqVcvTRSO1kGqiRRcJo8Afnx2A/pOLWJ7eBKcNrS2P1UQOBt+2D7qHA9HnlTgE1ezm/AuU7p9lrxbs4kVApzPNuzN7tmsnU1lSdOiuTN8uX5lnioisKD4MzZo1C1qtFosXL7Zsi4mJ8VyBSH08cAMURoE/Fx/A8k8uYvmeO3DK0MryWA3kYXDMXugeCkDfV+MQXMuFAGSPI31y/vMfoFOnW8uvuJN5Yk5nl86oWxeYM8c0qWJlmvt8ZJ4pIrKm+D5DLVq0QL9+/XD69Gls2rQJUVFRGDNmDJ5++mm7zyksLERhYaHl79zcXGi1WvYZ8gRfmJulsgvIOkgYBXZ8eQj6+dlYvvsOnDREWx6rgTzc38gUgPq9FofgWsEuv065HD3XunVN72ll3ktXPxv21sGzReo+XV48zxSRN3Jbn9/KL3wvr6CgIBEUFCSSkpLErl27xIIFC0RwcLD4/PPP7T5n8uTJAkCZn5ycHDeWnMTKlUJERwthum2YfqKjTdu9RXGxEL/8IkRYmPV5lPzRaITQak37OsloMIrtnx8Qr3VKFTEBp6wOWx154oGGv4mU17aK65euy3ByNiQn2z/P0j+pqa6/TmU/G7aeHx5u+im5TauV/vO2cqXpPddoyn4ONBrv+nwTKVxOTo5b7t+KD0NVqlQRXbp0sdr2wgsviM6dO9t9TkFBgcjJybH8ZGZmMgy5m/mGYSs4eMsNw9YNV4LzMRqMYudXB8Xrd6aK2ICTVoerhmtipPY3sfLVrSL/Qr6MJ2dHaqrjYSg52bXXkOqzUVxsKm9ysul3cbHtbXKw9dmQI3gRqZy7wpDim8kaNWqEPn364NNPP7Vs++STTzBt2jScOXPGoWNwaL2bKX34sSPNM/Y6EZfm4DIhwiiQvvwo9PPOQb89Fn8VN7I8VhXXMTA6HTodcF9SHKrVqebiiUnAYDCNGis5maQ9rjQLKv2z4QxfaAImUjgux/GPrl274siRI1bbjh49ikaNGtl5Bnmch0dflcuRmYMd6UQcHg4sW2Yqv50boDAK7F1hCkDLtzfCsaKmAJoCMAWgAVH/BKCJbVC9Xhdpzq+y/P2Bjz82jRorj1br2uzUSv5sOEups6QTkdMUH4Zefvll3HXXXZgxYwZ0Oh3+/PNPLFy4EAsXLvR00cgepQ4/dnTm4Ipu2IBp6Qd//zJBSBgF9q86Bv3cs9D/0QhHSwSgYNzAfZHp0A03YkBSG9RooJAAVNqIEabh8//5j+3HNRrXZ6dW6meDiFRN8WGoY8eOWLVqFZKSkvD2228jNjYWc+fOxcMPP+zpopE9Shx+XNHEiRqNaeLEwYOdvmELo8CBNcehn3MGy//Q4vDNJgCaAACCUID+EXugG2bEwKTWCInsLM35yG32bNPw+TFjrFd+d7BZ0C4lfjaISPUU32dICuwz5GZKHH7szPB4wKF9T0z7CkvWR0G/VYtDN2+3bA/GdUyovQT9O2Qj/umOqJ54r/f2JZG6X4wSPxtEpFjsM+TN1N6x0t/f1AfH1iKggOlvdy8C6kxtj05X7sR+AkAWInD7mw/ACNM5BKIQ/ervwYS4DUjY9xH8zp0F1sP0482rmUvdL6a8z4aSF4glIp/mFWuTeZWUlLJrOsXEmLarSWKiqQ9OWFjZx8LD3V8eZ5pnzDds4NYN+h9GaCCgwVjMhz8MGFjvT3zxzK/IPlmAtR+fQY/1b5qCUEnmPklq+wzYY/5sREVZb4+O5orvROQRbCaTkgJXNvcoJV0PJ5tnjv6Ugb2vfYluez9BA2RZdstENL6o+QKidXdh8JutUatRqPXxfWHIuLuovQaViCrkrvs3w5Cz7P0PnDdDa0q8HvaWcfgnnJ379ydY/HtT6LdEIL3ANALMDwb0RCr6hmxDXEIo7pz3EGrfYaNmy01LdhARqQn7DClReXPUhIX5zvwpUlDifDLm5plS72FuUB28bXwT7019xrLNH8XoHb4HukE3MOTN9gi7vXf5x1bTkHEl1OgooQxE5DMYhhxV0Rw1L73k2HF84WboCE+HA3s3y8RE/B3aFtuS1mD/nmL8XtQBWwoSYIQ//FGMe8L3YMSAGxj6ZkuEN+7g+OupZci4I5NWqqEMRORTGIYc4cgcNV9/7dixvP1m6ChPhgMbN8viuhH4Tvssph8ejh3XWwAYB8DUDHZ32B7oBuRj6KSWqNPUiQBUUkJCuSPQLM2C5c3arPTaDkcnrfT1MhCRz2GfIUc42h+kTh3TzMScP8Vz88nYuVkaYeoXNBwrsAaD0at2Okb0v4bEN1ugbvM60r42YHvIeHk3aqXXdiihD5gSykBEbuWuPkMcWu8IR5tyHnnE9LvUcGxVzp9SzvB02a6HwYDi556HrXzvB9O2z6s9h3PpF/DL5XZ45uvu0gUhwPUh4+YQVfomr6Qh+c70AfPlMhCRT2IYcoSjTTmDB3P+lJLcNJ9M5h9nMWdIGsbW+BwB2eegsbOfHwRCrmej3uXDkryuTYmJwIkTplFjycmm3xkZ9s+1oiZYwLRMiMEgV4kd4+k+YEopAxH5JPYZcoQz/UH8/U2hSMl9P5xR2X4siYmyXI8zO85hxYyj0P9SG7/ntQEQiQegkJulM7M2e3LUnTPvrRI6iCuhDETkkxiGHOHsEgJSL2HgKVL1Y5HoepzdlYUV049g+S+18GtuHADTTU8DI7rW3IcR8eeBzQ4cqDI3S6k7OXuqtsPZ91aKDuKVpYQyEJFvEiqQk5MjAIicnJzKHWjlSiGio4Uw/a/Y9KPVmrb7mpUrhdBorM8VMG3TaNx2zmd3Z4kPh6eJhJp7hAYGq6J0DUkX8xLTxOntZ007Fxeb3h9b5TaXXas17ecKW+9/dHTlrkVqqu2ylv5JTXX9NUpz9b01P6/0c935mVBCGYjIbSS7f1eAYchZxcWmG1Nysum3qzdWJTOHCns35sqGigqcSz8vPhqZJnqE7i4TgLrU2CvmDEkTmX+etf3kyt4s7b2/coVDuQOcvddz9b1Vwj8IlFAGInILd4UhDq2nsjywtMT59Cxse3kZ9v5xHanXO2ETelpWhO9cYx9091zC8KQm0N4ZWfHBbDUBabWmpszymvfsNR3NmQO8/LJ8Q7orMyTfWVK8t0qYD0kJZSAi2XE5Dm/nzf+zdlM/lguHLiJl2kGcXfMnnsqfh8E4jcEA3gJwXlMf29qNQfy8J9Coa2vnDuxKp+3yJvMbMaL816tsJ2c7y4QgOrriAOcsKd5bJfSJU0IZiMhnMAzJQekT6FVExlE7Fw5dxKrpB6H/oQZSr8RhMC5iBV4DYB1C6iMbg3dNAc63AhDt9Os4dbN0ZHi7IyoTDmUadVcGR2QREZXBZjKp2athkKPJQy4Szx596dhlrJp2APrvqmHj5TgY/sngfjDgrCYK9cR523MDuWtGYUebjiriDSvSe2pmcCIiF3AGam+kpAn0DAbTTX7pUtNvZ15TgtmjL/91BYse24J76+xA/SY18fQXCVh/uT0MCEDbqocws18aTr23HPXtBSHAfTMKV3bYukZj6pPkDUO6PTEzOFFlVeb/Z0QOYBiSklKWC0hJMf3rv1cv4KGHTL9jYpxb1sGF2aOvZFzF4ie2oH/d7ah/Rw089XkCfrrUAQYEIL7qYczom4Zjv5zEruvNMXFdT0RFOFgpKfckic40CflCgHDTzOBEkpDi/2dEFWCfISm5ewI9W52016yRblVvB/qxXMm4ijXT92P52iCsvxCHItyqHWkTfAS6bucw4pVGaNKvGYBm1sdXSv8VRyfze+89YPx4+Ts5u4O7+igRVUZ5Axuc/f8ZUTnYZ0hK7hySbquTdlQUUFAAXLpk+zkS9QfJOZWDNdP2Qb8mED9nx6MIgZbHWgcfha7rWYyY0BBN+99W/oGU1H/F0eHt3jxKkMibmP//INeUFuQV3HX/ZhhyVnk3Q3fd3O39a8lRLoSx3NO5WDt9H/SrAvDT+XjcRJDlsZZBx6C76wxGjNei+cDbnSuLu+bYcSTEuDo/ERFJzwPznZHycJ4hJapoyLyza5i5orxO2o5ysJku93Quvp1hCkDrsuJxE10tjzUP/Asj78rEiJej0eL+xgAau1YWd8yx4+hUB2w6IlIOT63bR6rEmiFHOTNkXs4aBimGgZfzL6m8s3n4buY+6Ff64cdz8ShEsOWxZoF/Qdc5E7rx0Wg5+I7KlaE0uZqf3DHVAZvOiKTHmiECm8kkVemL6UrbtVw3yKVLTSMqXFGynIClfDeCamHtxhpYllIFP56LQwGqWp7SpEoGRnY+iREvRaLV0MbQ+NkdCK887uhz4O0TbBIplZL6FJLHsJlMSZwZMm/+F4pcywW4OrKqZDPdmjUwPv8i/M6dAQBUBXAXorEM81CAzmhcJQO6TiehGxeJ1omNofGLlaTobufK++YMjnQhko87uh0Q/YPzDDlCSW3X5mHgpee7MdNogPBw0z4lRUejYNFX+H3xEYhhw4B/gpBZFM5gJYbh7/Ef4khBDKb92hNthjfxrpqg0uR835Q0wSaRr+KcWOQmDEOOUMp8OIBjMwgvXAicOAGkpqLwv4uxSTcfD4ivUfeJgdB+9zEEyr7xfhDQaDSIXf4faIRR5pNwEznfN6VMsEnk6xITLf8/Q3Ky6XdGBoMQSYrNZI5wdFI+dy3HUMEIrBs9++PHpO1YviwQ354ajnzUAAD0QBq0kLHZqCLu7mgs5/umpNpCIl8nV7cDon8wDDlCiW3XpYaB3wwJxw9bakA/XuDbk8W4hs6WXRv5n4au3XE82347sMCBY8txA/dER2M53zcl1RYSEVGlsJnMUQpsuy7IK8La9VXxyBsNUWdQZwydfReWnuyKawhBQ//TmNA+DX98dgAZN6Mw+8+euG1kR8cOLPUN3NzRuHSzkrmjsZxrDMn1vjnSd8tbFm8lIlI5Dq13lofnlCnMLcTP/0mH/uubWJPRBnm4dT7R/mehiz8K3XN10OnxlmU7P3tiqKpSptSX431z1+zZREQqxaH1SmDvBurmtuub125i/bvp0H9ZiLV/t0AcriMC59AOxfhbcweGxf8F3bNhuPOJlvALiLR/IHc195W8bufPyzu83VFyvG/umD2biIhkxzBkj4cn07t57SZ+ec8UgFb/1Ro56IihSMFePGjVCVpERUPz5jwgsYdjB5b7Bm7rujnCWzsacwkPIiKvx2YyW9yxhIMNRdeLsOH9dOi/uIFVx1vjqqhleewJzSJ8Kp4yFUOKMsnZbOTKR4pT6hMRUSlcjkNCTl1MN/dxKbpehI1z0qH//AZWHW+FK6K25bEGfucxrOVh6J4MQcJ/BkNzxsP9bspT0XWzRwllJyIiRWKfIU+RewkHAMUFxUidmw79knykHG2Fy6KD5bF6mgsY3vIgdE+FottzreEf2MO0YKG9ICRRmSqtoutmC6fUJyIiBfC6ofUzZ86ERqPBuHHj5HkBmSbTKy4oxi+zd+FfzTejQbUc9E1qj0+PdMdlEYa6mgt4tsVmbHxvN84WhOGjfT3Q46V4+Af6y1omSbny2pxSn4iIFMCraoa2b9+OhQsXok2bNvK9iIST6RUXFGPzR/ugX5SHlYdb4KJoZ3msjuYihjU7CN2TIeg+tjUCgrtXvkzHjjm2nxwcLeOcOUD9+uxoTEREiuE1fYauXbuGdu3a4eOPP8a0adMQHx+PuXPnOvRcl/oMuTgXj+GmAZvn78Xyz/Kw8mBzZIu6lsfCNZeQ2PQAdI/XQM8X2yAg2MEsWlGZSpbNUzUtnpjDiIiIfJq7+gx5TTPZ2LFjMWDAAPTu3bvCfQsLC5Gbm2v14zBHFkIt1cfFcNOATfP2YGzrTYiqegl3T2iLTw50R7aoizDNZTzVdDN+nrkT567VxMJD3dH7tXaOB6GSZXIkt3pqpXQXrhsREZESeEUY+uabb7Br1y7MnDnTof1nzpyJ0NBQy49Wq3XuBR1YwsFw04DNH6bjhTabEF31InqOi8fH+3vgvLEeamuu4InGW7Bu2g5kXQvB/w53R5+J7VGlWhXnylG6TFOnlr+Pp1dKV+CSJURERBVRfJ+hzMxMvPTSS/j5558RHBzs0HOSkpIwfvx4y9+5ubmuBaJSk+kZu3TF74sOQR+3CSv2N8U5Y5xl91qaqxh6xz7oHq2Ku8e1QWANGdakatzYsf082ZGakxASEZGXUXwY2rlzJ7Kzs9G+fXvLNoPBgM2bN2P+/PkoLCyEf6kbbVBQEIKCgir/4v7+MHbrjm2LDkA/+zKW772Is8ZbnbdDkYMht++DblQQek+IkycAleQtK6V7YMkSIiIiVyk+DN1zzz3Yt2+f1bbHH38czZo1w+uvv14mCEnBWGzEH58dgH7BZazY2xinDa0tj9VEDobc9k8AGt8GQTW7Sf76dplXSq+okzJXSiciInKY4sNQSEgIWrVqZbWtevXqCA8PL7O9MoRR4M/FB6D/5CKW72mMzBIBKAS5GBy7F7qHA9H31Tj3BqCSPLHQKpu5iIjIxyk+DMlJGAW2f34Q+o8uYPmeO3DKcCtc1UAeBsfsxYgHA9DvtTgE1/JQACrNEwutyrFALQMXEREphNfMM1QZJecpCKkRgp1fHYJ+fjb0u+7ASUO0Zb/quIb7G6VD92AA+o1viaoHdij3Zu3OhValXqDWXYGLiIi8GhdqlZD5Yo5r/x3WpLdGRnFDy2PVcQ2DGu7FiJF+6D8xDlXDqqrzZu2uBWrdFbiIiMjrMQxJyHwxgRwANVEN+RioTYdupAb9X49DtTrVbu2s1pt1WhrQq1fF+6Wmuj5SzJGV7bVazlJNREQAOAO1LAZH/An9y1uRfR5YduouDPtPF+sgZDCYaoRs5UPzNk/N8Cw3dywG68jK9p6cNJKIiFRJVR2ovzjcqfxkWdHNuuQMz742j4475jByNEitWeN715eIiBRLVTVDFXJH7YhSmecwKr2umJlGY2rCqswcRo4Gqa+/9s3aNyIiUiSGoZK8ZYZnObhjodWEBKBOnYr3u3CBTWVEROQ2DEMluaN2RMnkXmjV3x945BHH9vXF2jciIlIkhqGS3FE7onSJicCJE6ZRY8nJpt8ZGdKNoBs82LH9fLH2jYiIFElVQ+sdHppna54hrVaaGZ7Vzjy8vqL11Ti8nohI9dw1tF5Vo8kclphoqsHgchHSc9f6akRERA5iGLLH3//W8G6uo1U+Z6+P3OurEREROYFhqCJqXJrDGa5eH9a+ERGRQrDPUHnUujSHo3h9iIhIRlybTEIuXUx3LVzqrXh9iIhIZlybzNOcWZpDjXh9iIjIRzAM2aPmpTkcwetDREQ+gmHIHjUvzeEIXh8iIvIRDEP2qH1pjorw+hARkY9gGLKHS3OUj9eHiIh8BMNQeeReuNTb8foQEZEP4NB6R3AG6vLx+hARkQy4NpmSlFyag8ri9SEiIi/GZjIiIiJSNYYhIiIiUjWGISIiIlI1hiEiIiJSNYYhIiIiUjWGISIiIlI1Dq2XAufZISIi8loMQ5WVkgK89BJw+vStbdHRpqUqOAMzERGR4rGZrDJSUoDhw62DEACcOWPanpJya5vBAKSlAUuXmn4bDO4sKREREdnBMOQqg8FUI2RrNRPztnHjTPulpAAxMUCvXsBDD5l+x8RYhyUiIiLyCIYhV23ZUrZGqCQhgMxMYPp0x2uPiIiIyO0Yhlx17pxj+82b51jtEREREXkEw5CrIiIc2+/yZfuPmWuPtmyRpkxERETkNIYhVyUkmEaNaTS2H9dogLAwx47laC0TERERSY5hyFX+/qYmMKBsIDL//dJLjh3L0VomIiIikhzDUGUkJgIrVgBRUdbbo6NN2ydNqrj2SKs11TIRERGRRyg+DM2cORMdO3ZESEgI6tWrhyFDhuDIkSOeLtYtiYnAiRNAaiqQnGz6nZFh2u5I7dHcuZytmoiIyIMUH4Y2bdqEsWPHYtu2bVi/fj2Ki4vRt29f5Ofne7pot/j7Az17Ag8+aPpdMtxUVHvEWaqJiIg8SiOErXHfynXhwgXUq1cPmzZtQvfu3R16Tm5uLkJDQ5GTk4OaNWvKXEI7uH4ZERGRU9x1//a6tclycnIAAGHljNQqLCxEYWGh5e/c3FzZy1Uhc+0RERERKYrim8lKEkJg/Pjx6NatG1q1amV3v5kzZyI0NNTyo9Vq3VhKIiIi8iZe1Uw2duxYfP/99/j1118RHR1tdz9bNUNardazzWRERETkFDaTlfLCCy9g7dq12Lx5c7lBCACCgoIQFBTkppIRERGRN1N8GBJC4IUXXsCqVauQlpaG2NhYTxeJiIiIfIjiw9DYsWORnJyMNWvWICQkBFlZWQCA0NBQVK1a1cOlIyIiIm+n+D5DGjuzNy9evBiPPfaYQ8dQxNB6IiIicgr7DP1D4VmNiIiIvJxXDa0nIiIikhrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREama14Shjz/+GLGxsQgODkb79u2xZcsWTxeJiIiIfIBXhKFly5Zh3LhxmDRpEnbv3o2EhAT0798fp06d8nTRiIiIyMtphBDC04WoyJ133ol27drhk08+sWxr3rw5hgwZgpkzZ1b4/NzcXISGhiInJwc1a9aUs6hEREQkEXfdvxVfM3Tz5k3s3LkTffv2tdret29f/P777x4qFREREfmKAE8XoCIXL16EwWBA/fr1rbbXr18fWVlZNp9TWFiIwsJCy985OTkATAmTiIiIvIP5vi13I5biw5CZRqOx+lsIUWab2cyZMzF16tQy27VarSxlIyIiIvlcunQJoaGhsh1f8WGoTp068Pf3L1MLlJ2dXaa2yCwpKQnjx4+3/H316lU0atQIp06dkvViKk1ubi60Wi0yMzNV1VeK583zVgOeN89bDXJyctCwYUOEhYXJ+jqKD0OBgYFo37491q9fj6FDh1q2r1+/HoMHD7b5nKCgIAQFBZXZHhoaqqoPkVnNmjV53irC81YXnre6qPW8/fzk7eKs+DAEAOPHj8eoUaPQoUMHdOnSBQsXLsSpU6fw7LPPerpoRERE5OW8IgyNHDkSly5dwttvv41z586hVatW+OGHH9CoUSNPF42IiIi8nFeEIQAYM2YMxowZ49Jzg4KCMHnyZJtNZ76M583zVgOeN89bDXje8p63V0y6SERERCQXxU+6SERERCQnhiEiIiJSNYYhIiIiUjWGISIiIlI1rwxDH3/8MWJjYxEcHIz27dtjy5Yt5e6/adMmtG/fHsHBwbjtttuwYMGCMvusXLkSLVq0QFBQEFq0aIFVq1bJVXyXOXPeKSkp6NOnD+rWrYuaNWuiS5cu+Omnn6z2WbJkCTQaTZmfgoICuU/FKc6cd1pams1zOnz4sNV+vvZ+P/bYYzbPu2XLlpZ9vOH93rx5MwYNGoTIyEhoNBqsXr26wuf4wvfb2fP2le+3s+ftK99vZ8/bV77fM2fORMeOHRESEoJ69ephyJAhOHLkSIXPc8d33OvC0LJlyzBu3DhMmjQJu3fvRkJCAvr3749Tp07Z3D8jIwP33XcfEhISsHv3brzxxht48cUXsXLlSss+W7duxciRIzFq1Cikp6dj1KhR0Ol0+OOPP9x1WhVy9rw3b96MPn364IcffsDOnTvRq1cvDBo0CLt377bar2bNmjh37pzVT3BwsDtOySHOnrfZkSNHrM6pcePGlsd88f2eN2+e1flmZmYiLCwMI0aMsNpP6e93fn4+4uLiMH/+fIf295Xvt7Pn7Svfb2fP28zbv9/OnrevfL83bdqEsWPHYtu2bVi/fj2Ki4vRt29f5Ofn232O277jwst06tRJPPvss1bbmjVrJiZOnGhz/9dee000a9bMatszzzwjOnfubPlbp9OJe++912qffv36iQceeECiUlees+dtS4sWLcTUqVMtfy9evFiEhoZKVURZOHveqampAoC4cuWK3WOq4f1etWqV0Gg04sSJE5Zt3vB+lwRArFq1qtx9fOX7XZIj522LN36/S3LkvH3l+12SK++3L3y/hRAiOztbABCbNm2yu4+7vuNeVTN08+ZN7Ny5E3379rXa3rdvX/z+++82n7N169Yy+/fr1w87duxAUVFRufvYO6a7uXLepRmNRuTl5ZVZ7O7atWto1KgRoqOjMXDgwDL/svSkypx327ZtERERgXvuuQepqalWj6nh/V60aBF69+5dZpZ2Jb/frvCF77cUvPH7XRne/P2Wgq98v3NycgCg3EVY3fUd96owdPHiRRgMhjKr1devX7/MqvZmWVlZNvcvLi7GxYsXy93H3jHdzZXzLu29995Dfn4+dDqdZVuzZs2wZMkSrF27FkuXLkVwcDC6du2KY8eOSVp+V7ly3hEREVi4cCFWrlyJlJQUNG3aFPfccw82b95s2cfX3+9z587hxx9/xFNPPWW1Xenvtyt84fstBW/8frvCF77fleUr328hBMaPH49u3bqhVatWdvdz13fca5bjKEmj0Vj9LYQos62i/Utvd/aYnuBqGZcuXYopU6ZgzZo1qFevnmV7586d0blzZ8vfXbt2Rbt27fDhhx/igw8+kK7gleTMeTdt2hRNmza1/N2lSxdkZmbi3XffRffu3V06pqe4WsYlS5agVq1aGDJkiNV2b3m/neUr329Xefv32xm+9P12la98v59//nns3bsXv/76a4X7uuM77lU1Q3Xq1IG/v3+ZtJednV0mFZo1aNDA5v4BAQEIDw8vdx97x3Q3V87bbNmyZXjyySeh1+vRu3fvcvf18/NDx44dFfMvicqcd0mdO3e2Oidffr+FEPjss88watQoBAYGlruv0t5vV/jC97syvPn7LRVv+35Xhq98v1944QWsXbsWqampiI6OLndfd33HvSoMBQYGon379li/fr3V9vXr1+Ouu+6y+ZwuXbqU2f/nn39Ghw4dUKVKlXL3sXdMd3PlvAHTvxgfe+wxJCcnY8CAARW+jhACe/bsQURERKXLLAVXz7u03bt3W52Tr77fgGm0xvHjx/Hkk09W+DpKe79d4Qvfb1d5+/dbKt72/a4Mb/9+CyHw/PPPIyUlBRs3bkRsbGyFz3Hbd9zhrtYK8c0334gqVaqIRYsWiYMHD4px48aJ6tWrW3rVT5w4UYwaNcqy/99//y2qVasmXn75ZXHw4EGxaNEiUaVKFbFixQrLPr/99pvw9/cX//d//ycOHTok/u///k8EBASIbdu2uf387HH2vJOTk0VAQID46KOPxLlz5yw/V69etewzZcoUsW7dOvHXX3+J3bt3i8cff1wEBASIP/74w+3nZ4+z5z1nzhyxatUqcfToUbF//34xceJEAUCsXLnSso8vvt9mjzzyiLjzzjttHtMb3u+8vDyxe/dusXv3bgFAvP/++2L37t3i5MmTQgjf/X47e96+8v129rx95fvt7Hmbefv3+7nnnhOhoaEiLS3N6nN7/fp1yz6e+o57XRgSQoiPPvpINGrUSAQGBop27dpZDcsbPXq06NGjh9X+aWlpom3btiIwMFDExMSITz75pMwxly9fLpo2bSqqVKkimjVrZvXlUgpnzrtHjx4CQJmf0aNHW/YZN26caNiwoQgMDBR169YVffv2Fb///rsbz8gxzpz3rFmzxO233y6Cg4NF7dq1Rbdu3cT3339f5pi+9n4LIcTVq1dF1apVxcKFC20ezxveb/PQaXufW1/9fjt73r7y/Xb2vH3l++3K59wXvt+2zhmAWLx4sWUfT33HNf8UkIiIiEiVvKrPEBEREZHUGIaIiIhI1RiGiIiISNUYhoiIiEjVGIaIiIhI1RiGiIiISNUYhoiIiEjVGIaIiIhI1RiGiIiISNUYhoiIiEjVGIaIyCstXboUwcHBOHPmjGXbU089hTZt2iAnJ8eDJSMib8O1yYjIKwkhEB8fj4SEBMyfPx9Tp07Fp59+im3btiEqKsrTxSMiLxLg6QIQEblCo9Fg+vTpGD58OCIjIzFv3jxs2bKFQYiInMaaISLyau3atcOBAwfw888/o0ePHp4uDhF5IfYZIiKv9dNPP+Hw4cMwGAyoX7++p4tDRF6KNUNE5JV27dqFnj174qOPPsI333yDatWqYfny5Z4uFhF5IfYZIiKvc+LECQwYMAATJ07EqFGj0KJFC3Ts2BE7d+5E+/btPV08IvIyrBkiIq9y+fJldO3aFd27d8d///tfy/bBgwejsLAQ69at82DpiMgbMQwRERGRqrEDNREREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqRrDEBEREakawxARERGpGsMQERERqdr/A5o6PpGbuUMdAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": 3,
+ "id": "e4d2382f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
@@ -517,8 +549,10 @@
},
{
"cell_type": "markdown",
- "id": "97311aec",
- "metadata": {},
+ "id": "c572356e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Replace or not\n",
"\n",
@@ -530,8 +564,10 @@
},
{
"cell_type": "markdown",
- "id": "423ddc16",
- "metadata": {},
+ "id": "b0aa516b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Momentum based GD\n",
"\n",
@@ -543,8 +579,10 @@
},
{
"cell_type": "markdown",
- "id": "a4f85670",
- "metadata": {},
+ "id": "08619582",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t) \\nonumber\n",
@@ -553,8 +591,10 @@
},
{
"cell_type": "markdown",
- "id": "f15ea450",
- "metadata": {},
+ "id": "7d7372e9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -569,8 +609,10 @@
},
{
"cell_type": "markdown",
- "id": "233d7b7e",
- "metadata": {},
+ "id": "050e93c4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we have introduced a momentum parameter $\\gamma$, with\n",
"$0\\le\\gamma\\le 1$, and for brevity we dropped the explicit notation to\n",
@@ -586,8 +628,10 @@
},
{
"cell_type": "markdown",
- "id": "b923e7d5",
- "metadata": {},
+ "id": "00be2dbc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\Delta \\boldsymbol{\\theta}_{t+1} = \\gamma \\Delta \\boldsymbol{\\theta}_t -\\ \\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t),\n",
@@ -596,16 +640,20 @@
},
{
"cell_type": "markdown",
- "id": "60980ded",
- "metadata": {},
+ "id": "d904f864",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we have defined $\\Delta \\boldsymbol{\\theta}_{t}= \\boldsymbol{\\theta}_t-\\boldsymbol{\\theta}_{t-1}$."
]
},
{
"cell_type": "markdown",
- "id": "cc771e70",
- "metadata": {},
+ "id": "784b7aef",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## More on momentum based approaches\n",
"\n",
@@ -618,8 +666,10 @@
},
{
"cell_type": "markdown",
- "id": "859f6ffc",
- "metadata": {},
+ "id": "82032d14",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"m {d^2 \\mathbf{w} \\over dt^2} + \\mu {d \\mathbf{w} \\over dt }= -\\nabla_w E(\\mathbf{w}).\n",
@@ -628,16 +678,20 @@
},
{
"cell_type": "markdown",
- "id": "064cc085",
- "metadata": {},
+ "id": "816e9624",
+ "metadata": {
+ "editable": true
+ },
"source": [
"We can discretize this equation in the usual way to get"
]
},
{
"cell_type": "markdown",
- "id": "47d13c3c",
- "metadata": {},
+ "id": "25e9dbc5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"m { \\mathbf{w}_{t+\\Delta t}-2 \\mathbf{w}_{t} +\\mathbf{w}_{t-\\Delta t} \\over (\\Delta t)^2}+\\mu {\\mathbf{w}_{t+\\Delta t}- \\mathbf{w}_{t} \\over \\Delta t} = -\\nabla_w E(\\mathbf{w}).\n",
@@ -646,16 +700,20 @@
},
{
"cell_type": "markdown",
- "id": "0ca67954",
- "metadata": {},
+ "id": "e3980f85",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Rearranging this equation, we can rewrite this as"
]
},
{
"cell_type": "markdown",
- "id": "ea9f63a8",
- "metadata": {},
+ "id": "7cf7b32b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\Delta \\mathbf{w}_{t +\\Delta t}= - { (\\Delta t)^2 \\over m +\\mu \\Delta t} \\nabla_w E(\\mathbf{w})+ {m \\over m +\\mu \\Delta t} \\Delta \\mathbf{w}_t.\n",
@@ -664,8 +722,10 @@
},
{
"cell_type": "markdown",
- "id": "35146ea5",
- "metadata": {},
+ "id": "2f551c46",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Momentum parameter\n",
"\n",
@@ -678,8 +738,10 @@
},
{
"cell_type": "markdown",
- "id": "82c87bb1",
- "metadata": {},
+ "id": "e74a7b68",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\gamma= {m \\over m +\\mu \\Delta t }, \\qquad \\eta = {(\\Delta t)^2 \\over m +\\mu \\Delta t}.\n",
@@ -688,8 +750,10 @@
},
{
"cell_type": "markdown",
- "id": "75415fca",
- "metadata": {},
+ "id": "82226cd1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Thus, as the name suggests, the momentum parameter is proportional to\n",
"the mass of the particle and effectively provides inertia.\n",
@@ -719,8 +783,10 @@
},
{
"cell_type": "markdown",
- "id": "59892cd6",
- "metadata": {},
+ "id": "43eee5f0",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t +\\gamma \\mathbf{v}_{t-1}) \\nonumber\n",
@@ -729,8 +795,10 @@
},
{
"cell_type": "markdown",
- "id": "a01225ea",
- "metadata": {},
+ "id": "580c838a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -745,16 +813,20 @@
},
{
"cell_type": "markdown",
- "id": "e2c9f57b",
- "metadata": {},
+ "id": "5384111b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"One of the major advantages of NAG is that it allows for the use of a larger learning rate than GDM for the same choice of $\\gamma$."
]
},
{
"cell_type": "markdown",
- "id": "1672a79e",
- "metadata": {},
+ "id": "c09d4d5f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Second moment of the gradient\n",
"\n",
@@ -782,8 +854,10 @@
},
{
"cell_type": "markdown",
- "id": "6d4032f9",
- "metadata": {},
+ "id": "c6ad2e2e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## RMS prop\n",
"\n",
@@ -795,8 +869,10 @@
},
{
"cell_type": "markdown",
- "id": "63cde9f3",
- "metadata": {},
+ "id": "eabaed08",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -811,8 +887,10 @@
},
{
"cell_type": "markdown",
- "id": "6f8a52c2",
- "metadata": {},
+ "id": "e0e382b5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathbf{s}_t =\\beta \\mathbf{s}_{t-1} +(1-\\beta)\\mathbf{g}_t^2 \\nonumber\n",
@@ -821,8 +899,10 @@
},
{
"cell_type": "markdown",
- "id": "9edf087d",
- "metadata": {},
+ "id": "adb8c84e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\mathbf{g}_t \\over \\sqrt{\\mathbf{s}_t +\\epsilon}}, \\nonumber\n",
@@ -831,8 +911,10 @@
},
{
"cell_type": "markdown",
- "id": "7eff676b",
- "metadata": {},
+ "id": "c720b95b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $\\beta$ controls the averaging time of the second moment and is\n",
"typically taken to be about $\\beta=0.9$, $\\eta_t$ is a learning rate\n",
@@ -847,8 +929,10 @@
},
{
"cell_type": "markdown",
- "id": "3fcb1068",
- "metadata": {},
+ "id": "6ec04ecc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## [ADAM optimizer](https://arxiv.org/abs/1412.6980)\n",
"\n",
@@ -874,8 +958,10 @@
},
{
"cell_type": "markdown",
- "id": "31b034e1",
- "metadata": {},
+ "id": "a1685958",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -890,8 +976,10 @@
},
{
"cell_type": "markdown",
- "id": "571e9a91",
- "metadata": {},
+ "id": "345d094f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathbf{m}_t = \\beta_1 \\mathbf{m}_{t-1} + (1-\\beta_1) \\mathbf{g}_t \\nonumber\n",
@@ -900,8 +988,10 @@
},
{
"cell_type": "markdown",
- "id": "fb5883fa",
- "metadata": {},
+ "id": "d53eebc5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathbf{s}_t =\\beta_2 \\mathbf{s}_{t-1} +(1-\\beta_2)\\mathbf{g}_t^2 \\nonumber\n",
@@ -910,8 +1000,10 @@
},
{
"cell_type": "markdown",
- "id": "ebffe7a1",
- "metadata": {},
+ "id": "57ba401d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\mathbf{m}}_t={\\mathbf{m}_t \\over 1-\\beta_1^t} \\nonumber\n",
@@ -920,8 +1012,10 @@
},
{
"cell_type": "markdown",
- "id": "5a513bd7",
- "metadata": {},
+ "id": "285185c1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\mathbf{s}}_t ={\\mathbf{s}_t \\over1-\\beta_2^t} \\nonumber\n",
@@ -930,8 +1024,10 @@
},
{
"cell_type": "markdown",
- "id": "d49bc312",
- "metadata": {},
+ "id": "9447c9ab",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\boldsymbol{\\mathbf{m}}_t \\over \\sqrt{\\boldsymbol{\\mathbf{s}}_t} +\\epsilon}, \\nonumber\n",
@@ -940,8 +1036,10 @@
},
{
"cell_type": "markdown",
- "id": "6f4e5040",
- "metadata": {},
+ "id": "2ddd56a9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -955,8 +1053,10 @@
},
{
"cell_type": "markdown",
- "id": "4771881e",
- "metadata": {},
+ "id": "c612f98a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $\\beta_1$ and $\\beta_2$ set the memory lifetime of the first and\n",
"second moment and are typically taken to be $0.9$ and $0.99$\n",
@@ -972,8 +1072,10 @@
},
{
"cell_type": "markdown",
- "id": "3a0d438e",
- "metadata": {},
+ "id": "8c2065bf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\Delta \\theta_{t+1}= -\\eta_t { \\boldsymbol{m}_t \\over \\sqrt{\\sigma_t^2 + m_t^2 }+\\epsilon}.\n",
@@ -982,8 +1084,10 @@
},
{
"cell_type": "markdown",
- "id": "6cbb721b",
- "metadata": {},
+ "id": "9d5ae191",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Algorithms and codes for Adagrad, RMSprop and Adam\n",
"\n",
@@ -994,8 +1098,10 @@
},
{
"cell_type": "markdown",
- "id": "e7d8b851",
- "metadata": {},
+ "id": "d836701f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Practical tips\n",
"\n",
@@ -1012,8 +1118,10 @@
},
{
"cell_type": "markdown",
- "id": "75afab2b",
- "metadata": {},
+ "id": "db58ae93",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Automatic differentiation\n",
"\n",
@@ -1048,8 +1156,10 @@
},
{
"cell_type": "markdown",
- "id": "c551bfeb",
- "metadata": {},
+ "id": "ac46ef95",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"f(x) = \\sin\\left(2\\pi x + x^2\\right)\n",
@@ -1058,16 +1168,20 @@
},
{
"cell_type": "markdown",
- "id": "f2cbdd82",
- "metadata": {},
+ "id": "5705e630",
+ "metadata": {
+ "editable": true
+ },
"source": [
"which has the following derivative"
]
},
{
"cell_type": "markdown",
- "id": "22e5d8ce",
- "metadata": {},
+ "id": "56097817",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right)\n",
@@ -1076,36 +1190,23 @@
},
{
"cell_type": "markdown",
- "id": "d2d352b4",
- "metadata": {},
+ "id": "8d731be1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Using **autograd** we have"
]
},
{
"cell_type": "code",
- "execution_count": 2,
- "id": "19f1b95c",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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zps3T1hYWIjevXs/dZkQQoiYmBihUqnEiy++KIQQ2s+wb98+nfEeX2/y7d27VwAQe/fu1bZDq1athLOzs87yL4QQ6enpokGDBsLc3Fx8++23YseOHeKzzz4ThoaGokePHtp55ubmitatWwsTExPxzTffiB07dohp06YJHx8fAUBMmTJFO+6UKVO0bfPhhx+KnTt3ir///lsIIcSaNWvE559/LtavXy/2798vVq1aJdq1ayccHR1FfHx8mXzvQgixbds2YWRkJBo0aCAWLVok9uzZI/744w/x8ssva8fZt2+fMDIyEsHBwWL16tXi77//Fl26dBGKoohVq1YVaGdvb2/x3nvviR07doiZM2cKAwMDMWjQING4cWPx5Zdfip07d4oPP/xQABDfffeddvr8ZcXDw0O0bt1arF27VqxZs0Y0adJEGBkZicOHD2vH3b9/v3jvvffEX3/9Jfbv3y/Wr18v+vbtK0xNTcX58+cLfMdubm5iwIABYsOGDWLTpk0iMTFRLF26VCiKIvr27SvWrVsnNm7cKHr16iUMDAzErl27tPPYtWuXMDAwEK1btxbr1q3TZspv4yc5f/68ACBWrFihHdatWzdhamoqfHx8tMOOHj0qAIgtW7Zohz26vNy9e1e7jZs7d6522bx7964QIm89tbe3Fz4+PmLevHli586d4s033xQAxOLFi5+YMTQ0VJiamooePXpo53v27Fmd77RWrVri7bffFtu3bxe//fabsLW11dl3CCHEV199JRRFESNHjhSbNm0S69atEy1atBDm5uba+T2pncaOHStWrVol9u3bJzZt2iRGjRolVCqVdv0U4v+XES8vL9GtWzfx999/i7///lsEBgYKW1tbkZSUpB23uOvQ49uBzMxM4ezsLIYMGaKTMTs7W7i6umq3N0/aXjz+/QkhxM2bN4WLi4twcHAQs2fPFrt27RKrV68WI0eOFOfOnRNCCJGUlCSGDx8uli5dKvbs2SO2bdsmJk2aJFQqVYHvsaj9y6M0Go3o0KGDMDY2Fl999ZXYsWOHmDJliqhVq1aBfGfPnhXW1tYiMDBQLFmyROzYsUO89957QqVSialTpxZor8LWqcfbMj4+XqjVavHJJ5/o5MrJyRGurq7ihRde0A775ZdfxIwZM8SGDRvE/v37xeLFi0XDhg2Fr6+vyMrKEkLkbfPffvttAUCs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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "The max absolute difference is: 1.77636e-15\n"
- ]
- }
- ],
+ "execution_count": 4,
+ "id": "983d5faf",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"import autograd.numpy as np\n",
"\n",
@@ -1145,8 +1246,10 @@
},
{
"cell_type": "markdown",
- "id": "f3a495be",
- "metadata": {},
+ "id": "e244c67d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Using autograd\n",
"\n",
@@ -1159,19 +1262,13 @@
},
{
"cell_type": "code",
- "execution_count": 3,
- "id": "5c856602",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "The gradient of f1 evaluated at a = 1 using autograd is: 3\n",
- "The gradient of f1 evaluated at a = 1 by finding the analytic expression is: 3\n"
- ]
- }
- ],
+ "execution_count": 5,
+ "id": "4b536d9b",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
@@ -1194,8 +1291,10 @@
},
{
"cell_type": "markdown",
- "id": "b361074b",
- "metadata": {},
+ "id": "1580af85",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Autograd with more complicated functions\n",
"\n",
@@ -1206,24 +1305,13 @@
},
{
"cell_type": "code",
- "execution_count": 4,
- "id": "a458a151",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Evaluating at x1 = 1, x2 = 3\n",
- "------------------------------\n",
- "The derivative of f2 w.r.t x1: 12\n",
- "The analytical derivative of f2 w.r.t x1: 12\n",
- "\n",
- "The derivative of f2 w.r.t x2: -4\n",
- "The analytical derivative of f2 w.r.t x2: -4\n"
- ]
- }
- ],
+ "execution_count": 6,
+ "id": "604455ef",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
@@ -1262,16 +1350,20 @@
},
{
"cell_type": "markdown",
- "id": "946c37f1",
- "metadata": {},
+ "id": "84db45a5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable."
]
},
{
"cell_type": "markdown",
- "id": "a00d38e5",
- "metadata": {},
+ "id": "46c76ed5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## More complicated functions using the elements of their arguments directly"
]
@@ -1279,8 +1371,11 @@
{
"cell_type": "code",
"execution_count": 7,
- "id": "d8c2a448",
- "metadata": {},
+ "id": "a8a13a1b",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1304,8 +1399,10 @@
},
{
"cell_type": "markdown",
- "id": "026d8733",
- "metadata": {},
+ "id": "fc6e9a7e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Note that in this case, when sending an array as input argument, the\n",
"output from Autograd is another array. This is the true gradient of\n",
@@ -1317,8 +1414,10 @@
},
{
"cell_type": "markdown",
- "id": "1a4dca11",
- "metadata": {},
+ "id": "c51b4750",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Functions using mathematical functions from Numpy"
]
@@ -1326,8 +1425,11 @@
{
"cell_type": "code",
"execution_count": 8,
- "id": "c10b664f",
- "metadata": {},
+ "id": "328dc81e",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1351,8 +1453,10 @@
},
{
"cell_type": "markdown",
- "id": "07436a71",
- "metadata": {},
+ "id": "fddddc25",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## More autograd"
]
@@ -1360,8 +1464,11 @@
{
"cell_type": "code",
"execution_count": 9,
- "id": "1840a5d2",
- "metadata": {},
+ "id": "2344fe1f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1382,8 +1489,10 @@
},
{
"cell_type": "markdown",
- "id": "87ee8137",
- "metadata": {},
+ "id": "effd71ad",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## And with loops"
]
@@ -1391,8 +1500,11 @@
{
"cell_type": "code",
"execution_count": 10,
- "id": "f1b25f09",
- "metadata": {},
+ "id": "0a3d2b19",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1424,8 +1536,11 @@
{
"cell_type": "code",
"execution_count": 11,
- "id": "5fa2802b",
- "metadata": {},
+ "id": "44eb7897",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1441,8 +1556,10 @@
},
{
"cell_type": "markdown",
- "id": "eb66fab4",
- "metadata": {},
+ "id": "8fb66639",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Using recursion"
]
@@ -1450,8 +1567,11 @@
{
"cell_type": "code",
"execution_count": 12,
- "id": "965c8bbb",
- "metadata": {},
+ "id": "6ddbe9c1",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1485,16 +1605,20 @@
},
{
"cell_type": "markdown",
- "id": "2e6e0c8a",
- "metadata": {},
+ "id": "4e12756c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input."
]
},
{
"cell_type": "markdown",
- "id": "42adbcc3",
- "metadata": {},
+ "id": "828d008f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Unsupported functions\n",
"Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd.\n",
@@ -1505,8 +1629,11 @@
{
"cell_type": "code",
"execution_count": 13,
- "id": "6ca4a5dc",
- "metadata": {},
+ "id": "b3ba1533",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1524,16 +1651,20 @@
},
{
"cell_type": "markdown",
- "id": "5d816052",
- "metadata": {},
+ "id": "4532ef9a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible."
]
},
{
"cell_type": "markdown",
- "id": "73f2e7e4",
- "metadata": {},
+ "id": "4b19e649",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The syntax a.dot(b) when finding the dot product"
]
@@ -1541,8 +1672,11 @@
{
"cell_type": "code",
"execution_count": 14,
- "id": "2ead27d5",
- "metadata": {},
+ "id": "2bcdf19e",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1560,8 +1694,10 @@
},
{
"cell_type": "markdown",
- "id": "1edcb932",
- "metadata": {},
+ "id": "ef81f56c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here we are told that the 'dot' function does not belong to Autograd's\n",
"version of a Numpy array. To overcome this, an alternative syntax\n",
@@ -1571,8 +1707,11 @@
{
"cell_type": "code",
"execution_count": 15,
- "id": "05897777",
- "metadata": {},
+ "id": "c9902514",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -1593,8 +1732,10 @@
},
{
"cell_type": "markdown",
- "id": "2c899815",
- "metadata": {},
+ "id": "5fc75062",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Recommended to avoid\n",
"The documentation recommends to avoid inplace operations such as"
@@ -1603,8 +1744,11 @@
{
"cell_type": "code",
"execution_count": 16,
- "id": "fd05063c",
- "metadata": {},
+ "id": "c5fa7ec3",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"a += b\n",
@@ -1615,8 +1759,10 @@
},
{
"cell_type": "markdown",
- "id": "94d6f0d9",
- "metadata": {},
+ "id": "636ec6bb",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Using Autograd with OLS\n",
"\n",
@@ -1627,34 +1773,13 @@
},
{
"cell_type": "code",
- "execution_count": 5,
- "id": "d002c672",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[3.74072166]\n",
- " [3.1497739 ]]\n",
- "Eigenvalues of Hessian Matrix:[0.30245426 4.43875984]\n",
- "theta from own gd\n",
- "[[3.74072166]\n",
- " [3.1497739 ]]\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHFCAYAAADxOP3DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABVfElEQVR4nO3dd3gU1foH8O8kIRtaAgECpJGA9NBBRLpSpJklIgrX2CsIRlCB61VARS6ICl4sl59e8OoNNsICIipCAiigVOlNA4QSQk2DtN3z+2PdJZvsZku2zOx8P8+TJ2RmdvbMboZ9c8573iMJIQSIiIiIVCrA1w0gIiIi8iUGQ0RERKRqDIaIiIhI1RgMERERkaoxGCIiIiJVYzBEREREqsZgiIiIiFSNwRARERGpGoMhIiIiUjUGQ0QytGzZMkiSZP4KCgpC06ZNcf/99+P48eM+a9esWbMgSZLPnl8JTp48CUmSsGDBAl83hYgcFOTrBhCRbUuXLkWbNm1QVFSEX375BXPmzEF6ejqOHDmC+vXr+7p5RER+gcEQkYwlJCSge/fuAIABAwZAr9dj5syZ0Ol0eOSRR3zcOvKl0tJSc68hEVUPh8mIFMQUGF24cMG8raioCFOnTkXnzp0RFhaG8PBw9OrVC6tWrar0eEmS8Oyzz+Kzzz5D27ZtUatWLXTq1AnffvttpWPXrl2Lzp07Q6PRID4+3uawT1FREWbMmIH4+HgEBwcjKioKEydOxLVr1yyOi4uLw8iRI/Htt9+iS5cuqFmzJtq2bWt+7mXLlqFt27aoXbs2br31VuzcudPu62EaTkxPT8czzzyDhg0bokGDBkhKSsK5c+cqXfusWbMqnSMuLg4PP/xwpXNu3LgRTzzxBBo0aIDQ0FA8+OCDKCwsRHZ2NsaOHYt69eqhadOmeOGFF1BaWlrpvAaDAXPmzEFsbCxCQkLQvXt3bNiwodJxx48fx/jx4xEREQGNRoO2bdvi/ffftzgmIyMDkiThs88+w9SpUxEVFQWNRoMTJ07g+vXreOGFFxAfH4+QkBCEh4eje/fuWL58ud3Xj4iM+CcFkYJkZmYCAFq1amXeVlxcjCtXruCFF15AVFQUSkpK8NNPPyEpKQlLly7Fgw8+aHGOtWvXYseOHXjttddQp04dzJ8/H6NHj8bRo0fRvHlzAMCGDRuQmJiIXr164YsvvoBer8f8+fMtgjAAEEJAq9Viw4YNmDFjBvr27Yt9+/Zh5syZ2LZtG7Zt2waNRmM+/vfff8eMGTPw8ssvIywsDLNnz0ZSUhJmzJiBDRs24M0334QkSZg2bRpGjhyJzMxM1KxZ0+7r8vjjj2PEiBFITU1FVlYWXnzxRTzwwAPYuHGjy6/1448/jqSkJHzxxRfYs2cP/v73v6OsrAxHjx5FUlISnnzySfz000+YN28eIiMjMWXKFIvHL168GM2aNcPChQthMBgwf/58DBs2DJs2bUKvXr0AAIcOHcLtt9+O2NhYvP3222jSpAl++OEHTJ48GZcuXcLMmTMtzjljxgz06tULH330EQICAhAREYEpU6bgs88+wxtvvIEuXbqgsLAQBw4cwOXLl12+diLVEUQkO0uXLhUAxPbt20VpaanIz88X33//vWjSpIno16+fKC0ttfnYsrIyUVpaKh577DHRpUsXi30AROPGjUVeXp55W3Z2tggICBBz5841b+vZs6eIjIwUN27cMG/Ly8sT4eHhovx/G99//70AIObPn2/xPF9++aUAIJYsWWLe1qxZM1GzZk1x5swZ87a9e/cKAKJp06aisLDQvF2n0wkAYvXq1Q69ThMmTLDYPn/+fAFAnD9/3uLaZ86cWekczZo1Ew899FClc06aNMniOK1WKwCId955x2J7586dRdeuXc0/Z2ZmCgA2X79BgwaZtw0dOlRER0eL3Nxci3M+++yzIiQkRFy5ckUIIUR6eroAIPr161ep/QkJCUKr1VbaTkSO4zAZkYzddtttqFGjBurWrYu77roL9evXx6pVqyrliXz99dfo3bs36tSpg6CgINSoUQOffPIJDh8+XOmcAwcORN26dc0/N27cGBERETh16hQAoLCwEDt27EBSUhJCQkLMx9WtWxejRo2yOJep56X8MBMA3Hvvvahdu3alYaHOnTsjKirK/HPbtm0BGPOhatWqVWm7qU323H333RY/d+zY0anHWzNy5EiLn01tGjFiRKXt1p7H1uu3efNm6PV6FBUVYcOGDRg9ejRq1aqFsrIy89fw4cNRVFSE7du3W5zznnvuqfQ8t956K9atW4fp06cjIyMDN27ccPmaidSKwRCRjP33v//Fjh07sHHjRjz11FM4fPgwxo0bZ3FMWloaxo4di6ioKHz++efYtm0bduzYgUcffRRFRUWVztmg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IlVjMERERESqxmCIiIiIVI3BEBEREakagyEiIiJSNQZDREREpGoMhoiIiEjVGAwRERGRqjEYIiIiIlVjMERERESqxmCIiIiIVI3BEBEREakagyEiIiJSNQZDREREpGoMhoiIiEjVGAwRERGRqvk8GNq8eTNGjRqFyMhISJIEnU5n3ldaWopp06ahQ4cOqF27NiIjI/Hggw/i3LlzvmswERER+RWfB0OFhYXo1KkTFi9eXGnf9evXsXv3brzyyivYvXs30tLScOzYMdx9990+aCkRERH5I0kIIXzdCBNJkrBy5UpotVqbx+zYsQO33norTp06hdjYWIfOm5eXh7CwMOTm5iI0NNRNrSUiIiJP8tbnd5DHzuwhubm5kCQJ9erVs3lMcXExiouLzT/n5eV5oWVERESkRD4fJnNGUVERpk+fjvHjx1cZIc6dOxdhYWHmr5iYGC+2koiIiJREMcFQaWkp7r//fhgMBnzwwQdVHjtjxgzk5uaav7KysrzUSiIiIlIaRQyTlZaWYuzYscjMzMTGjRvtjhtqNBpoNBovtY6IiIiUTPbBkCkQOn78ONLT09GgQQNfN4mIiIj8iM+DoYKCApw4ccL8c2ZmJvbu3Yvw8HBERkZizJgx2L17N7799lvo9XpkZ2cDAMLDwxEcHOyrZhMREZGf8PnU+oyMDAwcOLDS9oceegizZs1CfHy81celp6djwIABDj0Hp9YTEREpj2qm1g8YMABVxWMyKoNEREREfkgxs8mIiIiIPIHBEBEREakagyEiIiJSNQZDREREpGoMhoiIiEjVGAwRERGRqvl8aj0RESmYXg9s2QKcPw80bQr07QsEBvq6VUROYTBERESuSUsDnnsOOHPm5rboaGDRIiApyXftInISh8mIiMh5aWnAmDGWgRAAnD1r3J6W5pt2EbmAwRARETlHrzf2CFlbIcC0LSXFeByRAjAYIiIi52zZUrlHqDwhgKws43FECsBgiIiInHP+vHuPI/IxBkNEROScpk3dexyRjzEYIiIi5/Tta5w1JknW90sSEBNjPI5IARgMERGRcwIDjdPngcoBkennhQtZb4gUg8EQERE5LykJ+OYbICrKcnt0tHE76wyRgrDoIhERuSYpCUhMZAVqUjwGQ0RE5LrAQGDAAF+3gqhaGAwRERGRfX68Dh2DISIiIqqan69DxwRqIiIisk0F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1q3NP/fq1QtZWVlYsGAB+vXr59I5fcXVNi5btgz16tWDVqu12K6U99tZ/nJ/u0rp97cz/On+dpW/3N/PPvss9u3bh59//tnusd64xxXVM9SwYUMEBgZWivZycnIqRYUmTZo0sXp8UFAQGjRoUOUxts7pba5ct8mXX36Jxx57DF999RUGDRpU5bEBAQHo0aOHbP6SqM51l3fbbbdZXJM/v99CCPznP/9BcnIygoODqzxWbu+3K/zh/q4OJd/f7qK0+7s6/OX+njRpElavXo309HRER0dXeay37nFFBUPBwcHo1q0b1q9fb7F9/fr1uP32260+plevXpWO//HHH9G9e3fUqFGjymNsndPbXLluwPgX48MPP4zU1FSMGDHC7vMIIbB37140bdq02m12B1evu6I9e/ZYXJO/vt+AcbbGiRMn8Nhjj9l9Hrm9367wh/vbVUq/v91Fafd3dSj9/hZC4Nlnn0VaWho2btyI+Ph4u4/x2j3ucKq1THzxxReiRo0a4pNPPhGHDh0SKSkponbt2uas+unTp4vk5GTz8X/++aeoVauWeP7558WhQ4fEJ598ImrUqCG++eYb8zG//PKLCAwMFP/85z/F4cOHxT//+U8RFBQktm/f7vXrs8XZ605NTRVBQUHi/fffF+fPnzd/Xbt2zXzMrFmzxPfffy/++OMPsWfPHvHII4+IoKAg8euvv3r9+mxx9rrfffddsXLlSnHs2DFx4MABMX36dAFArFixwnyMP77fJg888IDo2bOn1XMq4f3Oz88Xe/bsEXv27BEAxDvvvCP27NkjTp06JYTw3/vb2ev2l/vb2ev2l/vb2es2Ufr9/cwzz4iwsDCRkZFh8Xt7/fp18zG+uscVFwwJIcT7778vmjVrJoKDg0XXrl0tpuU99NBDon///hbHZ2RkiC5duojg4GARFxcnPvzww0rn/Prrr0Xr1q1FjRo1RJs2bSxuLrlw5rr79+8vAFT6euihh8zHpKSkiNjYWBEcHCwaNWokhgwZIrZu3erFK3KMM9c9b9480aJFCxESEiLq168v+vTpI9auXVvpnP72fgshxLVr10TNmjXFkiVLrJ5PCe+3aeq0rd9bf72/nb1uf7m/nb1uf7m/Xfk994f729o1AxBLly41H+Ore1z6q4FEREREqqSonCEiIiIid2MwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIFGn58uUICQnB2bNnzdsef/xxdOzYEbm5uT5sGREpDdcmIyJFEkKgc+fO6Nu3LxYvXozZs2fj448/xvbt2xEVFeXr5hGRggT5ugFERK6QJAlz5szBmDFjEBkZiUWLFmHLli0MhIjIaewZIiJF69q1Kw4ePIgff/wR/fv393VziEiBmDNERIr1ww8/4MiRI9Dr9WjcuLGvm0NECsWeISJSpN27d2PAgAF4//338cUXX6BWrVr4+uuvfd0sIlIg5gwRkeKcPHkSI0aMwPTp05GcnIx27dqhR48e2LVrF7p16+br5hGRwrBniIgU5cqVK+jduzf69euHf//73+btiYmJKC4uxvfff+/D1hGREjEYIiIiIlVjAjURERGpGoMhIiIiUjUGQ0RERKRqDIaIiIhI1RgMERERkaoxGCIiIiJVYzBEREREqsZgiIiIiFSNwRARERGpGoMhIiIiUjUGQ0RERKRqDIaIiIhI1f4f6VZ0KcsADPoAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": 17,
+ "id": "63f7b085",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Autograd to calculate gradients for OLS\n",
"from random import random, seed\n",
@@ -1709,95 +1834,23 @@
},
{
"cell_type": "markdown",
- "id": "e72279fe",
- "metadata": {},
+ "id": "fe3645f7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Same code but now with momentum gradient descent"
]
},
{
"cell_type": "code",
- "execution_count": 6,
- "id": "62aa2606",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[4.]\n",
- " [3.]]\n",
- "Eigenvalues of Hessian Matrix:[0.34101264 4.61587186]\n",
- "0 [-17.46789222] [-20.57248188]\n",
- "1 [-0.61468157] [0.48951218]\n",
- "2 [-0.56926996] [0.45334786]\n",
- "3 [-0.52721328] [0.41985531]\n",
- "4 [-0.48826367] [0.38883712]\n",
- "5 [-0.45219159] [0.36011051]\n",
- "6 [-0.41878446] [0.33350616]\n",
- "7 [-0.38784539] [0.3088673]\n",
- "8 [-0.35919204] [0.28604872]\n",
- "9 [-0.33265555] [0.26491594]\n",
- "10 [-0.30807954] [0.2453444]\n",
- "11 [-0.28531915] [0.22721878]\n",
- "12 [-0.26424027] [0.21043225]\n",
- "13 [-0.24471865] [0.19488588]\n",
- "14 [-0.22663926] [0.18048805]\n",
- "15 [-0.20989554] [0.1671539]\n",
- "16 [-0.19438882] [0.15480486]\n",
- "17 [-0.18002771] [0.14336815]\n",
- "18 [-0.16672758] [0.13277635]\n",
- "19 [-0.15441003] [0.12296707]\n",
- "20 [-0.14300248] [0.11388247]\n",
- "21 [-0.13243771] [0.10546903]\n",
- "22 [-0.12265344] [0.09767716]\n",
- "23 [-0.11359201] [0.09046094]\n",
- "24 [-0.10520003] [0.08377784]\n",
- "25 [-0.09742804] [0.07758848]\n",
- "26 [-0.09023022] [0.07185638]\n",
- "27 [-0.08356417] [0.06654775]\n",
- "28 [-0.07739059] [0.06163132]\n",
- "29 [-0.07167311] [0.05707811]\n",
- "theta from own gd\n",
- "[[3.80535026]\n",
- " [3.15501265]]\n",
- "0 [-0.06637802] [0.05286127]\n",
- "1 [-0.06147413] [0.04895597]\n",
- "2 [-0.05546136] [0.0441676]\n",
- "3 [-0.04956014] [0.03946806]\n",
- "4 [-0.04412835] [0.03514237]\n",
- "5 [-0.03923869] [0.0312484]\n",
- "6 [-0.03487291] [0.02777164]\n",
- "7 [-0.03098682] [0.02467689]\n",
- "8 [-0.02753174] [0.02192537]\n",
- "9 [-0.02446122] [0.01948011]\n",
- "10 [-0.02173291] [0.01730738]\n",
- "11 [-0.01930883] [0.01537692]\n",
- "12 [-0.0171551] [0.01366176]\n",
- "13 [-0.01524159] [0.0121379]\n",
- "14 [-0.01354152] [0.01078402]\n",
- "15 [-0.01203107] [0.00958115]\n",
- "16 [-0.0106891] [0.00851245]\n",
- "17 [-0.00949682] [0.00756296]\n",
- "18 [-0.00843753] [0.00671937]\n",
- "19 [-0.00749639] [0.00596988]\n",
- "20 [-0.00666023] [0.00530399]\n",
- "21 [-0.00591733] [0.00471237]\n",
- "22 [-0.0052573] [0.00418674]\n",
- "23 [-0.00467089] [0.00371975]\n",
- "24 [-0.00414989] [0.00330484]\n",
- "25 [-0.00368701] [0.00293621]\n",
- "26 [-0.00327575] [0.0026087]\n",
- "27 [-0.00291037] [0.00231772]\n",
- "28 [-0.00258574] [0.0020592]\n",
- "29 [-0.00229732] [0.00182951]\n",
- "theta from own gd wth momentum\n",
- "[[3.99401467]\n",
- " [3.00476652]]\n"
- ]
- }
- ],
+ "execution_count": 18,
+ "id": "43e8c66b",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Autograd to calculate gradients for OLS\n",
"from random import random, seed\n",
@@ -1856,37 +1909,23 @@
},
{
"cell_type": "markdown",
- "id": "bad8e42f",
- "metadata": {},
+ "id": "ac31b7c2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## But noen of these can compete with Newton's method"
]
},
{
"cell_type": "code",
- "execution_count": 7,
- "id": "13a572a8",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[4.07073572]\n",
- " [2.96535908]]\n",
- "Eigenvalues of Hessian Matrix:[0.27763365 4.60271172]\n",
- "0 [-16.28819209] [-20.02989868]\n",
- "1 [1.31492039e-15] [-8.36725149e-15]\n",
- "2 [-3.98986399e-16] [-5.52642438e-16]\n",
- "3 [-3.98986399e-16] [-5.52642438e-16]\n",
- "4 [-3.98986399e-16] [-5.52642438e-16]\n",
- "beta from own Newton code\n",
- "[[4.07073572]\n",
- " [2.96535908]]\n"
- ]
- }
- ],
+ "execution_count": 19,
+ "id": "5cbc79d6",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Newton's method\n",
"from random import random, seed\n",
@@ -1930,8 +1969,10 @@
},
{
"cell_type": "markdown",
- "id": "5b2c9e3a",
- "metadata": {},
+ "id": "e80b5b06",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Including Stochastic Gradient Descent with Autograd\n",
"In this code we include the stochastic gradient descent approach discussed above. Note here that we specify which argument we are taking the derivative with respect to when using **autograd**."
@@ -1939,43 +1980,13 @@
},
{
"cell_type": "code",
- "execution_count": 8,
- "id": "830370bf",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[4.03534031]\n",
- " [2.96044703]]\n",
- "Eigenvalues of Hessian Matrix:[0.25664556 4.72350511]\n",
- "theta from own gd\n",
- "[[4.03534031]\n",
- " [2.96044703]]\n"
- ]
- },
- {
- "data": {
- "image/png": "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R+OKK67AW2+95bDO0qVL0alTJ0RFRaFTp05YtmyZWsX3mTfHXVBQgMGDB6NFixaIjY1Fnz598OWXX9qts3DhQkiS5PCorq5W+1C84s1xr1mzxukx/fLLL3brhdrnfe+99zo97s6dO9vW0cPnvW7dOgwfPhwpKSmQJAnLly/3uE0oXN/eHneoXN/eHneoXN/eHneoXN95eXno2bMnmjZtisTERIwcORK7d+/2uF0grnHdBUMffvghcnNz8eSTT6K4uBgZGRkYNmwYDh8+7HT9AwcO4JZbbkFGRgaKi4vxxBNP4JFHHsHSpUtt62zevBl33HEHcnJy8OOPPyInJwejR4/GN998E6jD8sjb4163bh0GDx6Mzz//HN9//z0GDRqE4cOHo7i42G692NhYHDt2zO4RHR0diEOSxdvjttq9e7fdMbVv3972Wih+3nPnzrU73pKSEsTHx+P222+3W0/rn3dlZSW6du2KefPmyVo/VK5vb487VK5vb4/bSu/Xt7fHHSrX99q1azFx4kRs2bIFX331FWprazFkyBBUVla63CZg17jQmV69eok///nPdss6dOggpk2b5nT9v/71r6JDhw52yx566CHRu3dv2/PRo0eLm2++2W6doUOHijvvvFOhUvvP2+N2plOnTmLWrFm25++9956Ii4tTqoiq8Pa4i4qKBABx5swZl/s0wue9bNkyIUmSOHjwoG2ZHj7v+gCIZcuWuV0nVK7v+uQctzN6vL7rk3PcoXJ91+fL5x0K17cQQpw4cUIAEGvXrnW5TqCucV3VDJ0/fx7ff/89hgwZYrd8yJAh2LRpk9NtNm/e7LD+0KFD8d133+HChQtu13G1z0Dz5bgbqqurw9mzZx0mu/v999/RunVrmEwmZGVlOfyyDCZ/jrt79+5ITk7GjTfeiKKiIrvXjPB5v/POO7jpppscRmnX8ufti1C4vpWgx+vbH3q+vpUQKtd3eXk5ALidhDVQ17iugqFTp07BbDY7zFaflJTkMKu91fHjx52uX1tbi1OnTrldx9U+A82X427o73//OyorKzF69Gjbsg4dOmDhwoX49NNPsXjxYkRHR6Nfv37Yu3evouX3lS/HnZycjAULFmDp0qUoKCjAVVddhRtvvBHr1q2zrRPqn/exY8fwxRdf4IEHHrBbrvXP2xehcH0rQY/Xty9C4fr2V6hc30IITJ48Gf3790d6errL9QJ1jetmOo76JEmyey6EcFjmaf2Gy73dZzD4WsbFixdj5syZ+OSTT5CYmGhb3rt3b/Tu3dv2vF+/frjmmmvw+uuv47XXXlOu4H7y5rivuuoqXHXVVbbnffr0QUlJCV5++WUMGDDAp30Gi69lXLhwIS6//HKMHDnSbrlePm9vhcr17Su9X9/eCKXr21ehcn1PmjQJP/30EzZs2OBx3UBc47qqGWrevDnCw8Mdor0TJ044RIVWLVu2dLp+REQEEhIS3K7jap+B5stxW3344Ye4//778dFHH+Gmm25yu25YWBh69uypmV8S/hx3fb1797Y7plD+vIUQePfdd5GTk4PIyEi362rt8/ZFKFzf/tDz9a0UvV3f/giV6/vhhx/Gp59+iqKiIphMJrfrBuoa11UwFBkZiWuvvRZfffWV3fKvvvoKffv2dbpNnz59HNb/73//ix49eqBRo0Zu13G1z0Dz5bgByy/Ge++9F/n5+cjMzPT4PkIIbNu2DcnJyX6XWQm+HndDxcXFdscUqp83YOmtsW/fPtx///0e30drn7cvQuH69pXer2+l6O369ofer28hBCZNmoSCggKsXr0abdu29bhNwK5x2anWGvHBBx+IRo0aiXfeeUfs3LlT5ObmiiZNmtiy6qdNmyZycnJs6//vf/8TjRs3Fo899pjYuXOneOedd0SjRo3EkiVLbOts3LhRhIeHixdffFHs2rVLvPjiiyIiIkJs2bIl4MfnirfHnZ+fLyIiIsQbb7whjh07Znv89ttvtnVmzpwpVq5cKfbv3y+Ki4vFfffdJyIiIsQ333wT8ONzxdvjfvXVV8WyZcvEnj17xI4dO8S0adMEALF06VLbOqH4eVvdfffd4rrrrnO6Tz183mfPnhXFxcWiuLhYABCvvPKKKC4uFocOHRJChO717e1xh8r17e1xh8r17e1xW+n9+h4/fryIi4sTa9assfveVlVV2dYJ1jWuu2BICCHeeOMN0bp1axEZGSmuueYau25548aNE9dff73d+mvWrBHdu3cXkZGRok2bNuLNN9902OfHH38srrrqKtGoUSPRoUMHu4tLK7w57uuvv14AcHiMGzfOtk5ubq5o1aqViIyMFC1atBBDhgwRmzZtCuARyePNcb/00kuiXbt2Ijo6WjRr1kz0799fFBYWOuwz1D5vIYT47bffRExMjFiwYIHT/enh87Z2nXb1vQ3V69vb4w6V69vb4w6V69uX73koXN/OjhmAeO+992zrBOsaly4WkIiIiMiQdJUzRERERKQ0BkNERERkaAyGiIiIyNAYDBEREZGhMRgiIiIiQ2MwRERERIbGYIiIiIgMjcEQERERGRqDISIiIjI0BkNERERkaAyGiEiXFi9ejOjoaJSWltqWPfDAA+jSpQvKy8uDWDIi0hvOTUZEuiSEQLdu3ZCRkYF58+Zh1qxZePvtt7FlyxakpqYGu3hEpCMRwS4AEZEvJEnC888/j1GjRiElJQVz587F+vXrGQgRkddYM0REunbNNdfg559/xn//+19cf/31wS4OEekQc4aISLe+/PJL/PLLLzCbzUhKSgp2cYhIp1gzRES69MMPP2DgwIF444038MEHH6Bx48b4+OOPg10sItIh5gwRke4cPHgQmZmZmDZtGnJyctCpUyf07NkT33//Pa699tpgF4+IdIY1Q0SkK2VlZejXrx8GDBiAf/zjH7blI0aMQE1NDVauXBnE0hGRHjEYIiIiIkNjAjUREREZGoMhIiIiMjQGQ0RERGRoDIaIiIjI0BgMERERkaExGCIiIiJDYzBEREREhsZgiIiIiAyNwRAREREZGoMhIiIiMjQGQ0RERGRoDIaIiIjI0P4/MwC7jZhxSogAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "theta from own sdg\n",
- "[[4.03520637]\n",
- " [3.00377102]]\n"
- ]
- }
- ],
+ "execution_count": 20,
+ "id": "8c744606",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Autograd to calculate gradients using SGD\n",
"# OLS example\n",
@@ -2054,35 +2065,23 @@
},
{
"cell_type": "markdown",
- "id": "e580483f",
- "metadata": {},
+ "id": "e6557eae",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Same code but now with momentum gradient descent"
]
},
{
"cell_type": "code",
- "execution_count": 9,
- "id": "68895d3f",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[3.57997989]\n",
- " [3.36280243]]\n",
- "Eigenvalues of Hessian Matrix:[0.27223548 4.6027095 ]\n",
- "theta from own gd\n",
- "[[3.57820693]\n",
- " [3.36424698]]\n",
- "theta from own sdg with momentum\n",
- "[[3.57345748]\n",
- " [3.3418244 ]]\n"
- ]
- }
- ],
+ "execution_count": 21,
+ "id": "d3c6077a",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Autograd to calculate gradients using SGD\n",
"# OLS example\n",
@@ -2155,33 +2154,23 @@
},
{
"cell_type": "markdown",
- "id": "01c29c9e",
- "metadata": {},
+ "id": "7c3df9b4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Similar (second order function now) problem but now with AdaGrad"
]
},
{
"cell_type": "code",
- "execution_count": 10,
- "id": "36a00e5a",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[2.]\n",
- " [3.]\n",
- " [4.]]\n",
- "theta from own AdaGrad\n",
- "[[2.00005247]\n",
- " [2.99962516]\n",
- " [4.00036824]]\n"
- ]
- }
- ],
+ "execution_count": 22,
+ "id": "4e657530",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Autograd to calculate gradients using AdaGrad and Stochastic Gradient descent\n",
"# OLS example\n",
@@ -2235,41 +2224,33 @@
},
{
"cell_type": "markdown",
- "id": "18ccca46",
- "metadata": {},
+ "id": "d5c2eaaf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Running this code we note an almost perfect agreement with the results from matrix inversion."
]
},
{
"cell_type": "markdown",
- "id": "e076c773",
- "metadata": {},
+ "id": "1226db61",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## RMSprop for adaptive learning rate with Stochastic Gradient Descent"
]
},
{
"cell_type": "code",
- "execution_count": 11,
- "id": "cb4ad1d3",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[2.]\n",
- " [3.]\n",
- " [4.]]\n",
- "theta from own RMSprop\n",
- "[[2.00018163]\n",
- " [2.99845941]\n",
- " [4.00131372]]\n"
- ]
- }
- ],
+ "execution_count": 23,
+ "id": "3aff1933",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Autograd to calculate gradients using RMSprop and Stochastic Gradient descent\n",
"# OLS example\n",
@@ -2329,33 +2310,23 @@
},
{
"cell_type": "markdown",
- "id": "2253fa34",
- "metadata": {},
+ "id": "0a895151",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## And finally [ADAM](https://arxiv.org/pdf/1412.6980.pdf)"
]
},
{
"cell_type": "code",
- "execution_count": 12,
- "id": "92b3454a",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Own inversion\n",
- "[[2.]\n",
- " [3.]\n",
- " [4.]]\n",
- "theta from own ADAM\n",
- "[[2.0000072 ]\n",
- " [2.99998001]\n",
- " [4.00003082]]\n"
- ]
- }
- ],
+ "execution_count": 24,
+ "id": "5b8f8cb4",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# Using Autograd to calculate gradients using RMSprop and Stochastic Gradient descent\n",
"# OLS example\n",
@@ -2420,8 +2391,10 @@
},
{
"cell_type": "markdown",
- "id": "c2025d97",
- "metadata": {},
+ "id": "34ed84fe",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## And Logistic Regression"
]
@@ -2429,8 +2402,11 @@
{
"cell_type": "code",
"execution_count": 25,
- "id": "3f6d8746",
- "metadata": {},
+ "id": "cf5dc81e",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import autograd.numpy as np\n",
@@ -2470,8 +2446,10 @@
},
{
"cell_type": "markdown",
- "id": "716627e3",
- "metadata": {},
+ "id": "8f364a4e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Introducing [JAX](https://jax.readthedocs.io/en/latest/)\n",
"\n",
@@ -2487,8 +2465,11 @@
{
"cell_type": "code",
"execution_count": 26,
- "id": "5c938af4",
- "metadata": {},
+ "id": "744497bc",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"import jax.numpy as jnp\n",
@@ -2504,8 +2485,10 @@
},
{
"cell_type": "markdown",
- "id": "b087cc5f",
- "metadata": {},
+ "id": "e5ff87cf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Introduction to Neural networks\n",
"\n",
@@ -2520,8 +2503,10 @@
},
{
"cell_type": "markdown",
- "id": "c040b49e",
- "metadata": {},
+ "id": "12f3b1a5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Artificial neurons\n",
"\n",
@@ -2542,8 +2527,10 @@
},
{
"cell_type": "markdown",
- "id": "663a7548",
- "metadata": {},
+ "id": "22dd10ba",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -2558,8 +2545,10 @@
},
{
"cell_type": "markdown",
- "id": "7d41caae",
- "metadata": {},
+ "id": "e5c43c9d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here, the output $y$ of the neuron is the value of its activation function, which have as input\n",
"a weighted sum of signals $x_i, \\dots ,x_n$ received by $n$ other neurons.\n",
@@ -2596,8 +2585,10 @@
},
{
"cell_type": "markdown",
- "id": "8cd5fa1c",
- "metadata": {},
+ "id": "1fb94a47",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Neural network types\n",
"\n",
@@ -2623,8 +2614,10 @@
},
{
"cell_type": "markdown",
- "id": "0b2c6e40",
- "metadata": {},
+ "id": "d0830140",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Feed-forward neural networks\n",
"\n",
@@ -2642,8 +2635,10 @@
},
{
"cell_type": "markdown",
- "id": "90e946b7",
- "metadata": {},
+ "id": "6478d3d4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Convolutional Neural Network\n",
"\n",
@@ -2669,8 +2664,10 @@
},
{
"cell_type": "markdown",
- "id": "1964f9e3",
- "metadata": {},
+ "id": "c3844779",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Recurrent neural networks\n",
"\n",
@@ -2688,8 +2685,10 @@
},
{
"cell_type": "markdown",
- "id": "faf981a1",
- "metadata": {},
+ "id": "62b23b8b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Other types of networks\n",
"\n",
@@ -2707,8 +2706,10 @@
},
{
"cell_type": "markdown",
- "id": "3667182a",
- "metadata": {},
+ "id": "d2fed241",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Multilayer perceptrons\n",
"\n",
@@ -2722,8 +2723,10 @@
},
{
"cell_type": "markdown",
- "id": "5dd1a89f",
- "metadata": {},
+ "id": "b9ce280b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Why multilayer perceptrons?\n",
"\n",
@@ -2741,8 +2744,10 @@
},
{
"cell_type": "markdown",
- "id": "da5b8927",
- "metadata": {},
+ "id": "2c48abd7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Illustration of a single perceptron model and a multi-perceptron model\n",
"\n",
@@ -2755,8 +2760,10 @@
},
{
"cell_type": "markdown",
- "id": "3bba849e",
- "metadata": {},
+ "id": "b86c3a8e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Examples of XOR, OR and AND gates\n",
"\n",
@@ -2770,8 +2777,11 @@
{
"cell_type": "code",
"execution_count": 27,
- "id": "de11d95e",
- "metadata": {},
+ "id": "af7c9388",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"\"\"\"\n",
@@ -2808,16 +2818,20 @@
},
{
"cell_type": "markdown",
- "id": "b0477050",
- "metadata": {},
+ "id": "6e05e825",
+ "metadata": {
+ "editable": true
+ },
"source": [
"What is happening here?"
]
},
{
"cell_type": "markdown",
- "id": "1d72d90e",
- "metadata": {},
+ "id": "533b515d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Does Logistic Regression do a better Job?"
]
@@ -2825,8 +2839,11 @@
{
"cell_type": "code",
"execution_count": 28,
- "id": "501aa7b5",
- "metadata": {},
+ "id": "c453e254",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"\"\"\"\n",
@@ -2882,16 +2899,20 @@
},
{
"cell_type": "markdown",
- "id": "03908b42",
- "metadata": {},
+ "id": "c57d5220",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Not exactly impressive, but somewhat better."
]
},
{
"cell_type": "markdown",
- "id": "91971469",
- "metadata": {},
+ "id": "903f37d7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Adding Neural Networks"
]
@@ -2899,8 +2920,11 @@
{
"cell_type": "code",
"execution_count": 29,
- "id": "f1717531",
- "metadata": {},
+ "id": "9daf90bc",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"\n",
@@ -2916,8 +2940,10 @@
},
{
"cell_type": "markdown",
- "id": "05726714",
- "metadata": {},
+ "id": "c38a3e75",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Mathematical model\n",
"\n",
@@ -2926,8 +2952,10 @@
},
{
"cell_type": "markdown",
- "id": "1cf57e1c",
- "metadata": {},
+ "id": "fe72762b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"y = f\\left(\\sum_{i=1}^n w_ix_i + b_i\\right) = f(z),\n",
@@ -2936,8 +2964,10 @@
},
{
"cell_type": "markdown",
- "id": "57743f5e",
- "metadata": {},
+ "id": "7b2617e5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"This function receives $x_i$ as inputs.\n",
"Here the activation $z=(\\sum_{i=1}^n w_ix_i+b_i)$. \n",
@@ -2949,8 +2979,10 @@
},
{
"cell_type": "markdown",
- "id": "2d3f8338",
- "metadata": {},
+ "id": "c6aba13a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Mathematical model\n",
"\n",
@@ -2959,8 +2991,10 @@
},
{
"cell_type": "markdown",
- "id": "20be0ccb",
- "metadata": {},
+ "id": "09103550",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -2974,8 +3008,10 @@
},
{
"cell_type": "markdown",
- "id": "d289b4c8",
- "metadata": {},
+ "id": "a6813241",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Here $b_i$ is the so-called bias which is normally needed in\n",
"case of zero activation weights or inputs. How to fix the biases and\n",
@@ -2987,8 +3023,10 @@
},
{
"cell_type": "markdown",
- "id": "498c2494",
- "metadata": {},
+ "id": "5e0f3773",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3003,8 +3041,10 @@
},
{
"cell_type": "markdown",
- "id": "77995e5d",
- "metadata": {},
+ "id": "dae911bf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we assume that all nodes in the same layer have identical\n",
"activation functions, hence the notation $f$. In general, we could assume in the more general case that different layers have different activation functions.\n",
@@ -3013,8 +3053,10 @@
},
{
"cell_type": "markdown",
- "id": "ef353d76",
- "metadata": {},
+ "id": "79c66932",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3029,8 +3071,10 @@
},
{
"cell_type": "markdown",
- "id": "0a25d2f4",
- "metadata": {},
+ "id": "ac9662b3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $N_l$ is the number of nodes in layer $l$. When the output of\n",
"all the nodes in the first hidden layer are computed, the values of\n",
@@ -3040,8 +3084,10 @@
},
{
"cell_type": "markdown",
- "id": "d7d29703",
- "metadata": {},
+ "id": "11140783",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Mathematical model\n",
"\n",
@@ -3050,8 +3096,10 @@
},
{
"cell_type": "markdown",
- "id": "94eddeb9",
- "metadata": {},
+ "id": "8f5ed6d9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3066,8 +3114,10 @@
},
{
"cell_type": "markdown",
- "id": "f047f4c6",
- "metadata": {},
+ "id": "f911c359",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3082,16 +3132,20 @@
},
{
"cell_type": "markdown",
- "id": "91d4806e",
- "metadata": {},
+ "id": "b2ccf184",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we have substituted $y_k^1$ with the inputs $x_k$. Finally, the ANN output reads"
]
},
{
"cell_type": "markdown",
- "id": "7342e125",
- "metadata": {},
+ "id": "a0243dfc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3106,8 +3160,10 @@
},
{
"cell_type": "markdown",
- "id": "5068e976",
- "metadata": {},
+ "id": "d9716aa2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3123,8 +3179,10 @@
},
{
"cell_type": "markdown",
- "id": "b51a241d",
- "metadata": {},
+ "id": "89a2bf14",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Mathematical model\n",
"\n",
@@ -3134,8 +3192,10 @@
},
{
"cell_type": "markdown",
- "id": "5a7b4915",
- "metadata": {},
+ "id": "5cd56de9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3150,8 +3210,10 @@
},
{
"cell_type": "markdown",
- "id": "c3215b7f",
- "metadata": {},
+ "id": "2c5c7c83",
+ "metadata": {
+ "editable": true
+ },
"source": [
"which illustrates a basic property of MLPs: The only independent\n",
"variables are the input values $x_n$."
@@ -3159,8 +3221,10 @@
},
{
"cell_type": "markdown",
- "id": "f92eedb0",
- "metadata": {},
+ "id": "20ec2193",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Mathematical model\n",
"\n",
@@ -3176,8 +3240,10 @@
},
{
"cell_type": "markdown",
- "id": "b658fa6d",
- "metadata": {},
+ "id": "e6b4e4cc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3192,8 +3258,10 @@
},
{
"cell_type": "markdown",
- "id": "8506281a",
- "metadata": {},
+ "id": "e712d7b3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where the parameters $c_i$ are weights and biases. By adjusting these\n",
"parameters, the activation functions can be shifted up and down or\n",
@@ -3203,8 +3271,10 @@
},
{
"cell_type": "markdown",
- "id": "0ad3f400",
- "metadata": {},
+ "id": "db75437e",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Matrix-vector notation\n",
"\n",
@@ -3221,8 +3291,10 @@
},
{
"cell_type": "markdown",
- "id": "7b431efc",
- "metadata": {},
+ "id": "57160f77",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3252,8 +3324,10 @@
},
{
"cell_type": "markdown",
- "id": "d129b057",
- "metadata": {},
+ "id": "3995e5e8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Matrix-vector notation and activation\n",
"\n",
@@ -3262,8 +3336,10 @@
},
{
"cell_type": "markdown",
- "id": "7af14562",
- "metadata": {},
+ "id": "199d7cc7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
"\n",
@@ -3279,8 +3355,10 @@
},
{
"cell_type": "markdown",
- "id": "0b7e127c",
- "metadata": {},
+ "id": "85debee6",
+ "metadata": {
+ "editable": true
+ },
"source": [
"This is not just a convenient and compact notation, but also a useful\n",
"and intuitive way to think about MLPs: The output is calculated by a\n",
@@ -3291,8 +3369,10 @@
},
{
"cell_type": "markdown",
- "id": "91266ae3",
- "metadata": {},
+ "id": "4cc91a1c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Activation functions\n",
"\n",
@@ -3312,8 +3392,10 @@
},
{
"cell_type": "markdown",
- "id": "54728fbd",
- "metadata": {},
+ "id": "ee713d30",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Activation functions, Logistic and Hyperbolic ones\n",
"\n",
@@ -3329,8 +3411,10 @@
},
{
"cell_type": "markdown",
- "id": "17b851fb",
- "metadata": {},
+ "id": "9f124aa2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"f(x) = \\frac{1}{1 + e^{-x}},\n",
@@ -3339,16 +3423,20 @@
},
{
"cell_type": "markdown",
- "id": "6e17f015",
- "metadata": {},
+ "id": "5bdac14d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and the *hyperbolic tangent* function"
]
},
{
"cell_type": "markdown",
- "id": "574fbcd0",
- "metadata": {},
+ "id": "82380c4f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"f(x) = \\tanh(x)\n",
@@ -3357,8 +3445,10 @@
},
{
"cell_type": "markdown",
- "id": "daa971d1",
- "metadata": {},
+ "id": "fd5115a8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"### Relevance\n",
"\n",
@@ -3372,8 +3462,11 @@
{
"cell_type": "code",
"execution_count": 30,
- "id": "c12bc7fe",
- "metadata": {},
+ "id": "c45b4c2f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"\"\"\"The sigmoid function (or the logistic curve) is a \n",
@@ -3450,25 +3543,7 @@
]
}
],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.10"
- }
- },
+ "metadata": {},
"nbformat": 4,
"nbformat_minor": 5
}
diff --git a/doc/src/week40/week40.do.txt b/doc/src/week40/week40.do.txt
index dcf213c5b..db3e7bce2 100644
--- a/doc/src/week40/week40.do.txt
+++ b/doc/src/week40/week40.do.txt
@@ -18,7 +18,9 @@ DATE: October 2-6, 2023
!bblock Material for the lecture on Thursday October 5, 2023
* Stochastic Gradient descent with examples and automatic differentiation
- * Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ * Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model.
+ * "Video of lecture":"https://youtu.be/75pr3hKY20U"
+ * "Whiteboard notes at URL:"https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2023/NotesOct5.pdf"
* Readings and Videos:
* These lecture notes
* For a good discussion on gradient methods, we would like to recommend Goodfellow et al section 4.3-4.5 and sections 8.3-8.6. We will come back to the latter chapter in our discussion of Neural networks as well.