{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "authorship_tag": "ABX9TyPXho/CdchjG06dV0HxdFiR", "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "source": [ "" ], "metadata": { "id": "eINQmOTlgwvQ" } }, { "cell_type": "markdown", "source": [ "# **Deep neural networks answers**\n", "\n", "The purpose of this notebook is to understand how a neural network with two hidden layers build more complicated functions by clipping and recombining the representations at the intermediate hidden variables.\n", "\n", "You can save a local copy of this notebook in your Google account and work through it in Colab (recommended) or you can download the notebook and run it locally using Jupyter notebook or similar.\n", "\n", "Contact me at udlbookmail@gmail.com if you find any mistakes or have any suggestions." ], "metadata": { "id": "MaKn8CFlzN8E" } }, { "cell_type": "code", "execution_count": 16, "metadata": { "id": "8ClURpZQzI6L" }, "outputs": [], "source": [ "# Imports math library\n", "import numpy as np\n", "# Imports plotting library\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "source": [ "# Define the Rectified Linear Unit (ReLU) function\n", "def ReLU(preactivation):\n", " activation = preactivation.clip(0.0)\n", " return activation" ], "metadata": { "id": "YdmveeAUz4YG" }, "execution_count": 17, "outputs": [] }, { "cell_type": "code", "source": [ "# Define a shallow neural network with, one input, one output, and three hidden units\n", "def shallow_1_1_3(x, activation_fn, phi_0,phi_1,phi_2,phi_3, theta_10, theta_11, theta_20, theta_21, theta_30, theta_31):\n", " # Initial lines\n", " pre_1 = theta_10 + theta_11 * x\n", " pre_2 = theta_20 + theta_21 * x\n", " pre_3 = theta_30 + theta_31 * x\n", " # Activation functions\n", " act_1 = activation_fn(pre_1)\n", " act_2 = activation_fn(pre_2)\n", " act_3 = activation_fn(pre_3)\n", " # Weight activations\n", " w_act_1 = phi_1 * act_1\n", " w_act_2 = phi_2 * act_2\n", " w_act_3 = phi_3 * act_3\n", " # Combine weighted activation and add y offset\n", " y = phi_0 + w_act_1 + w_act_2 + w_act_3\n", " # Return everything we have calculated\n", " return y, pre_1, pre_2, pre_3, act_1, act_2, act_3, w_act_1, w_act_2, w_act_3" ], "metadata": { "id": "ximCLwIfz8kj" }, "execution_count": 18, "outputs": [] }, { "cell_type": "code", "source": [ "# # Plot the shallow neural network. We'll assume input in is range [-1,1] and output [-1,1]\n", "# If the plot_all flag is set to true, then we'll plot all the intermediate stages as in Figure 3.3\n", "def plot_neural(x, y):\n", " fig, ax = plt.subplots()\n", " ax.plot(x.T,y.T)\n", " ax.set_xlabel('Input'); ax.set_ylabel('Output')\n", " ax.set_xlim([-1,1]);ax.set_ylim([-1,1])\n", " ax.set_aspect(1.0)\n", " plt.show()" ], "metadata": { "id": "btrt7BX20gKD" }, "execution_count": 19, "outputs": [] }, { "cell_type": "markdown", "source": [ "Let's define a networks. We'll just consider the inputs and outputs over the range [-1,1]. If you set the \"plot_all\" flat to True, you can see the details of how it was created." ], "metadata": { "id": "LxBJCObC-NTY" } }, { "cell_type": "code", "source": [ "# Now lets define some parameters and run the first neural network\n", "n1_theta_10 = 0.0 ; n1_theta_11 = -1.0\n", "n1_theta_20 = 0 ; n1_theta_21 = 1.0\n", "n1_theta_30 = -0.67 ; n1_theta_31 = 1.0\n", "n1_phi_0 = 1.0; n1_phi_1 = -2.0; n1_phi_2 = -3.0; n1_phi_3 = 9.3\n", "\n", "# Define a range of input values\n", "n1_in = np.arange(-1,1,0.01).reshape([1,-1])\n", "\n", "# We run the neural network for each of these input values\n", "n1_out, *_ = shallow_1_1_3(n1_in, ReLU, n1_phi_0, n1_phi_1, n1_phi_2, n1_phi_3, n1_theta_10, n1_theta_11, n1_theta_20, n1_theta_21, n1_theta_30, n1_theta_31)\n", "# And then plot it\n", "plot_neural(n1_in, n1_out)" ], "metadata": { "id": "JRebvurv22pT", "colab": { "base_uri": "https://localhost:8080/", "height": 455 }, "outputId": "8f269273-54e8-45a6-c168-dfd081dd404c" }, "execution_count": 20, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "Now we'll define the same neural network, but this time, we will use matrix form. When you get this right, it will draw the same plot as above." ], "metadata": { "id": "XCJqo_AjfAra" } }, { "cell_type": "code", "source": [ "beta_0 = np.zeros((3,1))\n", "Omega_0 = np.zeros((3,1))\n", "beta_1 = np.zeros((1,1))\n", "Omega_1 = np.zeros((1,3))\n", "\n", "beta_0[0,0] = n1_theta_10\n", "beta_0[1,0] = n1_theta_20\n", "beta_0[2,0] = n1_theta_30\n", "Omega_0[0,0] = n1_theta_11\n", "Omega_0[1,0] = n1_theta_21\n", "Omega_0[2,0] = n1_theta_31\n", "beta_1[0,0] = n1_phi_0\n", "Omega_1[0,0] = n1_phi_1\n", "Omega_1[0,1] = n1_phi_2\n", "Omega_1[0,2] = n1_phi_3\n", "\n", "# Make sure that input data matrix has different inputs in its columns\n", "n_data = n1_in.size\n", "n_dim_in = 1\n", "n1_in_mat = np.reshape(n1_in,(n_dim_in,n_data))\n", "\n", "# This runs the network for ALL of the inputs, x at once so we can draw graph\n", "h1 = ReLU(np.matmul(beta_0,np.ones((1,n_data))) + np.matmul(Omega_0,n1_in_mat))\n", "n1_out = np.matmul(beta_1,np.ones((1,n_data))) + np.matmul(Omega_1,h1)\n", "\n", "# Draw the network and check that it looks the same as the non-matrix case\n", "plot_neural(n1_in, n1_out)" ], "metadata": { "id": "MR0AecZYfACR", "colab": { "base_uri": "https://localhost:8080/", "height": 455 }, "outputId": "8266af3d-57b6-4c27-87a3-be8268ea6600" }, "execution_count": 21, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "Now we'll feed the output of the first network into the second one." ], "metadata": { "id": "qOcj2Rof-o20" } }, { "cell_type": "code", "source": [ "# Now lets define some parameters and run the second neural network\n", "n2_theta_10 = -0.6 ; n2_theta_11 = -1.0\n", "n2_theta_20 = 0.2 ; n2_theta_21 = 1.0\n", "n2_theta_30 = -0.5 ; n2_theta_31 = 1.0\n", "n2_phi_0 = 0.5; n2_phi_1 = -1.0; n2_phi_2 = -1.5; n2_phi_3 = 2.0\n", "\n", "# Define a range of input values\n", "n2_in = np.arange(-1,1,0.01)\n", "\n", "# We run the second neural network on the output of the first network\n", "n2_out, *_ = \\\n", " shallow_1_1_3(n1_out, ReLU, n2_phi_0, n2_phi_1, n2_phi_2, n2_phi_3, n2_theta_10, n2_theta_11, n2_theta_20, n2_theta_21, n2_theta_30, n2_theta_31)\n", "# And then plot it\n", "plot_neural(n1_in, n2_out)" ], "metadata": { "id": "ZRjWu8i9239X", "colab": { "base_uri": "https://localhost:8080/", "height": 455 }, "outputId": "8514fbb3-3bd3-44bb-975a-05d6f2e1e3da" }, "execution_count": 22, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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x09ERP5NFQm3qKgIOTk5+OabbzBy5EgAwJo1a3DHHXdg9erViIuLa/acwMBAGAwGm21bt27Fb37zG3Tu3Nlme0RERLOxRERErqSKknJeXh4iIiLkZAsAqampCAgIwN69e9u1j4KCAhQWFmL27NnNHnvwwQcRGRmJUaNGYcOGDRBCuCx2IiIiQCUzXKPRiOjoaJttQUFB6NatG4xGY7v2sX79egwcOBCjR4+22b5s2TLcfvvtCA8Px44dO/DAAw+gqqoKDz/8cIv7slgssFgs8n2z2dyBd0NERP7IozPchQsXtriwSbodOXLE6de5fPky3nrrLbuz20WLFuEnP/kJhg8fjieeeAILFizAM8880+r+VqxYAb1eL9/i4+OdjpGIiHybR2e48+fPx8yZM1sdk5iYCIPBgHPnztlsr6+vR0VFRbuOvb7//vuoqanB9OnT2xybnJyM5cuXw2KxQKvV2h2TnZ2NrKws+b7ZbGbSJSKiVnk04UZFRSEqKqrNcSkpKaisrERBQQFGjBgBAPj8889htVqRnJzc5vPXr1+PO++8s12vVVhYiK5du7aYbAFAq9W2+jgREdH1VHEMd+DAgUhPT8ecOXOwbt061NXVITMzExkZGfIK5bNnz2L8+PF44403MGrUKPm5xcXF2LNnD7Zv395sv//6179QVlaGW2+9FaGhodi5cyf+8pe/4LHHHlPsvRERkX9QRcIFgDfffBOZmZkYP348AgICMGXKFLz44ovy43V1dTh69Chqampsnrdhwwb06NEDEyZMaLbP4OBgrF27Fo8++iiEEOjbty+ee+45zJkzx+3vh4iI/ItG8BwYp5nNZuj1ephMJuh0Ok+HQ0REHaDUd7gqzsMlIiJSOyZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAGqSbh//vOfMXr0aISHhyMiIqJd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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "beta_0 = np.zeros((3,1))\n", "Omega_0 = np.zeros((3,1))\n", "beta_1 = np.zeros((3,1))\n", "Omega_1 = np.zeros((3,3))\n", "beta_2 = np.zeros((1,1))\n", "Omega_2 = np.zeros((1,3))\n", "\n", "beta_0[0,0] = n1_theta_10\n", "beta_0[1,0] = n1_theta_20\n", "beta_0[2,0] = n1_theta_30\n", "Omega_0[0,0] = n1_theta_11\n", "Omega_0[1,0] = n1_theta_21\n", "Omega_0[2,0] = n1_theta_31\n", "beta_1[0,0] = n2_theta_10 + n2_theta_11 * n1_phi_0\n", "beta_1[1,0] = n2_theta_20 + n2_theta_21 * n1_phi_0\n", "beta_1[2,0] = n2_theta_30 + n2_theta_31 * n1_phi_0\n", "Omega_1[0,0] = n2_theta_11 * n1_phi_1\n", "Omega_1[1,0] = n2_theta_21 * n1_phi_1\n", "Omega_1[2,0] = n2_theta_31 * n1_phi_1\n", "Omega_1[0,1] = n2_theta_11 * n1_phi_2\n", "Omega_1[1,1] = n2_theta_21 * n1_phi_2\n", "Omega_1[2,1] = n2_theta_31 * n1_phi_2\n", "Omega_1[0,2] = n2_theta_11 * n1_phi_3\n", "Omega_1[1,2] = n2_theta_21 * n1_phi_3\n", "Omega_1[2,2] = n2_theta_31 * n1_phi_3\n", "beta_2[0,0] = n2_phi_0\n", "Omega_2[0,0] = n2_phi_1\n", "Omega_2[0,1] = n2_phi_2\n", "Omega_2[0,2] = n2_phi_3\n", "\n", "# Make sure that input data matrix has different inputs in its columns\n", "n_data = n1_in.size\n", "n_dim_in = 1\n", "n1_in_mat = np.reshape(n1_in,(n_dim_in,n_data))\n", "\n", "# This runs the network for ALL of the inputs, x at once so we can draw graph (hence extra np.ones term)\n", "h1 = ReLU(np.matmul(beta_0,np.ones((1,n_data))) + np.matmul(Omega_0,n1_in_mat))\n", "h2 = ReLU(np.matmul(beta_1,np.ones((1,n_data))) + np.matmul(Omega_1,h1))\n", "n1_out = np.matmul(beta_2,np.ones((1,n_data))) + np.matmul(Omega_2,h2)\n", "\n", "# Draw the network and check that it looks the same as the non-matrix version\n", "plot_neural(n1_in, n1_out)" ], "metadata": { "id": "ZB2HTalOE40X", "colab": { "base_uri": "https://localhost:8080/", "height": 455 }, "outputId": "87e67d8c-e6e2-4346-c38e-0a2913dfde27" }, "execution_count": 23, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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x09ERP5NFQm3qKgIOTk5+OabbzBy5EgAwJo1a3DHHXdg9erViIuLa/acwMBAGAwGm21bt27Fb37zG3Tu3Nlme0RERLOxRERErqSKknJeXh4iIiLkZAsAqampCAgIwN69e9u1j4KCAhQWFmL27NnNHnvwwQcRGRmJUaNGYcOGDRBCuCx2IiIiQCUzXKPRiOjoaJttQUFB6NatG4xGY7v2sX79egwcOBCjR4+22b5s2TLcfvvtCA8Px44dO/DAAw+gqqoKDz/8cIv7slgssFgs8n2z2dyBd0NERP7IozPchQsXtriwSbodOXLE6de5fPky3nrrLbuz20WLFuEnP/kJhg8fjieeeAILFizAM8880+r+VqxYAb1eL9/i4+OdjpGIiHybR2e48+fPx8yZM1sdk5iYCIPBgHPnztlsr6+vR0VFRbuOvb7//vuoqanB9OnT2xybnJyM5cuXw2KxQKvV2h2TnZ2NrKws+b7ZbGbSJSKiVnk04UZFRSEqKqrNcSkpKaisrERBQQFGjBgBAPj8889htVqRnJzc5vPXr1+PO++8s12vVVhYiK5du7aYbAFAq9W2+jgREdH1VHEMd+DAgUhPT8ecOXOwbt061NXVITMzExkZGfIK5bNnz2L8+PF44403MGrUKPm5xcXF2LNnD7Zv395sv//6179QVlaGW2+9FaGhodi5cyf+8pe/4LHHHlPsvRERkX9QRcIFgDfffBOZmZkYP348AgICMGXKFLz44ovy43V1dTh69Chqampsnrdhwwb06NEDEyZMaLbP4OBgrF27Fo8++iiEEOjbty+ee+45zJkzx+3vh4iI/ItG8BwYp5nNZuj1ephMJuh0Ok+HQ0REHaDUd7gqzsMlIiJSOyZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAFMuERERApgwiUiIlIAEy4REZECmHCJiIgUwIRLRESkACZcIiIiBTDhEhERKYAJl4iISAGqSbh//vOfMXr0aISHhyMiIqJd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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "Now let's make a deep network with 3 hidden layers. It will have $D_i=4$ inputs, $D_1=5$ neurons in the first layer, $D_2=2$ neurons in the second layer and $D_3=4$ neurons in the third layer, and $D_o = 1$ output. Consult figure 4.6 and equations 4.15 for guidance." ], "metadata": { "id": "0VANqxH2kyS4" } }, { "cell_type": "code", "source": [ "# define sizes\n", "D_i=4; D_1=5; D_2=2; D_3=4; D_o=1\n", "# We'll choose the inputs and parameters of this network randomly using np.random.normal\n", "# For example, we'll set the input using\n", "n_data = 4;\n", "x = np.random.normal(size=(D_i, n_data))\n", "\n", "beta_0 = np.random.normal(size=(D_1,1))\n", "Omega_0 = np.random.normal(size=(D_1,D_i))\n", "beta_1 = np.random.normal(size=(D_2,1))\n", "Omega_1 = np.random.normal(size=(D_2,D_1))\n", "beta_2 = np.random.normal(size=(D_3,1))\n", "Omega_2 = np.random.normal(size=(D_3,D_2))\n", "beta_3 = np.random.normal(size=(D_o,1))\n", "Omega_3 = np.random.normal(size=(D_o,D_3))\n", "\n", "# If you set the parameters to the correct sizes, the following code will run\n", "h1 = ReLU(np.matmul(beta_0,np.ones((1,n_data))) + np.matmul(Omega_0,x));\n", "h2 = ReLU(np.matmul(beta_1,np.ones((1,n_data))) + np.matmul(Omega_1,h1));\n", "h3 = ReLU(np.matmul(beta_2,np.ones((1,n_data))) + np.matmul(Omega_2,h2));\n", "y = np.matmul(beta_3,np.ones((1,n_data))) + np.matmul(Omega_3,h3)\n", "\n", "if h1.shape[0] is not D_1 or h1.shape[1] is not n_data:\n", " print(\"h1 is wrong shape\")\n", "if h2.shape[0] is not D_2 or h1.shape[1] is not n_data:\n", " print(\"h2 is wrong shape\")\n", "if h3.shape[0] is not D_3 or h1.shape[1] is not n_data:\n", " print(\"h3 is wrong shape\")\n", "if y.shape[0] is not D_o or h1.shape[1] is not n_data:\n", " print(\"Output is wrong shape\")\n", "\n", "# Print the inputs and outputs\n", "print(\"Input data points\")\n", "print(x)\n", "print (\"Output data points\")\n", "print(y)" ], "metadata": { "id": "RdBVAc_Rj22-", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "ed6f4951-095b-4c2f-8da6-7f65dbd6352e" }, "execution_count": 24, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Input data points\n", "[[ 0.67958335 0.12189712 1.32763216 0.19608792]\n", " [-0.15436303 0.58420115 -0.78505064 0.17708244]\n", " [-0.27450785 -1.88065709 -0.91826142 -1.74523672]\n", " [ 1.56099555 1.35592598 -0.09501588 -0.6244473 ]]\n", "Output data points\n", "[[-19.11397027 -27.40474517 -9.71673377 -13.71865578]]\n" ] } ] } ] }