{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Intro to neural net training with autograd\n", "\n", "In this notebook, we'll practice\n", "\n", "* using the **autograd** Python package to compute gradients\n", "* using gradient descent to train a basic linear regression (a NN with 0 hidden layers)\n", "* using gradient descent to train a basic neural network for regression (NN with 1+ hidden layers)\n", "\n", "\n", "### Requirements:\n", "\n", "Follow the Python environment setup instructions here:\n", "https://www.cs.tufts.edu/comp/150BDL/2018f/setup_python_env.html\n", "\n", "All the specific Python packages you'll need are in the 'bdl_basic_env' conda environment:\n", "https://www.cs.tufts.edu/comp/150BDL/2018f/conda_envs/bdl_basic_env.yml" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "import pickle\n", "import copy\n", "import time" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "## Import plotting tools\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "## Import numpy\n", "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "## Import autograd\n", "import autograd.numpy as ag_np\n", "import autograd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part 5: Neural Networks and Autograd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's use a convenient data structure for NN model parameters\n", "\n", "Use a list of dicts of arrays.\n", "\n", "Each entry in the list is a dict that represents the parameters of one \"layer\".\n", "\n", "Each layer-specific dict has two named attributes: a vector of weights 'w' and a vector of biases 'b'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Here's a function to create NN params as a 'list-of-dicts' that match a provided set of dimensions" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "def make_nn_params_as_list_of_dicts(\n", " n_hiddens_per_layer_list=[5],\n", " n_dims_input=1,\n", " n_dims_output=1,\n", " weight_fill_func=np.zeros,\n", " bias_fill_func=np.zeros):\n", " nn_param_list = []\n", " n_hiddens_per_layer_list = [n_dims_input] + n_hiddens_per_layer_list + [n_dims_output]\n", "\n", " # Given full network size list is [a, b, c, d, e]\n", " # For loop should loop over (a,b) , (b,c) , (c,d) , (d,e)\n", " for n_in, n_out in zip(n_hiddens_per_layer_list[:-1], n_hiddens_per_layer_list[1:]):\n", " nn_param_list.append(\n", " dict(\n", " w=weight_fill_func((n_in, n_out)),\n", " b=bias_fill_func((n_out,)),\n", " ))\n", " return nn_param_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Here's a function to pretty-print any given set of NN parameters to stdout, so we can inspect" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "def pretty_print_nn_param_list(nn_param_list_of_dict):\n", " \"\"\" Create pretty display of the parameters at each layer\n", " \"\"\"\n", " for ll, layer_dict in enumerate(nn_param_list_of_dict):\n", " print(\"Layer %d\" % ll)\n", " print(\" w | size %9s | %s\" % (layer_dict['w'].shape, layer_dict['w'].flatten()))\n", " print(\" b | size %9s | %s\" % (layer_dict['b'].shape, layer_dict['b'].flatten()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: NN with 0 hidden layers (equivalent to linear regression)\n", "\n", "For univariate regression: 1D -> 1D\n", "\n", "Will fill all parameters with zeros by default" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (1, 1) | [0.]\n", " b | size (1,) | [0.]\n" ] } ], "source": [ "nn_params = make_nn_params_as_list_of_dicts(n_hiddens_per_layer_list=[], n_dims_input=1, n_dims_output=1)\n", "pretty_print_nn_param_list(nn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: NN with 0 hidden layers (equivalent to linear regression)\n", "\n", "For multivariate regression when |x_i| = 2: 2D -> 1D\n", "\n", "Will fill all parameters with zeros by default" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (2, 1) | [0. 0.]\n", " b | size (1,) | [0.]\n" ] } ], "source": [ "nn_params = make_nn_params_as_list_of_dicts(n_hiddens_per_layer_list=[], n_dims_input=2, n_dims_output=1)\n", "pretty_print_nn_param_list(nn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: NN with 1 hidden layer of 3 hidden units" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (2, 3) | [0. 0. 0. 0. 0. 0.]\n", " b | size (3,) | [0. 0. 0.]\n", "Layer 1\n", " w | size (3, 1) | [0. 0. 0.]\n", " b | size (1,) | [0.]\n" ] } ], "source": [ "nn_params = make_nn_params_as_list_of_dicts(n_hiddens_per_layer_list=[3], n_dims_input=2, n_dims_output=1)\n", "pretty_print_nn_param_list(nn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: NN with 1 hidden layer of 3 hidden units\n", "\n", "Use 'ones' as the fill function for weights" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (2, 3) | [1. 1. 1. 1. 1. 1.]\n", " b | size (3,) | [0. 0. 0.]\n", "Layer 1\n", " w | size (3, 1) | [1. 1. 1.]\n", " b | size (1,) | [0.]\n" ] } ], "source": [ "nn_params = make_nn_params_as_list_of_dicts(\n", " n_hiddens_per_layer_list=[3], n_dims_input=2, n_dims_output=1,\n", " weight_fill_func=np.ones)\n", "pretty_print_nn_param_list(nn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: NN with 1 hidden layer of 3 hidden units\n", "\n", "Use random draws from standard normal as the fill function for weights" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (2, 3) | [ 1.37995026 0.15780478 -2.31025992 -0.47964717 0.38124501 -0.1729307 ]\n", " b | size (3,) | [0. 0. 0.]\n", "Layer 1\n", " w | size (3, 1) | [-0.42010263 0.50818113 -0.7218878 ]\n", " b | size (1,) | [0.]\n" ] } ], "source": [ "nn_params = make_nn_params_as_list_of_dicts(\n", " n_hiddens_per_layer_list=[3], n_dims_input=2, n_dims_output=1,\n", " weight_fill_func=lambda size_tuple: np.random.randn(*size_tuple))\n", "pretty_print_nn_param_list(nn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: NN with 7 hidden layers of diff sizes\n", "\n", "Just shows how generic this framework is!" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (2, 3) | [0. 0. 0. 0. 0. 0.]\n", " b | size (3,) | [0. 0. 0.]\n", "Layer 1\n", " w | size (3, 4) | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " b | size (4,) | [0. 0. 0. 0.]\n", "Layer 2\n", " w | size (4, 5) | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " b | size (5,) | [0. 0. 0. 0. 0.]\n", "Layer 3\n", " w | size (5, 6) | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0.]\n", " b | size (6,) | [0. 0. 0. 0. 0. 0.]\n", "Layer 4\n", " w | size (6, 5) | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0.]\n", " b | size (5,) | [0. 0. 0. 0. 0.]\n", "Layer 5\n", " w | size (5, 4) | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " b | size (4,) | [0. 0. 0. 0.]\n", "Layer 6\n", " w | size (4, 3) | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " b | size (3,) | [0. 0. 0.]\n", "Layer 7\n", " w | size (3, 1) | [0. 0. 0.]\n", " b | size (1,) | [0.]\n" ] } ], "source": [ "nn_params = make_nn_params_as_list_of_dicts(\n", " n_hiddens_per_layer_list=[3, 4, 5, 6, 5, 4, 3], n_dims_input=2, n_dims_output=1)\n", "pretty_print_nn_param_list(nn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup: Function that performs **prediction**" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "def predict_y_given_x_with_NN(x=None, nn_param_list=None, activation_func=ag_np.tanh):\n", " \"\"\" Predict y value given x value via feed-forward neural net\n", " \n", " Args\n", " ----\n", " x : array_like, n_examples x n_input_dims\n", " \n", " Returns\n", " -------\n", " y : array_like, n_examples\n", " \"\"\"\n", " for layer_id, layer_dict in enumerate(nn_param_list):\n", " if layer_id == 0:\n", " if x.ndim > 1:\n", " in_arr = x\n", " else:\n", " if x.size == nn_param_list[0]['w'].shape[0]:\n", " in_arr = x[ag_np.newaxis,:]\n", " else:\n", " in_arr = x[:,ag_np.newaxis] \n", " else:\n", " in_arr = activation_func(out_arr)\n", " out_arr = ag_np.dot(in_arr, layer_dict['w']) + layer_dict['b']\n", " return ag_np.squeeze(out_arr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Toy data for linear regression task" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "N = 300\n", "D = 2\n", "sigma = 0.1\n", "\n", "true_w_D = np.asarray([4.2, -4.2])\n", "true_bias = 0.1\n", "\n", "train_prng = np.random.RandomState(0)\n", "x_ND = train_prng.uniform(low=-5, high=5, size=(N,D))\n", "y_N = np.dot(x_ND, true_w_D) + true_bias + sigma * train_prng.randn(N)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.pairplot(\n", " data=pd.DataFrame(np.hstack([x_ND, y_N[:,np.newaxis]]), columns=['x1', 'x2', 'y']));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example: Make predictions with 0-layer NN whose parameters are filled with the 'true' params for our toy dataset" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "true_nn_params = make_nn_params_as_list_of_dicts(n_hiddens_per_layer_list=[], n_dims_input=2, n_dims_output=1)\n", "true_nn_params[0]['w'][:] = true_w_D[:,np.newaxis]\n", "true_nn_params[0]['b'][:] = true_bias" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5,0,u'predicted y|x')" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "yhat_N = predict_y_given_x_with_NN(x_ND, true_nn_params)\n", "assert yhat_N.size == N\n", "\n", "plt.plot(yhat_N, y_N, 'k.')\n", "plt.ylabel('true y')\n", "plt.xlabel('predicted y|x')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example: Make predictions with 0-layer NN whose parameters are filled with all zeros" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5,0,u'predicted y|x')" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "zero_nn_params = make_nn_params_as_list_of_dicts(n_hiddens_per_layer_list=[], n_dims_input=2, n_dims_output=1)\n", "yhat_N = predict_y_given_x_with_NN(x_ND, zero_nn_params)\n", "assert yhat_N.size == N\n", "\n", "plt.plot(yhat_N, y_N, 'k.')\n", "plt.ylabel('true y')\n", "plt.xlabel('predicted y|x')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup: Gradient descent implementation that can use list-of-dict parameters (not just arrays)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "def run_many_iters_of_gradient_descent_with_list_of_dict(f, g, init_x_list_of_dict=None, n_iters=100, step_size=0.001):\n", "\n", " # Copy the initial parameter vector\n", " x_list_of_dict = copy.deepcopy(init_x_list_of_dict)\n", "\n", " # Create data structs to track the per-iteration history of different quantities\n", " history = dict(\n", " iter=[],\n", " f=[],\n", " x=[],\n", " g=[])\n", " start_time = time.time()\n", " for iter_id in range(n_iters):\n", " if iter_id > 0:\n", " # Gradient is a list of layer-specific dicts\n", " grad_list_of_dict = g(x_list_of_dict)\n", " for layer_id, x_layer_dict in enumerate(x_list_of_dict):\n", " for key in x_layer_dict.keys():\n", " x_layer_dict[key] = x_layer_dict[key] - step_size * grad_list_of_dict[layer_id][key]\n", " \n", " fval = f(x_list_of_dict)\n", " history['iter'].append(iter_id)\n", " history['f'].append(fval)\n", " history['x'].append(copy.deepcopy(x_list_of_dict))\n", " history['g'].append(g(x_list_of_dict))\n", "\n", " if iter_id < 3 or (iter_id+1) % 50 == 0:\n", " print(\"completed iter %5d/%d after %7.1f sec | loss %.6e\" % (\n", " iter_id+1, n_iters, time.time()-start_time, fval))\n", " return x_list_of_dict, history" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Worked Exercise: Train 0-layer NN via gradient descent on LINEAR toy data" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "def nn_regression_loss_function(nn_params):\n", " yhat_N = predict_y_given_x_with_NN(x_ND, nn_params)\n", " return 0.5 / ag_np.square(sigma) * ag_np.sum(np.square(y_N - yhat_N))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "completed iter 1/100 after 0.1 sec | loss 1.632803e+02\n", "completed iter 2/100 after 0.3 sec | loss 1.626805e+02\n", "completed iter 3/100 after 0.5 sec | loss 1.622965e+02\n", "completed iter 50/100 after 9.1 sec | loss 1.598157e+02\n", "completed iter 100/100 after 18.6 sec | loss 1.596883e+02\n" ] } ], "source": [ "fromtrue_opt_nn_params, fromtrue_history = run_many_iters_of_gradient_descent_with_list_of_dict(\n", " nn_regression_loss_function,\n", " autograd.grad(nn_regression_loss_function),\n", " true_nn_params,\n", " n_iters=100,\n", " step_size=0.000001)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (2, 1) | [ 4.20137427 -4.2023327 ]\n", " b | size (1,) | [0.08737985]\n" ] } ], "source": [ "pretty_print_nn_param_list(fromtrue_opt_nn_params)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(fromtrue_history['iter'], fromtrue_history['f'], 'k.-')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "completed iter 1/100 after 0.1 sec | loss 4.649827e+06\n", "completed iter 2/100 after 0.3 sec | loss 2.520065e+06\n", "completed iter 3/100 after 0.6 sec | loss 1.367394e+06\n", "completed iter 50/100 after 10.7 sec | loss 1.634750e+02\n", "completed iter 100/100 after 22.0 sec | loss 1.598624e+02\n" ] } ], "source": [ "fromzero_opt_nn_params, fromzero_history = run_many_iters_of_gradient_descent_with_list_of_dict(\n", " nn_regression_loss_function,\n", " autograd.grad(nn_regression_loss_function),\n", " zero_nn_params,\n", " n_iters=100,\n", " step_size=0.000001)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Layer 0\n", " w | size (2, 1) | [ 4.20137256 -4.2023501 ]\n", " b | size (1,) | [0.08325989]\n" ] } ], "source": [ "pretty_print_nn_param_list(fromzero_opt_nn_params)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(fromzero_history['iter'], fromzero_history['f'], 'k.-')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Try it yourself!\n", "\n", "* Can you make a function **calc_prior_logpdf** that takes in weights and produces a real value?\n", "* Can you make a function **calc_likelihood_logpdf** that takes in weights and produces a real value?\n", "* Can you make a function **calc_posterior_logpdf** that takes in weights and produces a real value?\n", "* Can you use autograd to make function **calc_gradient_of_posterior_logpdf** that takes in weights and produces the gradient?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "TODO:\n", " Update HW2 to be clear it is a FUNCTION value that we want samples of" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.15" } }, "nbformat": 4, "nbformat_minor": 2 }