Skip to content
Snippets Groups Projects
Jupyter Notebook Block 2 - Neural Networks .ipynb 355 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Part 1 : Toy Neural Network Example"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this section we will walk through a complete implementation of a toy \n",
    "Neural Network in 2 dimensions. We will first implement a simple linear \n",
    "classifier and then extend the code to a $2$-layer Neural Network. As we \n",
    "will see, this extension is surprisingly simple and very few changes are \n",
    "necessary."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generating Spiral Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us generate a classification dataset that is not easily linearly separable. Our favorite example is the spiral dataset, which can be generated as follows:\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "%matplotlib inline  \n",
    "\n",
    "N = 100 # number of points per class\n",
    "D = 2 # dimensionality\n",
    "K = 3 # number of classes\n",
    "X = np.zeros((N*K,D)) # data matrix (each row = single example)\n",
    "y = np.zeros(N*K, dtype='uint8') # class labels\n",
    "for j in range(K):\n",
    "  ix = range(N*j,N*(j+1))\n",
    "  r = np.linspace(0.0,1,N) # radius\n",
    "  t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2 # theta\n",
    "  X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]\n",
    "  y[ix] = j\n",
    "# lets visualize the data:\n",
    "plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- `np.zeros` produces an ndarray of all 0's. The shape of the ndarray `np.zeros((N*K, D))` is $ (N\\cdot K, D)$, that is dimension $ 1 $ has size $N\\cdot K$ and dimension 2 has size $D$.\n",
    "- `dtype='uint8'` refers to the data type of the array. `uint8` refers to as \n",
    "_unsigned 8-bit integer type_\n",
    "- The `range` function produces a list of evenly-spaced integers, up to but not including the endpoint\n",
    "- `np.linspace(0.0,1,N)` produces $ N $ evenly spaced numbers over a specified closed interval, from $ 0.0 $ to $ 1 $ \n",
    "- `r*np.sin(t)` is a multiplication of two equally sized ndarrays. The multiplication proceeds elementwise\n",
    "- `np.c\\_` is stacking two arrays 'columnwise' together"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Normally we would want to preprocess the dataset so that each feature has zero \n",
    "mean and unit standard deviation, but in this case the features are already \n",
    "in a nice range from $-1$ to $1$, so we skip this step."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training a Softmax Linear Classifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize the parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us first train a Softmax classifier on this classification dataset. As we saw in the previous sections, the Softmax classifier has a linear score function and uses the cross-entropy loss. The parameters of the linear classifier consist of a weight matrix \n",
    "$ W $ and a  bias vector $ b $ for each class. Let us first initialize these \n",
    "parameters to be random numbers:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 2.58507353e-02 -1.65804593e-06 -2.06983186e-02]\n",
      " [ 2.18356399e-02  6.19492831e-03 -1.69727720e-02]]\n",
      "[[0. 0. 0.]]\n"
     ]
    }
   ],
   "source": [
    "# initialize parameters randomly\n",
    "W = 0.01 * np.random.randn(D,K)\n",
    "b = np.zeros((1,K))\n",
    "print(W)\n",
    "print(b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Recall that $ D = 2 $ is the dimensionality and $ K = 3 $ is \n",
    "the number of classes\n",
    "- `np.random.randn(D,K)` produces an array of shape $ (D, K) $ \n",
    "consisting of standard normally distributed random numbers (with mean $ 0 $ and \n",
    "standard deviation $ 1 $.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compute the Class Scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since this is a linear classifier, we can compute all class scores very simply in parallel with a single matrix multiplication:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(300, 3)\n"
     ]
    }
   ],
   "source": [
    "# compute class scores for a linear classifier\n",
    "scores = np.dot(X, W) + b\n",
    "print(scores.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- `np.dot(X, W)` is the matrix product of $ X $ (a $300$ by $ 2 $ ndarray) and \n",
    "$  W $ (a $ 2 $ by $ 3 $ ndarray)\n",
    "- In this example we have $ 300 $ $2$-D points, so after this multiplication \n",
    "the array `scores` will have shape $[300 \\times 3] $, where each row gives the \n",
    "class scores corresponding to the $ 3 $ classes (blue, red, yellow)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compute the Loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The second key ingredient we need is a loss function, which is a differentiable \n",
    "objective that quantifies our unhappiness with the computed class scores. \n",
    "Intuitively, we want the correct class to have a higher score than the other \n",
    "classes. When this is the case, the loss should be low and otherwise the loss \n",
    "should be high. \n",
    "\n",
    "There are many ways to quantify this intuition, but in this \n",
    "example let us use the _cross-entropy loss_ that is associated with the Softmax \n",
    "classifier. Recall that if $ z $ is the array of class scores for a single \n",
    "example (e.g. array of $ 3 $ numbers here), then the Softmax classifier \n",
    "computes the loss for that example as:\n",
    "\n",
    "\n",
    "$$\n",
    "L_i=-\\log\\left(\\frac{e^{z_{y_i}}}{\\sum_{j}e^{z_{j}}}\\right)\n",
    "$$\n",
    "\n",
    "where $z_{y_i}$ denotes the element of the score array that represents to the \n",
    "correct class. We can see that the Softmax classifier interprets every element of $ z $ \n",
    "as holding the (unnormalized) log probabilities of the three classes. \n",
    "We exponentiate these to get (unnormalized) probabilities, and then \n",
    "normalize them to get probabilites. Therefore, the expression inside \n",
    "the $\\log$ is the normalized probability of the correct class. \n",
    "\n",
    "Note how \n",
    "this expression works: this quantity is always between $ 0 $ and $ 1 $. \n",
    "When the probability of the correct class is very small (near $ 0 $), \n",
    "the loss will go towards (positive) infinity. Conversely, when the \n",
    "correct class probability goes towards $ 1 $, the loss will go towards \n",
    "zero because $ \\log(1)=0 $. Hence, the expression for $L_i$ is low when \n",
    "the correct class probability is high, and it is very high when it is low.\n",
    "\n",
    "Recall also that the full Softmax classifier loss is then defined as the \n",
    "average cross-entropy loss over the training examples and the regularization:\n",
    "\n",
    "$$\n",
    "L=\\underbrace{\\frac{1}{N}\\sum L_i}_{\\text{data loss}} + \\underbrace{\\frac{1}{2}\\lambda \\sum_{k}\\sum_{l}W_{kl}^2}_{\\text{regularization loss}}\n",
    "$$\n",
    "\n",
    "\n",
    "Given the array of __scores__ we have computed above, we can compute the loss. First, the way to obtain the probabilities is straight forward:\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(300, 3)\n",
      "[[0.33333333 0.33333333 0.33333333]\n",
      " [0.33341756 0.33333943 0.33324301]\n",
      " [0.33351434 0.33334343 0.33314223]]\n"
     ]
    }
   ],
   "source": [
    "# Get unnormalized probabilities\n",
    "exp_scores = np.exp(scores)\n",
    "# Normalize them for each example\n",
    "probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)\n",
    "print(probs.shape)\n",
    "print(probs[0:3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Recall that `scores` has shape $[300 \\times 3] $\n",
    "- `np.exp()` is a _unary_ universal function, or _ufunc_. These functions perform elementwise operations on data in ndarrays. That is,  `exp\\_scores` \n",
    "has shape $[300 \\times 3] $\n",
    "- The function `np.sum(exp_scores, axis=1, keepdims=True)` computes the sum over \n",
    "axis $ 1 $. If `keepdims` is set to `True`, the axes which are reduced are \n",
    "left in the result as dimensions with size one. With this option, the \n",
    "result will broadcast correctly against the input array."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now have an array `probs` of size $ [300 \\times  3] $, where each row now \n",
    "contains the class probabilities. In particular, since we have normalized \n",
    "them every row now sums to one. We can now query for the log probabilities \n",
    "assigned to the correct classes in each example:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(300,)\n"
     ]
    }
   ],
   "source": [
    "num_examples = X.shape[0]\n",
    "correct_logprobs = -np.log(probs[range(num_examples),y])\n",
    "print(correct_logprobs.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- The array `correct_logprobs` is a $1$D array of just the probabilities \n",
    "assigned to the correct classes for each example.\n",
    "- Take a moment to understand, how the fancy indexing for the ndarray `probs` \n",
    "was carried out: the elements \n",
    "$ (0, y[0]), (1, y[1]), \\ldots, (N*K-1, y[N*K-1]) $ were selected\n",
    "- `np.log()` is a unary ufunc that evaluates the natural logarithm of the ndarray elementwise"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "The full loss is then the average of these log probabilities and the regularization loss:\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
     ]
    }
   ],
   "source": [
    "# compute the loss: average cross-entropy loss and regularization\n",
    "data_loss = np.sum(correct_logprobs)/(num_examples)\n",
    "reg = 0.5\n",
    "reg_loss = reg*np.sum(W*W)\n",
    "loss = data_loss + reg_loss\n",
    "print(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Aggregations (often called _reductions_ ) like `sum` can either \n",
    "be used by calling the array instance method (`correct_logprobs.sum()`) or using the top level NumPy function `np.sum()`\n",
    "- In this code, the regularization strength $\\lambda $ is stored inside the `reg` .\n",
    "The convenience factor of $0.5$ multiplying the regularization will become clear in \n",
    "a second. Evaluating this in the beginning (with random parameters) might give us \n",
    "`loss = 1.1`,  which is `np.log(1.0/3)` since with small initial random \n",
    "weights all probabilities assigned to all classes are about one third. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now want to make the loss as low as possible, with `loss = 0` as the \n",
    "absolute lower bound. But the lower the loss is, the higher are the probabilities \n",
    "assigned to the correct classes for all examples."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Computing the Analytic Gradient with Backpropagation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have a way of evaluating the loss, and now we have to minimize it. \n",
    "We will do so with gradient descent. That is, we start with random \n",
    "parameters (as shown above), and evaluate the gradient of the loss \n",
    "function with respect to the parameters, so that we know how we \n",
    "should change the parameters to decrease the loss. Let us introduce \n",
    "the intermediate variable $ p $, which is a vector of the (normalized) \n",
    "probabilities. The loss for one example is:\n",
    "\n",
    "$$\n",
    "p_{k} = \\frac{e^{z_{k}}}{\\sum_{j}e^{z_{j}}} \\quad \\quad L_i=-\\log(p_{y_{i}})\n",
    "$$\n",
    "\n",
    "We now wish to understand how the computed scores inside $ z $ should change to \n",
    "decrease the loss $ L_i $ that this example contributes to the full objective. \n",
    "In other words, we want to derive the gradient $\\frac{\\partial{L_i}}{{\\partial z_{k}}} $. \n",
    "The loss $ L_i $ is computed from $ p $, which in turn depends on $ z $. \n",
    "It is a fun exercise to the reader to use the chain rule to derive the gradient, \n",
    "but it turns out to be extremely simple and interpretable in the end, after a \n",
    "lot of things cancel out:\n",
    "\n",
    "$$\n",
    "\\frac{\\partial L_{i}}{\\partial z_{k}}=p_{k} - \\mathbb{1}\\left(y_i=k\\right)\n",
    "$$\n",
    "\n",
    "Notice how elegant and simple this expression is. Suppose the probabilities we \n",
    "computed were `p = [0.2, 0.3, 0.5]`, and that the correct class was the middle \n",
    "one (with probability $ 0.3 $). According to this derivation the gradient on \n",
    "the scores would be `dz = [0.2, -0.7, 0.5]`. Recalling what the interpretation \n",
    "of the gradient is, we see that this result is highly intuitive: increasing the \n",
    "first or last element of the score vector `z` (the scores of the incorrect classes) leads to an increased loss (due to the positive signs $+0.2$ and $+0.5$) - and increasing the loss is bad, as expected. However, increasing the score of the correct class has negative influence on the loss. The gradient of $-0.7$ is telling us that increasing the correct class score would lead to a decrease of the loss $L_i$, which makes sense.\n",
    "\n",
    "All of this boils down to the following code. Recall that `probs` stores the \n",
    "probabilities of all classes (as rows) for each example. To get the gradient \n",
    "on the scores, which we call `dscores`, we proceed as follows:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(300, 3)\n"
     ]
    }
   ],
   "source": [
    "dscores = probs\n",
    "dscores[range(num_examples),y] -= 1\n",
    "dscores /= num_examples\n",
    "print(dscores.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- The fancy indexing for the ndarray `probs` was carried out as follows: the elements \n",
    "$ (0, y[0]), (1, y[1]), \\ldots, (num\\_examples-1, y[num\\_examples-1]) $ were selected. That is, we subract $ 1$ from the probability corresponding to the true class and leaving the other probabilities unchanged.\n",
    "- We divide `dscores` by `num_examples` because \n",
    "$$\n",
    "L=\\underbrace{\\frac{1}{N}\\sum L_i}_{\\text{data loss}} + \\underbrace{\\frac{1}{2}\\lambda \\sum_{k}\\sum_{l}W_{kl}^2}_{\\text{regularization loss}}\n",
    "$$\n",
    "so we need to divide by the number of data points."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lastly, we had that `scores = np.dot(X, W) + b`, so armed with the \n",
    "gradient on `scores` (stored in `dscores`), we can now backpropagate \n",
    "into $ W $ and $ b $:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 3)\n",
      "(2, 3)\n"
     ]
    }
   ],
   "source": [
    "dW = np.dot(X.T, dscores)\n",
    "db = np.sum(dscores, axis=0, keepdims=True)\n",
    "print(db.shape)\n",
    "dW += reg*W # don't forget the regularization gradient\n",
    "print(dW.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- `X.T` denotes the transpose of $X$ and has shape $(2, 300)$. \n",
    "`dscores` has shape $(300, 3)$. Thus, `dW` has shape $(2, 3)$ which is of course identical to \n",
    "the shape of `W`\n",
    "- We see that we have backpropped through the matrix multiply operation, \n",
    "and also added the contribution from the regularization. Note that the \n",
    "regularization gradient has the very simple form `reg*W` since we \n",
    "used the constant $ 0.5 $ for its loss \n",
    "contribution, i.e.\n",
    "\n",
    "$$\n",
    "\\frac{d}{dw}\\left(\\frac{1}{2}\\lambda w^2\\right)=\\lambda w\n",
    "$$\n",
    "\n",
    "This is a common convenience trick that simplifies the gradient expression.\n",
    "\n",
    "`dW` is actually a short-hand notation for the Jacobian\n",
    "\n",
    "$$\n",
    "\\frac{\\partial L}{\\partial W_{ij}}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Performing a Parameter Update"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that we have evaluated the gradient we know how every parameter \n",
    "influences the loss function. We will now perform a parameter update \n",
    "in the negative gradient direction to decrease the loss:"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "# perform a parameter update / illustration\n",
    "W += -step_size * dW\n",
    "b += -step_size * db"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Putting all of this together, here is the full code for training a \n",
    "Softmax classifier with Gradient descent:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Putting it All Together: Training a Softmax Classifier"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iteration 0: loss 1.099738\n",
      "iteration 10: loss 0.929506\n",
      "iteration 20: loss 0.869086\n",
      "iteration 30: loss 0.843276\n",
      "iteration 40: loss 0.830723\n",
      "iteration 50: loss 0.824075\n",
      "iteration 60: loss 0.820346\n",
      "iteration 70: loss 0.818167\n",
      "iteration 80: loss 0.816855\n",
      "iteration 90: loss 0.816047\n",
      "iteration 100: loss 0.815541\n",
      "iteration 110: loss 0.815220\n",
      "iteration 120: loss 0.815014\n",
      "iteration 130: loss 0.814880\n",
      "iteration 140: loss 0.814793\n",
      "iteration 150: loss 0.814736\n",
      "iteration 160: loss 0.814699\n",
      "iteration 170: loss 0.814674\n",
      "iteration 180: loss 0.814657\n",
      "iteration 190: loss 0.814647\n"
     ]
    }
   ],
   "source": [
    "#Train a Linear Classifier\n",
    "\n",
    "# initialize parameters randomly\n",
    "W = 0.01 * np.random.randn(D,K)\n",
    "b = np.zeros((1,K))\n",
    "\n",
    "# some hyperparameters\n",
    "step_size = 1e-0\n",
    "reg = 1e-3 # regularization strength\n",
    "\n",
    "# gradient descent loop\n",
    "num_examples = X.shape[0]\n",
    "for i in range(200):\n",
    "  \n",
    "  # evaluate class scores, [N x K]\n",
    "  scores = np.dot(X, W) + b \n",
    "  \n",
    "  # compute the class probabilities\n",
    "  exp_scores = np.exp(scores)\n",
    "  # [N x K]\n",
    "  probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) \n",
    "  \n",
    "  # compute the loss: average cross-entropy loss and regularization\n",
    "  correct_logprobs = -np.log(probs[range(num_examples),y])\n",
    "  data_loss = np.sum(correct_logprobs)/num_examples\n",
    "  reg_loss = 0.5*reg*np.sum(W*W)\n",
    "  loss = data_loss + reg_loss\n",
    "  if i % 10 == 0:\n",
    "    print(\"iteration %d: loss %f\" % (i, loss))\n",
    "  \n",
    "  # compute the gradient on scores\n",
    "  dscores = probs\n",
    "  dscores[range(num_examples),y] -= 1\n",
    "  dscores /= num_examples\n",
    "  \n",
    "  # backpropate the gradient to the parameters (W,b)\n",
    "  dW = np.dot(X.T, dscores)\n",
    "  db = np.sum(dscores, axis=0, keepdims=True)\n",
    "  \n",
    "  dW += reg*W # regularization gradient\n",
    "  \n",
    "  # perform a parameter update\n",
    "  W += -step_size * dW\n",
    "  b += -step_size * db"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We could verify that we have converged to something after about $ 190 $ iterations. We can evaluate the training set accuracy:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
     ]
    }
   ],
   "source": [
    "# evaluate training set accuracy\n",
    "scores = np.dot(X, W) + b\n",
    "predicted_class = np.argmax(scores, axis=1)\n",
    "print('training accuracy: %.2f' % (np.mean(predicted_class == y)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- `np.argmax` returns the indices of the maximum values along an axis. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This prints $ 55\\% $. Not very good at all, but also not surprising \n",
    "given that the dataset is constructed so it is not linearly separable. We can also plot the \n",
    "learned decision boundaries:"
   ]
  },
  {
   "attachments": {
    "spiral_linear.png": {
     "image/png": "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PtfQ0JA+/PDDMlZWOUpZo7GxsbRq1ar0r3/9K125ciW1tLSkU6dOlbnS/Ozduzft378/pZTST37yk/TDH/5wyueKtI9K2RO///3v05YtW1JKKR07dixt3Lgxj1JzU8oavfHGG2n79u05VZi/P//5z+n48ePpC1/4wpQ/X/Q9NNP6FH3/MDNvoJmVpqamWLNmTUnPpoIeoCxljbq6uqKxsTEaGhpi6dKlsXPnznjttdfKVGH+fve738WuXbsiImLXrl3x29/+dtpni7KPStkTk9dt48aNMTQ0FGfPns2j3FyU+uemKHtmKps2bYq777572p8v+h6aaX0iir1/mJkAzYKqqamJRx99NFpbW+Oll17Ku5yK09fXFytXrpz4vL6+Pvr6+nKsqLzOnj0btbW1ERFRW1s77X/Ai7SPStkTUz3T21uc29NKWaOampr4y1/+Ei0tLfHEE0/EqVOnyl1mRSv6HpqJ/cNMjLFjWm1tbdHf33/L1/ft2xfbt28v6Xu8/fbbUVdXFwMDA9HW1hZNTU2xadOm+S41N3NdoyLMB59ujZ577rn/+Lympmba9aj2fTRZqXvi5rdjRdhL40r5Z92wYUP09PTEHXfcEX/84x/jySefjH/+859lqG7xKPIemon9w0wEaKZ15MiROX+Purq6iIhYvnx5PPXUU9HV1VVVwWeua7RixYro6emZ+Lynpyfq6+vnWlZFud0a1dbWRn9/f9x3333x73//O+69994pn6v2fTRZKXvi5md6e3tjxYoVZasxb6Ws0V133TXx4y1btsR3vvOduHDhQtxzzz1lq7OSFX0PzcT+YSZaOJiz6frEPv7447h48WJERIyOjkZnZ+dtT4RXs+nWqLW1Nd5777344IMP4sqVK/Hqq6/Gjh07ylxdfnbs2BEvv/xyRES8/PLL8eSTT97yTNH2USl7YseOHfHrX/86IiKOHTsWy5Ytm2iFKYJS1ujs2bMTf+66uroipST8TFL0PTQT+4cZ5XN2kcXu4MGDqb6+Pn3mM59JtbW16etf/3pKKaW+vr70xBNPpJRSev/991NLS0tqaWlJzc3Nad++fXmWXHalrFFKKf3hD39Ia9asSatWrSrcGn344Yfpa1/7Wlq9enVqa2tLg4ODKSX7aKo98eKLL6YXX3xx4pnvfve7adWqVWndunW3nYRTrWZaoxdeeCE1NzenlpaW9OUvfzkdPXo0z3LLbufOnamuri4tXbo01dfXp1/+8pf20CQzrU/R9w8zq0nJMVMAACiVFg4AAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADIQIAGAIAMBGgAAMhAgAYAgAwEaAAAyECABgCADARoAADI4P8AJAa/Nc/tyogAAAAASUVORK5CYII="
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![spiral_linear.png](attachment:spiral_linear.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training a Neural Network"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Clearly, a linear classifier is inadequate for this dataset and we would like to use a Neural Network. One additional hidden layer will suffice for this toy data. We will now need two sets of weights and biases (for the first and second layers):\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [],
   "source": [
    "# initialize parameters randomly\n",
    "h = 100 # size of hidden layer\n",
    "W = 0.01 * np.random.randn(D,h)\n",
    "b = np.zeros((1,h))\n",
    "W2 = 0.01 * np.random.randn(h,K)\n",
    "b2 = np.zeros((1,K))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The forward pass to compute scores now changes form:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(300, 100)\n",
      "(300, 3)\n"
     ]
    }
   ],
   "source": [
    "# evaluate class scores with a 2-layer Neural Network\n",
    "hidden_layer = np.maximum(0, np.dot(X, W) + b) # note, ReLU activation\n",
    "print(hidden_layer.shape)\n",
    "scores = np.dot(hidden_layer, W2) + b2\n",
    "print(scores.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Remember $X$ has shape $(num\\_examples, D)$, $ W $ has shape $(D, h)$, thus \n",
    "`hidden_layer` has shape $(num\\_examples, h)$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that the only change from before is one extra line of code, where \n",
    "we first compute the hidden layer representation and then the scores based \n",
    "on this hidden layer. Crucially, we have also added a non-linearity, which \n",
    "in this case is simple ReLU that thresholds the activations on the hidden layer \n",
    "at zero.\n",
    "\n",
    "Everything else remains the same. We compute the loss based on the scores \n",
    "exactly as before, and get the gradient for the scores `dscores` exactly as \n",
    "before. However, the way we backpropagate that gradient into the model \n",
    "parameters now changes form, of course. First let us backpropagate the \n",
    "second layer of the Neural Network. This looks identical to the code \n",
    "we had for the Softmax classifier, except we are replacing $X$ (the raw data), with the variable \n",
    "`hidden_layer`):\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 3)\n",
      "(1, 3)\n"
     ]
    }
   ],
   "source": [
    "# backpropate the gradient to the parameters\n",
    "# first backprop into parameters W2 and b2\n",
    "dW2 = np.dot(hidden_layer.T, dscores)\n",
    "db2 = np.sum(dscores, axis=0, keepdims=True)\n",
    "print(dW2.shape)\n",
    "print(db2.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- `hidden_layer.T` is the transpose of `hidden_layer`, and thus has \n",
    "shape $(h, num\\_examples)$. `dscores` has shape $(num\\_examples, 3)$. \n",
    "And `dW2` thus has shape $(h, 3)$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, unlike before we are not yet done, because `hidden_layer` is \n",
    "itself a function of other parameters and the data! We need to continue\n",
    "backpropagation through this variable. Its gradient can be computed as:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(300, 100)\n"
     ]
    }
   ],
   "source": [
    "dhidden = np.dot(dscores, W2.T)\n",
    "print(dhidden.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`dhidden` has shape $(num\\_examples, h)$. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we have the gradient on the outputs of the hidden layer. Next, we have to backpropagate the ReLU non-linearity. This turns out to be easy because ReLU during the backward pass is effectively a switch. Since \n",
    "\n",
    "$$\n",
    "r=\\max(0, x)\n",
    "$$\n",
    "\n",
    "we have that \n",
    "\n",
    "$$\n",
    "\\frac{dr}{dx}=\\mathbb{1}(x>0)\n",
    "$$\n",
    "\n",
    "Combined with the chain rule, we see that the ReLU unit lets the gradient pass through unchanged if its input was greater than $ 0 $, but _kills_ it if its input was less than zero during the forward pass. Hence, we can backpropagate the ReLU in place simply with:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [],
   "source": [
    "# backprop the ReLU non-linearity\n",
    "dhidden[hidden_layer <= 0] = 0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And now we finally continue to the first layer weights and biases:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [],
   "source": [
    "# finally into W,b\n",
    "dW = np.dot(X.T, dhidden)\n",
    "db = np.sum(dhidden, axis=0, keepdims=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are done! We have the gradients $ dW,db,dW2,db2$ and can perform the parameter update. Everything else remains unchanged. The full code looks very similar:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iteration 0: loss 1.098716\n",
      "iteration 1000: loss 0.496002\n",
      "iteration 2000: loss 0.396590\n",
      "iteration 3000: loss 0.390806\n",
      "iteration 4000: loss 0.388821\n",
      "iteration 5000: loss 0.389472\n",
      "iteration 6000: loss 0.401825\n",
      "iteration 7000: loss 0.392470\n",
      "iteration 8000: loss 0.452559\n",
      "iteration 9000: loss 0.422789\n"
     ]
    }
   ],
   "source": [
    "# initialize parameters randomly\n",
    "h = 100 # size of hidden layer\n",
    "W = 0.01 * np.random.randn(D,h)\n",
    "b = np.zeros((1,h))\n",
    "W2 = 0.01 * np.random.randn(h,K)\n",
    "b2 = np.zeros((1,K))\n",
    "\n",
    "# some hyperparameters\n",
    "step_size = 1e-0\n",
    "reg = 1e-3 # regularization strength\n",
    "\n",
    "# gradient descent loop\n",
    "num_examples = X.shape[0]\n",
    "for i in range(10000):\n",
    "  \n",
    "  # evaluate class scores, [N x K]\n",
    "  hidden_layer = np.maximum(0, np.dot(X, W) + b) # note, ReLU activation\n",
    "  scores = np.dot(hidden_layer, W2) + b2\n",
    "  \n",
    "  # compute the class probabilities\n",
    "  exp_scores = np.exp(scores)\n",
    "  probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) # [N x K]\n",
    "  \n",
    "  # compute the loss: average cross-entropy loss and regularization\n",
    "  correct_logprobs = -np.log(probs[range(num_examples),y])\n",
    "  data_loss = np.sum(correct_logprobs)/num_examples\n",
    "  reg_loss = 0.5*reg*np.sum(W*W) + 0.5*reg*np.sum(W2*W2)\n",
    "  loss = data_loss + reg_loss\n",
    "  if i % 1000 == 0:\n",
    "    print(\"iteration %d: loss %f\" % (i, loss))\n",
    "  \n",
    "  # compute the gradient on scores\n",
    "  dscores = probs\n",
    "  dscores[range(num_examples),y] -= 1\n",
    "  dscores /= num_examples\n",
    "  \n",
    "  # backpropagate the gradient to the parameters\n",
    "  # first backprop into parameters W2 and b2\n",
    "  dW2 = np.dot(hidden_layer.T, dscores)\n",
    "  db2 = np.sum(dscores, axis=0, keepdims=True)\n",
    "  # next backprop into hidden layer\n",
    "  dhidden = np.dot(dscores, W2.T)\n",
    "  # backprop the ReLU non-linearity\n",
    "  dhidden[hidden_layer <= 0] = 0\n",
    "  # finally into W,b\n",
    "  dW = np.dot(X.T, dhidden)\n",
    "  db = np.sum(dhidden, axis=0, keepdims=True)\n",
    "  \n",
    "  # add regularization gradient contribution\n",
    "  dW2 += reg * W2\n",
    "  dW += reg * W\n",
    "  \n",
    "  # perform a parameter update\n",
    "  W += -step_size * dW\n",
    "  b += -step_size * db\n",
    "  W2 += -step_size * dW2\n",
    "  b2 += -step_size * db2\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The training accuracy is now:"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
     ]
    }
   ],
   "source": [
    "# evaluate training set accuracy\n",