From 1d3b17f7cc7e59ff7d6a7e26b37497934d0ed015 Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Mon, 30 Sep 2024 12:57:28 +0200 Subject: [PATCH] update with video link --- doc/pub/week40/html/._week40-bs002.html | 6 +- doc/pub/week40/html/week40-reveal.html | 6 +- doc/pub/week40/html/week40-solarized.html | 6 +- doc/pub/week40/html/week40.html | 6 +- doc/pub/week40/ipynb/ipynb-week40-src.tar.gz | Bin 526744 -> 526744 bytes doc/pub/week40/ipynb/week40.ipynb | 1647 +++++++++--------- doc/src/week40/week40.do.txt | 4 +- 7 files changed, 808 insertions(+), 867 deletions(-) diff --git a/doc/pub/week40/html/._week40-bs002.html b/doc/pub/week40/html/._week40-bs002.html index 59d9eb572..b8e8ec424 100644 --- a/doc/pub/week40/html/._week40-bs002.html +++ b/doc/pub/week40/html/._week40-bs002.html @@ -368,9 +368,9 @@ MathJax.Hub.Config({
  1. Stochastic Gradient descent with examples and automatic differentiation
  2. -
  3. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model - -
  4. +
  5. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model
  6. +
  7. Video of lecture
  8. +
  9. "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2024/NotesSeptember30.pdf
diff --git a/doc/pub/week40/html/week40-reveal.html b/doc/pub/week40/html/week40-reveal.html index e071e82b3..3a56caebf 100644 --- a/doc/pub/week40/html/week40-reveal.html +++ b/doc/pub/week40/html/week40-reveal.html @@ -205,9 +205,9 @@ MathJax.Hub.Config({

  1. Stochastic Gradient descent with examples and automatic differentiation
  2. -

  3. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model - -
  4. +

  5. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model
  6. +

  7. Video of lecture
  8. +

  9. "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2024/NotesSeptember30.pdf
diff --git a/doc/pub/week40/html/week40-solarized.html b/doc/pub/week40/html/week40-solarized.html index df4127fb1..707e667af 100644 --- a/doc/pub/week40/html/week40-solarized.html +++ b/doc/pub/week40/html/week40-solarized.html @@ -320,9 +320,9 @@ MathJax.Hub.Config({

  1. Stochastic Gradient descent with examples and automatic differentiation
  2. -
  3. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model - -
  4. +
  5. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model
  6. +
  7. Video of lecture
  8. +
  9. "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2024/NotesSeptember30.pdf
diff --git a/doc/pub/week40/html/week40.html b/doc/pub/week40/html/week40.html index e72c11ae0..9e8b673ff 100644 --- a/doc/pub/week40/html/week40.html +++ b/doc/pub/week40/html/week40.html @@ -397,9 +397,9 @@ MathJax.Hub.Config({

  1. Stochastic Gradient descent with examples and automatic differentiation
  2. -
  3. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model - -
  4. +
  5. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model
  6. +
  7. Video of lecture
  8. +
  9. "Whiteboard notes at https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2024/NotesSeptember30.pdf
diff --git a/doc/pub/week40/ipynb/ipynb-week40-src.tar.gz b/doc/pub/week40/ipynb/ipynb-week40-src.tar.gz index 24e932b68ac289899cc9689778796a185012bc5a..e0c1860c15f3691ccfd6510c0ab3707ae3f72a99 100644 GIT binary patch delta 41 vcmbO+Sz*Rx1vdF^4hGJaMz&Tq##T0_RyO8VHkMX4)>by42>Vtxj!B#V;p_>j delta 41 vcmbO+Sz*Rx1vdF^4u%CLjcl!KjIC@;t!&J#Y%Hy8tgUQ75%#TY9FsT!>W&HV diff --git a/doc/pub/week40/ipynb/week40.ipynb b/doc/pub/week40/ipynb/week40.ipynb index 3d58a21fa..76d3293a0 100644 --- a/doc/pub/week40/ipynb/week40.ipynb +++ b/doc/pub/week40/ipynb/week40.ipynb @@ -2,8 +2,10 @@ "cells": [ { "cell_type": "markdown", - "id": "54c44098", - "metadata": {}, + "id": "8e9453d1", + "metadata": { + "editable": true + }, "source": [ "\n", @@ -12,8 +14,10 @@ }, { "cell_type": "markdown", - "id": "f64073c9", - "metadata": {}, + "id": "63316b19", + "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,29 +27,37 @@ }, { "cell_type": "markdown", - "id": "d2d0f844", - "metadata": {}, + "id": "e79ea664", + "metadata": { + "editable": true + }, "source": [ "## Plans for week 40" ] }, { "cell_type": "markdown", - "id": "c9630d37", - "metadata": {}, + "id": "ffd59324", + "metadata": { + "editable": true + }, "source": [ "## Lecture Monday September 30, 2024\n", "1. Stochastic Gradient descent with examples and automatic differentiation\n", "\n", "2. If we get time, we start with the basics of Neural Networks, setting up the basic steps, from the simple perceptron model to the multi-layer perceptron model\n", - "\n", - "" + "\n", + "3. [Video of lecture](https://youtu.be/jdJoOrCIdII)\n", + "\n", + "4. \"Whiteboard notes at " ] }, { "cell_type": "markdown", - "id": "4b447216", - "metadata": {}, + "id": "2a36e9f1", + "metadata": { + "editable": true + }, "source": [ "## Suggested readings and videos\n", "**Readings and Videos:**\n", @@ -67,8 +79,10 @@ }, { "cell_type": "markdown", - "id": "8fb799c1", - "metadata": {}, + "id": "72efb7fe", + "metadata": { + "editable": true + }, "source": [ "## Lab sessions Tuesday and Wednesday\n", "**Material for the active learning sessions on Tuesday and Wednesday.**\n", @@ -84,8 +98,10 @@ }, { "cell_type": "markdown", - "id": "3a202eb3", - "metadata": {}, + "id": "53f5d221", + "metadata": { + "editable": true + }, "source": [ "## Summary from last week, using gradient descent methods, limitations\n", "\n", @@ -104,8 +120,10 @@ }, { "cell_type": "markdown", - "id": "f0b36267", - "metadata": {}, + "id": "6d7682ea", + "metadata": { + "editable": true + }, "source": [ "## Simple implementation of GD for OLS, Ridge and Lasso\n", "\n", @@ -115,29 +133,13 @@ }, { "cell_type": "code", - "execution_count": 42, - "id": "2d9d73e5", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Parameters for OLS using gradient descent\n", - "[[4.04553909]\n", - " [2.85718534]\n", - " [5.07124072]]\n", - "Parameters for Ridge using gradient descent\n", - "[[3.8048267 ]\n", - " [3.33344121]\n", - " [4.85905287]]\n", - "Parameters for Lasso using gradient descent\n", - "[[3.87867385]\n", - " [3.192587 ]\n", - " [4.93045409]]\n" - ] - } - ], + "execution_count": 1, + "id": "a2fc2e7d", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "from random import random, seed\n", "import numpy as np\n", @@ -186,8 +188,10 @@ }, { "cell_type": "markdown", - "id": "fcf0f686", - "metadata": {}, + "id": "574124ae", + "metadata": { + "editable": true + }, "source": [ "## But none of these can compete with Newton's method\n", "\n", @@ -196,30 +200,13 @@ }, { "cell_type": "code", - "execution_count": 43, - "id": "1550b223", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[4.]\n", - " [3.]\n", - " [5.]]\n", - "0 [-26.91927647] [-35.76071889]\n", - "1 [-6.07158768e-14] [-1.55935271e-13]\n", - "2 [-6.03961325e-16] [-9.79527859e-16]\n", - "3 [-1.54543045e-15] [-2.38042396e-15]\n", - "4 [1.27897692e-15] [1.94409177e-15]\n", - "beta from own Newton code\n", - "[[4.]\n", - " [3.]\n", - " [5.]]\n" - ] - } - ], + "execution_count": 2, + "id": "7744cc51", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Newton's method\n", "from random import random, seed\n", @@ -258,8 +245,10 @@ }, { "cell_type": "markdown", - "id": "1777d437", - "metadata": {}, + "id": "1c269cc7", + "metadata": { + "editable": true + }, "source": [ "## Gradient descent and Logistic regression\n", "\n", @@ -270,18 +259,13 @@ }, { "cell_type": "code", - "execution_count": 44, - "id": "94a3c22b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Predictions: [1, 1, 1, 1]\n" - ] - } - ], + "execution_count": 3, + "id": "1f3ca684", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "import numpy as np\n", "class LogisticRegression:\n", @@ -318,8 +302,10 @@ }, { "cell_type": "markdown", - "id": "5d9bd47b", - "metadata": {}, + "id": "bc2e837c", + "metadata": { + "editable": true + }, "source": [ "## Overview video on Stochastic Gradient Descent\n", "\n", @@ -335,8 +321,10 @@ }, { "cell_type": "markdown", - "id": "0107149a", - "metadata": {}, + "id": "33bb2fa7", + "metadata": { + "editable": true + }, "source": [ "## Batches and mini-batches\n", "\n", @@ -354,8 +342,10 @@ }, { "cell_type": "markdown", - "id": "acb322f8", - "metadata": {}, + "id": "8b20183c", + "metadata": { + "editable": true + }, "source": [ "## Stochastic Gradient Descent (SGD)\n", "\n", @@ -384,8 +374,10 @@ }, { "cell_type": "markdown", - "id": "9073ab44", - "metadata": {}, + "id": "ab6ed60a", + "metadata": { + "editable": true + }, "source": [ "## Stochastic Gradient Descent\n", "\n", @@ -399,8 +391,10 @@ }, { "cell_type": "markdown", - "id": "0a457a90", - "metadata": {}, + "id": "f5652055", + "metadata": { + "editable": true + }, "source": [ "$$\n", "C(\\mathbf{\\beta}) = \\sum_{i=1}^n c_i(\\mathbf{x}_i,\n", @@ -410,8 +404,10 @@ }, { "cell_type": "markdown", - "id": "be758e1d", - "metadata": {}, + "id": "6c1eec95", + "metadata": { + "editable": true + }, "source": [ "## Computation of gradients\n", "\n", @@ -421,8 +417,10 @@ }, { "cell_type": "markdown", - "id": "411db876", - "metadata": {}, + "id": "74b3be91", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\nabla_\\beta C(\\mathbf{\\beta}) = \\sum_i^n \\nabla_\\beta c_i(\\mathbf{x}_i,\n", @@ -432,8 +430,10 @@ }, { "cell_type": "markdown", - "id": "c23bb658", - "metadata": {}, + "id": "1bfa2b6a", + "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", @@ -444,8 +444,10 @@ }, { "cell_type": "markdown", - "id": "adea87fe", - "metadata": {}, + "id": "5d929a3e", + "metadata": { + "editable": true + }, "source": [ "## SGD example\n", "As an example, suppose we have $10$ data points $(\\mathbf{x}_1,\\cdots, \\mathbf{x}_{10})$ \n", @@ -464,8 +466,10 @@ }, { "cell_type": "markdown", - "id": "5e5dee91", - "metadata": {}, + "id": "8cefa944", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\nabla_{\\beta}\n", @@ -477,8 +481,10 @@ }, { "cell_type": "markdown", - "id": "97047a5f", - "metadata": {}, + "id": "e7cb2c1e", + "metadata": { + "editable": true + }, "source": [ "## The gradient step\n", "\n", @@ -487,8 +493,10 @@ }, { "cell_type": "markdown", - "id": "d9a59d5c", - "metadata": {}, + "id": "2487eaf9", + "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", @@ -498,8 +506,10 @@ }, { "cell_type": "markdown", - "id": "a9b20c1c", - "metadata": {}, + "id": "ead18813", + "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", @@ -510,17 +520,22 @@ }, { "cell_type": "markdown", - "id": "3867a529", - "metadata": {}, + "id": "184170ec", + "metadata": { + "editable": true + }, "source": [ "## Simple example code" ] }, { "cell_type": "code", - "execution_count": 45, - "id": "e5f4f9a8", - "metadata": {}, + "execution_count": 4, + "id": "2d019235", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import numpy as np \n", @@ -541,8 +556,10 @@ }, { "cell_type": "markdown", - "id": "786c5900", - "metadata": {}, + "id": "6236f831", + "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", @@ -555,8 +572,10 @@ }, { "cell_type": "markdown", - "id": "5f510fcf", - "metadata": {}, + "id": "7368338b", + "metadata": { + "editable": true + }, "source": [ "## When do we stop?\n", "\n", @@ -574,8 +593,10 @@ }, { "cell_type": "markdown", - "id": "1f0043c6", - "metadata": {}, + "id": "08fe0109", + "metadata": { + "editable": true + }, "source": [ "## Slightly different approach\n", "\n", @@ -592,8 +613,10 @@ }, { "cell_type": "markdown", - "id": "fbc5d941", - "metadata": {}, + "id": "93d53198", + "metadata": { + "editable": true + }, "source": [ "## Time decay rate\n", "\n", @@ -608,18 +631,13 @@ }, { "cell_type": "code", - "execution_count": 46, - "id": "f96c423d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "gamma_j after 500 epochs: 9.97108e-05\n" - ] - } - ], + "execution_count": 5, + "id": "c9240812", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "import numpy as np \n", "\n", @@ -649,8 +667,10 @@ }, { "cell_type": "markdown", - "id": "cdf1efeb", - "metadata": {}, + "id": "c59026fd", + "metadata": { + "editable": true + }, "source": [ "## Code with a Number of Minibatches which varies\n", "\n", @@ -659,37 +679,13 @@ }, { "cell_type": "code", - "execution_count": 47, - "id": "e221b4f3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[3.8913351 ]\n", - " [2.83275949]]\n", - "Eigenvalues of Hessian Matrix:[0.33918672 3.94965845]\n", - "theta from own gd\n", - "[[3.8913351 ]\n", - " [2.83275949]]\n", - "theta from own sdg\n", - "[[3.9644494 ]\n", - " [2.80907715]]\n" - ] - }, - { - "data": { - "image/png": "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7jdkz913342vv/4ar7/+Oq5evYq4uDiMGzcOzz33nEeOi8gfSUII4etCEBEREfkK+wwRERGRqjEYIiIiIlVjMERERESqxmCIiIiIVI3BEBEREakagyEiIiJSNVXkGTIYDDh16hQaNGhgNZ09ERERyY8QApcvX0ZsbCwCAjxXf6OKYOjUqVNISEjwdTGIiIjIBfn5+YiPj/fY/lURDDVo0ACA8WSGhYX5uDRERETkiJKSEiQkJJif456iimDI1DQWFhbGYIiIiEhhPN3FhR2oiYiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNV8Hgxt2LABQ4cORWxsLCRJwsqVK21u++ijj0KSJLzxxhteKx8RERH5N58HQ6WlpWjfvj3mz59f43YrV67E1q1bERsb66WSERERkRoE+boAgwYNwqBBg2rcpqCgAFOmTMGqVaswePBgL5WMiIiI1MDnNUP2GAwGjB07Fk8//TTS0tJ8XRwiIiLyMz6vGbJn3rx5CAoKwhNPPOHwe8rLy1FeXm5+XVJS4omiERERkR+Qdc3Qjh078Oabb2LJkiWQJMnh982dOxfh4eHmn4SEBA+WkoiIiJRM1sHQxo0bUVRUhGbNmiEoKAhBQUE4fvw4nnzySSQmJtp838yZM1FcXGz+yc/P916hiYiISFFk3Uw2duxY9OvXz2LZwIEDMXbsWEycONHm+zQaDTQajaeLR0RERH7A58HQlStXcOTIEfPrvLw87N69GxEREWjWrBkaN25ssX1wcDCio6PRpk0bbxeViIiI/JDPg6Ht27cjIyPD/HratGkAgPHjx2PJkiU+KhURERGphc+DoT59+kAI4fD2x44d81xhiIiISHVk3YGaiIiIyNMYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1nwdDGzZswNChQxEbGwtJkrBy5UrzuoqKCkyfPh2333476tWrh9jYWIwbNw6nTp3yXYGJiIjIr/g8GCotLUX79u0xf/78auuuXr2KnTt34q9//St27tyJ7OxsHDp0CPfee68PSkpERET+SBJCCF8XwkSSJKxYsQLDhw+3uc22bdtw55134vjx42jWrJlD+y0pKUF4eDiKi4sRFhbmptISERGRJ3nr+R3ksT17SHFxMSRJQsOGDW1uU15ejvLycvPrkpISL5SMiIiIlMjnzWTOKCsrw4wZMzBmzJgaI8S5c+ciPDzc/JOQkODFUhIREZGSKCYYqqiowKhRo2AwGPDuu+/WuO3MmTNRXFxs/snPz/dSKYmIiEhpFNFMVlFRgZEjRyIvLw/r1q2z226o0Wig0Wi8VDoiIiJSMtkHQ6ZA6PDhw8jJyUHjxo19XSQiIiLyIz4Phq5cuYIjR46YX+fl5WH37t2IiIhAbGwsRowYgZ07d+Lbb7+FXq9HYWEhACAiIgIhISG+KjYRERH5CZ8Prc/NzUVGRka15ePHj8esWbOQlJRk9X05OTno06ePQ5/BofVERETKo5qh9X369EFN8ZiM0iARERGRH1LMaDIiIiIiT2AwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkakG+LgAREZFX6fXAxo3A6dNATAyQng4EBvq6VORDDIaIiEg9srOBP/8ZOHny5rL4eODNN4HMTN+Vi3yKzWRERKQO2dnAiBGWgRAAFBQYl2dn+6Zc5HMMhoiIyP/p9cYaISGqrzMty8oybkeqw2CI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R9G1a1er+1TC9b58+bLYtWuX2LVrlwAgXnvtNbFr1y5x/PhxIYT/3t/OHre/3N/OHre/3N/OHreJ0u/vxx9/XISHh4vc3FyL7+3Vq1fN2/jqHldcMCSEEO+8845o3ry5CAkJEZ06dbIYljd+/HjRu3dvi+1zc3NFx44dRUhIiEhMTBTvvfdetX1+8cUXok2bNiI4OFgkJydb3Fxy4cxx9+7dWwCo9jN+/HjzNllZWaJZs2YiJCRENG3aVAwYMEBs2rTJi0fkGGeOe968eaJly5YiNDRUNGrUSPTq1Ut899131fbpb9dbCCEuXbok6tSpIxYuXGh1f0q43qah07a+t/56fzt73P5yfzt73P5yf7vyPfeH+9vaMQMQixcvNm/jq3tculFAIiIiIlVSVJ8hIiIiIndjMERERESqxmCIiIiIVI3BEBEREakagyEiIiJSNQZDREREpGoMhoiIiEjVGAwRERGRqjEYIiIiIlVjMERERESqxmCIiBRp2bJlCA0NRUFBgXnZww8/jHbt2qG4uNiHJSMipeHcZESkSEIIdOjQAenp6Zg/fz5mz56N999/H1u2bEFcXJyvi0dEChLk6wIQEblCkiTMmTMHI0aMQGxsLN58801s3LiRgRAROY01Q0SkaJ06dcLevXuxevVq9O7d29fFISIFYp8hIlKsVatW4cCBA9Dr9YiKivJ1cYhIoVgzRESKtHPnTvTp0wfvvPMOPv30U9StWxdffPGFr4tFRArEPkNEpDjHjh3D4MGDMWPGDIwdOxapqam44447sGPHDnTu3NnXxSMihWHNEBEpyoULF9CzZ0/cdddd+Pe//21ePmzYMJSXl0On0/mwdESkRAyGiIiISNXYgZqIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkav8PtFJUDcDRlWgAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 6, + "id": "69483e42", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "%matplotlib inline\n", "\n", @@ -763,8 +759,10 @@ }, { "cell_type": "markdown", - "id": "7e858f37", - "metadata": {}, + "id": "00a93ec9", + "metadata": { + "editable": true + }, "source": [ "## Replace or not\n", "\n", @@ -776,8 +774,10 @@ }, { "cell_type": "markdown", - "id": "7dace8c0", - "metadata": {}, + "id": "3892eda2", + "metadata": { + "editable": true + }, "source": [ "## Momentum based GD\n", "\n", @@ -789,8 +789,10 @@ }, { "cell_type": "markdown", - "id": "3cd079d0", - "metadata": {}, + "id": "b77338e9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t) \\nonumber\n", @@ -799,8 +801,10 @@ }, { "cell_type": "markdown", - "id": "305a75c3", - "metadata": {}, + "id": "ae2940ef", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -815,8 +819,10 @@ }, { "cell_type": "markdown", - "id": "026d8598", - "metadata": {}, + "id": "d5391545", + "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", @@ -832,8 +838,10 @@ }, { "cell_type": "markdown", - "id": "80e73593", - "metadata": {}, + "id": "468f66f7", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\Delta \\boldsymbol{\\theta}_{t+1} = \\gamma \\Delta \\boldsymbol{\\theta}_t -\\ \\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t),\n", @@ -842,16 +850,20 @@ }, { "cell_type": "markdown", - "id": "4a5b87d4", - "metadata": {}, + "id": "02f46bf3", + "metadata": { + "editable": true + }, "source": [ "where we have defined $\\Delta \\boldsymbol{\\theta}_{t}= \\boldsymbol{\\theta}_t-\\boldsymbol{\\theta}_{t-1}$." ] }, { "cell_type": "markdown", - "id": "f9bbf0cd", - "metadata": {}, + "id": "918cb2c1", + "metadata": { + "editable": true + }, "source": [ "## More on momentum based approaches\n", "\n", @@ -864,8 +876,10 @@ }, { "cell_type": "markdown", - "id": "9e7986cc", - "metadata": {}, + "id": "207857c0", + "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", @@ -874,16 +888,20 @@ }, { "cell_type": "markdown", - "id": "50d69000", - "metadata": {}, + "id": "179c6d02", + "metadata": { + "editable": true + }, "source": [ "We can discretize this equation in the usual way to get" ] }, { "cell_type": "markdown", - "id": "e7d9df0a", - "metadata": {}, + "id": "c2203421", + "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", @@ -892,16 +910,20 @@ }, { "cell_type": "markdown", - "id": "e6f67ad8", - "metadata": {}, + "id": "ee21ecae", + "metadata": { + "editable": true + }, "source": [ "Rearranging this equation, we can rewrite this as" ] }, { "cell_type": "markdown", - "id": "443f0b02", - "metadata": {}, + "id": "3636a276", + "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", @@ -910,8 +932,10 @@ }, { "cell_type": "markdown", - "id": "d89ab74d", - "metadata": {}, + "id": "3f82ca0f", + "metadata": { + "editable": true + }, "source": [ "## Momentum parameter\n", "\n", @@ -924,8 +948,10 @@ }, { "cell_type": "markdown", - "id": "3401047f", - "metadata": {}, + "id": "2e162ba3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\gamma= {m \\over m +\\mu \\Delta t }, \\qquad \\eta = {(\\Delta t)^2 \\over m +\\mu \\Delta t}.\n", @@ -934,8 +960,10 @@ }, { "cell_type": "markdown", - "id": "c7c24040", - "metadata": {}, + "id": "dc9ad0bd", + "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", @@ -965,8 +993,10 @@ }, { "cell_type": "markdown", - "id": "22e04f6c", - "metadata": {}, + "id": "cd4caff1", + "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", @@ -975,8 +1005,10 @@ }, { "cell_type": "markdown", - "id": "65b1fa09", - "metadata": {}, + "id": "c630ad2a", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -991,16 +1023,20 @@ }, { "cell_type": "markdown", - "id": "7acccb8b", - "metadata": {}, + "id": "d6116018", + "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": "795e6ab5", - "metadata": {}, + "id": "cca487ac", + "metadata": { + "editable": true + }, "source": [ "## Second moment of the gradient\n", "\n", @@ -1028,8 +1064,10 @@ }, { "cell_type": "markdown", - "id": "dec5061d", - "metadata": {}, + "id": "8802b5a3", + "metadata": { + "editable": true + }, "source": [ "## RMS prop\n", "\n", @@ -1041,8 +1079,10 @@ }, { "cell_type": "markdown", - "id": "3dfb0934", - "metadata": {}, + "id": "b82d8d98", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -1057,8 +1097,10 @@ }, { "cell_type": "markdown", - "id": "bf4b7a89", - "metadata": {}, + "id": "99d81e71", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\mathbf{s}_t =\\beta \\mathbf{s}_{t-1} +(1-\\beta)\\mathbf{g}_t^2 \\nonumber\n", @@ -1067,8 +1109,10 @@ }, { "cell_type": "markdown", - "id": "510c8591", - "metadata": {}, + "id": "498d88c6", + "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", @@ -1077,8 +1121,10 @@ }, { "cell_type": "markdown", - "id": "1a0e569f", - "metadata": {}, + "id": "e5324aae", + "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", @@ -1093,8 +1139,10 @@ }, { "cell_type": "markdown", - "id": "977c9c79", - "metadata": {}, + "id": "127fb89b", + "metadata": { + "editable": true + }, "source": [ "## [ADAM optimizer](https://arxiv.org/abs/1412.6980)\n", "\n", @@ -1120,8 +1168,10 @@ }, { "cell_type": "markdown", - "id": "d188330b", - "metadata": {}, + "id": "e21ad815", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -1136,8 +1186,10 @@ }, { "cell_type": "markdown", - "id": "776b649a", - "metadata": {}, + "id": "daf2c00a", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\mathbf{m}_t = \\beta_1 \\mathbf{m}_{t-1} + (1-\\beta_1) \\mathbf{g}_t \\nonumber\n", @@ -1146,8 +1198,10 @@ }, { "cell_type": "markdown", - "id": "6f8a0d72", - "metadata": {}, + "id": "10196cda", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\mathbf{s}_t =\\beta_2 \\mathbf{s}_{t-1} +(1-\\beta_2)\\mathbf{g}_t^2 \\nonumber\n", @@ -1156,8 +1210,10 @@ }, { "cell_type": "markdown", - "id": "53f1a2ce", - "metadata": {}, + "id": "5bcd16ce", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\mathbf{m}}_t={\\mathbf{m}_t \\over 1-\\beta_1^t} \\nonumber\n", @@ -1166,8 +1222,10 @@ }, { "cell_type": "markdown", - "id": "cc7cd55a", - "metadata": {}, + "id": "ef456aa9", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\boldsymbol{\\mathbf{s}}_t ={\\mathbf{s}_t \\over1-\\beta_2^t} \\nonumber\n", @@ -1176,8 +1234,10 @@ }, { "cell_type": "markdown", - "id": "6bd6e651", - "metadata": {}, + "id": "4215260f", + "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", @@ -1186,8 +1246,10 @@ }, { "cell_type": "markdown", - "id": "677f1aef", - "metadata": {}, + "id": "04155565", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -1201,8 +1263,10 @@ }, { "cell_type": "markdown", - "id": "4bb1d86d", - "metadata": {}, + "id": "19629597", + "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", @@ -1218,8 +1282,10 @@ }, { "cell_type": "markdown", - "id": "812cca90", - "metadata": {}, + "id": "d24eefeb", + "metadata": { + "editable": true + }, "source": [ "$$\n", "\\Delta \\theta_{t+1}= -\\eta_t { \\boldsymbol{m}_t \\over \\sqrt{\\sigma_t^2 + m_t^2 }+\\epsilon}.\n", @@ -1228,8 +1294,10 @@ }, { "cell_type": "markdown", - "id": "51ddf251", - "metadata": {}, + "id": "17389f86", + "metadata": { + "editable": true + }, "source": [ "## Algorithms and codes for Adagrad, RMSprop and Adam\n", "\n", @@ -1240,8 +1308,10 @@ }, { "cell_type": "markdown", - "id": "676bc1af", - "metadata": {}, + "id": "0dd85ffe", + "metadata": { + "editable": true + }, "source": [ "## AdaGrad algorithm, taken from [Goodfellow et al](https://www.deeplearningbook.org/contents/optimization.html)\n", "\n", @@ -1254,8 +1324,10 @@ }, { "cell_type": "markdown", - "id": "5e0a4bd5", - "metadata": {}, + "id": "dafd2713", + "metadata": { + "editable": true + }, "source": [ "## RMSProp algorithm, taken from [Goodfellow et al](https://www.deeplearningbook.org/contents/optimization.html)\n", "\n", @@ -1268,8 +1340,10 @@ }, { "cell_type": "markdown", - "id": "d9eccc07", - "metadata": {}, + "id": "92141ee9", + "metadata": { + "editable": true + }, "source": [ "## ADAM algorithm, taken from [Goodfellow et al](https://www.deeplearningbook.org/contents/optimization.html)\n", "\n", @@ -1282,8 +1356,10 @@ }, { "cell_type": "markdown", - "id": "b81a38cf", - "metadata": {}, + "id": "3eea0f0d", + "metadata": { + "editable": true + }, "source": [ "## Practical tips\n", "\n", @@ -1300,8 +1376,10 @@ }, { "cell_type": "markdown", - "id": "2be4b8ad", - "metadata": {}, + "id": "3e503b13", + "metadata": { + "editable": true + }, "source": [ "## Automatic differentiation\n", "\n", @@ -1336,8 +1414,10 @@ }, { "cell_type": "markdown", - "id": "78ce59cc", - "metadata": {}, + "id": "1661f60b", + "metadata": { + "editable": true + }, "source": [ "$$\n", "f(x) = \\sin\\left(2\\pi x + x^2\\right)\n", @@ -1346,16 +1426,20 @@ }, { "cell_type": "markdown", - "id": "a1de3aaf", - "metadata": {}, + "id": "0e96167a", + "metadata": { + "editable": true + }, "source": [ "which has the following derivative" ] }, { "cell_type": "markdown", - "id": "99aa41ec", - "metadata": {}, + "id": "6814b1ce", + "metadata": { + "editable": true + }, "source": [ "$$\n", "f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right)\n", @@ -1364,36 +1448,23 @@ }, { "cell_type": "markdown", - "id": "76989f22", - "metadata": {}, + "id": "e74c7c25", + "metadata": { + "editable": true + }, "source": [ "Using **autograd** we have" ] }, { "cell_type": "code", - "execution_count": 48, - "id": "b9cd37f2", - "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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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The max absolute difference is: 1.77636e-15\n" - ] - } - ], + "execution_count": 7, + "id": "dedf04f1", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "import autograd.numpy as np\n", "\n", @@ -1433,8 +1504,10 @@ }, { "cell_type": "markdown", - "id": "7f495197", - "metadata": {}, + "id": "aade529a", + "metadata": { + "editable": true + }, "source": [ "## Using autograd\n", "\n", @@ -1447,19 +1520,13 @@ }, { "cell_type": "code", - "execution_count": 49, - "id": "3e79535c", - "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": 8, + "id": "4c1794a4", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "import autograd.numpy as np\n", "from autograd import grad\n", @@ -1482,8 +1549,10 @@ }, { "cell_type": "markdown", - "id": "9d764d7c", - "metadata": {}, + "id": "9add44d5", + "metadata": { + "editable": true + }, "source": [ "## Autograd with more complicated functions\n", "\n", @@ -1494,24 +1563,13 @@ }, { "cell_type": "code", - "execution_count": 50, - "id": "b171c0bc", - "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": 9, + "id": "6c8cf6bb", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "import autograd.numpy as np\n", "from autograd import grad\n", @@ -1550,25 +1608,32 @@ }, { "cell_type": "markdown", - "id": "65098808", - "metadata": {}, + "id": "36d17fa1", + "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": "5d60df18", - "metadata": {}, + "id": "3b20f92c", + "metadata": { + "editable": true + }, "source": [ "## More complicated functions using the elements of their arguments directly" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "cc4cc7eb", - "metadata": {}, + "execution_count": 10, + "id": "65494cf4", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1592,8 +1657,10 @@ }, { "cell_type": "markdown", - "id": "d71a9a54", - "metadata": {}, + "id": "e919aaa2", + "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", @@ -1605,17 +1672,22 @@ }, { "cell_type": "markdown", - "id": "290988a2", - "metadata": {}, + "id": "a35ecb63", + "metadata": { + "editable": true + }, "source": [ "## Functions using mathematical functions from Numpy" ] }, { "cell_type": "code", - "execution_count": 17, - "id": "4afa9fe3", - "metadata": {}, + "execution_count": 11, + "id": "9c385ad7", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1639,17 +1711,22 @@ }, { "cell_type": "markdown", - "id": "ec23dce0", - "metadata": {}, + "id": "a1ab1391", + "metadata": { + "editable": true + }, "source": [ "## More autograd" ] }, { "cell_type": "code", - "execution_count": 18, - "id": "be794060", - "metadata": {}, + "execution_count": 12, + "id": "c8f556cf", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1670,17 +1747,22 @@ }, { "cell_type": "markdown", - "id": "1d8e15c2", - "metadata": {}, + "id": "3b1376d7", + "metadata": { + "editable": true + }, "source": [ "## And with loops" ] }, { "cell_type": "code", - "execution_count": 19, - "id": "d696c96c", - "metadata": {}, + "execution_count": 13, + "id": "6b441243", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1711,9 +1793,12 @@ }, { "cell_type": "code", - "execution_count": 20, - "id": "5cdbff7d", - "metadata": {}, + "execution_count": 14, + "id": "664d1e42", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1729,17 +1814,22 @@ }, { "cell_type": "markdown", - "id": "ec95c41c", - "metadata": {}, + "id": "4d4f134d", + "metadata": { + "editable": true + }, "source": [ "## Using recursion" ] }, { "cell_type": "code", - "execution_count": 21, - "id": "06c8423e", - "metadata": {}, + "execution_count": 15, + "id": "19179722", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1773,16 +1863,20 @@ }, { "cell_type": "markdown", - "id": "4675445a", - "metadata": {}, + "id": "0bc6baa3", + "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": "3ea2267f", - "metadata": {}, + "id": "72aa52ec", + "metadata": { + "editable": true + }, "source": [ "## Using Autograd with OLS\n", "\n", @@ -1793,34 +1887,13 @@ }, { "cell_type": "code", - "execution_count": 51, - "id": "49c5a124", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[3.98094809]\n", - " [3.10504501]]\n", - "Eigenvalues of Hessian Matrix:[0.27678028 4.83090115]\n", - "theta from own gd\n", - "[[3.98094809]\n", - " [3.10504501]]\n" - ] - }, - { - "data": { - "image/png": "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ltx7773YuHEj3n//fRQUFCAqKgqPPfYYZs+e7ZD7IvJEKiGEcHUjiIiIiFyFOUNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUTRF1hnQ6HS5duoTatWubLWdPRERE8iOEQF5eHiIjI+Hl5bj+G0UEQ5cuXUJMTIyrm0FERER2yMzMRHR0tMPOr4hgqHbt2gD0L2ZQUJCLW0NERETWyM3NRUxMjPF73FEUEQwZhsaCgoIYDBEREbkZR6e4MIGaiIiIFI3BEBERESkagyEiIiJSNAZDREREpGgMhoiIiEjRGAwRERGRojEYIiIiIkVjMERERESKxmCIiIiIFI3BEBERESkagyEiIiJSNAZDREREpGgMhoiIiEjRGAwRERGRojEYIiIiIkVjMERERESKxmCIiIiIFM3lwdCOHTswdOhQREZGQqVSYcOGDZUe+8wzz0ClUmHJkiVOax8RERF5NpcHQ/n5+Wjbti2WLVtW5XEbNmzAr7/+isjISCe1jIiIiJTAx9UNGDhwIAYOHFjlMRcvXsTkyZPxww8/YPDgwU5qGRERESmBy3uGLNHpdBg3bhxeeukltGrVytXNISIiIg/j8p4hSxYuXAgfHx88//zzVj+nsLAQhYWFxse5ubmOaBoRERF5AFn3DO3btw9Lly7FqlWroFKprH7eggULEBwcbPyJiYlxYCuJiIjInck6GNq5cyeys7MRGxsLHx8f+Pj44Ny5c5g+fToaNWpU6fNmzZqFnJwc409mZqbzGk1ERERuRdbDZOPGjcP9999vsm3AgAEYN24cJkyYUOnz/P394e/v7+jmERERkQdweTB0+/ZtnD592vg4IyMDBw8eREhICGJjY1GvXj2T4319fREeHo7mzZs7u6lERETkgVweDP3+++9ISkoyPp42bRoAYPz48Vi1apWLWkVERERK4fJgqG/fvhBCWH382bNnHdcYIiIiUhxZJ1ATERERORqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrm8mBox44dGDp0KCIjI6FSqbBhwwbjvuLiYrzyyito3bo1atasicjISDz22GO4dOmS6xpMREREHsXlwVB+fj7atm2LZcuWVdhXUFCA/fv34/XXX8f+/fuRkpKCU6dOYdiwYS5oKREREXkilRBCuLoRBiqVCuvXr8fw4cMrPWbv3r3o0qULzp07h9jYWKvOm5ubi+DgYOTk5CAoKEii1hIREZEjOev728dhZ3aQnJwcqFQq1KlTp9JjCgsLUVhYaHycm5vrhJYRERGRO3L5MJkt7t69i5kzZ2Ls2LFVRogLFixAcHCw8ScmJsaJrSQiIiJ34jbBUHFxMR555BHodDosX768ymNnzZqFnJwc409mZqaTWklERETuxi2GyYqLizF69GhkZGRg27ZtFscN/f394e/v76TWERERkTuTfTBkCITS09ORmpqKevXqubpJRERE5EFcHgzdvn0bp0+fNj7OyMjAwYMHERISgsjISIwaNQr79+/HN998A61Wi6ysLABASEgI/Pz8XNVsIiIi8hAun1qflpaGpKSkCtvHjx+PuXPnIi4uzuzzUlNT0bdvX6uuwan1RERE7kcxU+v79u2LquIxGZVBIiIiIg/kNrPJiIiIiByBwRAREREpGoMhIiIiUjQGQ0RERKRoDIaIiIhI0RgMERERkaK5fGo9ERGR29BqgZ07gcuXgYgIIDER8PZ2dauomhgMERERWSMlBXjhBeDChdJt0dHA0qXAyJGuaxdVG4fJiIiILElJAUaNMg2EAODiRf32lBTXtIskwWCIiIioKlqtvkfI3IoIhm1Tp+qPI7fEYIiIiKgqO3dW7BEqSwggM1N/nLvSaoG0NGDNGv1vhQV2zBkiIiKqyuXL0h7nLNYme9uTC+VhieTsGSIiIqpKRIS0xzlDSgrQqBGQlASMHav/3ahRxdwme3KhrD23G1EJBSwLn5ubi+DgYOTk5CAoKMjVzSEiInei1eq/7C9eNJ83pFLpe1IyMuTRO2IIcMq3VaXS/167Vt/jY7ivyoYAzd2XteeWiLO+v9kzREREVBVvb/2QEVD6pW9geLxkiTwCIUvJ3kLo9xuGuWzJhfLgRHIGQ0RERJaMHKnv9YiKMt0eHW1db4izEpQtBTiAfv/8+bbnQnlwIjkTqImIiKwxciSgVtueOOzMYo0ajXXHzZkDzJtn3bGGXCh3TSS3AoMhIiIia3l7A337Wn98ZTk2hgRlKXNsUlL0w3XW+ve/9UGZpVyoxET9Y3dMJLcSh8mIiIgcwZk5NoZr2eLCBeCpp/T/bU0uVGKiPjgqf2zZ58TElAZPboTBEBERkSM4M8fGmlwhc5o2tT4Xyp0SyW3EYIiIiMgRnJljY+85IiL0Ac/Zs0BqKpCcrP+dkWF++K66ieQyxZwhIiIiR3Bmjo2t5yifD2RLLpS9ieQyxmCIiIjIEQw5NtYmKDvyWuWvC1RvSMvWRHKZ4zAZERGRIzgzx6aqa5Xn5kNajsBgiIiIyFGcmWNT1bXmzbOcD6RgXJuMiIjI0Zy5yrsrVpR30DWd9f3NnCEiIiJHc2aOjbPzeZxZYdtBOExGRERE9jFU2C5f48hQYTslxTXtshGDISIiIrKdB61iz2CIiIiIbOdBq9gzGCIiIiLbedAq9gyGiIiIyHYetIo9gyEiIiKynQetYs9giIiIiGznQavYMxgiIiLydFotkJYGrFmj/y3VDC8PWcWeRReJiIg8maOLInrAKvYMhoiIiDyVoShi+VpAhqKIUvXeOKDqdX52Pr75x++SnrMyXJuMiIjIE2m1QKNGldcCUqn0PUQZGfLoxdFqceO/m3Bw5QFsORyOD26NQwF0ABz//e3ynKEdO3Zg6NChiIyMhEqlwoYNG0z2CyEwd+5cREZGokaNGujbty+OHj3qmsYSERG5Czcpinji2z+xvv0buOIbhZC/jcC9O9/AglsTcQItMEG10iltcHkwlJ+fj7Zt22LZsmVm9y9atAjvvfceli1bhr179yI8PBz9+vVDXl6ek1tKRETkRmRaFFFbpMUvHx3Cy13S0NwvA68OPgj1wbloIK6YHBeNi3hfTHVKm1yeMzRw4EAMHDjQ7D4hBJYsWYLZs2dj5F9jmv/5z38QFhaG5ORkPPPMM85sKhERkW20WtclFsuoKGLBtQL89P5haL4uwqbT8bgq2gAAvKDFT0iECgLlqxWZ2+YoLg+GqpKRkYGsrCz079/fuM3f3x99+vTBrl27Kg2GCgsLUVhYaHycm5vr8LYSERGZcPQsLksMRREvXjS/mKohZ8hBRRGvHr+Gb945Ds13fvgxqzXuoKtxXzByMLjhETzZ6QBi1l10yPVt4fJhsqpkZWUBAMLCwky2h4WFGfeZs2DBAgQHBxt/YmJiHNpOIiIiE4ZZXOVzdgyzuFJSHN8GFxRFTN9yFouHpCEx+A+Et6yLv61MhCarK+4gELHeFzClzXb8tGg/ruYH4n9neyLpwXqSXbs6ZN0zZKAq9yYKISpsK2vWrFmYNm2a8XFubi4DIiIicg6tVt8jZK43Rgh9IDJ1qr42j6OHzAxFEc31UC1ZUu0eKl2JDr+tOgbNp9eg2R+D40VNADQy7m9f4zjUXa9A/WwE2j7UDCqvaNMTyGTdMlkHQ+Hh4QD0PUQRZV6w7OzsCr1FZfn7+8Pf39/h7SMiIqrAlllcEtfmMUviooh3b93F1iWHofnyDjadao4sXYJxnw+K0TfkENT33sawafcgtnsLAC0qP5mloTwnkXUwFBcXh/DwcGzZsgXt27cHABQVFWH79u1YuHChi1tHREQO4cqkYynIcRZXNYsiXk+/gc3vHINmsw9+uJSAfHQ27gtCDgbGHIVaDQyc0Qp1Gna0rV1Ll+qHDlUqlwVELg+Gbt++jdOnTxsfZ2Rk4ODBgwgJCUFsbCymTp2Kt99+G02bNkXTpk3x9ttvIzAwEGPHjnVhq4mIyCFcnXQsBRnN4qqOP9POQ7PkT2jS6mBnTmvo0Mu4L9r7Eoa1SId6bC30ndIafrV62H8hw1De008D16+b7qtbF7h50/5zW8nlwdDvv/+OpKQk42NDrs/48eOxatUqvPzyy7hz5w4mTpyImzdvomvXrvjxxx9Ru3ZtVzWZiMi9uEtPi7OWjnA0F8/ispeusBin5vwPh9afwXcZzfHf4jHQIda4v23ASQzrfBnqp8PQYWw8VF6R0jbgxo2K25wQCAFcjoOIyLO5S0+Lq5aOcFSgaAjsANOAyDD5RyaBXWFuIbYtOYTz//4BQy8sRyRKh+6yUR/b/fpD1aUzOr01Ao36NHTM61XFe58LIBhw/Pe3UICcnBwBQOTk5Li6KUREzrNunRAqlRD6r+PSH5VK/7NunatbWCo1tWI7zf2kpkp3zXXrhIiONj1/dLR0r4u589erJ8S8eUKUlEhzDTvc+POm+PzZn8WoqF2iFnLFCKwTWqiEtqrXPTpaiJdecszrVcV7nwM45fubPUNERJ7I3RbpXLMGsCYXNDkZGDOm+terbEhO6p4brRaYP1/fE1d2GMjJvXNnf74AzXtnoEkNwo5braH9K0vGC1pkIgYRuGxftWcpXq8q3ntn9QzJuugiERHZyU0W6TRyZtKxpTpAgL4OkFZb/WtpNMDcuRXzYRxcfFHoBPatPo6/905D2xonEZcYjanr+yD1Vnto4YME/3TM7pmGo698jkh7AyFAmtdLBonkDIaIiDyRHKd3V8WQdFxZQV2VCoiJkSbp2FmBojODLgBFt4vw44J9mNR6O2L9LqPTuBZ4c2dfHLrbHF7Qok/wQbynTsPpredw+G5TvPVzX8S3laAmX3VfL0vvvRO4fDYZERE5gLtN766q3ozUS0c4K1B0QvHFW+dy8N3io9BogO8yWyEXpTV+auI2BkQegXpwCQa/1BL1mrareAIp3397Xy8Z1BpiMERE5InccXq3g5eOMHJWoOigoOv87ovY+N5paLbVQtqNNihBaY2fMK9sDGt2AuqHa+C+qa0RUKdb1SeTsgJ0dV6vyt77qCh92xyMwRARkSdyZk+LlCReOsIsQwBQVa8NAFy9Wr3rSBR0CZ3AH1+fgubjy9D8GoYDd1oAiDLub+F3BuoOmVA/UR9dHm8JL5/e1rdRil4ZqQJrc+9927ZASEj1zmsFziYjIvJk5uoMxcRI29MiF7bUwFm7FnjooarPFxNTvdl2hhl9lnrnzFyjuKAYOz48DM3qPGw82gTntKULnHpBix5BR6BOvAn1C43QtF8j+9pXlrl/J9ZwcN0kZ31/MxgiIvJ07lKBujpsLS6ZlgaUWf2gUqmp1VtM1Ybii7kXcvH9u0egWS/w7flWuCXqGA+vgQL0Dz8M9cAiDHmpBRq0qG9/mypj+Hei0QCrVwPXrpXui4kBHnlEPw3eiYE1gyEJMRgiItlSQqDiaPbUDHJmXaMqeucuxnbHxnfTodkSiG3X26AYfsZDGqiuYug9J6B+yA/3v9gagfUDq9cOW1T279LJ/14ZDEmIwRB5FH55eg53WSpDzuwtLumsnqGy7dy5E+LiJWSc1mLNjkhs2BOB3wtamhzWzDcD6nbnoJ4Qgm5PtIK3n7I/2wyGJMRgiDwGvzw9h7MqIHs6e4OaauTz2Krkbgl2Lj+MjatzoTkch4yS0sVPVdChW62jUPe6DvWUWMQPalyta3kaZ31/czYZkbvwlBW9yXIxPpVKX4xPrWavnyX2Tl938Gy7vEt5+OHdI9Cs12Lz2Va4Kdob9wXgDu4PPQz1A4UY+lI8whJa23UNkg6DISJ3wC9Pz+KEYnyKUZ3p6xLXNbp88Ao2vnMSmi01sPVqGxShu3FfPdV1DG1yDOpRfuj3YgJqhnax6dzkWAyGiNwBvzw9i7stlSFn1S0uWY26RkIncGzTGWg+vADNrvr4LT8BQJhx/z2+Z6Fucxbqx+uix9MJ8PaTuMClM/MHPTxXkcEQkTvgl6dncbelMuRMiuEub2+r/4jQFmnxy7+OQPOfm9D8EYczJfcAuMe4v2vNI1D3vAb1pGi0GNIEKq9Gtt6RdZyZP6iAXEUmUBO5A2fPfCHHcmLyrmI4sLhkfnY+fnznIE4m78efl/xxCs2wE4nQwRv+uIv7GhyGuv8dDJ3RHBHtwiyf0Fble2WuXgUeftg5yfcuTvTnbDIJMRgit8cvT89jQzE+spKEQzlXjlzFpndOQPO9P2pmn8E7eBkxKA20rns3wKnBL6L1v6agVngtqe6gInNBnqHejzm2/L/A0utlb9kCCTnt+1soQE5OjgAgcnJyXN0UIvutWyeESqX/0X996n8M29atc3ULyVbr1gkRHW36fsbE8L10keObz4h/PJAqutc6JFTQCkCIEVgntFAJbdn3yFmfO8Nnvvy1rflJTbV87vL/9qKjS++npESI99+X5lrV4Kzvb/YMEbkTJa0zpRQenpgqZ9oiLfZ8ehSalTegOdgQp4rjTPZ3qXEYW3T3oXbhVajMncCRPSOWemUsqapytqWhrxkzKi67Ye+1qol1hoioImes6E3OZUPyLlVfwbUC/PT+YWi+LsKm0/G4KtoY9/miCPfWOwR1vwIMm94UUbevA0lVrFzvyFmclmaQWlI2+b5swB0aWnWZDgB45x37r+WmGAwRuRt+eSoPe4+q5erxa/jmnePQfOeHH7Na4w66GvcFIweDGx6BeoQKD0xPQFB0p9Inrkmz7gKOmMVp7znLlxKwdzV6e67lxhgMERHJmQKmNTtC+paz0Cw9C83OutiVmwAdSr+wY70vQN3qDNSP1kbvSa3hG9jT/ElcWQLBnnOWLyVQ2XCYFCSo0i0nzBkiImVwx94VqaY1u+O920hXosNvq45B8+k1aPbH4HhRE5P97Wsch7rrFaifjUDbh5pB5WU2C8iUK2dxWro2UHFWWdn8wermHFnipFxFTq2XEIMhIoVzx94VqaY1u+O9W+nOjTvYuuQwNF/dxab0eFzRhRr3+aAYfUMOQX3vbQybdg9iu0fZdxFXlkCwdO2vvgLq1zcf5Fpbm8we778PTJnilICaU+slxKn1RApW2fRkuZckSE2t/rRmd733Klw7dV2senKnGBGxWwTitsltBeGWeCT2F5E8+Rdx8+wt6S7qyhII9l47Odm+KflV/ahU+muXlDj+vv/CqfUSYs8QkULJoGic3dasAcaOtXxcZdOa3fneyzmz7Rw0SzOg2V4HP+e0hg6l7Y32vgR1y3Sox9ZCn8mt4VfLzzGNcOVQoz3XtqdnKCYGeOQRYPFi/WMZFAPl1Hoioupy5wVuq5u868b3rivR4ffPj0PzyVVo9kXhaGFTAA2N+9sGnIS6y2Wonw5D+zHxUHlFOr5RrpzFac+1rVnANioKWLUKyM42DbK6dTM/tOrB9cwYDBGR53LnBW6ruxp7de7dBb0ghbmF2LbkEDRf3MGmk01xSdfKuM8bJehT9xDUSXkY9mITNOrVHEBzh7bH7VmzgO3SpcB991V8rgLrmTEYIiLP5c6rw1d3NXZ7792JCdc3M25h86Kj0GzywvcXE3AbnY37aiEPA6OPQD1Uh0EvtULduA6SXlsRRo7UD2vZ08ujsHpmzBkiIs/lCQvc2rsEiz337oQVys/+fAGa985AkxqEHbdaQ1vmb/JIr8sYFp8O9ZhAJD3fGv5B/tW6Fv3FjUsrcGq9hBgMESmYJ6wOb83q4ub223LvDkq4FjqB/cknoFlxBZq9ETh013R4K8E/HepOF6F+KhQd/y8eXj5eVp+bPB+DIQkxGCJSOE9e4NbSsJa1927t7KPUVIvDJ0W3i5D2z8PQJN/GxuNNcUFbmuDsBS0Sgw9D3fcW1FMbo3HfWKtuk5SJs8mIiKTiqQmhlQ1rXbgAPPgg8PXX+v3W3Hs1k81vncvBd4uPQqMBvstshVx0NO6ridsYEHkE6sElGPxSS9Rr2s6GmyRyPAZDRKQMUiSEyin3QqutfPVxg0ce0dcreughy/duR8L1+d0XsfG909Bsq4W0G21Qgh7GfWFe2RjW7ATUD9fAfVNbI6BON+vOT+QCDIaIiKwht2UtLNURAvQB0+jRwLp1lttoxVR+ER2NPy6HQpOUBs2vYThwpwWA0mUuWvidgbpDJtRP1EeXx1vCy6e37fdF5ALMGSIissSeWVaO7kWytkI1oM8RsibxuZKEa8N/Peu1Ait0Txm3e0GLHkFHoE68CfULjdC0XyPr209kBSZQS4jBEBHZzZ5ZVs7oRbJ1uQUrEp8BACkp0E2eAq/Ll4ybziMGU7EE6zESNVCAARGHMOyBYgx5qQUatKhvc9PdkpyGSBXEWd/fsp/DWFJSgtdeew1xcXGoUaMGGjdujDfeeAM6nc7VTSMyT6vVf1GtWaP/rdW6ukVUHbYsawGU9q6Uf87Fi/rtKSnStMswrGUtCwnSF/ZexvJHtuOBp2MRePk0+iIVY5CMvkhFF/yGuk0bYONrv+H6dRXWX+qGCZ8lKicQSknRB8RJSfreuKQk/WOp3ktyOdnnDC1cuBAff/wx/vOf/6BVq1b4/fffMWHCBAQHB+OFF15wdfOITMktr4Sqz5ZZVlUlNQuh70WaOlU/u6u6vQqGCtUPPmjd8eUSpIVO4HBKOjQfXYJmTyj2FbQEUHrMZd+G6NIOmDwhBN2eaABvv/DqtdddVTZEaghu3aFOFVkk+2GyIUOGICwsDJ9++qlx24MPPojAwEB8/vnnVp2Dw2TkFE6o3ksuYEv9HUCyWj1WW7tWP2ussh7IMsN4JcUCO5cfhubzXGw8EoeMktIaPyro0L32Eah73YB6SiyaD2wsTfvcmYMKUZL1OEz2l169emHr1q04deoUAOCPP/7Azz//jEGDBrm4ZURlWOoRAPQ9Ahwycz+G4ShDUFueSqVPUE5MdO7CsIbh2OJi4LXXKm2bALCr3XMY13Q3QgPzcO/09lh6sA8ySmIRgDsYGvYrPhm/E5cPX8cvuW3w8rd9GQgZ2DpESm5L9sNkr7zyCnJychAfHw9vb29otVrMnz8fY8aMqfQ5hYWFKCwsND7Ozc11RlNJyWz5n6aCFj/0CLYsmOqshWHNDcfWq6f/ff26cVO2KhSTdUvx9aaHjdvqq65hSJPjUI/yQ78XE1AztGv12uLJnBnckkvJPhj68ssvsXr1aiQnJ6NVq1Y4ePAgpk6disjISIwfP97scxYsWIB58+Y5uaWkaPyfpmezdvVvQy+SpWGVxET721LJcKy4fgOAwArfSUgr7onLiMBOXSJ08MY9vmehbnMW6sfrosfTCfD2q8b1lcRZwS25nOxzhmJiYjBz5kxMmjTJuO2tt97C6tWrceLECbPPMdczFBMTw5whchwJ13UiGbNmevXLLwPvvGP++SpV9XLHLOSw6KDCBUQjDhnoXPM41D2vQT0pGi2GNIHKq5JhPjlz1XR2w3UvXgRefBG4dq3SQpSV5gxxKr4kuDbZXwoKCuDlZZra5O3tXeXUen9/f/j7+zu6aUSlrKjeW+0eAXI9S0t6rF1beSAEADNmVCuJ/s7GH1GjiuFYLwjEIhPZ/9ag3pNunqzvqpmZ5q5rTvkhUkvn4KxSWZN9AvXQoUMxf/58bN68GWfPnsX69evx3nvvYcSIEa5uGlEpQ14JUDHRtqr/aZLn+Ppr/ayuyqhUwBdf2JxEf+XIVXwyfieGhv2GZ0dmW/WcejULLR/kLPbU3XJWrSZrr2tOdLT5Xj5XtZ2qR8hcbm6ueOGFF0RsbKwICAgQjRs3FrNnzxaFhYVWnyMnJ0cAEDk5OQ5sKZEQYt06IaKjhdD3D+l/YmL028lzrVtn+p5X9ZOaavF0xzefEf94IFV0r3VIqKA1PrUPUiW7hlOY+zxER1f9eSgpqficsj8qlf4zVVIibVstXRcQokEDIVav1r++5q7vqrZ7MGd9f8s+Z0gKrDNETsVcAddwZX5JVbVoyktOBsrNhtUWabHn06PQrLwBzcGGOFUcZ7K/U+AxqLtnQ/10GBKm94fK0nCsHOre2Ft3y9n5d4Z/N1u3Am+9Vb3rMndQcswZInJXlvJKSHquzNGwZvX4sv6aeVRwrQA/vX8Ymq+LsOl0PK6KNsZD/FCIe+sfwrD772DY9KaI6tQSQEv9Th8rp/k7W9lgNDQUeP55+ypxO3NmprX5QdZel7NK3RaDISJyb65eLsGGLzZteCT+uxLQjPkVP2a1xh2U1vipo7qFQbFHoR6hwgPTExAU3dn8Sayd5u9MtgYVVdXdcmatJnP/bqpzXU7Fd1s2DZNlZmYiJibGke1xCA6TEXkoOSyXYMPq8X/HXLyJOcbHsd4XoG51BupHa6P3pNbwDfS1/rpyGY61N6gAzA4ZGt9TRw4F2jq0ae11ndF2hZHlchzx8fF4/fXXkZ+f76j2EBFZTw7LJSQmAiEhVh2ajmboUOM45iWl4eCXJ3G2KAof/NEH973UwbZACCgdjh0zRv/bVUNjlS1DYw1zPSTOmJlp69CmtdflrFK3ZVMwtGXLFvz4449o2rQpVq5c6ag2ERFZRw45Gt7eKH56olWHLv3QF/sKWuDv2/qi7ejm8iiEaM/UdwNbgwqDsuu5mWMYCoyKMt1e2XR2W9n678GW6zq67eQQNuUM9ejRA7/++iv++9//Yvbs2fjggw/w/vvvoy+TRYnIFVyYo3E9/Qa+WXQMms0+2HL5JWTgI9TDdZgNb/4aHgl9Rmb10aqbeG5PkGltD8nIkfoEa6mHArVa4MoV64597TXgvvtsv66j2k4OY/fU+jt37mDBggV499130b9/f7zzzju45557pG6fJJgzROSh7M3RsDPf5sy2c9AszYBmex38nNMaOpQ+50mvT7BC95T+suXbALimV6D8ffboAezapX+cng7MmVPxOZW119xrtnOn1flSRjEx8k/0Zm6PbDjt+9veAkX5+fli586dYurUqcLLy0v4+/uLadOmidzcXGkqIEmIRReJPNi6dfpidipVxQJ3KlXFAn82FALUFmvFr58dEa/2SBWt/E9VqKHXNuCE+HvvVLFv9TGh0+rkVXTTXFu8va0r2li+OGBlr9lXX+l/l3/ty54nOlqIn34SIjm58mKFzno9KmunNf9uyCVkWXTx448/xt69e7F3714cP34c3t7eaNOmDbp164Z27drhf//7H06dOoX169ejU6dOjovgbMSeISIPZ+4vfnM9EFYUAiy8fzC2LTkEzRd3sPFkM1zWhRsP80YJ+tQ9BHVSHoa92ASNekVXbIscZnlVZ4ZXWampwI0bVb9mM2YAixfr/9tc3SM55MnYMnvMlT1XVIGzvr9tCoZiYmLQrVs340+nTp0qLIj69ttvIzk5GUeOHJG8sfZiMESyJocvT09g6XW08IUoAFz3DkUT7Unkoo5xey3kYWD0EaiH6jDopVaoG1fH7PNlw55p45VZvRqYOdNy6YL33tOv7m4pGHUVa8sfvP8+MGUKP38yIssK1JmZmRaPeeKJJ/D666/b3SAiReHq1tKxVPnbwswnFYD62my0x0GkezXHsPh0qMcEIun51vAP6i55cx3G3hle5ly9al3pgvr1gbNn5RvUW5voHRYmnzaTU0legTo0NBTbtm2T+rREnsfVlZMVRly8ZH6mVzmfPrsXcf/sDS8fN60SLEUZAUOPT4MG1l9TzsvQsDI0WWBTnSFrqFQq9OnTR+rTEnmWqorVGVI5X3jBtpovVEHR7SL8uGAfJrXejtGP+Vn1nCYPd4aXj+T/a3Se6n6hl536Xr5WjqOu6WiJifrgrnwhRANLdY/I47nxJ57IjVkzlHHhAjB/vnPa40FuncvBmim78EjsLjSofQcDXu2I5Uf6IEU3AhcQBV1lT/SUL0RLX/yWlC0O6ClBBCtDkwVcqJXIFawdypgzB0hIkO9wmUySv8/vvgjNu6eh2VYb22+2Rgl6GPeFe13B0GYnoX64BkKbLIbX+LH6HXJa8V1Khi9+cyvbl2e477lzgaZNK76HVZ3L3V4zOS5wS/Lh0In7MsE6QyQ7qanW1Xsx1KlxVW2WqthQr0dqOq1O7E8+Lub0SRXtahyv8JK19E8Xs7qnij2fHBbaYq3ldruqFpAjWVNnyNr79qTXrKRE//lzdd0jsoos6wy5K06tJ9mxdfpzaqq8klOtqNcj9V/axQXF2L7sMDSr87DxWBOc15bW+PGCFj2DjkDd+yaGPd8ITfs1qvpkMunRcriqKlDbet9Kec1IVmRZZ8hdMRgiWUpJAR580Lpjk5P1q5PLgaVATsKlDHIv5OK7d45AoxH49lwCchBs3FcDBRgQcQjqQSUYPD0eDVrUr9a1iEh+ZFlniIgkNHIkMG+e+fWhypPTbB1Lyd+G2jM7d9rVm3Vh72VsfPcUND/VROr1Niguk/8TqrqKoU1PQD3aH/e/2Bo1QrrZcQNWUHIvSNl7Dw3Vb8vOVt7rQIrCYIjIlWbPBv79b8u9LHKarWNt8reVxwmdwOGUdGg+ugTNnlDsK2gJoDT4a+73J9TtzkP9t3roOqElvP0c/FoouRCmpYVMlfI6kOIwGCJypbKzdQD3mK1jbS/VlSv6XgYzbS+5W4Kdyw9D83kuNEca42xJMwDNAAAq6NC99hGoe92Aekosmg9sDKBx1deSqidHyYUwrVnPTAmvAykSc4aI5MDahUadzVyQAehzhi5etLwQaJmehLxLefjh3SPQrNdi89lWuCnqGg8LwB30CzsE9QNFGDIjHmEJVlY+BqTryXFiLpTs2JLQ78mvA8kOE6glxGCIJOHoPBK55alUFWQA5nuzyhF/1aaZH7QQb+a+gCKULuxcX3UNQ5och3qUH/q9mICaoTXta6NUs9qsXcxTbjP7pGDtvZflia8DyY6zvr9ZgZrIGikp+r+ck5KAsWP1vxs10m+XimFtpzFj9L9dHQiNGlWxp8AwTALoAw0LyzWohICACo/lLkMJfHCP71lM75iGHf/8A1l362JleiKGL+hqXyBkaUkTAJg61folTSTOhXIr9tyTJ74OpFgMhsh5tFr9X6Br1uh/u8u6W5YCAykDIjmwNshQq4GzZ6FdtLjK03lBIBaZOPPWFzh1tyEW/94XiZPbwtuvmsGeLbParKHkxTztuSdPfB1IsRgMkXM4o2fFEaTufXAHVgYZOx/9Fx5vvhvPvVzbqtM2auwFlZed62WZI3VPTo8elnvjvL31x3kaW9Yzc5f1yIhswGCIHM+de1ak7n1wB1YGD8u/qIv/nOmFU3/NArNI6p4EqXtydu2yHNRqtfrjPE1VC5mWJdcZjkTVxGCIHMvde1aUmEdiZfCg8lLhxQ5pmPtubYgoF6xsLvWK6kp8r8syLGRaVR5Y2RXtiTwI6wyRYzm4WrHDKSyPRFukxe4jwUjwbYCg4mvwQsUgVgAorheB/10eBZXvX/8LaeSClc2lXlFdYe+1WSNH6nPBWIGaFIbBEDmWu/+1beh9qKymjhwrRNuo4FoBtrx3GJq1RfjmdDyuivYYgY+xFqOgg8o0IFKpoALgt2IZ4Fvmfx+GXgVzU/EdWStJyusq4L22imFWI5GCMBgix3L3v7al7n2QieyjV/HN4hPQfO+HLVmtcQddjfvqqG4hsGEY9iTMR7d9y4DLl0qfWFWQUb5XwVk9CVJd19b3Wm51oYjIbiy6SI5lqGxr6a9tuVezlWuFaBuc+iEDmg/OQbMzBLvyEiDKpAw29L4AdcIZqMcFIfG5BPgG+up3eMoXvi33Yc17reT1y4iciBWoJcRgyMUMs8kA839tu0tCppsFBroSHX797Cg0n12H5kAMThQ1MdnfocZxqLtdgfrZCLQZ1Uzaae9yYk/gUtV7LWXVayKqEoMhCTEYkgEP6FlxOjuCrzs37mDrksPQfHUXm9LjcUUXatzng2IkhRyC+r7bGDa9KWK6Rjr6DlxP6sBFyeuXEbkAgyEJMRiSCTfrWXEpG3ozrp28js2Lj0Oz2Qc/XG6NApQubRGEHAyKPQq1Ghg4oxWCY4OddQeu54jARcnrlxG5gLO+v5lATc7DWSrWqaw3w1Ckcu1anKnTEZqlGdBsr4Ofc1pDh17Gw6K9L0HdMh3qsbXQZ3Jr+NXywIrJ1nBEWQd3nx1JRGYxGCKSEwtFKgWArAcnoxkyoUND4662ASeh7nIZ6qfD0H5MPFReMhgCc3VPoCMCF3efHUlEZjEYIpITC70ZKgARuIy+SAPq1oU6KQ/DXmyCRr2aA2jurFZaJofZVo4IXFiLiMgjMRhSElf/pU4W3T54GrWsOE6zJAO1XrjP4e2xixXDfE4JiBwRuHho3SkipXOLtckuXryIRx99FPXq1UNgYCDatWuHffv2ubpZ7sVdV41XgIwdmVgyYjuS6h6A+sU4q55Tq+09Dm6VneS0Fl1Vi49WJ3CpbA0vrttF5LZkP5vs5s2baN++PZKSkvDcc88hNDQUZ86cQaNGjdCkSRPLJwBnk7EuirwIncC+1ceh+Xc2Nv4egUN3S4e3vKDFRUQjDFkwW/VH7lO35TjbylFlHdjTSuRwnE32l4ULFyImJgYrV640bmvUqJHrGuRuLP2lrlLp/1JXq/k/cgcqul2E1KWHoFlTgI3Hm+KiriWAlgAAb5Qgsc5hqPvmYtgLcQi/8WHVRSrlPAwjx9lWjlomhLMjiTyG7IOhjRs3YsCAAXjooYewfft2REVFYeLEiXjqqacqfU5hYSEKCwuNj3Nzc53RVHly91Xj3ditczn4dtERaDap8F1mAvLQybivJm7jgajDUA/RYtD0lqjXtH2ZZ8Y6ZtFTZ/RkyHW2FQMXIqqC7IOhP//8Ex999BGmTZuGV199Fb/99huef/55+Pv747HHHjP7nAULFmDevHlObqlMyfEvdQ92fvdFaN49Dc222th+szVK0NO4L9zrCoY1Own1IzVw7wutEVCne+Unkro3w1mzuzjbiojckOxzhvz8/NCpUyfs2rXLuO3555/H3r17sXv3brPPMdczFBMTo8ycITnmcHgQoRM4+OVJaP6VBc1v4Th4J95kf0v/01B3uAD1hLro3Pg6vLKvVC+wsad3x9k5Y3Jci475PURuyWk5v0LmYmNjxRNPPGGybfny5SIyMtLqc+Tk5AgAIicnR+rmyV9JiRDR0UKoVELov5pMf1QqIWJi9MeRVYryi8SWhfvE5NZpItY70+Tl9EKJSAw6KBYPSRXpP53VP2HdOv17UPbA6Gj9dlvYcx7D+2/uvXfk+2+urTExtt+zo9piz+tPRE7nrO9v2Q+T9ezZEydPnjTZdurUKTRs2LCSZ5AJ1kWRRO6FXHz3zhFoNALfnktADjoY99VAAQZEHIJ6UAkGT49HgxZtS58oVc0de8/jqpwxRyUt20ouNY+ISN4cGmpJ4LfffhM+Pj5i/vz5Ij09Xfzvf/8TgYGBYvXq1VafQ9E9QwZy+kvdTWT+dkl8+HCa6F9vr/BFoclLF6rKFk802yE2vvarKLheYP4E9vbKlJQIkZoqRHKy/ndhof29O8nJlT+v7E9ystQvn+u5qleMiCTjrO9v2ecMAcA333yDWbNmIT09HXFxcZg2bVqVs8nKU3ydIQPmTVRJ6AQOp6RD89ElaPaEYl9BS5P9zf3+hLrdeaj/Vg9dJ7SEt5+F186efC1zic716wPXrtl2nuq0wVMo+d6JPATrDJUxZMgQDBkyxNXNcH9ymF4ss4Cs5G4Jdi4/DM3nudAcaYyzJc0ANAMAqKBD99pHoO51A+opsWg+sDGAxtaf3NaZfJUN6VgTCFV2PSXP7uJMSiKyklsEQ+Qh5LB4J4C8S3n44d0j0KzXYvPZVrgpSmv8BOAO+oUdgvqBIgyZEY+whDb2X8iWmjtVFceszvWUnDMm15pHRCQ7bjFMVl0cJpMBFy8Jcml/Fja9ewqaLTWw9WobFMHfuK++6hqGNDkO9Sg/9HsxATVDa0pzUa1Wv/6bpV6ZjAx9b5k1QzrmWLNEh6OWpJAzW15/TwwGiTwAh8nIc0ixJEhREbB8OXDmDNCkCTBxIuDnV+klhU7gqOY0NMsvYuPu+vgtPwFAuHH/Pb5noW5zFsP/FoLuT7aCt58Dhols6ZWxd6jG2t4duczuciYl94oRkW0cmp4tE5xN5mKpqdbNaEpNNf/8l14Swtvb9Fhvb/32MorvFIu0JQfEix1SRROfsxVO37XmYfF2/1RxVJMudFqdw2/byJqZfNa+Rg0acEagrTiTkshtsc4QuYYjEpyrk8j68svAO++Yb+c776CooBjfBD4MzboSbM5ogeuinfEQf9zF/aGHoB5wF0NnxCO8TYJ97a8ua3plrE10Pn0a2LXLtvdHZknrTqfEXjEisglzhqiUoxKc7Z3iXFQEBAbqv8zNEAC08EYNFKAE+iGzENUNDIk7BvWDPug/LQG1wmvZ325nc8QyFjJJWicisoezvr8ZDJGeIxOc7U1kXbIEePFFi6d/U/U6bra/F+rH6qDnMwnwCXDjDk8pE51dnLRORFRdDIYkxGDIAkOwUtmyDVLMurGx10NbpEVW/0cRtf0Li6cWEydB9eEy+9olR1IMaznjPSUicjBnfX97OezM7kir1Q/prFmj/13J8IzHsWX9KnuNHKkPeKKiTLdHRxsDoYJrBdC8+iv+1mwnIgJu4J3tXa06tarpPfa3S44MxTHHjNH/tidYccZ7SkTkIdx4PEFilnIryv+13qOH7YmscuWsSr1mElmzQ+Lxzfvp0Ez6FVuyWuMOSgOg/2Es3sV0eEEHVWXn9PbWT7MnU6y+TERkNQZDgOWVrWfM0PcWlQ2UvL1Ne47cOSnVmZV6vb1xqrAhNKsBzc4Q7MoLhShT/6eh9wWoE85APS4Iic8lwHvudPOzyQymTauy3pBisfoyEZHVmDNkKbfCWu6clOrgSr26Eh1+/ewoNJ9dh+ZADE4UNTHZ36HGcai7XYH62Qi0GdUMKq9y/UAvvwy8955p8OntrQ+EFi2yuT2KwOrLROQBmEAtoSpfTGunfVvD2V8wUtaPkXha950bd7B1yWFovrqLTenxuKILNe7zRRH6hhyG+r7bGDa9KWK6Rlo+oY0VqAmOmapPROREDIYkVOWLuWYNMHastBcsXy/HERxRP6aa07qvnbyOzYuPQ7PZBz9cbo0ClK7xFYQcDIo9CrUaGDijFYJjg+1rI9lGiWuSEZHHYDAkIaf1DBkkJ+tnAjmKo2sC2dDbdHrrOWz8IAOa7XXwc05r6FB6bIz3RQxreRrqsbXQZ3Jr+NViT45LKL0CNRG5LQZDErIqZ6iy3Ap7OLJnyMX1Y3QlOuz9zzFoPr0Gzf5oHCs0ndbeNuAk1F0uQ/10GNqPia+Y/0NERGQlrlrvLFWtbG0rQyCS6IAV0A1sqR8jUUB299ZdbFt6GJov7mDTqWa4rCtd48sHxehT9zDU9+Zh6NQmaNSrOYDmklyXiIjIGRgMAaUFAc3lVjzyCLB4sf5xVYGSYYhqyRLHDkE4qX7MjTM3sfmdo9B8440fLibgNjob99VGLgbGHIF6qMDAGa1QN65Dta5FRETkSgyGDKpa2bpbt4qBkrk6Q85ISnVg/ZiMHZnQvP8nNGlB2HmrNbToZdwX5XUZw1qkQz0mEH2ntIZ/UA+bz09ERCRHzBmyllwqUEtYP0boBPatPg7Nv7Oh+T0Sh+82M9nfOuAU1J0uQf1UKDo+2oL5P0RE5FTMGZIbw3pRZTl6+nxl7agsx8mKobqi20VIXXoImjUF2Hi8KS7qWgJoqT81SpBY5zDUfXMx7IU4NO7bDEAzs+chIiLyFAyG3FFlOU6VDNXdOpeDbxcdgWaTCt9lJiAPnYz7auI2Hog6DPUQLQZNb4l6Tds76SYUitPciYhkh8Nk7qyKL9Zzv1zAxvfPQLOtNrbfbI0S+BqfFu51BcOanYT6kRq494XWCKgT4Ko7UBZHFMokIvJgrDMkIY8NhsoQOoGDX56E5l9Z0PwWjoN34k32t/Q/DXWHC1A/UR+dx7eEl4+Xi1qqUI4slElE5KEYDEnI6cGQk4ZCiguKsX3ZYWhW52HjsSY4r4027vOCFj2DjkDd+ybUU+Nwz30NJb8+WcnFhTKJiNwVE6jdlYOHQnIv5OK7d45AoxH49lwCclBa4ycQ+egfcRjqQSUY8lIL1G/ettrXc2tyyc9xQaFMIiKyHoMhKVU2FHLxon67nUMhmb9ewqb306H5qSZSr7dBMUpr/ISqrmJo0xNQj/bH/S+2Ro2QbtW9C88gp/wcJxXKJCIi+zAYkopWq//yNTfqKIR+KGTqVH1hRyvq/xxaewqajy9DsycM+++0ABBp3N/c70+o252H+m/10HVCS3j7OXD5D1vIpSfGQUGp3RxYKJOIiKqPOUNSSUsDkpIsH1fJIq7FBcXY+dERaD7PxcajjXG2JMa4TwUdetQ+AnXiDQybHIvmAxtL126pyKUnRo75ORIWyiQiUhLmDLkbO4ZC8i7l4fvFR6BZr8O351ripiit8ROAO+gffgjqB4owZEY8Qlu1kbrF0pFTT4wc83OqWSiTiIgci8GQVKwc4riW54+1Y3dAs6UGtl1rgyJ0N+6rr7qGofcch3qUH/pNa43A+l0d1VrpSDg8KAm55ufYWCiTiIich8GQVBIT9V9slQyFCABXVOGIekYNHUqDgqa+GVC3PQf1hBB0f7KVfPJ/rCW3nhg55+dUtRgwERG5DIMhqZQZChEqFVRlAiId9EMhE8WH0MEb3WodhrrndagnxyB+UGOovOJc1erqk1tPjIWg1Jifk+iioNPcGndERORSDIYkcjvrNn7cE4kLoW/iwSvLEYVLxn0XEYX/Bk3GQHV9LJ+RjfA2rV3YUonJrSeG+TlERGQjziarhqxD2di0+AQ0PwTgp+w2KIR+jS8vaDEYmzEwdD9aJYWiw7v/h1pRwZJdV1bkOlPK3Oy2mBjm5xARuREuxyEhqV5MoRM48e2f0CzLhOaXevj1disIlK7x1djnHNRtMqB+rA56PpMAn4AqOt7kUpNHCobZZID5nhhXrbvlSa8xEZECMRiSUHVeTG2RFrs/OQrNyhvQ/NEQ6cWm+T2dax6FuvtVqCdGoZX6Hqi8VJZPKpeaPFJiTwwREUmMwZCEbH0xC64VYMt7h6FZW4RvTsfjqmhg3OeHQtxb/xDU/e5g6LSmiOpkYy6MJ69ezp4YIiKSEIOhSixYsACvvvoqXnjhBSxZssSq51jzYmYfvYpvFp+A5ns/bMlqjTsINO6ro7qFwQ2PQj3CCw/MSEDtyNr2NV6O1ZGJiIhkihWozdi7dy9WrFiBNm2kqcZ88rs/ofnneWh+DsHuvAQIlE63buh9AeqEM1CPC0LicwnwDexZ/QvKrSYPERERuU8wdPv2bfzf//0f/v3vf+Ott96y6xy6Eh12rziMDZ9eh+ZgLE4WNQZQus5Xx8BjGNY1G+pnI9BmVDOovKIlav1f5FaTh4iIiNwnGJo0aRIGDx6M+++/32IwVFhYiMLCQuPj3NxcAECz+tdxVZTW+PFFEZLqHYL6/nwMm94M0Z1bAmjpkPYDkF9NHiIiInKPYOiLL77A/v37sXfvXquOX7BgAebNm1dh+1XRAMHIwaCGR6BWq/DA9FYIju0kdXMrJ/fqyERERArkZfkQ18rMzMQLL7yA1atXIyAgwKrnzJo1Czk5OcafzMxMAMD6OQeQnVcDyWd74uGlPRAcW64QolYLpKUBa9bof2u10t2IYaaVuZlkAKsjExERuYjsZ5Nt2LABI0aMgHeZAEGr1UKlUsHLywuFhYUm+8yxKhvdkbV/zJ3b29s02Cpfk4fT1ImISOE4tf4veXl5OHfunMm2CRMmID4+Hq+88goSEhIsnsPii+nI2j9VnVsIYOpU/UrmPXoAu3bpg5/0dGDFCv1wmoG7F2UkIiKyEafW/6V27doVAp6aNWuiXr16VgVCJr7+GmjSxLSXRavV99qYiwmF0ActhoDF1p4Za869bp0+EGrSpOpp9xcv6oMqORdlZG8WERG5IdnnDEnqySeBpCR94cOUFP02W2r/2Mrac48eXfVxhmMBfWAmZS6TVFJS9K9rUhIwdmzF15mIiEimZN8zZE5aWlr1TlC2l6XMFPwq2VP7R+p6QXItyljZUKA79GYREZHiKatnyKBsL0toqHXPsaf2j6PqBcmpKKOloUBAvr1ZREREUGowBJT2sgD65GRVJavNq1T6mV721P4x1BWq7Nz2klNRRkcOMxIRETmBcoMhg+xs/SwtoGLQUt3aP97els9ti+oEZo7CJUaIiMjNMRiKiNDns6xdC0RFme6Ljq5+vktV5/76a+t7juRalJFLjBARkZuTfZ0hKRjrFAAwVikwLH2RkWE6zd5RU8MrO7ch+Rgwn3djUL4oo1xotfpZY5aWGCn7OhMREVmBRRclVCEYkqKYopQqq3791FNA06byr9lTWUAnt9eZiIjcCoMhCVUIhuTYy+LuBQvNBXRyfJ2JiMhtMBiSkPHF/OQTBJWvQE3ScfeAjoiIZIXLcTjCQw8BDnwxFc/bW17FIImIiKzA2WRERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRVNWArXccTYWERGR0zEYkovKCi8uXco6PURERA7EYTI5MFRwLr/6+8WL+u0pKa5pFxERkQIwGHI1rVbfI2Su9qVh29Sp+uOIiIhIcgyGXG3nzoo9QmUJAWRm6o8jIiIiyTEYcrXLl6U9joiIiGzCYMjVIiKkPY6IiIhswmDI1RIT9bPGVCrz+1Uq/erviYnObRcREZFCMBhyNW9v/fR5oGJAZHi8ZAnrDRERETkIgyE5GDkSWLsWiIoy3R4drd/OOkNEREQOw6KLcjFyJKBWswI1ERGRkzEYkhNvb6BvX1e3goiISFE4TEZERESKxmCIiIiIFI3BEBERESkagyEiIiJSNAZDREREpGgMhoiIiEjRGAwRERGRojEYIiIiIkVjMERERESKxmCIiIiIFI3BEBERESkagyEiIiJSNAZDREREpGiyD4YWLFiAzp07o3bt2ggNDcXw4cNx8uRJVzeLiIiIPITsg6Ht27dj0qRJ2LNnD7Zs2YKSkhL0798f+fn5rm4aEREReQCVEEK4uhG2uHr1KkJDQ7F9+3b07t3bqufk5uYiODgYOTk5CAoKcnALiYiISArO+v72cdiZHSQnJwcAEBISUukxhYWFKCwsND7Ozc11eLuIiIjIPcl+mKwsIQSmTZuGXr16ISEhodLjFixYgODgYONPTEyME1tJRERE7sSthskmTZqEzZs34+eff0Z0dHSlx5nrGYqJieEwGRERkRvhMFk5U6ZMwcaNG7Fjx44qAyEA8Pf3h7+/v5NaRkRERO5M9sGQEAJTpkzB+vXrkZaWhri4OFc3iYiIiDyI7IOhSZMmITk5GRqNBrVr10ZWVhYAIDg4GDVq1HBx64iIiMjdyT5nSKVSmd2+cuVKPP7441adg1PriYiI3A9zhv4i81iNiIiI3JxbTa0nIiIikhqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRWMwRERERIrGYIiIiIgUjcEQERERKRqDISIiIlI0BkNERESkaAyGiIiISNEYDBEREZGiMRgiIiIiRXObYGj58uWIi4tDQEAAOnbsiJ07d7q6SUREROQB3CIY+vLLLzF16lTMnj0bBw4cQGJiIgYOHIjz58+7umlERETk5lRCCOHqRljStWtXdOjQAR999JFxW4sWLTB8+HAsWLDA4vNzc3MRHByMnJwcBAUFObKpREREJBFnfX/LvmeoqKgI+/btQ//+/U229+/fH7t27XJRq4iIiMhT+Li6AZZcu3YNWq0WYWFhJtvDwsKQlZVl9jmFhYUoLCw0Ps7JyQGgjzCJiIjIPRi+tx09iCX7YMhApVKZPBZCVNhmsGDBAsybN6/C9piYGIe0jYiIiBzn+vXrCA4Odtj5ZR8M1a9fH97e3hV6gbKzsyv0FhnMmjUL06ZNMz6+desWGjZsiPPnzzv0xZSb3NxcxMTEIDMzU1G5Urxv3rcS8L5530qQk5OD2NhYhISEOPQ6sg+G/Pz80LFjR2zZsgUjRowwbt+yZQvUarXZ5/j7+8Pf37/C9uDgYEX9IzIICgrifSsI71tZeN/KotT79vJybIqz7IMhAJg2bRrGjRuHTp06oXv37lixYgXOnz+PZ5991tVNIyIiIjfnFsHQww8/jOvXr+ONN97A5cuXkZCQgG+//RYNGzZ0ddOIiIjIzblFMAQAEydOxMSJE+16rr+/P+bMmWN26MyT8b5530rA++Z9KwHv27H37RZFF4mIiIgcRfZFF4mIiIgcicEQERERKRqDISIiIlI0BkNERESkaG4ZDC1fvhxxcXEICAhAx44dsXPnziqP3759Ozp27IiAgAA0btwYH3/8cYVj1q1bh5YtW8Lf3x8tW7bE+vXrHdV8u9ly3ykpKejXrx8aNGiAoKAgdO/eHT/88IPJMatWrYJKparwc/fuXUffik1sue+0tDSz93TixAmT4zzt/X788cfN3nerVq2Mx7jD+71jxw4MHToUkZGRUKlU2LBhg8XneMLn29b79pTPt6337Smfb1vv21M+3wsWLEDnzp1Ru3ZthIaGYvjw4Th58qTF5znjM+52wdCXX36JqVOnYvbs2Thw4AASExMxcOBAnD9/3uzxGRkZGDRoEBITE3HgwAG8+uqreP7557Fu3TrjMbt378bDDz+McePG4Y8//sC4ceMwevRo/Prrr866LYtsve8dO3agX79++Pbbb7Fv3z4kJSVh6NChOHDggMlxQUFBuHz5sslPQECAM27JKrbet8HJkydN7qlp06bGfZ74fi9dutTkfjMzMxESEoKHHnrI5Di5v9/5+flo27Ytli1bZtXxnvL5tvW+PeXzbet9G7j759vW+/aUz/f27dsxadIk7NmzB1u2bEFJSQn69++P/Pz8Sp/jtM+4cDNdunQRzz77rMm2+Ph4MXPmTLPHv/zyyyI+Pt5k2zPPPCO6detmfDx69GjxwAMPmBwzYMAA8cgjj0jU6uqz9b7NadmypZg3b57x8cqVK0VwcLBUTXQIW+87NTVVABA3b96s9JxKeL/Xr18vVCqVOHv2rHGbO7zfZQEQ69evr/IYT/l8l2XNfZvjjp/vsqy5b0/5fJdlz/vtCZ9vIYTIzs4WAMT27dsrPcZZn3G36hkqKirCvn370L9/f5Pt/fv3x65du8w+Z/fu3RWOHzBgAH7//XcUFxdXeUxl53Q2e+67PJ1Oh7y8vAqL3d2+fRsNGzZEdHQ0hgwZUuEvS1eqzn23b98eERERuO+++5CammqyTwnv96effor777+/QpV2Ob/f9vCEz7cU3PHzXR3u/PmWgqd8vnNycgCgykVYnfUZd6tg6Nq1a9BqtRVWqw8LC6uwqr1BVlaW2eNLSkpw7dq1Ko+p7JzOZs99l/fuu+8iPz8fo0ePNm6Lj4/HqlWrsHHjRqxZswYBAQHo2bMn0tPTJW2/vey574iICKxYsQLr1q1DSkoKmjdvjvvuuw87duwwHuPp7/fly5fx3Xff4cknnzTZLvf32x6e8PmWgjt+vu3hCZ/v6vKUz7cQAtOmTUOvXr2QkJBQ6XHO+oy7zXIcZalUKpPHQogK2ywdX367red0BXvbuGbNGsydOxcajQahoaHG7d26dUO3bt2Mj3v27IkOHTrgn//8Jz744APpGl5Nttx38+bN0bx5c+Pj7t27IzMzE4sXL0bv3r3tOqer2NvGVatWoU6dOhg+fLjJdnd5v23lKZ9ve7n759sWnvT5tpenfL4nT56MQ4cO4eeff7Z4rDM+427VM1S/fn14e3tXiPays7MrRIUG4eHhZo/38fFBvXr1qjymsnM6mz33bfDll1/iiSeewFdffYX777+/ymO9vLzQuXNn2fwlUZ37Lqtbt24m9+TJ77cQAp999hnGjRsHPz+/Ko+V2/ttD0/4fFeHO3++peJun+/q8JTP95QpU7Bx40akpqYiOjq6ymOd9Rl3q2DIz88PHTt2xJYtW0y2b9myBT169DD7nO7du1c4/scff0SnTp3g6+tb5TGVndPZ7LlvQP8X4+OPP47k5GQMHjzY4nWEEDh48CAiIiKq3WYp2Hvf5R04cMDknjz1/Qb0szVOnz6NJ554wuJ15PZ+28MTPt/2cvfPt1Tc7fNdHe7++RZCYPLkyUhJScG2bdsQFxdn8TlO+4xbnWotE1988YXw9fUVn376qTh27JiYOnWqqFmzpjGrfubMmWLcuHHG4//8808RGBgoXnzxRXHs2DHx6aefCl9fX7F27VrjMb/88ovw9vYW//jHP8Tx48fFP/7xD+Hj4yP27Nnj9PurjK33nZycLHx8fMSHH34oLl++bPy5deuW8Zi5c+eK77//Xpw5c0YcOHBATJgwQfj4+Ihff/3V6fdXGVvv+/333xfr168Xp06dEkeOHBEzZ84UAMS6deuMx3ji+23w6KOPiq5du5o9pzu833l5eeLAgQPiwIEDAoB47733xIEDB8S5c+eEEJ77+bb1vj3l823rfXvK59vW+zZw98/3c889J4KDg0VaWprJv9uCggLjMa76jLtdMCSEEB9++KFo2LCh8PPzEx06dDCZljd+/HjRp08fk+PT0tJE+/bthZ+fn2jUqJH46KOPKpzz66+/Fs2bNxe+vr4iPj7e5MMlF7bcd58+fQSACj/jx483HjN16lQRGxsr/Pz8RIMGDUT//v3Frl27nHhH1rHlvhcuXCiaNGkiAgICRN26dUWvXr3E5s2bK5zT095vIYS4deuWqFGjhlixYoXZ87nD+22YOl3Zv1tP/Xzbet+e8vm29b495fNtz79zT/h8m7tnAGLlypXGY1z1GVf91UAiIiIiRXKrnCEiIiIiqTEYIiIiIkVjMERERESKxmCIiIiIFI3BEBERESkagyEiIiJSNAZDREREpGgMhoiIiEjRGAwRERGRojEYIiIiIkVjMEREbmnNmjUICAjAxYsXjduefPJJtGnTBjk5OS5sGRG5G65NRkRuSQiBdu3aITExEcuWLcO8efPwySefYM+ePYiKinJ184jIjfi4ugFERPZQqVSYP38+Ro0ahcjISCxduhQ7d+5kIERENmPPEBG5tQ4dOuDo0aP48ccf0adPH1c3h4jcEHOGiMht/fDDDzhx4gS0Wi3CwsJc3RwiclPsGSIit7R//3707dsXH374Ib744gsEBgbi66+/dnWziMgNMWeIiNzO2bNnMXjwYMycORPjxo1Dy5Yt0blzZ+zbtw8dO3Z0dfOIyM2wZ4iI3MqNGzfQs2dP9O7dG//617+M29VqNQoLC/H999+7sHVE5I4YDBEREZGiMYGaiIiIFI3BEBERESkagyEiIiJSNAZDREREpGgMhoiIiEjRGAwRERGRojEYIiIiIkVjMERERESKxmCIiIiIFI3BEBERESkagyEiIiJSNAZDREREpGj/D1XGC/oCuJA+AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 16, + "id": "9a12e3b7", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Autograd to calculate gradients for OLS\n", "from random import random, seed\n", @@ -1875,95 +1948,23 @@ }, { "cell_type": "markdown", - "id": "f952160a", - "metadata": {}, + "id": "cef6f70e", + "metadata": { + "editable": true + }, "source": [ "## Same code but now with momentum gradient descent" ] }, { "cell_type": "code", - "execution_count": 52, - "id": "b0595e43", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[4.]\n", - " [3.]]\n", - "Eigenvalues of Hessian Matrix:[0.25823312 3.94225609]\n", - "0 [-12.96884773] [-13.21205258]\n", - "1 [-0.22528633] [0.21334212]\n", - "2 [-0.21052919] [0.19936738]\n", - "3 [-0.19673871] [0.18630804]\n", - "4 [-0.18385156] [0.17410414]\n", - "5 [-0.17180857] [0.16269964]\n", - "6 [-0.16055444] [0.15204218]\n", - "7 [-0.1500375] [0.14208282]\n", - "8 [-0.14020946] [0.13277585]\n", - "9 [-0.13102519] [0.12407851]\n", - "10 [-0.12244253] [0.11595089]\n", - "11 [-0.11442207] [0.10835565]\n", - "12 [-0.10692698] [0.10125793]\n", - "13 [-0.09992285] [0.09462515]\n", - "14 [-0.09337751] [0.08842683]\n", - "15 [-0.08726092] [0.08263453]\n", - "16 [-0.08154499] [0.07722165]\n", - "17 [-0.07620348] [0.07216333]\n", - "18 [-0.07121185] [0.06743635]\n", - "19 [-0.0665472] [0.063019]\n", - "20 [-0.0621881] [0.05889101]\n", - "21 [-0.05811453] [0.05503342]\n", - "22 [-0.05430781] [0.05142852]\n", - "23 [-0.05075043] [0.04805975]\n", - "24 [-0.04742608] [0.04491165]\n", - "25 [-0.04431949] [0.04196976]\n", - "26 [-0.04141639] [0.03922058]\n", - "27 [-0.03870346] [0.03665148]\n", - "28 [-0.03616823] [0.03425066]\n", - "29 [-0.03379907] [0.03200711]\n", - "theta from own gd\n", - "[[3.87768766]\n", - " [3.1158276 ]]\n", - "0 [-0.0315851] [0.02991052]\n", - "1 [-0.02951615] [0.02795127]\n", - "2 [-0.02696204] [0.02553257]\n", - "3 [-0.02442969] [0.02313448]\n", - "4 [-0.02206975] [0.02089966]\n", - "5 [-0.01991611] [0.0188602]\n", - "6 [-0.01796544] [0.01701295]\n", - "7 [-0.01620343] [0.01534436]\n", - "8 [-0.01461344] [0.01383866]\n", - "9 [-0.0131792] [0.01248047]\n", - "10 [-0.01188564] [0.01125549]\n", - "11 [-0.01071902] [0.01015072]\n", - "12 [-0.0096669] [0.00915438]\n", - "13 [-0.00871804] [0.00825583]\n", - "14 [-0.00786232] [0.00744547]\n", - "15 [-0.00709059] [0.00671466]\n", - "16 [-0.00639461] [0.00605558]\n", - "17 [-0.00576694] [0.00546119]\n", - "18 [-0.00520089] [0.00492515]\n", - "19 [-0.00469039] [0.00444172]\n", - "20 [-0.00423] [0.00400574]\n", - "21 [-0.0038148] [0.00361255]\n", - "22 [-0.00344036] [0.00325796]\n", - "23 [-0.00310267] [0.00293817]\n", - "24 [-0.00279813] [0.00264978]\n", - "25 [-0.00252348] [0.00238969]\n", - "26 [-0.00227578] [0.00215513]\n", - "27 [-0.0020524] [0.00194359]\n", - "28 [-0.00185095] [0.00175281]\n", - "29 [-0.00166927] [0.00158077]\n", - "theta from own gd wth momentum\n", - "[[3.99417031]\n", - " [3.00552061]]\n" - ] - } - ], + "execution_count": 17, + "id": "75d71283", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Autograd to calculate gradients for OLS\n", "from random import random, seed\n", @@ -2022,8 +2023,10 @@ }, { "cell_type": "markdown", - "id": "43200e36", - "metadata": {}, + "id": "2a82dd02", + "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**." @@ -2031,43 +2034,13 @@ }, { "cell_type": "code", - "execution_count": 53, - "id": "b369d846", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[4.23287562]\n", - " [2.86347636]]\n", - "Eigenvalues of Hessian Matrix:[0.31306035 4.34432759]\n", - "theta from own gd\n", - "[[4.23287562]\n", - " [2.86347636]]\n" - ] - }, - { - "data": { - "image/png": "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5HLqCoa+/hqYN880bycmxnDzdWerjCdycZSkqgWt5mi2mBjXj2YjIiLVkf3QemcwDs0DUGtgXlVrA7up5MfTrXhERORR7hpaz2AI4Nw1REREMuSuYIgJ1ABXYiciIlIxBkPVce4aIiIi1WEwVB3nriEiIlIddY0ms0SOsz8TERGRW6ivZchTK7ETERGRLKkrGPr4Y87+TERERCbU1U12333ApEmGUWM5OcClS0CLFkBoqGFOG7YMERERqY66giHAEPBcvQrMnev5maiJiIjI49TVTQYAqamGda+qB0KAoaVowgTDfiIiIlINdQVDOp1hvStzk25XbZs921COiIiIVEFdwdDOnbVbhKrjTNRERESqo65gKC/PtnKciZqIiEg11BUMtWxpWznORE1ERKQa6gqGBg40jBqrOfFiFUkCYmM5EzUREZGKqCsY8vU1DJ8HOBM1ERERAVBbMAQY5hH68kvORE1EREQA1DjpImAIeMaONYway8015AglJbFFiIiISIXUGQwBhsBn6FBP14KIiIg8TL3BEDlGp2OLGhEReRUGQ2S71FTDDN5c042IiLyI+hKoyTFc042IiLwUgyGyjmu6ERGRF2MwRNbt2ME13YiIyGsxGCLrbF2rjWu6ERGRAjEYIutsXauNa7oREZECMRgi65KSuKYbERF5LQZDZB3XdCMiIi/GYIhswzXdiIjIS3HSRbId13QjIiIvxGCI7MM13YiIyMuwm4yIiIhUjcEQERERqRqDISIiIlI12QdDCxcuRJ8+fRAUFITw8HCMGzcOx48f93S1iIiIyEvIPhjatm0bpk+fjt27d2Pz5s2orKzEyJEjUVxc7OmqERERkReQhDC3FLl8Xbp0CeHh4di2bRsGDx5s03MKCwsREhKCgoICBAcHu7iGRERE5Azuun8rbmh9QUEBACA0NNRimbKyMpSVlRkfFxYWurxeREREpEyy7yarTgiBOXPm4M4770SXLl0sllu4cCFCQkKMP7GxsW6sJRERESmJorrJpk+fjm+//RY//vgjYmJiLJYz1zIUGxvLbjIiIiIFYTdZDTNnzsTXX3+N7du31xkIAUBAQAACAgLcVDMiIiJSMtkHQ0IIzJw5Exs2bEBGRgbi4uI8XSUiIiLyIrIPhqZPn46UlBR89dVXCAoKQl5eHgAgJCQEDRs29HDtiIiISOlknzMkSZLZ7atXr8bUqVNtOgaH1hMRESkPc4ZukXmsRkRERAqnqKH1RERERM7GYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUUEwytWLECcXFxCAwMRK9evbBjxw5PV4mIiIi8gCKCoXXr1mH27Nl49dVXceDAASQlJUGj0eDcuXOerhoREREpnCSEEJ6uhDX9+vVDz5498c9//tO4LT4+HuPGjcPChQutPr+wsBAhISEoKChAcHCwK6tKRERETuKu+7fsW4bKy8uxb98+jBw50mT7yJEjsXPnTg/VioiIiLyFn6crYM3ly5eh0+kQERFhsj0iIgJ5eXlmn1NWVoaysjLj44KCAgCGCJOIiIiUoeq+7epOLNkHQ1UkSTJ5LISota3KwoULsWDBglrbY2NjXVI3IiIicp0rV64gJCTEZceXfTDUvHlz+Pr61moFys/Pr9VaVGXevHmYM2eO8fH169fRunVrnDt3zqUXU24KCwsRGxuL7OxsVeVK8bx53mrA8+Z5q0FBQQFatWqF0NBQl76O7IMhf39/9OrVC5s3b8b9999v3L5582aMHTvW7HMCAgIQEBBQa3tISIiq/oiqBAcH87xVhOetLjxvdVHrefv4uDbFWfbBEADMmTMHkydPRu/evTFgwACsWrUK586dwzPPPOPpqhEREZHCKSIYevDBB3HlyhW88cYbyM3NRZcuXfDdd9+hdevWnq4aERERKZwigiEAmDZtGqZNm+bQcwMCAvD666+b7TrzZjxvnrca8Lx53mrA83bteSti0kUiIiIiV5H9pItERERErsRgiIiIiFSNwRARERGpGoMhIiIiUjVFBkMrVqxAXFwcAgMD0atXL+zYsaPO8tu2bUOvXr0QGBiItm3bYuXKlbXKrF+/HgkJCQgICEBCQgI2bNjgquo7zJ7zTk1NxYgRI9CiRQsEBwdjwIAB2LRpk0mZNWvWQJKkWj+lpaWuPhW72HPeGRkZZs/p2LFjJuW87f2eOnWq2fNOTEw0llHC+719+3aMGTMGUVFRkCQJGzdutPocb/h823ve3vL5tve8veXzbe95e8vne+HChejTpw+CgoIQHh6OcePG4fjx41af547PuOKCoXXr1mH27Nl49dVXceDAASQlJUGj0eDcuXNmy2dlZeGee+5BUlISDhw4gD/+8Y+YNWsW1q9fbyyza9cuPPjgg5g8eTJ++eUXTJ48GRMnTsSePXvcdVpW2Xve27dvx4gRI/Ddd99h3759GDZsGMaMGYMDBw6YlAsODkZubq7JT2BgoDtOySb2nneV48ePm5xThw4djPu88f1esmSJyflmZ2cjNDQUDzzwgEk5ub/fxcXF6NatG5YvX25TeW/5fNt73t7y+bb3vKso/fNt73l7y+d727ZtmD59Onbv3o3NmzejsrISI0eORHFxscXnuO0zLhSmb9++4plnnjHZ1rlzZzF37lyz5V9++WXRuXNnk21PP/206N+/v/HxxIkTRXJyskmZUaNGiYceeshJta4/e8/bnISEBLFgwQLj49WrV4uQkBBnVdEl7D3v9PR0AUBcu3bN4jHV8H5v2LBBSJIkzpw5Y9ymhPe7OgBiw4YNdZbxls93dbactzlK/HxXZ8t5e8vnuzpH3m9v+HwLIUR+fr4AILZt22axjLs+44pqGSovL8e+ffswcuRIk+0jR47Ezp07zT5n165dtcqPGjUKe/fuRUVFRZ1lLB3T3Rw575r0ej2KiopqLXZ348YNtG7dGjExMbj33ntrfbP0pPqcd48ePRAZGYm7774b6enpJvvU8H5/+OGHGD58eK1Z2uX8fjvCGz7fzqDEz3d9KPnz7Qze8vkuKCgAgDoXYXXXZ1xRwdDly5eh0+lqrVYfERFRa1X7Knl5eWbLV1ZW4vLly3WWsXRMd3PkvGv6xz/+geLiYkycONG4rXPnzlizZg2+/vprrF27FoGBgRg0aBBOnjzp1Po7ypHzjoyMxKpVq7B+/XqkpqaiU6dOuPvuu7F9+3ZjGW9/v3Nzc6HVavHkk0+abJf7++0Ib/h8O4MSP9+O8IbPd315y+dbCIE5c+bgzjvvRJcuXSyWc9dnXDHLcVQnSZLJYyFErW3Wytfcbu8xPcHROq5duxbz58/HV199hfDwcOP2/v37o3///sbHgwYNQs+ePbFs2TIsXbrUeRWvJ3vOu1OnTujUqZPx8YABA5CdnY23334bgwcPduiYnuJoHdesWYOmTZti3LhxJtuV8n7by1s+345S+ufbHt70+XaUt3y+Z8yYgV9//RU//vij1bLu+IwrqmWoefPm8PX1rRXt5efn14oKq7Rs2dJseT8/P4SFhdVZxtIx3c2R866ybt06PPHEE/j8888xfPjwOsv6+PigT58+svkmUZ/zrq5///4m5+TN77cQAh999BEmT54Mf3//OsvK7f12hDd8vutDyZ9vZ1Ha57s+vOXzPXPmTHz99ddIT09HTExMnWXd9RlXVDDk7++PXr16YfPmzSbbN2/ejIEDB5p9zoABA2qV//7779G7d280aNCgzjKWjulujpw3YPjGOHXqVKSkpGD06NFWX0cIgYMHDyIyMrLedXYGR8+7pgMHDpick7e+34BhtMapU6fwxBNPWH0dub3fjvCGz7ejlP75dhalfb7rQ+mfbyEEZsyYgdTUVGzduhVxcXFWn+O2z7jNqdYy8dlnn4kGDRqIDz/8UBw5ckTMnj1bNG7c2JhVP3fuXDF58mRj+d9++000atRIPP/88+LIkSPiww8/FA0aNBBffvmlscxPP/0kfH19xd/+9jdx9OhR8be//U34+fmJ3bt3u/38LLH3vFNSUoSfn594//33RW5urvHn+vXrxjLz588XaWlp4vTp0+LAgQPi8ccfF35+fmLPnj1uPz9L7D3vd999V2zYsEGcOHFCHDp0SMydO1cAEOvXrzeW8cb3u8qjjz4q+vXrZ/aYSni/i4qKxIEDB8SBAwcEAPHOO++IAwcOiLNnzwohvPfzbe95e8vn297z9pbPt73nXUXpn+9nn31WhISEiIyMDJO/25KSEmMZT33GFRcMCSHE+++/L1q3bi38/f1Fz549TYblTZkyRQwZMsSkfEZGhujRo4fw9/cXbdq0Ef/85z9rHfOLL74QnTp1Eg0aNBCdO3c2+XDJhT3nPWTIEAGg1s+UKVOMZWbPni1atWol/P39RYsWLcTIkSPFzp073XhGtrHnvBctWiTatWsnAgMDRbNmzcSdd94pvv3221rH9Lb3Wwghrl+/Lho2bChWrVpl9nhKeL+rhk5b+rv11s+3veftLZ9ve8/bWz7fjvyde8Pn29w5AxCrV682lvHUZ1y6VUEiIiIiVVJUzhARERGRszEYIiIiIlVjMERERESqxmCIiIiIVI3BEBEREakagyEiIiJSNQZDREREpGoMhoiIiEjVGAwRERGRqjEYIiIiIlVjMEREirR27VoEBgYiJyfHuO3JJ59E165dUVBQ4MGaEZHScG0yIlIkIQS6d++OpKQkLF++HAsWLMC//vUv7N69G9HR0Z6uHhEpiJ+nK0BE5AhJkvDmm29iwoQJiIqKwpIlS7Bjxw4GQkRkN7YMEZGi9ezZE4cPH8b333+PIUOGeLo6RKRAzBkiIsXatGkTjh07Bp1Oh4iICE9Xh4gUii1DRKRI+/fvx9ChQ/H+++/js88+Q6NGjfDFF194ulpEpEDMGSIixTlz5gxGjx6NuXPnYvLkyUhISECfPn2wb98+9OrVy9PVIyKFYcsQESnK1atXMWjQIAwePBgffPCBcfvYsWNRVlaGtLQ0D9aOiJSIwRARERGpGhOoiYiISNUYDBEREZGqMRgiIiIiVWMwRERERKrGYIiIiIhUjcEQERERqRqDISIiIlI1BkNERESkagyGiIiISNUYDBEREZGqMRgiIiIiVWMwRERERKr2/6YB0BXcksAUAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "theta from own sdg\n", - "[[4.25869167]\n", - " [2.84271642]]\n" - ] - } - ], + "execution_count": 18, + "id": "7c038fff", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Autograd to calculate gradients using SGD\n", "# OLS example\n", @@ -2146,35 +2119,23 @@ }, { "cell_type": "markdown", - "id": "1caa8279", - "metadata": {}, + "id": "018af6ec", + "metadata": { + "editable": true + }, "source": [ "## Same code but now with momentum gradient descent" ] }, { "cell_type": "code", - "execution_count": 54, - "id": "a9695688", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[3.96584049]\n", - " [3.04808331]]\n", - "Eigenvalues of Hessian Matrix:[0.31564325 4.60725403]\n", - "theta from own gd\n", - "[[3.96536405]\n", - " [3.04846625]]\n", - "theta from own sdg with momentum\n", - "[[4.01326831]\n", - " [3.04081676]]\n" - ] - } - ], + "execution_count": 19, + "id": "7ee53618", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Autograd to calculate gradients using SGD\n", "# OLS example\n", @@ -2247,33 +2208,23 @@ }, { "cell_type": "markdown", - "id": "7e8ab93f", - "metadata": {}, + "id": "b7fc014e", + "metadata": { + "editable": true + }, "source": [ "## Similar (second order function now) problem but now with AdaGrad" ] }, { "cell_type": "code", - "execution_count": 55, - "id": "be9894c6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[2.]\n", - " [3.]\n", - " [4.]]\n", - "theta from own AdaGrad\n", - "[[1.99993955]\n", - " [3.00039584]\n", - " [3.99962062]]\n" - ] - } - ], + "execution_count": 20, + "id": "d648d033", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Autograd to calculate gradients using AdaGrad and Stochastic Gradient descent\n", "# OLS example\n", @@ -2327,41 +2278,33 @@ }, { "cell_type": "markdown", - "id": "f9c181ef", - "metadata": {}, + "id": "f6d446f4", + "metadata": { + "editable": true + }, "source": [ "Running this code we note an almost perfect agreement with the results from matrix inversion." ] }, { "cell_type": "markdown", - "id": "3f40101d", - "metadata": {}, + "id": "01be2458", + "metadata": { + "editable": true + }, "source": [ "## RMSprop for adaptive learning rate with Stochastic Gradient Descent" ] }, { "cell_type": "code", - "execution_count": 56, - "id": "da9f2895", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[2.]\n", - " [3.]\n", - " [4.]]\n", - "theta from own RMSprop\n", - "[[1.99943878]\n", - " [2.99892878]\n", - " [3.99871777]]\n" - ] - } - ], + "execution_count": 21, + "id": "f277cb4e", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Autograd to calculate gradients using RMSprop and Stochastic Gradient descent\n", "# OLS example\n", @@ -2421,33 +2364,23 @@ }, { "cell_type": "markdown", - "id": "2075df0a", - "metadata": {}, + "id": "e9fe727a", + "metadata": { + "editable": true + }, "source": [ "## And finally [ADAM](https://arxiv.org/pdf/1412.6980.pdf)" ] }, { "cell_type": "code", - "execution_count": 57, - "id": "b9e0fd59", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Own inversion\n", - "[[2.]\n", - " [3.]\n", - " [4.]]\n", - "theta from own ADAM\n", - "[[1.99994314]\n", - " [3.00031228]\n", - " [3.99972037]]\n" - ] - } - ], + "execution_count": 22, + "id": "d9b84595", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "# Using Autograd to calculate gradients using RMSprop and Stochastic Gradient descent\n", "# OLS example\n", @@ -2512,27 +2445,23 @@ }, { "cell_type": "markdown", - "id": "3186664b", - "metadata": {}, + "id": "1dd49981", + "metadata": { + "editable": true + }, "source": [ "## And Logistic Regression" ] }, { "cell_type": "code", - "execution_count": 58, - "id": "c4119a68", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Initial loss: 2.772588722239781\n", - "Trained loss: 1.067270675787016\n" - ] - } - ], + "execution_count": 23, + "id": "cfa482ce", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "import autograd.numpy as np\n", "from autograd import grad\n", @@ -2571,8 +2500,10 @@ }, { "cell_type": "markdown", - "id": "55e182eb", - "metadata": {}, + "id": "b5e62a69", + "metadata": { + "editable": true + }, "source": [ "## Introducing [JAX](https://jax.readthedocs.io/en/latest/)\n", "\n", @@ -2585,17 +2516,22 @@ }, { "cell_type": "markdown", - "id": "ae059fd0", - "metadata": {}, + "id": "72f7ee6b", + "metadata": { + "editable": true + }, "source": [ "### Getting started with Jax, note the way we import numpy" ] }, { "cell_type": "code", - "execution_count": 59, - "id": "1ad5b0d3", - "metadata": {}, + "execution_count": 24, + "id": "1ea31c09", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "import jax\n", @@ -2608,47 +2544,23 @@ }, { "cell_type": "markdown", - "id": "bc8fd16c", - "metadata": {}, + "id": "9c469053", + "metadata": { + "editable": true + }, "source": [ "### A warm-up example" ] }, { "cell_type": "code", - "execution_count": 60, - "id": "443386ca", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/jax/_src/numpy/lax_numpy.py:173: UserWarning: Explicitly requested dtype float64 requested in asarray is not available, and will be truncated to dtype float32. To enable more dtypes, set the jax_enable_x64 configuration option or the JAX_ENABLE_X64 shell environment variable. See https://github.com/google/jax#current-gotchas for more.\n", - " return asarray(x, dtype=self.dtype)\n" - ] - }, - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 25, + "id": "050fe264", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "def function(x):\n", " return x**2\n", @@ -2688,39 +2600,23 @@ }, { "cell_type": "markdown", - "id": "b313e4d6", - "metadata": {}, + "id": "64885568", + "metadata": { + "editable": true + }, "source": [ "### A more advanced example" ] }, { "cell_type": "code", - "execution_count": 61, - "id": "7ff7b64d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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CIVCuP322xEKhbw+yryG/p7dgf6e3YH+nt2D/q7tIbVZlSAIgiCI+Q0pIgRBEARBeAYVIgRBEARBeAYVIgRBEARBeAYVIgRBEARBeAYVIhVOMpnE2rVroSgKXn75Za+PM6/Yt28frrnmGqxYsQK1tbVYtWoVbr/9dqRSKa+PNi+47777sGLFCoTDYaxbtw5/+tOfvD7SvGLz5s045ZRTEIlE0N7ejksvvRS7du3y+ljzns2bN0NRFNx0001eH6VioEKkwrnllluwePFir48xL9m5cydyuRy+/e1v4/XXX8fXvvY1fOtb38Ktt97q9dEqnsceeww33XQTbrvtNrz00ks488wzcfHFF+PAgQNeH23e8Mwzz+C6667D1q1b8dRTTyGTyeCCCy5APB73+mjzlm3btuGBBx7AiSee6PVRKgoa361gfvOb3+Dmm2/GT3/6Uxx33HF46aWXsHbtWq+PNa+56667cP/992Pv3r1eH6Wi2bBhA04++WTcf//92sdWr16NSy+9FJs3b/bwZPOXw4cPo729Hc888wzOOussr48z75icnMTJJ5+M++67D3feeSfWrl2Lr3/9614fqyIgRaRCGRgYwCc+8Ql8//vfR11dndfHqRrGx8fR0tLi9TEqmlQqhe3bt+OCCy6Y8fELLrgAzz77rEenmv+Mj48DAL1/BXHdddfhve99L84//3yvj1JxSL30jiiOqqq4+uqrce2112L9+vXYt2+f10eqCvbs2YN7770XX/nKV7w+SkUzNDSEbDaLjo6OGR/v6OhAf3+/R6ea36iqiptvvhlnnHEGjj/+eK+PM+949NFH8eKLL2Lbtm1eH6UiIUVEIu644w4oilL21wsvvIB7770XsVgMmzZt8vrIFYnZv2cjvb29uOiii3DZZZfh4x//uEcnn18oijLj96qqHvExgg/XX389duzYgUceecTro8w7enp6cOONN+Lhhx9GOBz2+jgVCXlEJGJoaAhDQ0NlP2f58uW4/PLL8atf/WrGRTubzcLv9+PKK6/EQw89JPqoFY3Zv2d2Uent7cU555yDDRs24Lvf/S58PqrfnZBKpVBXV4cf//jH+OAHP6h9/MYbb8TLL7+MZ555xsPTzT9uuOEGPP744/jjH/+IFStWeH2cecfjjz+OD37wg/D7/drHstksFEWBz+dDMpmc8WfEkVAhUoEcOHAAsVhM+31vby8uvPBC/OQnP8GGDRvQ2dnp4enmF4cOHcI555yDdevW4eGHH6YLCic2bNiAdevW4b777tM+tmbNGnzgAx8gsyonVFXFDTfcgJ///Od4+umncfTRR3t9pHnJxMQE9u/fP+NjH/vYx3Dsscfi05/+NLXCTEAekQpk6dKlM37f0NAAAFi1ahUVIRzp7e3F2WefjaVLl+Luu+/G4cOHtT9buHChhyerfG6++WZcddVVWL9+PU477TQ88MADOHDgAK699lqvjzZvuO666/DDH/4Qv/jFLxCJRDT/TWNjI2praz0+3fwhEokcUWzU19ejtbWVihCTUCFCECXYsmULdu/ejd27dx9R4JGQ6IyPfOQjGB4exhe+8AX09fXh+OOPxxNPPIFly5Z5fbR5AxuNPvvss2d8/MEHH8TVV1/t/oEIogTUmiEIgiAIwjPIdUcQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGdQIUIQBEEQhGf8P6ZyOHzGZunmAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 26, + "id": "8e62a3c0", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "backend = np\n", "\n", @@ -2746,8 +2642,10 @@ }, { "cell_type": "markdown", - "id": "b913d744", - "metadata": {}, + "id": "208e6194", + "metadata": { + "editable": true + }, "source": [ "## Introduction to Neural networks\n", "\n", @@ -2762,8 +2660,10 @@ }, { "cell_type": "markdown", - "id": "04b70882", - "metadata": {}, + "id": "8e40ec43", + "metadata": { + "editable": true + }, "source": [ "## Artificial neurons\n", "\n", @@ -2784,8 +2684,10 @@ }, { "cell_type": "markdown", - "id": "44405ff2", - "metadata": {}, + "id": "938e15fd", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -2800,8 +2702,10 @@ }, { "cell_type": "markdown", - "id": "b39653f7", - "metadata": {}, + "id": "fb87fbd9", + "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", @@ -2838,8 +2742,10 @@ }, { "cell_type": "markdown", - "id": "4db5fb89", - "metadata": {}, + "id": "edf4cd0f", + "metadata": { + "editable": true + }, "source": [ "## Neural network types\n", "\n", @@ -2865,8 +2771,10 @@ }, { "cell_type": "markdown", - "id": "400c590f", - "metadata": {}, + "id": "6531374b", + "metadata": { + "editable": true + }, "source": [ "## Feed-forward neural networks\n", "\n", @@ -2884,8 +2792,10 @@ }, { "cell_type": "markdown", - "id": "1536d443", - "metadata": {}, + "id": "121751bd", + "metadata": { + "editable": true + }, "source": [ "## Convolutional Neural Network\n", "\n", @@ -2911,8 +2821,10 @@ }, { "cell_type": "markdown", - "id": "0ce4aacc", - "metadata": {}, + "id": "d136f55f", + "metadata": { + "editable": true + }, "source": [ "## Recurrent neural networks\n", "\n", @@ -2930,8 +2842,10 @@ }, { "cell_type": "markdown", - "id": "c187a3e9", - "metadata": {}, + "id": "4c265bfd", + "metadata": { + "editable": true + }, "source": [ "## Other types of networks\n", "\n", @@ -2949,8 +2863,10 @@ }, { "cell_type": "markdown", - "id": "7a5d9c4f", - "metadata": {}, + "id": "5e5ba085", + "metadata": { + "editable": true + }, "source": [ "## Multilayer perceptrons\n", "\n", @@ -2964,8 +2880,10 @@ }, { "cell_type": "markdown", - "id": "2abe1a3e", - "metadata": {}, + "id": "c7c1a4fb", + "metadata": { + "editable": true + }, "source": [ "## Why multilayer perceptrons?\n", "\n", @@ -2983,8 +2901,10 @@ }, { "cell_type": "markdown", - "id": "187cb30d", - "metadata": {}, + "id": "d328f232", + "metadata": { + "editable": true + }, "source": [ "## Illustration of a single perceptron model and a multi-perceptron model\n", "\n", @@ -2997,8 +2917,10 @@ }, { "cell_type": "markdown", - "id": "6269f804", - "metadata": {}, + "id": "a5796996", + "metadata": { + "editable": true + }, "source": [ "## Examples of XOR, OR and AND gates\n", "\n", @@ -3011,29 +2933,13 @@ }, { "cell_type": "code", - "execution_count": 62, - "id": "1ad6269c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The X.TX matrix:[[4. 2. 2.]\n", - " [2. 2. 1.]\n", - " [2. 1. 2.]]\n", - "The invers of X.TX matrix:[[ 7.50000000e-01 -5.00000000e-01 -5.00000000e-01]\n", - " [-5.00000000e-01 1.00000000e+00 -2.27693602e-16]\n", - " [-5.00000000e-01 9.94484047e-17 1.00000000e+00]]\n", - "The values of theta for the XOR gate:[ 5.00000000e-01 -2.22044605e-16 -1.11022302e-16]\n", - "The linear regression prediction for the XOR gate:[0.5 0.5 0.5 0.5]\n", - "The values of theta for the OR gate:[0.25 0.5 0.5 ]\n", - "The linear regression prediction for the OR gate:[0.25 0.75 0.75 1.25]\n", - "The values of theta for the AND gate:[-0.25 0.5 0.5 ]\n", - "The linear regression prediction for the AND gate:[-0.25 0.25 0.25 0.75]\n" - ] - } - ], + "execution_count": 27, + "id": "ecf92bc4", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "\"\"\"\n", "Simple code that tests XOR, OR and AND gates with linear regression\n", @@ -3069,48 +2975,33 @@ }, { "cell_type": "markdown", - "id": "a4ac557d", - "metadata": {}, + "id": "1fc6c918", + "metadata": { + "editable": true + }, "source": [ "What is happening here?" ] }, { "cell_type": "markdown", - "id": "6c5b5b78", - "metadata": {}, + "id": "d62d3e27", + "metadata": { + "editable": true + }, "source": [ "## Does Logistic Regression do a better Job?" ] }, { "cell_type": "code", - "execution_count": 63, - "id": "78d9fe1b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The X.TX matrix:[[4. 2. 2.]\n", - " [2. 2. 1.]\n", - " [2. 1. 2.]]\n", - "The invers of X.TX matrix:[[ 7.50000000e-01 -5.00000000e-01 -5.00000000e-01]\n", - " [-5.00000000e-01 1.00000000e+00 -2.27693602e-16]\n", - " [-5.00000000e-01 9.94484047e-17 1.00000000e+00]]\n", - "The values of theta for the XOR gate:[ 5.00000000e-01 -2.22044605e-16 -1.11022302e-16]\n", - "The linear regression prediction for the XOR gate:[0.5 0.5 0.5 0.5]\n", - "The values of theta for the OR gate:[0.25 0.5 0.5 ]\n", - "The linear regression prediction for the OR gate:[0.25 0.75 0.75 1.25]\n", - "The values of theta for the AND gate:[-0.25 0.5 0.5 ]\n", - "The linear regression prediction for the AND gate:[-0.25 0.25 0.25 0.75]\n", - "Test set accuracy with Logistic Regression for OR gate: 0.75\n", - "Test set accuracy with Logistic Regression for XOR gate: 0.50\n", - "Test set accuracy with Logistic Regression for AND gate: 0.75\n" - ] - } - ], + "execution_count": 28, + "id": "ed61b098", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "\"\"\"\n", "Simple code that tests XOR and OR gates with linear regression\n", @@ -3165,34 +3056,33 @@ }, { "cell_type": "markdown", - "id": "522ea0b9", - "metadata": {}, + "id": "6ad483c8", + "metadata": { + "editable": true + }, "source": [ "Not exactly impressive, but somewhat better." ] }, { "cell_type": "markdown", - "id": "633277bf", - "metadata": {}, + "id": "bde63294", + "metadata": { + "editable": true + }, "source": [ "## Adding Neural Networks" ] }, { "cell_type": "code", - "execution_count": 64, - "id": "55106a0e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Test set accuracy with Feed Forward Neural Network for XOR gate:1.0\n" - ] - } - ], + "execution_count": 29, + "id": "ee65a0c8", + "metadata": { + "collapsed": false, + "editable": true + }, + "outputs": [], "source": [ "\n", "# and now neural networks with Scikit-Learn and the XOR\n", @@ -3207,8 +3097,10 @@ }, { "cell_type": "markdown", - "id": "6933a546", - "metadata": {}, + "id": "5e1bf5b0", + "metadata": { + "editable": true + }, "source": [ "## Mathematical model\n", "\n", @@ -3217,8 +3109,10 @@ }, { "cell_type": "markdown", - "id": "a392cc52", - "metadata": {}, + "id": "be7c042e", + "metadata": { + "editable": true + }, "source": [ "$$\n", "y = f\\left(\\sum_{i=1}^n w_ix_i + b_i\\right) = f(z),\n", @@ -3227,8 +3121,10 @@ }, { "cell_type": "markdown", - "id": "bc1e3563", - "metadata": {}, + "id": "3d2e2dd5", + "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", @@ -3240,8 +3136,10 @@ }, { "cell_type": "markdown", - "id": "947e6060", - "metadata": {}, + "id": "ed306400", + "metadata": { + "editable": true + }, "source": [ "## Mathematical model\n", "\n", @@ -3250,8 +3148,10 @@ }, { "cell_type": "markdown", - "id": "190e7764", - "metadata": {}, + "id": "4a765b0c", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3265,8 +3165,10 @@ }, { "cell_type": "markdown", - "id": "9d4df41f", - "metadata": {}, + "id": "b0aebb02", + "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", @@ -3278,8 +3180,10 @@ }, { "cell_type": "markdown", - "id": "e8c69c2e", - "metadata": {}, + "id": "467c1fd8", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3294,8 +3198,10 @@ }, { "cell_type": "markdown", - "id": "80a632b1", - "metadata": {}, + "id": "2e470a3e", + "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", @@ -3304,8 +3210,10 @@ }, { "cell_type": "markdown", - "id": "20de39bb", - "metadata": {}, + "id": "a9bc4b48", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3320,8 +3228,10 @@ }, { "cell_type": "markdown", - "id": "01031b37", - "metadata": {}, + "id": "302f8e5a", + "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", @@ -3331,8 +3241,10 @@ }, { "cell_type": "markdown", - "id": "9560b5e1", - "metadata": {}, + "id": "d2615c98", + "metadata": { + "editable": true + }, "source": [ "## Mathematical model\n", "\n", @@ -3341,8 +3253,10 @@ }, { "cell_type": "markdown", - "id": "baaac514", - "metadata": {}, + "id": "5278571a", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3357,8 +3271,10 @@ }, { "cell_type": "markdown", - "id": "f2a439d9", - "metadata": {}, + "id": "e5974f8e", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3373,16 +3289,20 @@ }, { "cell_type": "markdown", - "id": "9ba7b5ad", - "metadata": {}, + "id": "8d8dfb8f", + "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": "bed342fd", - "metadata": {}, + "id": "f7f2fed9", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3397,8 +3317,10 @@ }, { "cell_type": "markdown", - "id": "d1beb8c9", - "metadata": {}, + "id": "a55b4648", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3414,8 +3336,10 @@ }, { "cell_type": "markdown", - "id": "a71895ad", - "metadata": {}, + "id": "2ead61ca", + "metadata": { + "editable": true + }, "source": [ "## Mathematical model\n", "\n", @@ -3425,8 +3349,10 @@ }, { "cell_type": "markdown", - "id": "d9bd25ff", - "metadata": {}, + "id": "2f4b46c5", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3441,8 +3367,10 @@ }, { "cell_type": "markdown", - "id": "e7737a5b", - "metadata": {}, + "id": "141efe27", + "metadata": { + "editable": true + }, "source": [ "which illustrates a basic property of MLPs: The only independent\n", "variables are the input values $x_n$." @@ -3450,8 +3378,10 @@ }, { "cell_type": "markdown", - "id": "384040ce", - "metadata": {}, + "id": "42448508", + "metadata": { + "editable": true + }, "source": [ "## Mathematical model\n", "\n", @@ -3467,8 +3397,10 @@ }, { "cell_type": "markdown", - "id": "4a27ed92", - "metadata": {}, + "id": "6d50157c", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3483,8 +3415,10 @@ }, { "cell_type": "markdown", - "id": "c71650e0", - "metadata": {}, + "id": "2a152b3d", + "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", @@ -3494,8 +3428,10 @@ }, { "cell_type": "markdown", - "id": "b6291c8a", - "metadata": {}, + "id": "ba08173e", + "metadata": { + "editable": true + }, "source": [ "### Matrix-vector notation\n", "\n", @@ -3512,8 +3448,10 @@ }, { "cell_type": "markdown", - "id": "da4b43f7", - "metadata": {}, + "id": "e4a90775", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3543,8 +3481,10 @@ }, { "cell_type": "markdown", - "id": "7fe1f511", - "metadata": {}, + "id": "d5988bc3", + "metadata": { + "editable": true + }, "source": [ "### Matrix-vector notation and activation\n", "\n", @@ -3553,8 +3493,10 @@ }, { "cell_type": "markdown", - "id": "d53241ba", - "metadata": {}, + "id": "4cf0f108", + "metadata": { + "editable": true + }, "source": [ "\n", "
\n", @@ -3570,8 +3512,10 @@ }, { "cell_type": "markdown", - "id": "962e06e9", - "metadata": {}, + "id": "58c258f9", + "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", @@ -3582,8 +3526,10 @@ }, { "cell_type": "markdown", - "id": "6446fdc6", - "metadata": {}, + "id": "72ccd4d4", + "metadata": { + "editable": true + }, "source": [ "### Activation functions\n", "\n", @@ -3603,8 +3549,10 @@ }, { "cell_type": "markdown", - "id": "69aff123", - "metadata": {}, + "id": "8366c15c", + "metadata": { + "editable": true + }, "source": [ "### Activation functions, Logistic and Hyperbolic ones\n", "\n", @@ -3620,8 +3568,10 @@ }, { "cell_type": "markdown", - "id": "dbb74732", - "metadata": {}, + "id": "dfc11028", + "metadata": { + "editable": true + }, "source": [ "$$\n", "f(x) = \\frac{1}{1 + e^{-x}},\n", @@ -3630,16 +3580,20 @@ }, { "cell_type": "markdown", - "id": "216973d6", - "metadata": {}, + "id": "6294f339", + "metadata": { + "editable": true + }, "source": [ "and the *hyperbolic tangent* function" ] }, { "cell_type": "markdown", - "id": "a8643aed", - "metadata": {}, + "id": "59dc18e3", + "metadata": { + "editable": true + }, "source": [ "$$\n", "f(x) = \\tanh(x)\n", @@ -3648,8 +3602,10 @@ }, { "cell_type": "markdown", - "id": "b6450655", - "metadata": {}, + "id": "3d3a0336", + "metadata": { + "editable": true + }, "source": [ "### Relevance\n", "\n", @@ -3662,9 +3618,12 @@ }, { "cell_type": "code", - "execution_count": 36, - "id": "0565ead1", - "metadata": {}, + "execution_count": 30, + "id": "21707211", + "metadata": { + "collapsed": false, + "editable": true + }, "outputs": [], "source": [ "\"\"\"The sigmoid function (or the logistic curve) is a \n", @@ -3741,25 +3700,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.18" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } diff --git a/doc/src/week40/week40.do.txt b/doc/src/week40/week40.do.txt index 9a0fbaee2..f050720c7 100644 --- a/doc/src/week40/week40.do.txt +++ b/doc/src/week40/week40.do.txt @@ -13,8 +13,8 @@ DATE: September 30-October 4, 2024 !bblock o Stochastic Gradient descent with examples and automatic differentiation o If we get time, we start with the basics of 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" + o "Video of lecture":"https://youtu.be/jdJoOrCIdII" + o "Whiteboard notes at URL:"https://github.com/CompPhysics/MachineLearning/blob/master/doc/HandWrittenNotes/2024/NotesSeptember30.pdf" !eblock !split