From 437222920fca62818e62a2da2b0b7329eab15c51 Mon Sep 17 00:00:00 2001 From: Morten Hjorth-Jensen Date: Mon, 14 Oct 2024 13:02:29 +0200 Subject: [PATCH] Update week42.ipynb --- doc/pub/week42/ipynb/week42.ipynb | 1381 ++++++++--------------------- 1 file changed, 381 insertions(+), 1000 deletions(-) diff --git a/doc/pub/week42/ipynb/week42.ipynb b/doc/pub/week42/ipynb/week42.ipynb index fdfeb303f..40736f534 100644 --- a/doc/pub/week42/ipynb/week42.ipynb +++ b/doc/pub/week42/ipynb/week42.ipynb @@ -3,9 +3,7 @@ { "cell_type": "markdown", "id": "71674611", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "\n", @@ -15,9 +13,7 @@ { "cell_type": "markdown", "id": "65b3502e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "# Week 42 Constructing a Neural Network code with examples\n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and Facility for Rare Isotope Beams, Michigan State University\n", @@ -28,9 +24,7 @@ { "cell_type": "markdown", "id": "1d840be4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Lecture October 14, 2024\n", "1. Building our own Feed-forward Neural Network and discussion of project 2\n", @@ -57,9 +51,7 @@ { "cell_type": "markdown", "id": "8c43f62c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Material for the active learning sessions on Tuesday and Wednesday\n", " * Exercise on starting to write a code for neural networks, feed forward part. We will also continue ur discussions of gradient descent methods from last week. If you have time, start considering the back-propagation part as well (exercises for next week)\n", @@ -74,9 +66,7 @@ { "cell_type": "markdown", "id": "bb52c881", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Writing a code which implements a feed-forward neural network\n", "\n", @@ -93,9 +83,7 @@ { "cell_type": "markdown", "id": "e53a998a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Mathematics of deep learning\n", "\n", @@ -109,9 +97,7 @@ { "cell_type": "markdown", "id": "2be1dbc1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Reminder on books with hands-on material and codes\n", "* [Sebastian Rashcka et al, Machine learning with Sickit-Learn and PyTorch](https://sebastianraschka.com/blog/2022/ml-pytorch-book.html)" @@ -120,9 +106,7 @@ { "cell_type": "markdown", "id": "d81e5954", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Reading recommendations\n", "\n", @@ -134,9 +118,7 @@ { "cell_type": "markdown", "id": "bf67ca94", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## First network example, simple percepetron with one input\n", "\n", @@ -149,9 +131,7 @@ { "cell_type": "markdown", "id": "ea5ccdfd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z_1 = w_1x+b_1,\n", @@ -161,9 +141,7 @@ { "cell_type": "markdown", "id": "a67526dc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $w_1$ is the weight and $b_1$ is the bias. These are the\n", "parameters we want to optimize. The output is $a_1=\\sigma(z_1)$ (see\n", @@ -175,9 +153,7 @@ { "cell_type": "markdown", "id": "004f244e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(x;w_1,b_1)=\\frac{1}{2}(a_1-y)^2.\n", @@ -187,9 +163,7 @@ { "cell_type": "markdown", "id": "d5019705", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Layout of a simple neural network with no hidden layer\n", "\n", @@ -203,9 +177,7 @@ { "cell_type": "markdown", "id": "b28a1451", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Optimizing the parameters\n", "\n", @@ -219,9 +191,7 @@ { "cell_type": "markdown", "id": "bb9e817a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_1} \\hspace{0.1cm}\\mathrm{and}\\hspace{0.1cm}\\frac{\\partial C}{\\partial b_1}.\n", @@ -231,9 +201,7 @@ { "cell_type": "markdown", "id": "cb070b5e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Using the chain rule we find" ] @@ -241,9 +209,7 @@ { "cell_type": "markdown", "id": "f68d4801", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_1}=\\frac{\\partial C}{\\partial a_1}\\frac{\\partial a_1}{\\partial z_1}\\frac{\\partial z_1}{\\partial w_1}=(a_1-y)\\sigma_1'x,\n", @@ -253,9 +219,7 @@ { "cell_type": "markdown", "id": "fffa97bd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -263,9 +227,7 @@ { "cell_type": "markdown", "id": "7f751c77", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial b_1}=\\frac{\\partial C}{\\partial a_1}\\frac{\\partial a_1}{\\partial z_1}\\frac{\\partial z_1}{\\partial b_1}=(a_1-y)\\sigma_1',\n", @@ -275,9 +237,7 @@ { "cell_type": "markdown", "id": "e8f8479b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which we later will just define as" ] @@ -285,9 +245,7 @@ { "cell_type": "markdown", "id": "9d52f786", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial a_1}\\frac{\\partial a_1}{\\partial z_1}=\\delta_1.\n", @@ -297,9 +255,7 @@ { "cell_type": "markdown", "id": "cdb55ad0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Adding a hidden layer\n", "\n", @@ -313,9 +269,7 @@ { "cell_type": "markdown", "id": "ece1a1cc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z_1 = w_1a_0+b_1 \\hspace{0.1cm} \\wedge a_1 = \\sigma_1(z_1),\n", @@ -325,9 +279,7 @@ { "cell_type": "markdown", "id": "e2af50fb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z_2 = w_2a_1+b_2 \\hspace{0.1cm} \\wedge a_2 = \\sigma_2(z_2),\n", @@ -337,9 +289,7 @@ { "cell_type": "markdown", "id": "c883f2ef", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and the cost function" ] @@ -347,9 +297,7 @@ { "cell_type": "markdown", "id": "f1129306", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "C(x;\\boldsymbol{\\Theta})=\\frac{1}{2}(a_2-y)^2,\n", @@ -359,9 +307,7 @@ { "cell_type": "markdown", "id": "1d14bedd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with $\\boldsymbol{\\Theta}=[w_1,w_2,b_1,b_2]$." ] @@ -369,9 +315,7 @@ { "cell_type": "markdown", "id": "84378f69", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Layout of a simple neural network with one hidden layer\n", "\n", @@ -385,9 +329,7 @@ { "cell_type": "markdown", "id": "7f6f41e3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The derivatives\n", "\n", @@ -397,9 +339,7 @@ { "cell_type": "markdown", "id": "f38cb151", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_2}=\\frac{\\partial C}{\\partial a_2}\\frac{\\partial a_2}{\\partial z_2}\\frac{\\partial z_2}{\\partial w_2}=(a_2-y)\\sigma_2'a_1=\\delta_2a_1,\n", @@ -409,9 +349,7 @@ { "cell_type": "markdown", "id": "d7f60566", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial b_2}=\\frac{\\partial C}{\\partial a_2}\\frac{\\partial a_2}{\\partial z_2}\\frac{\\partial z_2}{\\partial b_2}=(a_2-y)\\sigma_2'=\\delta_2,\n", @@ -421,9 +359,7 @@ { "cell_type": "markdown", "id": "81219134", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_1}=\\frac{\\partial C}{\\partial a_2}\\frac{\\partial a_2}{\\partial z_2}\\frac{\\partial z_2}{\\partial a_1}\\frac{\\partial a_1}{\\partial z_1}\\frac{\\partial z_1}{\\partial w_1}=(a_2-y)\\sigma_2'a_1\\sigma_1'a_0,\n", @@ -433,9 +369,7 @@ { "cell_type": "markdown", "id": "8f0f27a7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial b_1}=\\frac{\\partial C}{\\partial a_2}\\frac{\\partial a_2}{\\partial z_2}\\frac{\\partial z_2}{\\partial a_1}\\frac{\\partial a_1}{\\partial z_1}\\frac{\\partial z_1}{\\partial b_1}=(a_2-y)\\sigma_2'\\sigma_1'=\\delta_1.\n", @@ -445,9 +379,7 @@ { "cell_type": "markdown", "id": "aa9974f2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Can you generalize this to more than one hidden layer?" ] @@ -455,9 +387,7 @@ { "cell_type": "markdown", "id": "02021c85", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Important observations\n", "\n", @@ -471,9 +401,7 @@ { "cell_type": "markdown", "id": "d5b4c3d8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The training\n", "\n", @@ -483,9 +411,7 @@ { "cell_type": "markdown", "id": "0c0f2d45", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "w_{i}\\leftarrow w_{i}- \\eta \\delta_i a_{i-1},\n", @@ -495,9 +421,7 @@ { "cell_type": "markdown", "id": "9f8b567b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -505,9 +429,7 @@ { "cell_type": "markdown", "id": "6afa5b0f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "b_i \\leftarrow b_i-\\eta \\delta_i,\n", @@ -517,9 +439,7 @@ { "cell_type": "markdown", "id": "a8447e5f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with $\\eta$ is the learning rate.\n", "\n", @@ -531,9 +451,7 @@ { "cell_type": "markdown", "id": "0262d1c4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Code example\n", "\n", @@ -549,10 +467,7 @@ "cell_type": "code", "execution_count": 1, "id": "91932727", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -622,9 +537,7 @@ { "cell_type": "markdown", "id": "6695945c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We see that after some few iterations (the results do depend on the learning rate however), we get an error which is rather small." ] @@ -632,9 +545,7 @@ { "cell_type": "markdown", "id": "30bd4411", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Simple neural network and the back propagation equations\n", "\n", @@ -649,9 +560,7 @@ { "cell_type": "markdown", "id": "03303707", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "x_1 = a_1^{(0)} \\wedge x_2 = a_2^{(0)}.\n", @@ -661,9 +570,7 @@ { "cell_type": "markdown", "id": "24dc6874", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The hidden layer (layer $(1)$) has nodes which yield the outputs $a_1^{(1)}$ and $a_2^{(1)}$) with weight $\\boldsymbol{w}$ and bias $\\boldsymbol{b}$ parameters" ] @@ -671,9 +578,7 @@ { "cell_type": "markdown", "id": "9229190d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "w_{ij}^{(1)}=\\left\\{w_{11}^{(1)},w_{12}^{(1)},w_{21}^{(1)},w_{22}^{(1)}\\right\\} \\wedge b^{(1)}=\\left\\{b_1^{(1)},b_2^{(1)}\\right\\}.\n", @@ -683,9 +588,7 @@ { "cell_type": "markdown", "id": "db21c4eb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Layout of a simple neural network with two input nodes, one hidden layer with two hidden noeds and one output node\n", "\n", @@ -699,9 +602,7 @@ { "cell_type": "markdown", "id": "cf9b69e8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The ouput layer\n", "\n", @@ -711,9 +612,7 @@ { "cell_type": "markdown", "id": "53130107", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "w_{i}^{(2)}=\\left\\{w_{1}^{(2)},w_{2}^{(2)}\\right\\} \\wedge b^{(2)}.\n", @@ -723,9 +622,7 @@ { "cell_type": "markdown", "id": "5835245c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Our output is $\\tilde{y}=a^{(2)}$ and we define a generic cost function $C(a^{(2)},y;\\boldsymbol{\\Theta})$ where $y$ is the target value (a scalar here).\n", "The parameters we need to optimize are given by" @@ -734,9 +631,7 @@ { "cell_type": "markdown", "id": "dd31d181", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\Theta}=\\left\\{w_{11}^{(1)},w_{12}^{(1)},w_{21}^{(1)},w_{22}^{(1)},w_{1}^{(2)},w_{2}^{(2)},b_1^{(1)},b_2^{(1)},b^{(2)}\\right\\}.\n", @@ -746,9 +641,7 @@ { "cell_type": "markdown", "id": "36a9d52a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Compact expressions\n", "\n", @@ -759,9 +652,7 @@ { "cell_type": "markdown", "id": "3af3b240", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\begin{bmatrix}z_1^{(1)} \\\\ z_2^{(1)} \\end{bmatrix}=\\left(\\begin{bmatrix}w_{11}^{(1)} & w_{12}^{(1)}\\\\ w_{21}^{(1)} &w_{22}^{(1)} \\end{bmatrix}\\right)^{T}\\begin{bmatrix}a_1^{(0)} \\\\ a_2^{(0)} \\end{bmatrix}+\\begin{bmatrix}b_1^{(1)} \\\\ b_2^{(1)} \\end{bmatrix},\n", @@ -771,9 +662,7 @@ { "cell_type": "markdown", "id": "3ef7b15b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with outputs" ] @@ -781,9 +670,7 @@ { "cell_type": "markdown", "id": "31e47e2c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\begin{bmatrix}a_1^{(1)} \\\\ a_2^{(1)} \\end{bmatrix}=\\begin{bmatrix}\\sigma^{(1)}(z_1^{(1)}) \\\\ \\sigma^{(1)}(z_2^{(1)}) \\end{bmatrix}.\n", @@ -793,9 +680,7 @@ { "cell_type": "markdown", "id": "c5690e76", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Output layer\n", "\n", @@ -805,9 +690,7 @@ { "cell_type": "markdown", "id": "919ce153", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z^{(2)} = w_{1}^{(2)}a_1^{(1)} +w_{2}^{(2)}a_2^{(1)}+b^{(2)},\n", @@ -817,9 +700,7 @@ { "cell_type": "markdown", "id": "69df1f30", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "resulting in the output" ] @@ -827,9 +708,7 @@ { "cell_type": "markdown", "id": "42ea9246", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "a^{(2)}=\\sigma^{(2)}(z^{(2)}).\n", @@ -839,9 +718,7 @@ { "cell_type": "markdown", "id": "af203af1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Explicit derivatives\n", "\n", @@ -855,9 +732,7 @@ { "cell_type": "markdown", "id": "fd36e08b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_{i}^{(2)}}=\\frac{\\partial C}{\\partial a^{(2)}}\\frac{\\partial a^{(2)}}{\\partial z^{(2)}}\\frac{\\partial z^{(2)}}{\\partial w_{i}^{(2)}}=\\delta^{(2)}a_i^{(1)},\n", @@ -867,9 +742,7 @@ { "cell_type": "markdown", "id": "997bddf7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with" ] @@ -877,9 +750,7 @@ { "cell_type": "markdown", "id": "ba4380bd", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta^{(2)}=\\frac{\\partial C}{\\partial a^{(2)}}\\frac{\\partial a^{(2)}}{\\partial z^{(2)}}\n", @@ -889,9 +760,7 @@ { "cell_type": "markdown", "id": "13be072b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and finally" ] @@ -899,9 +768,7 @@ { "cell_type": "markdown", "id": "2c6bcc22", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial b^{(2)}}=\\frac{\\partial C}{\\partial a^{(2)}}\\frac{\\partial a^{(2)}}{\\partial z^{(2)}}\\frac{\\partial z^{(2)}}{\\partial b^{(2)}}=\\delta^{(2)}.\n", @@ -911,9 +778,7 @@ { "cell_type": "markdown", "id": "a50dfdeb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Derivatives of the hidden layer\n", "\n", @@ -923,9 +788,7 @@ { "cell_type": "markdown", "id": "0d50cd56", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_{11}^{(1)}}=\\frac{\\partial C}{\\partial a^{(2)}}\\frac{\\partial a^{(2)}}{\\partial z^{(2)}}\n", @@ -936,9 +799,7 @@ { "cell_type": "markdown", "id": "4fc9436b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which, noting that" ] @@ -946,9 +807,7 @@ { "cell_type": "markdown", "id": "7545f5c9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z^{(2)} =w_1^{(2)}a_1^{(1)}+w_2^{(2)}a_2^{(1)}+b^{(2)},\n", @@ -958,9 +817,7 @@ { "cell_type": "markdown", "id": "bcbea03f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "allows us to rewrite" ] @@ -968,9 +825,7 @@ { "cell_type": "markdown", "id": "ee05da6d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial z^{(2)}}{\\partial z_1^{(1)}}\\frac{\\partial z_1^{(1)}}{\\partial w_{11}^{(1)}}=w_1^{(2)}\\frac{\\partial a_1^{(1)}}{\\partial z_1^{(1)}}a_1^{(1)}.\n", @@ -980,9 +835,7 @@ { "cell_type": "markdown", "id": "1f9491ce", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Final expression\n", "Defining" @@ -991,9 +844,7 @@ { "cell_type": "markdown", "id": "07772fef", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_1^{(1)}=w_1^{(2)}\\frac{\\partial a_1^{(1)}}{\\partial z_1^{(1)}}\\delta^{(2)},\n", @@ -1003,9 +854,7 @@ { "cell_type": "markdown", "id": "c432668f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "we have" ] @@ -1013,9 +862,7 @@ { "cell_type": "markdown", "id": "4274417c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_{11}^{(1)}}=\\delta_1^{(1)}a_1^{(1)}.\n", @@ -1025,9 +872,7 @@ { "cell_type": "markdown", "id": "b615718d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Similarly, we obtain" ] @@ -1035,9 +880,7 @@ { "cell_type": "markdown", "id": "c541b15f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_{12}^{(1)}}=\\delta_1^{(1)}a_2^{(1)}.\n", @@ -1047,9 +890,7 @@ { "cell_type": "markdown", "id": "6b741552", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Completing the list\n", "\n", @@ -1059,9 +900,7 @@ { "cell_type": "markdown", "id": "d564e7a9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_{21}^{(1)}}=\\delta_2^{(1)}a_1^{(1)},\n", @@ -1071,9 +910,7 @@ { "cell_type": "markdown", "id": "927894b5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1081,9 +918,7 @@ { "cell_type": "markdown", "id": "75624550", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial w_{22}^{(1)}}=\\delta_2^{(1)}a_2^{(1)},\n", @@ -1093,9 +928,7 @@ { "cell_type": "markdown", "id": "9252c078", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where we have defined" ] @@ -1103,9 +936,7 @@ { "cell_type": "markdown", "id": "10c7da6e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_2^{(1)}=w_2^{(2)}\\frac{\\partial a_2^{(1)}}{\\partial z_2^{(1)}}\\delta^{(2)}.\n", @@ -1115,9 +946,7 @@ { "cell_type": "markdown", "id": "0fe640a9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Final expressions for the biases of the hidden layer\n", "\n", @@ -1127,9 +956,7 @@ { "cell_type": "markdown", "id": "01ff9a38", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial b_{1}^{(1)}}=\\delta_1^{(1)},\n", @@ -1139,9 +966,7 @@ { "cell_type": "markdown", "id": "37fda9de", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1149,9 +974,7 @@ { "cell_type": "markdown", "id": "861af2b9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial C}{\\partial b_{2}^{(1)}}=\\delta_2^{(1)}.\n", @@ -1161,9 +984,7 @@ { "cell_type": "markdown", "id": "f9cea8b7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "As we will see below, these expressions can be generalized in a more compact form." ] @@ -1171,9 +992,7 @@ { "cell_type": "markdown", "id": "12e3298b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Gradient expressions\n", "\n", @@ -1184,9 +1003,7 @@ { "cell_type": "markdown", "id": "a104df98", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "w_{i}^{(2)}\\leftarrow w_{i}^{(2)}- \\eta \\delta^{(2)} a_{i}^{(1)},\n", @@ -1196,9 +1013,7 @@ { "cell_type": "markdown", "id": "9bc2f036", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1206,9 +1021,7 @@ { "cell_type": "markdown", "id": "568ced5c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "b^{(2)} \\leftarrow b^{(2)}-\\eta \\delta^{(2)},\n", @@ -1218,9 +1031,7 @@ { "cell_type": "markdown", "id": "906d2bd9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1228,9 +1039,7 @@ { "cell_type": "markdown", "id": "79992e6f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "w_{ij}^{(1)}\\leftarrow w_{ij}^{(1)}- \\eta \\delta_{i}^{(1)} a_{j}^{(0)},\n", @@ -1240,9 +1049,7 @@ { "cell_type": "markdown", "id": "0745b6ba", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1250,9 +1057,7 @@ { "cell_type": "markdown", "id": "4fb2781f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "b_{i}^{(1)} \\leftarrow b_{i}^{(1)}-\\eta \\delta_{i}^{(1)},\n", @@ -1262,9 +1067,7 @@ { "cell_type": "markdown", "id": "57576b6e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $\\eta$ is the learning rate." ] @@ -1272,9 +1075,7 @@ { "cell_type": "markdown", "id": "d1f38053", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Setting up the equations for a neural network\n", "\n", @@ -1289,9 +1090,7 @@ { "cell_type": "markdown", "id": "6f6f31e8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "{\\cal C}(\\boldsymbol{\\Theta}) = \\frac{1}{2}\\sum_{i=1}^n\\left(y_i - \\tilde{y}_i\\right)^2,\n", @@ -1301,9 +1100,7 @@ { "cell_type": "markdown", "id": "f206ae2b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where the $y_i$s are our $n$ targets (the values we want to\n", "reproduce), while the outputs of the network after having propagated\n", @@ -1313,9 +1110,7 @@ { "cell_type": "markdown", "id": "5e7af877", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Layout of a neural network with three hidden layers (last later = $l=L=4$, first layer $l=0$)\n", "\n", @@ -1329,9 +1124,7 @@ { "cell_type": "markdown", "id": "96c13dab", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Definitions\n", "\n", @@ -1346,9 +1139,7 @@ { "cell_type": "markdown", "id": "a6781c7d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z_j^l = \\sum_{i=1}^{M_{l-1}}w_{ij}^la_i^{l-1}+b_j^l,\n", @@ -1358,9 +1149,7 @@ { "cell_type": "markdown", "id": "4db58da4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $b_k^l$ are the biases from layer $l$. Here $M_{l-1}$\n", "represents the total number of nodes/neurons/units of layer $l-1$. The\n", @@ -1371,9 +1160,7 @@ { "cell_type": "markdown", "id": "b4458c55", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{z}^l = \\left(\\boldsymbol{W}^l\\right)^T\\boldsymbol{a}^{l-1}+\\boldsymbol{b}^l.\n", @@ -1383,9 +1170,7 @@ { "cell_type": "markdown", "id": "b32e0714", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Inputs to the activation function\n", "\n", @@ -1399,9 +1184,7 @@ { "cell_type": "markdown", "id": "fffb7785", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "a_j^l = \\sigma(z_j^l) = \\frac{1}{1+\\exp{-(z_j^l)}}.\n", @@ -1411,9 +1194,7 @@ { "cell_type": "markdown", "id": "08bff16c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Layout of input to first hidden layer $l=1$ from input layer $l=0$\n", "\n", @@ -1427,9 +1208,7 @@ { "cell_type": "markdown", "id": "fb907bb3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Derivatives and the chain rule\n", "\n", @@ -1439,9 +1218,7 @@ { "cell_type": "markdown", "id": "f97ed7ef", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial z_j^l}{\\partial w_{ij}^l} = a_i^{l-1},\n", @@ -1451,9 +1228,7 @@ { "cell_type": "markdown", "id": "136c2230", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1461,9 +1236,7 @@ { "cell_type": "markdown", "id": "4b2344b6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial z_j^l}{\\partial a_i^{l-1}} = w_{ji}^l.\n", @@ -1473,9 +1246,7 @@ { "cell_type": "markdown", "id": "52a4e7a7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "With our definition of the activation function we have that (note that this function depends only on $z_j^l$)" ] @@ -1483,9 +1254,7 @@ { "cell_type": "markdown", "id": "163ee2e5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial a_j^l}{\\partial z_j^{l}} = a_j^l(1-a_j^l)=\\sigma(z_j^l)(1-\\sigma(z_j^l)).\n", @@ -1495,9 +1264,7 @@ { "cell_type": "markdown", "id": "5aa607a5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Derivative of the cost function\n", "\n", @@ -1509,9 +1276,7 @@ { "cell_type": "markdown", "id": "da13c77b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "{\\cal C}(\\boldsymbol{\\Theta}^L) = \\frac{1}{2}\\sum_{i=1}^n\\left(y_i - \\tilde{y}_i\\right)^2=\\frac{1}{2}\\sum_{i=1}^n\\left(a_i^L - y_i\\right)^2,\n", @@ -1521,9 +1286,7 @@ { "cell_type": "markdown", "id": "7bf944d0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The derivative of this function with respect to the weights is" ] @@ -1531,9 +1294,7 @@ { "cell_type": "markdown", "id": "ea130e95", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial{\\cal C}(\\boldsymbol{\\Theta}^L)}{\\partial w_{ij}^L} = \\left(a_j^L - y_j\\right)\\frac{\\partial a_j^L}{\\partial w_{ij}^{L}},\n", @@ -1543,9 +1304,7 @@ { "cell_type": "markdown", "id": "2fba64b7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The last partial derivative can easily be computed and reads (by applying the chain rule)" ] @@ -1553,9 +1312,7 @@ { "cell_type": "markdown", "id": "5904a528", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial a_j^L}{\\partial w_{ij}^{L}} = \\frac{\\partial a_j^L}{\\partial z_{j}^{L}}\\frac{\\partial z_j^L}{\\partial w_{ij}^{L}}=a_j^L(1-a_j^L)a_i^{L-1}.\n", @@ -1565,9 +1322,7 @@ { "cell_type": "markdown", "id": "86f8199b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The back propagation equations for a neural network\n", "\n", @@ -1577,9 +1332,7 @@ { "cell_type": "markdown", "id": "e4370f9f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial{\\cal C}((\\boldsymbol{\\Theta}^L)}{\\partial w_{ij}^L} = \\left(a_j^L - y_j\\right)a_j^L(1-a_j^L)a_i^{L-1},\n", @@ -1589,9 +1342,7 @@ { "cell_type": "markdown", "id": "f60e1730", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Defining" ] @@ -1599,9 +1350,7 @@ { "cell_type": "markdown", "id": "e282d002", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^L = a_j^L(1-a_j^L)\\left(a_j^L - y_j\\right) = \\sigma'(z_j^L)\\frac{\\partial {\\cal C}}{\\partial (a_j^L)},\n", @@ -1611,9 +1360,7 @@ { "cell_type": "markdown", "id": "5de6d59f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and using the Hadamard product of two vectors we can write this as" ] @@ -1621,9 +1368,7 @@ { "cell_type": "markdown", "id": "97c35e7d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\boldsymbol{\\delta}^L = \\sigma'(\\boldsymbol{z}^L)\\circ\\frac{\\partial {\\cal C}}{\\partial (\\boldsymbol{a}^L)}.\n", @@ -1633,9 +1378,7 @@ { "cell_type": "markdown", "id": "c4754c54", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Analyzing the last results\n", "\n", @@ -1651,9 +1394,7 @@ { "cell_type": "markdown", "id": "0b03f12b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## More considerations\n", "\n", @@ -1669,9 +1410,7 @@ { "cell_type": "markdown", "id": "ad079735", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial {\\cal C}}{\\partial (a_j^L)}\n", @@ -1681,9 +1420,7 @@ { "cell_type": "markdown", "id": "0bf757b6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "With the definition of $\\delta_j^L$ we have a more compact definition of the derivative of the cost function in terms of the weights, namely" ] @@ -1691,9 +1428,7 @@ { "cell_type": "markdown", "id": "b6246783", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial{\\cal C}}{\\partial w_{ij}^L} = \\delta_j^La_i^{L-1}.\n", @@ -1703,9 +1438,7 @@ { "cell_type": "markdown", "id": "b7575d50", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Derivatives in terms of $z_j^L$\n", "\n", @@ -1715,9 +1448,7 @@ { "cell_type": "markdown", "id": "e6c93f95", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^L =\\frac{\\partial {\\cal C}}{\\partial z_j^L}= \\frac{\\partial {\\cal C}}{\\partial a_j^L}\\frac{\\partial a_j^L}{\\partial z_j^L},\n", @@ -1727,9 +1458,7 @@ { "cell_type": "markdown", "id": "b52b78ac", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which can also be interpreted as the partial derivative of the cost function with respect to the biases $b_j^L$, namely" ] @@ -1737,9 +1466,7 @@ { "cell_type": "markdown", "id": "a5fdfb9c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^L = \\frac{\\partial {\\cal C}}{\\partial b_j^L}\\frac{\\partial b_j^L}{\\partial z_j^L}=\\frac{\\partial {\\cal C}}{\\partial b_j^L},\n", @@ -1749,9 +1476,7 @@ { "cell_type": "markdown", "id": "8bd7f846", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "That is, the error $\\delta_j^L$ is exactly equal to the rate of change of the cost function as a function of the bias." ] @@ -1759,9 +1484,7 @@ { "cell_type": "markdown", "id": "550334c8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Bringing it together\n", "\n", @@ -1771,9 +1494,7 @@ { "cell_type": "markdown", "id": "ac298c05", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "\n", "
\n", @@ -1789,9 +1510,7 @@ { "cell_type": "markdown", "id": "6609cbf5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1799,9 +1518,7 @@ { "cell_type": "markdown", "id": "64741262", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "\n", "
\n", @@ -1817,9 +1534,7 @@ { "cell_type": "markdown", "id": "76c4610d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -1827,9 +1542,7 @@ { "cell_type": "markdown", "id": "efd0ba93", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "\n", "
\n", @@ -1845,9 +1558,7 @@ { "cell_type": "markdown", "id": "98e88435", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Final back propagating equation\n", "\n", @@ -1857,9 +1568,7 @@ { "cell_type": "markdown", "id": "08bdbdff", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^l =\\frac{\\partial {\\cal C}}{\\partial z_j^l}.\n", @@ -1869,9 +1578,7 @@ { "cell_type": "markdown", "id": "e234c8a6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We want to express this in terms of the equations for layer $l+1$." ] @@ -1879,9 +1586,7 @@ { "cell_type": "markdown", "id": "6a4118be", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Using the chain rule and summing over all $k$ entries\n", "\n", @@ -1891,9 +1596,7 @@ { "cell_type": "markdown", "id": "d211df4b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^l =\\sum_k \\frac{\\partial {\\cal C}}{\\partial z_k^{l+1}}\\frac{\\partial z_k^{l+1}}{\\partial z_j^{l}}=\\sum_k \\delta_k^{l+1}\\frac{\\partial z_k^{l+1}}{\\partial z_j^{l}},\n", @@ -1903,9 +1606,7 @@ { "cell_type": "markdown", "id": "bf0c2817", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and recalling that" ] @@ -1913,9 +1614,7 @@ { "cell_type": "markdown", "id": "2de9333a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z_j^{l+1} = \\sum_{i=1}^{M_{l}}w_{ij}^{l+1}a_i^{l}+b_j^{l+1},\n", @@ -1925,9 +1624,7 @@ { "cell_type": "markdown", "id": "00d82ece", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with $M_l$ being the number of nodes in layer $l$, we obtain" ] @@ -1935,9 +1632,7 @@ { "cell_type": "markdown", "id": "19f78643", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^l =\\sum_k \\delta_k^{l+1}w_{kj}^{l+1}\\sigma'(z_j^l),\n", @@ -1947,9 +1642,7 @@ { "cell_type": "markdown", "id": "1424f687", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "This is our final equation.\n", "\n", @@ -1959,9 +1652,7 @@ { "cell_type": "markdown", "id": "9d7c23b2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Setting up the back propagation algorithm and algorithm for a feed forward NN, initalizations\n", "\n", @@ -1985,9 +1676,7 @@ { "cell_type": "markdown", "id": "1decfbef", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Setting up the back propagation algorithm, part 1\n", "\n", @@ -2008,9 +1697,7 @@ { "cell_type": "markdown", "id": "7f237d52", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Setting up the back propagation algorithm, part 2\n", "\n", @@ -2020,9 +1707,7 @@ { "cell_type": "markdown", "id": "d37fa1b5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^L = \\sigma'(z_j^L)\\frac{\\partial {\\cal C}}{\\partial (a_j^L)}.\n", @@ -2032,9 +1717,7 @@ { "cell_type": "markdown", "id": "213b757d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Then we compute the back propagate error for each $l=L-1,L-2,\\dots,1$ as" ] @@ -2042,9 +1725,7 @@ { "cell_type": "markdown", "id": "3137751d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^l = \\sum_k \\delta_k^{l+1}w_{kj}^{l+1}\\sigma'(z_j^l).\n", @@ -2054,9 +1735,7 @@ { "cell_type": "markdown", "id": "da1cf61b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Setting up the Back propagation algorithm, part 3\n", "\n", @@ -2068,9 +1747,7 @@ { "cell_type": "markdown", "id": "3b57ef97", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "w_{ij}^l\\leftarrow = w_{ij}^l- \\eta \\delta_j^la_i^{l-1},\n", @@ -2080,9 +1757,7 @@ { "cell_type": "markdown", "id": "bb0c4d59", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "b_j^l \\leftarrow b_j^l-\\eta \\frac{\\partial {\\cal C}}{\\partial b_j^l}=b_j^l-\\eta \\delta_j^l,\n", @@ -2092,9 +1767,7 @@ { "cell_type": "markdown", "id": "a9483fc9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with $\\eta$ being the learning rate." ] @@ -2102,9 +1775,7 @@ { "cell_type": "markdown", "id": "49c7c2f3", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Updating the gradients\n", "\n", @@ -2114,9 +1785,7 @@ { "cell_type": "markdown", "id": "734ef014", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\delta_j^l = \\sum_k \\delta_k^{l+1}w_{kj}^{l+1}\\sigma'(z_j^l),\n", @@ -2126,9 +1795,7 @@ { "cell_type": "markdown", "id": "ac393c38", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "we update the weights and the biases using gradient descent for each $l=L-1,L-2,\\dots,1$ and update the weights and biases according to the rules" ] @@ -2136,9 +1803,7 @@ { "cell_type": "markdown", "id": "c38ed8eb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "w_{ij}^l\\leftarrow = w_{ij}^l- \\eta \\delta_j^la_i^{l-1},\n", @@ -2148,9 +1813,7 @@ { "cell_type": "markdown", "id": "d097bbf6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "b_j^l \\leftarrow b_j^l-\\eta \\frac{\\partial {\\cal C}}{\\partial b_j^l}=b_j^l-\\eta \\delta_j^l,\n", @@ -2160,9 +1823,7 @@ { "cell_type": "markdown", "id": "56e28349", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Activation functions\n", "\n", @@ -2183,9 +1844,7 @@ { "cell_type": "markdown", "id": "0f764f08", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Activation functions, Logistic and Hyperbolic ones\n", "\n", @@ -2202,9 +1861,7 @@ { "cell_type": "markdown", "id": "697fbd9c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\sigma(x) = \\frac{1}{1 + e^{-x}},\n", @@ -2214,9 +1871,7 @@ { "cell_type": "markdown", "id": "e9f79c9b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and the *hyperbolic tangent* function" ] @@ -2224,9 +1879,7 @@ { "cell_type": "markdown", "id": "8285a58e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\sigma(x) = \\tanh(x)\n", @@ -2236,9 +1889,7 @@ { "cell_type": "markdown", "id": "eba13151", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Relevance\n", "\n", @@ -2251,13 +1902,53 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "d5693cd0", "metadata": { - "collapsed": false, - "editable": true + "scrolled": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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XkWkiWVlZTFs2DASEhJ49tlnOXz4cNX3WrZsaWIyz5eamsro0aPp168fAwcO5NVXXyUzM5OJEyeaHc3r3Hnnnbz77rt8+umnhIWFVc3biYiIICgoyOR03iMsLKxG4QgJCSEqKsqjiwiojIiXW7JkCbt27WLXrl01iqB2Gp5Zo0aNIj8/n2nTppGdnU337t1ZtGgRbdu2NTua1zlxevWwYcOqLX/jjTcYN25c0wcSr6PDNCIiImIqzdITERERU6mMiIiIiKlURkRERMRUKiMiIiJiKpURERERMZXKiIiIiJhKZURERERMpTIiIiIiplIZEREREVOpjIiIiIipVEZExBR79+7FYrHU+Prt/VFExPPpRnkiYor4+Hiys7OrHufk5HDhhRdy3nnnmZhKRMygG+WJiOnKysoYNmwY0dHRfPrpp/j4aKetiDfRnhERMd348eMpKioiPT1dRUTEC6mMiIipnnzySRYvXsxPP/1EWFiY2XFExAQ6TCMipvnwww+54YYb+PLLL7ngggvMjiMiJlEZERFTbNq0iQEDBpCamsqdd95ZtTwgIIDIyEgTk4lIU1MZERFTzJ07l1tuuaXG8qFDh/Ldd981fSARMY3KiIiIiJhK09ZFRETEVCojIiIiYiqVERERETGVyoiIiIiYSmVERERETKUyIiIiIqZSGRERERFTqYyIiIiIqVRGRERExFQqIyIiImIqlRERERExlcqIiIiImOr/AbSpzJqxOet0AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAHFCAYAAAD/kYOsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4kUlEQVR4nO3de3SU1b3/8c8EwoQIiQYkCW0IlEWBAAoEyYWCREwQBNGKQLVRFLAssIKpy5p6A/Q0R2slgILSQ02R67ER0BqRYA3gIVCBBKun8gMPGIRELkqGi5kMyfP7QzMwTghJZZjJnvdrrVn67Nnz5LvZTvj47OdisyzLEgAAgEFC/F0AAADApUbAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABcFErVqxQbm6uX2v46quvNGHCBHXo0EE2m0233nqrX+v5/e9/r7Vr13q1FxUVyWazqaio6LLXBOAcG49qAHAxo0aN0scff6wDBw74rYaHHnpICxcu1J///Gd17dpVUVFR+ulPf+q3etq0aaOxY8cqLy/Po93hcOh///d/lZCQoIiICP8UB0At/V0AADTGxx9/rK5du+quu+7ydykNioiIUHJysr/LAIIeS1RAkDt69Kjuv/9+xcXFyW636+qrr9agQYO0ceNGSdLQoUP19ttv6/PPP5fNZnO/6lRXV+uZZ55Rjx493J+/9957dfToUY+f07lzZ40aNUpr1qzRNddco7CwMP3kJz/R/PnzG6zvwIEDstls2rhxo/71r3+5f35RUdEFl4PqPnP+0ZWJEyeqTZs22rdvn0aOHKk2bdooLi5Ov/nNb+R0Oj0+73Q6NWfOHPXs2VNhYWFq166d0tLStHXrVkmSzWbT6dOn9Ze//MVdz9ChQyVdeInqzTffVEpKisLDw9W2bVulp6eruLjYo8+sWbNks9n0ySef6Be/+IUiIyMVHR2t++67T5WVlQ3+OQHwxBEcIMhlZmZq165d+o//+A/99Kc/1YkTJ7Rr1y4dP35ckrRw4ULdf//9+uyzz7RmzRqPz9bW1mrMmDHasmWLHnnkEaWmpurzzz/XU089paFDh2rHjh1q3bq1u39paalmzpypWbNmKSYmRsuXL9eMGTNUXV2thx9+uN76YmNjVVxcrGnTpqmyslLLly+XJCUkJGjXrl1NGqvL5dItt9yiSZMm6Te/+Y02b96sp59+WpGRkXryySclSWfPntWIESO0ZcsWzZw5UzfccIPOnj2rbdu2qaysTKmpqSouLtYNN9ygtLQ0PfHEE5LU4HLUihUrdNdddykjI0MrV66U0+nUc889p6FDh+q9997Tz372M4/+t99+u8aPH69Jkybpn//8p7KzsyVJf/7zn5s0XiCoWQCCWps2bayZM2c22Ofmm2+24uPjvdpXrlxpSbLy8/M92j/88ENLkrVw4UJ3W3x8vGWz2azS0lKPvunp6VZERIR1+vTpBmu4/vrrrV69enm0vf/++5Yk6/333/do379/vyXJevXVV91t99xzjyXJ+u///m+PviNHjrS6d+/u3l66dKklyfrTn/7UYD1XXHGFdc8993i1f7+mmpoaq2PHjlafPn2smpoad7+TJ09aHTp0sFJTU91tTz31lCXJeu655zz2OW3aNCssLMyqra1tsCYA57BEBQS5gQMHKi8vT88884y2bdsml8vV6M/+7W9/05VXXqnRo0fr7Nmz7lffvn0VExPjtUzTq1cvXXvttR5td955pxwOR5OPxvw7bDabRo8e7dF2zTXX6PPPP3dvv/POOwoLC9N99913SX7mnj17dPjwYWVmZiok5Nyv3DZt2uj222/Xtm3bdObMGY/P3HLLLV41VlVV6ciRI5ekJiAYEHCAILd69Wrdc889+q//+i+lpKQoKipKd999tyoqKi762S+//FInTpxQq1atFBoa6vGqqKjQsWPHPPrHxMR47aOurW5JzJfCw8MVFhbm0Wa321VVVeXePnr0qDp27OgRRn6IunHFxsZ6vdexY0fV1tbq66+/9mhv166dV42S9M0331ySmoBgwDk4QJBr3769cnNzlZubq7KyMr355pt69NFHdeTIEa1fv/6in23Xrt0F+7Vt29Zju77QVNf2/b/UG6MurHz/JOHvB6umuPrqq/XBBx+otrb2koScunGVl5d7vXf48GGFhIToqquu+sE/B4AnjuAAcOvUqZMeeOABpaeneywZ2e32eo8ejBo1SsePH1dNTY0GDBjg9erevbtH/08++US7d+/2aFuxYoXatm2r/v37N7nezp07S5I++ugjj/Y333yzyfuqM2LECFVVVXnd3+b7LvRn8n3du3fXj370I61YsULWebcdO336tPLz891XVgG4tDiCAwSxyspKpaWl6c4771SPHj3Utm1bffjhh1q/fr1+/vOfu/v16dNHb7zxhhYtWqTExESFhIRowIABmjBhgpYvX66RI0dqxowZGjhwoEJDQ/XFF1/o/fff15gxY3Tbbbe599OxY0fdcsstmjVrlmJjY7Vs2TIVFhbq2Wef/bf+ko+JidGNN96onJwcXXXVVYqPj9d7772nN95449/+M/nFL36hV199VVOnTtWePXuUlpam2tpabd++XT179tSECRPcfyZFRUV66623FBsbq7Zt23oFOkkKCQnRc889p7vuukujRo3Sr371KzmdTv3hD3/QiRMn9J//+Z//dq0AGuDvs5wB+E9VVZU1depU65prrrEiIiKs1q1bW927d7eeeuopj6uavvrqK2vs2LHWlVdeadlsNuv8Xx0ul8t6/vnnrWuvvdYKCwuz2rRpY/Xo0cP61a9+Ze3du9fdLz4+3rr55putv/71r1avXr2sVq1aWZ07d7ZeeOGFRtVa31VUlmVZ5eXl1tixY62oqCgrMjLS+uUvf2nt2LGj3quorrjiCq/P1125dL5vvvnGevLJJ61u3bpZrVq1stq1a2fdcMMN1tatW919SktLrUGDBlnh4eGWJOv666+3LOvCV3atXbvWSkpKssLCwqwrrrjCGjZsmPU///M/9dZy9OhRj/ZXX33VkmTt37+/EX9SACzLsnhUA4DLonPnzurdu7f+9re/+bsUAEGAc3AAAIBxCDgAAMA4LFEBAADj+PQIzubNmzV69Gh17NhRNptNa9eubbB/3UPqvv/69NNPPfrl5+crISFBdrtdCQkJXs/HAQAAwc2nAef06dO69tpr9eKLLzbpc3v27FF5ebn71a1bN/d7xcXFGj9+vDIzM7V7925lZmZq3Lhx2r59+6UuHwAANFOXbYnKZrNpzZo1uvXWWy/Yp6ioSGlpafr666915ZVX1ttn/Pjxcjgceuedd9xtN910k6666iqtXLnyElcNAACao4C80V+/fv1UVVWlhIQEPf7440pLS3O/V1xcrIceesij//Dhw5Wbm3vB/TmdTo9budfW1uqrr75Su3btZLPZLnn9AADg0rMsSydPnmzU8+ICKuDExsZq8eLFSkxMlNPp1GuvvaZhw4apqKhIQ4YMkfTtc2uio6M9PhcdHd3ggwFzcnI0e/Zsn9YOAAAuj4MHD+rHP/5x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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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4+Nv6Hk9PT01ZcqUMpezzIy+6dsZ0Dd9OwP6rti+y30zMgAAQHXBh3oCAADTIugAAADTIugAAADTIugAAADTqvZB58CBA3rssccUHh4ub29vNW3aVFOmTFFBQcFVjzMMQ/Hx8apfv768vb0VFRWlnTt3VlLVFeOll15St27d5OPjc93vIjlixAhZLJYSX126dLFvoRXsRvo2w3yfPn1aw4YNk5+fn/z8/DRs2DCdOXPmqsdUx/meN2+ewsPD5eXlpcjISP3www9XHb9mzRpFRkbKy8tLTZo00fz58yup0opVnr6TkpJKzavFYtGePXsqseKbt3btWvXv31/169eXxWLRV199dc1jzDDf5e3bDPM9ffp0derUSb6+vgoMDNT999+v1NTUax5XEfNd7YPOnj17VFxcrLfffls7d+7U66+/rvnz52vy5MlXPW7GjBmaOXOm5syZo02bNik4OFi9evVSbm5uJVV+8woKCjRo0CA9+eST5TquT58+ysjIsH0tX77cThXax430bYb5jo2NVUpKilauXKmVK1cqJSVFw4YNu+Zx1Wm+Fy9erPHjx+vZZ59VcnKyunfvrr59+yo9Pb3M8WlpaerXr5+6d++u5ORkTZ48WePGjdOSJUsqufKbU96+L0lNTS0xt7feemslVVwxzp07p3bt2mnOnDnXNd4s813evi+pzvO9Zs0ajR49Whs2bFBiYqIKCwsVExOjc+fOXfGYCptvw4RmzJhhhIeHX/Hx4uJiIzg42Hj55Zdt+y5cuGD4+fkZ8+fPr4wSK9TChQsNPz+/6xo7fPhwY8CAAXatp7Jcb99mmO9du3YZkowNGzbY9q1fv96QZOzZs+eKx1W3+b799tuNkSNHltjXokUL45lnnilz/MSJE40WLVqU2PfnP//Z6NKli91qtIfy9r169WpDknH69OlKqK5ySDKWLl161TFmme/fup6+zTjfx48fNyQZa9asueKYiprvan9FpyzZ2dmqW7fuFR9PS0tTZmamYmJibPs8PT3Vs2dPrVu3rjJKdKikpCQFBgaqWbNmeuKJJ3T8+HFHl2RXZpjv9evXy8/PT507d7bt69Kli/z8/K7ZQ3WZ74KCAv38888l5kmSYmJirtjj+vXrS43v3bu3Nm/eLKvVardaK9KN9H1JRESEQkJCdNddd2n16tX2LLNKMMN83wwzzfelT0S42t/qippv0wWdX375RW+++aZGjhx5xTGXPm8rKCioxP6goKBSn8VlNn379tXHH3+s77//Xq+99po2bdqkO++8s8QnwJuNGeY7MzNTgYGBpfYHBgZetYfqNN8nT55UUVFRueYpMzOzzPGFhYU6efKk3WqtSDfSd0hIiN555x0tWbJEX375pZo3b6677rpLa9eurYySHcYM830jzDbfhmEoLi5Od9xxh1q3bn3FcRU131U26MTHx5d589VvvzZv3lzimKNHj6pPnz4aNGiQHn/88Ws+h8ViKbFtGEapfZXtRvouj8GDB+uee+5R69at1b9/f61YsUJ79+7Vt99+W4FdlJ+9+5aq/3yXVeu1eqiq83015Z2nssaXtb+qK0/fzZs31xNPPKEOHTqoa9eumjdvnu655x69+uqrlVGqQ5llvsvDbPM9ZswYbdu2TZ988sk1x1bEfNvts65u1pgxYzRkyJCrjgkLC7P999GjRxUdHa2uXbvqnXfeuepxwcHBki6mxZCQENv+48ePl0qPla28fd+skJAQhYaGat++fRV2zhthz77NMN/btm3TsWPHSj124sSJcvVQVea7LAEBAXJ1dS11FeNq8xQcHFzmeDc3N/n7+9ut1op0I32XpUuXLvroo48qurwqxQzzXVGq63yPHTtWy5Yt09q1a0t94PflKmq+q2zQCQgIUEBAwHWNPXLkiKKjoxUZGamFCxfKxeXqF6rCw8MVHBysxMRERURESLq4Tr5mzRq98sorN137zShP3xUhKytLhw4dKhEAHMGefZthvrt27ars7Gxt3LhRt99+uyTpp59+UnZ2trp163bdz1dV5rssHh4eioyMVGJioh544AHb/sTERA0YMKDMY7p27apvvvmmxL5Vq1apY8eOcnd3t2u9FeVG+i5LcnJylZzXimSG+a4o1W2+DcPQ2LFjtXTpUiUlJSk8PPyax1TYfJfr1uUq6MiRI8Ytt9xi3Hnnncbhw4eNjIwM29dvNW/e3Pjyyy9t2y+//LLh5+dnfPnll8b27duNoUOHGiEhIUZOTk5lt3DDDh48aCQnJxtTp041atasaSQnJxvJyclGbm6ubcxv+87NzTWefvppY926dUZaWpqxevVqo2vXrkaDBg1M3bdhmGO++/TpY7Rt29ZYv369sX79eqNNmzbGvffeW2JMdZ/vTz/91HB3dzcWLFhg7Nq1yxg/frxRo0YN48CBA4ZhGMYzzzxjDBs2zDb+119/NXx8fIynnnrK2LVrl7FgwQLD3d3d+OKLLxzVwg0pb9+vv/66sXTpUmPv3r3Gjh07jGeeecaQZCxZssRRLdyQ3Nxc2++vJGPmzJlGcnKycfDgQcMwzDvf5e3bDPP95JNPGn5+fkZSUlKJv9N5eXm2Mfaa72ofdBYuXGhIKvPrtyQZCxcutG0XFxcbU6ZMMYKDgw1PT0+jR48exvbt2yu5+pszfPjwMvtevXq1bcxv+87LyzNiYmKMevXqGe7u7kbjxo2N4cOHG+np6Y5p4AaVt2/DMMd8Z2VlGQ8//LDh6+tr+Pr6Gg8//HCpl5uaYb7nzp1rhIaGGh4eHkaHDh1KvPx0+PDhRs+ePUuMT0pKMiIiIgwPDw8jLCzMeOuttyq54opRnr5feeUVo2nTpoaXl5dRp04d44477jC+/fZbB1R9cy69bPryr+HDhxuGYd75Lm/fZpjvK/2d/u2/0/aab8v/FQAAAGA6VfZVVwAAADeLoAMAAEyLoAMAAEyLoAMAAEyLoAMAAEyLoAMAAEyLoAMAAEyLoAMAAEyLoAMAAEyLoAMAAEyLoAOgyjtw4IAsFkupr6ioKEeXBqCKc3N0AQBwLY0aNVJGRoZtOzMzU3fffbd69OjhwKoAVAd8qCeAauXChQuKiopSvXr19PXXX8vFhQvTAK6MKzoAqpXHHntMubm5SkxMJOQAuCaCDoBq4x//+IdWrlypjRs3ytfX19HlAKgGWLoCUC0sWbJEQ4cO1YoVK3TXXXc5uhwA1QRBB0CVt2PHDnXu3FlxcXEaPXq0bb+Hh4fq1q3rwMoAVHUEHQBVXkJCgh599NFS+3v27KmkpKTKLwhAtUHQAQAApsVLFgAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGkRdAAAgGn9P+9K8z/xjo0MAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "%matplotlib inline\n", "\n", @@ -2337,9 +2028,7 @@ { "cell_type": "markdown", "id": "b0e28a6b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Vanishing gradients\n", "\n", @@ -2359,9 +2048,7 @@ { "cell_type": "markdown", "id": "436fb27b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Exploding gradients\n", "\n", @@ -2377,9 +2064,7 @@ { "cell_type": "markdown", "id": "9319de67", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Is the Logistic activation function (Sigmoid) our choice?\n", "\n", @@ -2400,9 +2085,7 @@ { "cell_type": "markdown", "id": "e90fbb0a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Logistic function as the root of problems\n", "\n", @@ -2419,9 +2102,7 @@ { "cell_type": "markdown", "id": "7a18427f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The derivative of the Logistic funtion\n", "\n", @@ -2447,9 +2128,7 @@ { "cell_type": "markdown", "id": "ac352aa1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Insights from the paper by Glorot and Bengio\n", "\n", @@ -2467,9 +2146,7 @@ { "cell_type": "markdown", "id": "67a8bef0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The RELU function family\n", "\n", @@ -2488,9 +2165,7 @@ { "cell_type": "markdown", "id": "76de2016", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## ELU function\n", "\n", @@ -2502,9 +2177,7 @@ { "cell_type": "markdown", "id": "e798fa5d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "ELU(z) = \\left\\{\\begin{array}{cc} \\alpha\\left( \\exp{(z)}-1\\right) & z < 0,\\\\ z & z \\ge 0.\\end{array}\\right.\n", @@ -2514,9 +2187,7 @@ { "cell_type": "markdown", "id": "6f33abb9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Which activation function should we use?\n", "\n", @@ -2536,9 +2207,7 @@ { "cell_type": "markdown", "id": "ad76ab9d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## More on activation functions, output layers\n", "\n", @@ -2558,9 +2227,7 @@ { "cell_type": "markdown", "id": "4d0588bb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Fine-tuning neural network hyperparameters\n", "\n", @@ -2587,9 +2254,7 @@ { "cell_type": "markdown", "id": "cb5679f8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Hidden layers\n", "\n", @@ -2613,9 +2278,7 @@ { "cell_type": "markdown", "id": "fa928c9b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Batch Normalization\n", "\n", @@ -2639,9 +2302,7 @@ { "cell_type": "markdown", "id": "4a9462ce", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Dropout\n", "\n", @@ -2659,9 +2320,7 @@ { "cell_type": "markdown", "id": "e523997a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Gradient Clipping\n", "\n", @@ -2679,9 +2338,7 @@ { "cell_type": "markdown", "id": "19bba5e1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## A top-down perspective on Neural networks\n", "\n", @@ -2705,9 +2362,7 @@ { "cell_type": "markdown", "id": "ff6b5f13", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## More top-down perspectives\n", "\n", @@ -2734,9 +2389,7 @@ { "cell_type": "markdown", "id": "df905d9f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Limitations of supervised learning with deep networks\n", "\n", @@ -2752,9 +2405,7 @@ { "cell_type": "markdown", "id": "233e93d6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Limitations of NNs\n", "\n", @@ -2768,9 +2419,7 @@ { "cell_type": "markdown", "id": "0034168c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Homogeneous data\n", "\n", @@ -2780,9 +2429,7 @@ { "cell_type": "markdown", "id": "cd701f7d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## More limitations\n", "\n", @@ -2794,9 +2441,7 @@ { "cell_type": "markdown", "id": "84048fb0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Setting up a Multi-layer perceptron model for classification\n", "\n", @@ -2822,9 +2467,7 @@ { "cell_type": "markdown", "id": "61ea03ed", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "P(y = 0 \\mid \\boldsymbol{x}, \\boldsymbol{\\theta}) = \\frac{1}{1 + \\exp{(- \\boldsymbol{x}})} ,\n", @@ -2834,9 +2477,7 @@ { "cell_type": "markdown", "id": "abd0c817", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -2844,9 +2485,7 @@ { "cell_type": "markdown", "id": "2e0379cc", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "P(y = 1 \\mid \\boldsymbol{x}, \\boldsymbol{\\theta}) = 1 - P(y = 0 \\mid \\boldsymbol{x}, \\boldsymbol{\\theta}) ,\n", @@ -2856,9 +2495,7 @@ { "cell_type": "markdown", "id": "59290cf7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where $y \\in \\{0, 1\\}$ and $\\boldsymbol{\\theta}$ represents the weights and biases\n", "of our network." @@ -2867,9 +2504,7 @@ { "cell_type": "markdown", "id": "6bc256eb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Defining the cost function\n", "\n", @@ -2879,9 +2514,7 @@ { "cell_type": "markdown", "id": "831eee08", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathcal{C}(\\boldsymbol{\\theta}) = - \\ln P(\\mathcal{D} \\mid \\boldsymbol{\\theta}) = - \\sum_{i=1}^n\n", @@ -2892,9 +2525,7 @@ { "cell_type": "markdown", "id": "ba46bcc0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "This last equality means that we can interpret our *cost* function as a sum over the *loss* function\n", "for each point in the dataset $\\mathcal{L}_i(\\boldsymbol{\\theta})$. \n", @@ -2917,9 +2548,7 @@ { "cell_type": "markdown", "id": "a475ed33", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "P(y_{ic} = 1 \\mid \\boldsymbol{x}_i, \\boldsymbol{\\theta}) = \\frac{\\exp{((\\boldsymbol{a}_i^{hidden})^T \\boldsymbol{w}_c)}}\n", @@ -2930,9 +2559,7 @@ { "cell_type": "markdown", "id": "378895ce", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which reduces to the logistic function in the binary case. \n", "The likelihood of this $C$-class classifier\n", @@ -2942,9 +2569,7 @@ { "cell_type": "markdown", "id": "268989a6", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "P(\\mathcal{D} \\mid \\boldsymbol{\\theta}) = \\prod_{i=1}^n \\prod_{c=0}^{C-1} [P(y_{ic} = 1)]^{y_{ic}} .\n", @@ -2954,9 +2579,7 @@ { "cell_type": "markdown", "id": "1ac5dfe0", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Again we take the negative log-likelihood to define our cost function:" ] @@ -2964,9 +2587,7 @@ { "cell_type": "markdown", "id": "4d3d6bb7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathcal{C}(\\boldsymbol{\\theta}) = - \\log{P(\\mathcal{D} \\mid \\boldsymbol{\\theta})}.\n", @@ -2976,9 +2597,7 @@ { "cell_type": "markdown", "id": "bc4e4a53", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "See the logistic regression lectures for a full definition of the cost function.\n", "\n", @@ -2988,9 +2607,7 @@ { "cell_type": "markdown", "id": "4cc000a1", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Example: binary classification problem\n", "\n", @@ -3000,9 +2617,7 @@ { "cell_type": "markdown", "id": "7f5ea691", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathcal{C}(\\boldsymbol{\\beta}) = - \\sum_{i=1}^n \\left(y_i\\log{p(y_i \\vert x_i,\\boldsymbol{\\beta})}+(1-y_i)\\log{1-p(y_i \\vert x_i,\\boldsymbol{\\beta})}\\right),\n", @@ -3012,9 +2627,7 @@ { "cell_type": "markdown", "id": "a7f4fc8e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where we had defined the logistic (sigmoid) function" ] @@ -3022,9 +2635,7 @@ { "cell_type": "markdown", "id": "acdecb39", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(y_i =1\\vert x_i,\\boldsymbol{\\beta})=\\frac{\\exp{(\\beta_0+\\beta_1 x_i)}}{1+\\exp{(\\beta_0+\\beta_1 x_i)}},\n", @@ -3034,9 +2645,7 @@ { "cell_type": "markdown", "id": "b0c3e8c7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and" ] @@ -3044,9 +2653,7 @@ { "cell_type": "markdown", "id": "6e130deb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "p(y_i =0\\vert x_i,\\boldsymbol{\\beta})=1-p(y_i =1\\vert x_i,\\boldsymbol{\\beta}).\n", @@ -3056,9 +2663,7 @@ { "cell_type": "markdown", "id": "23e83ce8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "The parameters $\\boldsymbol{\\beta}$ were defined using a minimization method like gradient descent or Newton-Raphson's method. \n", "\n", @@ -3069,9 +2674,7 @@ { "cell_type": "markdown", "id": "67c77893", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "a_i^l = y_i = \\frac{\\exp{(z_i^l)}}{1+\\exp{(z_i^l)}},\n", @@ -3081,9 +2684,7 @@ { "cell_type": "markdown", "id": "36ede636", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "with" ] @@ -3091,9 +2692,7 @@ { "cell_type": "markdown", "id": "4008b26c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "z_i^l = \\sum_{j}w_{ij}^l a_j^{l-1}+b_i^l,\n", @@ -3103,9 +2702,7 @@ { "cell_type": "markdown", "id": "258ae1d4", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where the superscript $l-1$ indicates that these are the outputs from layer $l-1$.\n", "Our cost function at the final layer $l=L$ is now" @@ -3114,9 +2711,7 @@ { "cell_type": "markdown", "id": "b9c648be", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\mathcal{C}(\\boldsymbol{W}) = - \\sum_{i=1}^n \\left(t_i\\log{a_i^L}+(1-t_i)\\log{(1-a_i^L)}\\right),\n", @@ -3126,9 +2721,7 @@ { "cell_type": "markdown", "id": "615f1fce", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "where we have defined the targets $t_i$. The derivatives of the cost function with respect to the output $a_i^L$ are then easily calculated and we get" ] @@ -3136,9 +2729,7 @@ { "cell_type": "markdown", "id": "620b34cb", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial \\mathcal{C}(\\boldsymbol{W})}{\\partial a_i^L} = \\frac{a_i^L-t_i}{a_i^L(1-a_i^L)}.\n", @@ -3148,9 +2739,7 @@ { "cell_type": "markdown", "id": "7d09dc1a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "In case we use another activation function than the logistic one, we need to evaluate other derivatives." ] @@ -3158,9 +2747,7 @@ { "cell_type": "markdown", "id": "8589b8ee", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The Softmax function\n", "In case we employ the more general case given by the Softmax equation, we need to evaluate the derivative of the activation function with respect to the activation $z_i^l$, that is we need" @@ -3169,9 +2756,7 @@ { "cell_type": "markdown", "id": "63160327", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial f(z_i^l)}{\\partial w_{jk}^l} =\n", @@ -3182,9 +2767,7 @@ { "cell_type": "markdown", "id": "98614055", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "For the Softmax function we have" ] @@ -3192,9 +2775,7 @@ { "cell_type": "markdown", "id": "37435d7c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "f(z_i^l) = \\frac{\\exp{(z_i^l)}}{\\sum_{m=1}^K\\exp{(z_m^l)}}.\n", @@ -3204,9 +2785,7 @@ { "cell_type": "markdown", "id": "64a4d79f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Its derivative with respect to $z_j^l$ gives" ] @@ -3214,9 +2793,7 @@ { "cell_type": "markdown", "id": "7e3891af", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "$$\n", "\\frac{\\partial f(z_i^l)}{\\partial z_j^l}= f(z_i^l)\\left(\\delta_{ij}-f(z_j^l)\\right),\n", @@ -3226,9 +2803,7 @@ { "cell_type": "markdown", "id": "7205e781", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "which in case of the simply binary model reduces to having $i=j$." ] @@ -3236,9 +2811,7 @@ { "cell_type": "markdown", "id": "a5645092", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Developing a code for doing neural networks with back propagation\n", "\n", @@ -3260,9 +2833,7 @@ { "cell_type": "markdown", "id": "09e9b12d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Collect and pre-process data\n", "\n", @@ -3310,10 +2881,7 @@ "cell_type": "code", "execution_count": 3, "id": "84fd1480", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# import necessary packages\n", @@ -3363,9 +2931,7 @@ { "cell_type": "markdown", "id": "e671e2a8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Train and test datasets\n", "\n", @@ -3384,10 +2950,7 @@ "cell_type": "code", "execution_count": 4, "id": "5d1c4624", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", @@ -3422,9 +2985,7 @@ { "cell_type": "markdown", "id": "b397d4ee", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Define model and architecture\n", "\n", @@ -3466,9 +3027,7 @@ { "cell_type": "markdown", "id": "1fce534f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Layers\n", "\n", @@ -3506,9 +3065,7 @@ { "cell_type": "markdown", "id": "9c50a158", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Weights and biases\n", "\n", @@ -3527,10 +3084,7 @@ "cell_type": "code", "execution_count": 5, "id": "4daeba9a", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# building our neural network\n", @@ -3553,9 +3107,7 @@ { "cell_type": "markdown", "id": "f26a835c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Feed-forward pass\n", "\n", @@ -3581,9 +3133,7 @@ { "cell_type": "markdown", "id": "09f1187b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Matrix multiplications\n", "\n", @@ -3618,10 +3168,7 @@ "cell_type": "code", "execution_count": 6, "id": "35d71f0e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# setup the feed-forward pass, subscript h = hidden layer\n", @@ -3664,9 +3211,7 @@ { "cell_type": "markdown", "id": "e318575f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Choose cost function and optimizer\n", "\n", @@ -3695,9 +3240,7 @@ { "cell_type": "markdown", "id": "788f45d2", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Optimizing the cost function\n", "\n", @@ -3733,9 +3276,7 @@ { "cell_type": "markdown", "id": "599a7b8f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Regularization\n", "\n", @@ -3767,9 +3308,7 @@ { "cell_type": "markdown", "id": "cc694849", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Matrix multiplication\n", "\n", @@ -3808,10 +3347,7 @@ "cell_type": "code", "execution_count": 7, "id": "e3607c66", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# to categorical turns our integer vector into a onehot representation\n", @@ -3887,9 +3423,7 @@ { "cell_type": "markdown", "id": "0a70cdcf", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Improving performance\n", "\n", @@ -3908,9 +3442,7 @@ { "cell_type": "markdown", "id": "b0600212", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Full object-oriented implementation\n", "\n", @@ -3922,10 +3454,7 @@ "cell_type": "code", "execution_count": 8, "id": "4e0c1326", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "class NeuralNetwork:\n", @@ -4032,9 +3561,7 @@ { "cell_type": "markdown", "id": "125f8eca", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Evaluate model performance on test data\n", "\n", @@ -4051,10 +3578,7 @@ "cell_type": "code", "execution_count": 9, "id": "cef0e788", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "epochs = 100\n", @@ -4078,9 +3602,7 @@ { "cell_type": "markdown", "id": "b12d6f86", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Adjust hyperparameters\n", "\n", @@ -4092,10 +3614,7 @@ "cell_type": "code", "execution_count": 10, "id": "974faa4e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "eta_vals = np.logspace(-5, 1, 7)\n", @@ -4123,9 +3642,7 @@ { "cell_type": "markdown", "id": "3bb19122", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Visualization" ] @@ -4134,10 +3651,7 @@ "cell_type": "code", "execution_count": 11, "id": "baeb1ea3", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# visual representation of grid search\n", @@ -4178,9 +3692,7 @@ { "cell_type": "markdown", "id": "d75dad8e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## scikit-learn implementation\n", "\n", @@ -4201,10 +3713,7 @@ "cell_type": "code", "execution_count": 12, "id": "d55fae28", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.neural_network import MLPClassifier\n", @@ -4228,9 +3737,7 @@ { "cell_type": "markdown", "id": "276badf8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Visualization" ] @@ -4239,10 +3746,7 @@ "cell_type": "code", "execution_count": 13, "id": "7d6c714e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# optional\n", @@ -4284,9 +3788,7 @@ { "cell_type": "markdown", "id": "0d45b429", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Building neural networks in Tensorflow and Keras\n", "\n", @@ -4302,9 +3804,7 @@ { "cell_type": "markdown", "id": "67aec670", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Tensorflow\n", "\n", @@ -4337,10 +3837,7 @@ "cell_type": "code", "execution_count": 14, "id": "0ab38a83", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "pip3 install tensorflow" @@ -4349,9 +3846,7 @@ { "cell_type": "markdown", "id": "8f53f5b9", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "and/or if you use **anaconda**, just write (or install from the graphical user interface)\n", "(current release of CPU-only TensorFlow)" @@ -4361,10 +3856,7 @@ "cell_type": "code", "execution_count": 15, "id": "5190c7ff", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "conda create -n tf tensorflow\n", @@ -4374,9 +3866,7 @@ { "cell_type": "markdown", "id": "676ff9d7", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "To install the current release of GPU TensorFlow" ] @@ -4385,10 +3875,7 @@ "cell_type": "code", "execution_count": 16, "id": "479149f7", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "conda create -n tf-gpu tensorflow-gpu\n", @@ -4398,9 +3885,7 @@ { "cell_type": "markdown", "id": "62d1b789", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Using Keras\n", "\n", @@ -4413,10 +3898,7 @@ "cell_type": "code", "execution_count": 17, "id": "4a11035a", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "conda install keras" @@ -4425,9 +3907,7 @@ { "cell_type": "markdown", "id": "abf44b70", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "You can look up the [instructions here](https://keras.io/) for more information.\n", "\n", @@ -4437,9 +3917,7 @@ { "cell_type": "markdown", "id": "3f163559", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Collect and pre-process data\n", "\n", @@ -4450,10 +3928,7 @@ "cell_type": "code", "execution_count": 18, "id": "f7418c1e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# import necessary packages\n", @@ -4505,10 +3980,7 @@ "cell_type": "code", "execution_count": 19, "id": "49ec0156", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from tensorflow.keras.layers import Input\n", @@ -4534,10 +4006,7 @@ "cell_type": "code", "execution_count": 20, "id": "302ad127", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "\n", @@ -4564,10 +4033,7 @@ "cell_type": "code", "execution_count": 21, "id": "436a3e0a", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "DNN_keras = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)\n", @@ -4591,10 +4057,7 @@ "cell_type": "code", "execution_count": 22, "id": "a26e83e0", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "# optional\n", @@ -4633,9 +4096,7 @@ { "cell_type": "markdown", "id": "8d69b494", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## The Breast Cancer Data, now with Keras" ] @@ -4644,10 +4105,7 @@ "cell_type": "code", "execution_count": 23, "id": "cad16bbe", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "\n", @@ -4821,9 +4279,7 @@ { "cell_type": "markdown", "id": "61624838", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Building a neural network code\n", "\n", @@ -4840,9 +4296,7 @@ { "cell_type": "markdown", "id": "f825f2da", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Learning rate methods\n", "\n", @@ -4862,10 +4316,7 @@ "cell_type": "code", "execution_count": 24, "id": "409b4250", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -5003,9 +4454,7 @@ { "cell_type": "markdown", "id": "c6830d86", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Usage of the above learning rate schedulers\n", "\n", @@ -5019,10 +4468,7 @@ "cell_type": "code", "execution_count": 25, "id": "041fc0bf", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "momentum_scheduler = Momentum(eta=1e-3, momentum=0.9)\n", @@ -5032,9 +4478,7 @@ { "cell_type": "markdown", "id": "0e18ef84", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Here is a small example for how a segment of code using schedulers\n", "could look. Switching out the schedulers is simple." @@ -5044,10 +4488,7 @@ "cell_type": "code", "execution_count": 26, "id": "8be0e7fd", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "weights = np.ones((3,3))\n", @@ -5066,9 +4507,7 @@ { "cell_type": "markdown", "id": "2d2bc7a5", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Cost functions\n", "\n", @@ -5082,10 +4521,7 @@ "cell_type": "code", "execution_count": 27, "id": "f5cb107e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -5120,9 +4556,7 @@ { "cell_type": "markdown", "id": "beb4f622", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Below we give a short example of how these cost function may be used\n", "to obtain results if you wish to test them out on your own using\n", @@ -5133,10 +4567,7 @@ "cell_type": "code", "execution_count": 28, "id": "1b508839", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from autograd import grad\n", @@ -5154,9 +4585,7 @@ { "cell_type": "markdown", "id": "afb2e0af", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Activation functions\n", "\n", @@ -5170,10 +4599,7 @@ "cell_type": "code", "execution_count": 29, "id": "b96d6c89", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -5228,9 +4654,7 @@ { "cell_type": "markdown", "id": "0be588f8", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Below follows a short demonstration of how to use an activation\n", "function. The derivative of the activation function will be important\n", @@ -5243,10 +4667,7 @@ "cell_type": "code", "execution_count": 30, "id": "49b8531e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "z = np.array([[4, 5, 6]]).T\n", @@ -5264,9 +4685,7 @@ { "cell_type": "markdown", "id": "874d306a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### The Neural Network\n", "\n", @@ -5288,10 +4707,7 @@ "cell_type": "code", "execution_count": 31, "id": "c25e9955", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import math\n", @@ -5760,9 +5176,7 @@ { "cell_type": "markdown", "id": "86746540", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Before we make a model, we will quickly generate a dataset we can use\n", "for our linear regression problem as shown below" @@ -5772,10 +5186,7 @@ "cell_type": "code", "execution_count": 32, "id": "6f232f0a", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -5816,9 +5227,7 @@ { "cell_type": "markdown", "id": "7227f21d", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Now that we have our dataset ready for the regression, we can create\n", "our regressor. Note that with the seed parameter, we can make sure our\n", @@ -5832,10 +5241,7 @@ "cell_type": "code", "execution_count": 33, "id": "944ba89b", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "input_nodes = X_train.shape[1]\n", @@ -5847,9 +5253,7 @@ { "cell_type": "markdown", "id": "3cef110a", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We then fit our model with our training data using the scheduler of our choice." ] @@ -5858,10 +5262,7 @@ "cell_type": "code", "execution_count": 34, "id": "8eb39d5e", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "linear_regression.reset_weights() # reset weights such that previous runs or reruns don't affect the weights\n", @@ -5873,9 +5274,7 @@ { "cell_type": "markdown", "id": "4c0ab092", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Due to the progress bar we can see the MSE (train_error) throughout\n", "the FFNN's training. Note that the fit() function has some optional\n", @@ -5889,10 +5288,7 @@ "cell_type": "code", "execution_count": 35, "id": "af77a32b", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "linear_regression.reset_weights() # reset weights such that previous runs or reruns don't affect the weights\n", @@ -5903,9 +5299,7 @@ { "cell_type": "markdown", "id": "dfdb722f", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We see that given more epochs to train on, the regressor reaches a lower MSE.\n", "\n", @@ -5918,10 +5312,7 @@ "cell_type": "code", "execution_count": 36, "id": "d740dbad", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import load_breast_cancer\n", @@ -5944,10 +5335,7 @@ "cell_type": "code", "execution_count": 37, "id": "bfb7c28b", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "input_nodes = X_train.shape[1]\n", @@ -5959,9 +5347,7 @@ { "cell_type": "markdown", "id": "17a8dc93", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "We will now make use of our validation data by passing it into our fit function as a keyword argument" ] @@ -5970,10 +5356,7 @@ "cell_type": "code", "execution_count": 38, "id": "7efc0180", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "logistic_regression.reset_weights() # reset weights such that previous runs or reruns don't affect the weights\n", @@ -5985,9 +5368,7 @@ { "cell_type": "markdown", "id": "8255133c", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Finally, we will create a neural network with 2 hidden layers with activation functions." ] @@ -5996,10 +5377,7 @@ "cell_type": "code", "execution_count": 39, "id": "4fa47196", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "input_nodes = X_train.shape[1]\n", @@ -6016,10 +5394,7 @@ "cell_type": "code", "execution_count": 40, "id": "b7b5ed9f", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "neural_network.reset_weights() # reset weights such that previous runs or reruns don't affect the weights\n", @@ -6031,9 +5406,7 @@ { "cell_type": "markdown", "id": "bc0fc41e", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "### Multiclass classification\n", "\n", @@ -6046,10 +5419,7 @@ "cell_type": "code", "execution_count": 41, "id": "4ccf32f6", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import load_digits\n", @@ -6083,9 +5453,7 @@ { "cell_type": "markdown", "id": "382301fa", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "## Testing the XOR gate and other gates\n", "\n", @@ -6096,10 +5464,7 @@ "cell_type": "code", "execution_count": 42, "id": "0feb8f2a", - "metadata": { - "collapsed": false, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "X = np.array([ [0, 0], [0, 1], [1, 0],[1, 1]],dtype=np.float64)\n", @@ -6119,15 +5484,31 @@ { "cell_type": "markdown", "id": "3f48285b", - "metadata": { - "editable": true - }, + "metadata": {}, "source": [ "Not bad, but the results depend strongly on the learning reate. Try different learning rates." ] } ], - "metadata": {}, + "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.15" + } + }, "nbformat": 4, "nbformat_minor": 5 }