{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Multilayer Perceptron\n", "===============\n", "\n", "*Important:* Please read the [installation page](http://gpeyre.github.io/numerical-tours/installation_python/) for details about how to install the toolboxes.\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n", "$\\newcommand{\\eqdef}{\\equiv}$" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This tour details fully connected single layer neural netWorks." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We recommend that after doing this Numerical Tours, you apply it to your\n", "own data, for instance using a dataset from [LibSVM](https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/).\n", "\n", "_Disclaimer:_ these machine learning tours are intended to be\n", "overly-simplistic implementations and applications of baseline machine learning methods.\n", "For more advanced uses and implementations, we recommend\n", "to use a state-of-the-art library, the most well known being\n", "[Scikit-Learn](http://scikit-learn.org/)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "# convert to a column vector\n", "def MakeCol(y): return y.reshape(-1,1)\n", "# convert to a row vector\n", "def MakeRow(y): return y.reshape(1,-1)\n", "# find non zero/true elements\n", "def find(x): return np.nonzero(x)[0]\n", "# dot product\n", "def dotp(x,y): return sum( x.flatten() * y.flatten() )" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Dataset Generation\n", "------------------\n", "We consider a simple 1-D function.\n", "\n", "\n", "Generate Data $(x_i,y_i)_{i=1}^n$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "n = 256; # #samples\n", "d = 1; # dimension\n", "x = np.linspace(-1,1,n)\n", "y = MakeCol( np.sin(6*np.pi*np.abs(x)**1.5) + np.abs(x)**2 )" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD8CAYAAACfF6SlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXmUJFd97/m9ue+ZlZm1L11dXdWL1m7RkqwVCUsgMEaA\nsS2PPQYMg82zeYN93oKfl5lhzhvbbzzH9nvGi4wxYBuDLT9AbAYJBBJqbS2pu9XqraqXqq4118p9\nzzt/RNys7OpcY82sup9z6nRVRGTm7ciIb/zu7/4WQikFh8PhcHYXBr0HwOFwOBzt4eLP4XA4uxAu\n/hwOh7ML4eLP4XA4uxAu/hwOh7ML4eLP4XA4uxAu/hwOh7ML4eLP4XA4uxAu/hwOh7MLMek9gGYE\ng0E6PT2t9zA4HA6nr3j11VcjlNLBdsf1rPhPT0/j+PHjeg+Dw+Fw+gpCyGInx3G3D4fD4exCuPhz\nOBzOLoSLP4fD4exCuPhzOBzOLoSLP4fD4exCuPhzOBzOLoSLP4fD4exCuPjL4NkLYZxeSeg9DA6H\nowHfOrWGxWhG72EoBhd/iXzvzXV86O9exi9/7mVE0wW9h8PhcFTkqTMb+PUvvYbHHn8R64m83sNR\nBC7+EsgWy/jNr5zA/mE30vkyPv3NM3oPicPhqES6UMZ/+eobmAk6kcqX8XtfP633kBSBi78EXr4c\nQ6ZYwX951yH8L3dO4TtvrCNfqug9LA6HowLHFiIIpwr49KM34f23jePH8xEUyv1/v3Pxl8DzCxFY\nTAbcsdePe2eDKFaqOHF1U+9hcTgcFXj5cgwWkwFHpwdw72wQuVIFry/1//3OxV8Cz81HcHTPAGxm\nI27f6wchwEuXYnoPi8PhqMBLl2M4MumDzWzET+wLwGggeH4hovewZMPFv0si6QLOradw71wQAOC1\nm3FoxIOXLkd1HhmHw1GaZL6EN1cTuHMmAADw2My4dcKL5+a5+O863lgWQjtvn/bXtt2x14/XluIo\nlqt6DYvD4ajAq4txVClw596t+/32aT/eXE2gXOnv+52Lf5cshNIAgLkhV23brZNe5EtVLMV2Tgww\nh8MBzq2lAAA3T3hr22aHXChVKJZiWb2GpQhc/LtkPpRC0GWBz2GpbZsJCg+ChRAXfw5nJ3ExnMag\n2wqPzVzbNjvE7ve0XsNSBC7+XbIQSmPfoOuabTODTgDApUh/XwwcDudaLoXTmAk6r9m2TxT/eS7+\nuwdKKRZCacwNXyv+bpsZQ24rLoW55c/h7CQuRTI1sWd4bGaMeGy4yMUfIIR8jhASIoQ0TH0jhDxA\nCEkQQk6IP7+vxOdqTThVQDJfxuw2yx8A9g26cCnc3xcDh8PZIpYpYjNbus7yBwTXz0Kf3+9KWf6f\nB/BIm2Oeo5QeFn8+rdDnagrz8c0Oua/bNzPoxMVwBpRSrYfF4XBU4KIo7tvdvIAo/qF0X9/viog/\npfRZADs+y+liRHDr7Bu63hKYGXQhkSshlilqPSwOh6MCbCbP1vTq2TfkQrZYwXqyf4u8aenzv4sQ\ncpIQ8h1CyI0afq5iLMezMBsJht226/ZtLfpyvz+HsxO4FMnAYjRgYsBx3b6JATsAYCWe03pYiqGV\n+L8GYA+l9FYA/wPA1xodRAj5GCHkOCHkeDgc1mhonbO6mceo1w6DgVy3b1K8QFY3+/di4HA4W6zE\ncxjz2WBscL+P+0Tx7+P7XRPxp5QmKaVp8fdvAzATQoINjnucUnqUUnp0cHBQi6F1xUo8W/vStzPm\nE2YD/XwxcDicLVY3cxhrcr9z8e8QQsgIIYSIv98hfm7fFcNZ3cxjfKDxxeCwmOBzmLG22b8+QA6H\ns8VaQpjpN8JpFe73fp7pm5R4E0LIPwF4AECQELIM4P8AYAYASulfAfgAgI8TQsoAcgAeo322TF4s\nV7GRyje1BABgzGvv64uBw+EIlCtVbCTzGPddv77HGPPa+9rnr4j4U0p/oc3+Pwfw50p8ll5sJPOg\nFJhoJf4+G1a45c/h9D0bqQKqFBhtcb+PD9ixFO3f+j48w7dDlsUnfEvL38ctfw5nJ8Du41b3+7jP\njpXNXN/G+nPx7xB2MTTz+QPAqNeORK6ETKGs1bA4HI4K1MTf29ztM+6zI10oI5nvz/udi3+HsFX9\n0RYXA4v4WUtw65/D6WdWRfdtK7cPmxX0q9+fi3+HrCVyCLossJmNTY9hF8Mq9/tzOH3NWiIHj80E\nl7X5sigz9vrV1cvFv0M2kgUMNcjsrWdL/PvzYuBwOAKtYvwZwx5BD0KpghZDUhwu/h0SSuUx5LG2\nPGbIbQUh6Ot6HxwOR7iHR1q4eAEg6BL0IJTqz/udi3+HhJIFDLlbi7/ZaIDfYUG4Ty0BDocjEE61\nv98tJgP8Tgu3/HcylSpFJN3e7QMAg24rF38Op4+pViki6SIG24g/IMz2Q8n+vN+5+HdANCMkfLRz\n+wCC+PeKJZAplPGll5aQyJX0HgqH05Lz6yl869Sa3sMAAMSyRVSqtAtjrz/dPopk+O502JO93TQQ\nEC6GXmjnmC2W8eHPv4KXL8fwN89dwhd/5Q5M+q8vTcvh6M2/nV7HJ7/yOvKlKuZDc/jkQ/t1HQ+b\nuXdm+dv6tpE7t/w7YOti6Nzto3fW3+PPXsIrV2L45ENz2Ejm8Wffn9d1PBxOI0qVKn73a6cxN+TG\new+P4U+fnsfplYSuY2Iz906MvSGPcL9Xq/2X5cvFvwPYan5HF4PbhmKlimROv6w/Sim++voK7t4X\nwCcf2o9HD4/hW6fWkMxz9w+nt/j+2RAi6QI++dAc/q/33ASL0YCvvr6i65i6s/ytKFcp4tn+6+DH\nxb8DNpKdXwzsmHBaPz/g61c3sRjN4r2HxwEAj90+hVypgidPrOo2Jg6nEV95ZQnDHiveun8QXocZ\nDx4cxJMnV1GuVHUbU7duH2BLI/oJLv4dEErl4bWbW2b3MgZZ7K+OF8OTJ1ZhNRnwyE0jAIBbJryY\nHXLhu2+u6zYmDmc7mUIZz85H8N7D4zAZBSl635FxhFMFvHhJv5bgoVQeLqsJDkv7JVEWBNKPsf5c\n/Dugkxh/BrsYwmn9xP/lyzHcPu2H22YGABBCcNdMAK8txnW1qDicel5f2kSlSnHXvkBt231zgzAQ\n4OXL+vV6CqcKHVn9wJYruFci/LqBi38HhNOFjsI8ga2pol6Wf6ZQxrn1JG6b8l2z/fa9fmSKFZxd\nS+kyLg5nOy9ficFAgLfsGahtc1pNODDiwetXN3UbV6gr8RfcPv2Y28PFvwMi6ULNndMOt9UEm9mg\nm+V/cnkTVQocqbuhAOD2aeHvV67oN53mcOo5fiWGQ6Oe2gyVcduUDyeWNnWLoIl0If52ixFOixHR\nNF/w3ZFE00UEOhR/QoiQ6KVTfZ/XlwSL6cjktZb/qNeOiQE7F39OT1CqVPH60iZun/Zft++2qQGk\nCmUshPWJnw+nOjf2AMDvsiCa4Zb/jiNbLCNbrCDgsnT8Gr/TilhWn7DK15fimBl0wue4frxv2TOA\nEzpOpzkcxvn1FHKlyjUuH8YR0WX52mJc62EhX6ogVSh3bPkD4v2e4Zb/joNN54LOzi+GgNOCmE6W\nwJurSdw64Wu47+CIB2uJPBI6PZg4HMb5dWHt6dCo+7p9e4NOuG0mnF7VPtmLibjf2bmxF3RauNtn\nJxIVL4ZuLP8BhwUxHS6GVL6EtUQec8OuhvsPjgg32oUQX/Tl6MuFjRQsJgOmA87r9hFCMDfk0qVs\nAhP/QBfi73dyt8+OJCou3Hbq8xeOtSCmQ8Yfu1nmhq63pgDggCj+59a5+HP05dx6CrODrlp8/3bm\nhty6iH+kdr93If4uC2KZou4lXbqFi38b2HSuG0tgwGFBvlRFtqhtiYd58WaZHWps+Y96bXDbTLjA\nxZ+jMxc2UjVjpBGzQy5E0kXENfalb7l9Ojf2gk4rShWKVKG/Grlz8W9DRJzOBbux/MUHhdZ+wIuh\nNCwmAyYHGrefI4TgwLC75m/lcPQgkRXcky3FX3Rdah3xUzP2ugrwEI7Vw9UrBy7+bYimi3BajLBb\n2pd2YLCLQetiT/OhNGaCzqZTaQDYP+LG+Y1U301ROTsHtuZ0YLi5+M+Js9f5DY3FP1OE2UjgbtG4\nfTt+8UHRb35/Lv5tiKYLXfn7AWCAWf4aT1nnQ6mmLh/G/iEXErkSIn1mpXB2Dgtt3JMAMOa1w242\nYl7j4IRouoCA0wpCSMev0WumLxcu/m2IZopdTQGBrYtBy2lgvlTBcjzXVvz3BIXoiqWY/g1nOLuT\nxWgWFqMBY77G7kkAMBgI9g05NV/0jWWKXYV5AlvBIP0W68/Fvw2RdBGBLhZ/gK1poJZun+V4DpSi\nYehcPWz/lUhWi2FxONexGM1g0m+H0dDaut4TcGI5ntNoVAIRGcae1jN9uXDxb0M0XUCwy4vBbTXB\nbCSaXgxXY4KYT/qbW1MAMO4TbrrFKLf8OfpwJZpta6QAwOSAA8vxLCoa1viJZQpdRfYBgM1shKMP\n6/tw8W8BpVTSNJAQonmi11JN/Fv36bWYDBj32XElyi1/jvZQSrEYzWBPB+I/5XegVKFY17BOVjd1\nvOoJuPTL6peKIg3cCSGfA/BuACFK6U0N9hMAfwbgXQCyAD5EKX1Nic9Wk2SujHKVSroY/E5tE72u\nxrKwmQ0dFaTaE3D0veU/v5HCH3/vPM6upXD7tB+feNsspoPtBaUfeeZcCH/z3CWEUwXcMxvEf3rk\nQEeNRnqRcLqAbLGC6WBrIwUQxB8Qru3xFusDSpErVpAtVro29gAhL2C3un0+D+CRFvvfCWBO/PkY\ngL9U6HNVhYm332luc+T1+J0WTReAlmJZTPkdHUUpTAecfW35v7oYx/v/8hhevhzD/mE3/u30Gn7m\nL4/h7FpS76Epzj++tIgPf/4VLMWymBiw44svXMHP//WLSOT6sz7TonjddWr5A1uzWrVhoZrdun3Y\na3al24dS+iyAVrWCHwXwRSrwIgAfIWRUic9uRKFcQaFckf0+TLwHGlTIbIce4j850N6aAgTLP5Er\nYbMPm05ni2X8719+HQMOC77xiXvx2Q8exTc+cS/MRgM++oXjSO2gJvUvXYrid792Gg8eGMTTv/VW\n/N2H78Dj/+tRvLmawB98+6zew5PElYgw45wOtL9WR302GMjWepbaxDPCtSPN8lfufs8Uypp03NPK\n5z8O4Grd38viNsUJJfM48Lv/hideXZb9XltFniS6fTQSf0oprsaybf39jFrETx9a/3/69DyW4zn8\n8c/eignxYTcz6MJf/NJtWEvk8P/0qShuJ1ss4z8+cQqTAw585hdvq/WPfuiGYfxv98/gy69cxYuX\n9Gt1KJXFaBZGA2kZ5skwi+GgWln+LDpvQIrlr2B9n1//0mt4318ck/0+7eipBV9CyMcIIccJIcfD\n4bCk9/DYBReNEtNiVldkQKLbJ5EroaTBEzyeLSFTrNSmye2YECOCluP9Jf7xTBFffOEK3n/bOO7Y\ne20TkNumBvAr9+zFl1+5inPr/e/++fyxK1iKZfFHP3PLdf7933xoP4bcVnzmmQWdRied5XgWIx4b\nzC2y0OuZ8ju0s/yZ+Du6v98DTguKlSrSCtT3SeRK8Nq7H0O3aCX+KwAm6/6eELddA6X0cUrpUUrp\n0cHBQUkfZDUZYDEaFBH/LZ+/NB8goE2s/9UOI30YbPFsReMYarl86eUl5EtV/Or9+xru/423zcJp\nMeHPnp7XeGTKksqX8Pizl/DggcFrmpszbGYjPnj3NJ6bj/TdOsfKZg7jTWpPNWJywIGlmDbXaVyW\nm1fwDijh999p4v8kgF8mAj8BIEEpXVPjgwgh8NjNSObkP4FjmSJsZoOkyAo2dWR+RDVZ3RRujjGf\nraPj3TYzPDYTVjb7R/wrVYovvnAF980FmxYE8zks+JV7pvGd0+tY6OOeBV96aQmb2RI++dD+psf8\n4p1TsJuN+MKxK9oNTAFW4jlMdBG5M+azI5IuKLKG14642ORIivAGXMoleiVzpZoHQ00UEX9CyD8B\neAHAAULIMiHkI4SQXyOE/Jp4yLcBXAKwAOBvAPw7JT63GV67CUklLP9MEX4JVgCwNVvQotjTakKI\ngx7zdn5TjQ84+sryf+lyFBvJAh67farlcR+8exoWowF//8KiRiNTlkqV4u9fXMSde/24dbJxRzZA\neNA9ctMIvv3GGopl9V2LSlCqVLGezHdl+Y+KBs1GQv37aDNbhMdmalkYsRm1ki4yxZ9S2l+WP6X0\nFyilo5RSM6V0glL6t5TSv6KU/pW4n1JKf51Suo9SejOl9LgSn9sMj92smM9fyuIPsLVIrMWi79pm\nDjazAb4ufJXjPntfWf7fPLUGh8WItx0canlcwGXFT90yin99bUUR/6vW/PB8CMvxHH75rum2x777\nllEk82X8eEHa+pjWrCfyqFJ0FbPPDJrVhPrXaixbkuTiBeqMvbS8h1SuVEGpQvtH/HsNr92MpAIh\nf1EJ2b0MtkisRTOKtUQeY157V5UIJwbsfWP5lypVfOeNNTx0aLij0tq/9BN7kC6U8c2TqxqMTln+\n6eWrGHRb8fYbh9see9/cIDw2E755UhUPquIwY0OK5b+mgfhvZovwSZzpM2NPrtuHGa1c/CXiVcry\nz8oQf4d2xZ5WE7naTdIp4z47UoVyXyQLvbYYRzxbwjtvGuno+NumfJgJOvHV16+LKehpYpkifng+\nhPcdGe8oGsZiMuDhG0bw/XMhTevfSIUZG5Is/031SzzEs0VJkT4AYLcI9X3kzvS5+MvEYzMr5vOX\nsvIPCDHKXrtZI7dPHqNd+PuBLeurH6z/5+YjMBoI7pkLdnQ8IQTvOzKOly7H+sq19a1TqyhXKd53\npPMUmPv3B5HIlfDGSkLFkSnDSi0wofNr1W4xwucwa2L5xzMlyW5eQJncnoSMRedu2ZHiL7h9yrIS\nLorlKlL5smTLH9Am0atcqSKUymPM273lD6AvxPHZ+TCOTPrgsXV+Q7xXFNAnT/SP6+drJ1ZxcMSN\nQ6Oejl9z39wgCAGevdD7fv+VeA6DbmstYa1TRr12rGlm+Uu/3wNOS60BvFS45S8Tj92ESpXKWvDb\nlBHjz9BC/DdSBVQpMNpl4Stm+a/2uPjHMkW8sZLA/fu7y/uY9Dtw64QX331zXaWRKct6Io9XF+N4\n9y3dVT3xOy24edyL5+Z7X/xXE7murH7GmNdWi2hTi3xJKOom1e0DCMEG3O2jM+zEJfPSxV9OghdD\nC/FfE8V7tEvL3++wwGwkmpbLlcILF6OgFLi3Q5dPPQ/fMIwTVzex0eP/RwC1h9QjN3Vf8uq+uSBe\nW9pEpsejm0LJAobd3ZdKGfXZVHf7bIruFt3dPlz85cFOHPOfSYHV4pczDfQ71Bf/Wox/lxaVwUAw\n5LZhQ2WLSi6vXInBbjbi5nFv1699+43CAvHTZzeUHpbifOf0GuaGXG3bcDbijr0BVKoUJ65uqjAy\n5dhI5THs6c5IAQS3z2a2hFxRvUSvrdIO8sVfjrs5mSuBEMBtU79k944Uf+YblhPuySz/blu61eN3\nWRDPKlPsqRlMvKXcVMMea89b/q8uxnF40tdxLZh65oZc2BNw4KkzvS3+8UwRL1+O4ZEOo5m2c2TK\nB0KA41fiCo9MOQrlCjazJQxJsPxHxGtbzWuViX83uTLb8TstKJSryMp4SCVyJbitJhjatLhUgp0p\n/goUd5NT54Phd1hQqlCkVJyOryfzsJuN8EiwFEa8tp4W/0yhjDNrSRydHpD0ekIIHj40jGML0Z5O\n+Hp2PowqRdsEtmZ4bGYcGHbj+GKrqur6Ek4JC6FDnu7Fnxk2ITXFX0Y5ZwarBiBntp/IleCV8QDq\nhh0p/l4FxJ/F58uxBNhrN1Ws77ORzGPYY+0qwYsx7LEhlOzd1nMnrm6iUqU4Ou1vf3AT3n7jCIqV\nKn50vncXRH94Pgy/04JbJpqXc2jH7dN+vLYY16QOvBRCTPzd3c9Q2QNjI6XetaqU26f+vaSgVWkH\nYIeKP7P85cT6xzNFeO1mSe4GBrsY1GznGEoWJLl8AGE6nS6Ue9YqPn4lDkIEt4ZU3rJnAH6nBU+d\n6c2on2qV4kcXwnjr/kEYZUz1j04PIFOs4PxGbxa0Y1a7FMufuYrUtPw3FXD7DDjlJ3Zy8ZeJ22oC\nIfLEX06dDwZLFVezrLPURTRAcPsAQphhL/LGyib2Dbq6iu/fjtFA8LaDQ3jmfLgns2BPrSQQyxTx\nwAFpJcwZt4qzhjeWezPZS47l77WbYTEZaq4jNYhlSnBajLCaustBqKdm+XPx1w+DgcBtNckL9cwU\nZMX8AltNIdRql0gprbl9pMBuxF4NhTy1nJAU5bOdt+4fRCJXwqnl3ouGeeZcCAYC3D8nT/z3BBxw\n20w41aOZvqFkAUYDkdQflxCCIbe19gBRAzl1fRh+BSp7JnJlLv5y8TrMskQ3linVGjRIhfkP1arp\nn8yXkS9Vd6Tlv5HMI5QqKCL+98wGQYhQJqLX+OH5EA5P+mTFlwOCQN487sXpXhX/VB5Bl0VyFMuQ\n26qqkRLPFiV17KvHYzPBaCCSZ/qUUs1q+QM7WPx9dovsaB+/3IvBboaBqOf22fKjSvf5A4LrqNdg\n7otbJuSLf69mwUbSBZxcTuDBA9KifLZz84QXZ9eSmjQ+6ZYNGWtTgDBLVdPyj2VLshZ7AeEBPCAj\ntydfqqJYqXLLXy5yKntSSoWibjKtMaOBwGs3qyb+G2KkjpSsSUAomuWxmXoy0euNlQQMBLhhrPM6\nN624f24Qry1tIqVAqW+lYPV4HlBI/G8Z96FUobiwnlbk/ZQklCpIivFnDHmsqi/4yhV/QKjvI1X8\ntczuBXay+DvM2JQo/pliBcVKVZJ/cjsDDkutPZzSsBj9kS5LO9Qz7OnNWP/TKwnsG3RJaqHZiPvm\ngqhUKV64GFXk/ZTg+YUo/E4LblToAcdcZL1Y4TOcymNQwmIvY9hjE92c6sxq4jJ6d9Qz4DRLdvNy\n8VcIr116WWclSjswBpwW1Rq6MB+olAgKhpDo1Xux/uc3UjjYRXXLdhyZGoDTYuwZvz+lFMcuRnDX\nTECxbM5Jvx0uqwnn13urqXupUkU0U5Rl+Q/Wwj2Vv1bLlSqS+bKsME+G32mR3LqVi79C+OxmbGZL\nkkorKFHUjTHgMKtm+YeSebhtpo66WzVj2NN79X0yhTKW4znsl1DnphkWkwF37Qv0jN//ciSDtUQe\nd88GFHtPQggOjLhxdr23Yv0j6QIolVaChFGL9VdhfYp5CJQw9vxO6TN9Lv4K4bWbUa5SSXU2aqUd\nFBB/n8OiWqhnOC1vEQ0QFn3D6UJPxcDPhwSf9f4Rt6Lve9/cIK5Es1iKZhV9XykcE91Pd+/rvlpp\nKw6OuHFuLalqPaluYda6LJ+/OLtVY9FXyfvdL97vUu4nLv4KUSutIMH1wzL0/Eq4fRzqLfiGUwUE\nZRSeA4Bhrw2VKpXdeFpJLoiW64FhpcVfENofL+jv+jl2MYIxrw3TAYei73tw1INkvoy1HprNhWTU\n9WGwXBY1wj2ZpS43rwcQHiBVKq20DBd/hZBT1jkm+uzkVPRkDDgtyJeqqpSjDacKshbRgK1IoV5a\n9D2/kYLVZMCkX1lh3Bt0YtRrw/M6i39VXHi+a19QUk2mVhwSZ0vnesjvz1w1ctamBhwWmAxEHctf\ngbo+DDmJXkz83TIy2rthB4u/8CVs5rr/EqKZIixGA1xW+ZEmAyqWeAinChh0yUtE68VErwsbKcwN\nu2TVumkEIQR37wvi2MUIqjq6uc6uJxHPlnCPgv5+BnOVnV3rHb//RrIAQiBrlmowEAy6raos+Crq\n9pFR3C2ZK8EtJoppwQ4Wf+nF3aJpIexLCauMTSWVFv9ssYxMsVKLgpBKLdGrhyz/Cxsp7FfY5cO4\ndy6AeLaEM2v6WcbHFtTx9wNCeedxnx0XeqjAWziVR8BphUlGkUQAYomHHnf7iMZeNC3N8tfK5QPs\nYPGv+fwluX2Kirh8APVKPERSwsUlV/wDLiuMht5p57iZLWIjWVDc389ggnvson6un2MXI5gZdMrK\nz2jFzKATl8IZVd5bCqGkvAQvxqBbnRLkm9kiLCYD7F02lm8E0w0pxh4Xf4WQU9M/qlDCB7A1lVTa\n8g+nBbGWK/5GAxHrpvTGgu+FDTHSRyXxH/bYMDfkwo8X9En2KlWqePlyDPeoYPUz9g26cDGc7pmI\nn41UXtZiL2PYo47lH8sU4XcoNdOX5/Pn4q8ADosRZiORFu2TLiiS3QvUz0AUFn9x4Uuuzx8QagP1\nituHuSuUDvOs557ZIF65HNOlBs6p5U1kihXcvU95fz9j35AL2WKlZ2ZzQuN2+bOcIbcN8WwJxbKy\nDWvi2ZIiCV4AYDMb4bQYufjrCSFEcn0fwe0jX1QBocAcAMUTvZj4B93yH1IjHmvPLPhe2EjBZTVh\nTCWXCCCIf65UwetL2pd4fn4hCkKAu1QU/9lBITnuYkh/10+lShFJFxSx/Nl7hBUOS1aqrg9DalY/\nF38F8drNXYd65ksVZIsVxdw+FpMBbqtJVo3vRoRTBRgIEJBZdhoQLCqlbyipnF8XIn2UDoGs584Z\nPwwEOKZDyOfzCxHcOOaRXTu+FfuGnACAhZD+i77RTAFVKi/Bi8HeQ+lZaiyrnJsXECJ+pHTv4+Kv\nIFIsf5bgpZTbBwB8Tnm9BRoRThfgd1oVCQsbcluxmS3pXgqYUooLGynVFnsZHpsZt0z4NE/2yhWF\n2YYaUT71DLqscNtMuNgDi75sgVZuPgpQ38hdactfObcPIIp/l8ZevlRBsVzVrJY/oJD4E0IeIYSc\nJ4QsEEI+1WD/hwghYULICfHno0p8bjt8DkvXC60s01Uptw+gTmVPIcFLmTHWptMq1kvvhGimiHi2\nhDmVxR8A7p0N4uRyQtMSz8cXYyhWqqr6+wHB5ckWffWGLdBK7TZXD7P8wwou+larVHG3j19CTX+t\ns3sBBcSfEGIE8BkA7wRwA4BfIITc0ODQr1BKD4s/n5X7uZ3Airt1Q620g4KW/4CEh1A7wumiYuJf\nq5ios/hKflA0AAAgAElEQVRfjgiW6sygU/XPuns2gEqV4uXLMdU/i/H8QhQmA8Ht037VP6tnxJ/V\n9ZFZgwoQDDIDUfY6TeZLqFJlErwYUnz+cQWLSXaKEpb/HQAWKKWXKKVFAF8G8KgC7yubAWf3osvK\nOSvp9lGjvk9EgexeRq1ols7hnkz89wbUF//bpgZgMxs0df28cDGCI1M+OBXIHG/HviEnNpIF3ZvX\nhBSMSjMaCPxOq6IzVCUTvBh+pwWZYqWr3gNspqCk+6kdSoj/OICrdX8vi9u28zOEkFOEkCcIIZMK\nfG5bBhxmZIuVrnzZUQXr+jB8Dgs2FUzyopQq6/ZRYTothcuRDEwGgokBu+qfZTMbcfu0v5ZtqzaJ\nXAlvrCRU9/cz9okRP3one20k8xhwmGExKbO8OOi2IqJgcIKSdX0YUko8bGaVKyvdKVot+H4DwDSl\n9BYATwH4QqODCCEfI4QcJ4QcD4fl111nERXduH6UrOvDGHBYkCqUUaooE5+czJVRrFQVE381ptNS\nuBLJYMrvkF0GoFPumQ3i/EZKlcSh7bx4KYoqher+fgYTf71dP6GU/LLj9Qy6Fbb8Fazrw5CS6NWv\nbp8VAPWW/IS4rQalNEopZd/YZwG8pdEbUUofp5QepZQeHRwclD0wKU/gmIJ1fbbGoWx9H5bdK7ec\nM8NoIAi4lL2ppHA5ksF0UH2XD4Nl2WrR2vHYQgR2sxFHpgZU/ywA2BNwwGQgPSH+ShkpgOA+6nW3\nD/MadFPfJ96nbp9XAMwRQvYSQiwAHgPwZP0BhJDRuj/fA+CsAp/bFnYiu3kCRxWs67M1ju5nIK2o\n+VEVvKmEoln6iX+1SnElmsFeDcX/hjEPvHYzfqxBa8cfL0Rwx16/Yu6PdpiNBuwJOHRP9Aon87JK\nOW9n0G1FOF1QrHQFC8FWMu8iIKGsczxbgsNihNUkv75Qp8i+EimlZQC/AeC7EET9nymlbxJCPk0I\neY942L8nhLxJCDkJ4N8D+JDcz+2EAYluH6WnXlvF3RSy/FlzDMXFXz+f/0Yqj3ypqqnlbzQQ3L0v\ngOcXIqrWwVlP5HExnMG9s9r4+xl6R/xUqxShlDLZvYxBtxWlCpWUud+IWKYIo4HAY1POzcvCxLtZ\nm4grHG7aCYqYIZTSb1NK91NK91FK/6u47fcppU+Kv/82pfRGSumtlNIHKaXnlPjcdkippR/LKFfX\npzYOpd0+tQgKZS0qPaN9LosLkzMaij8A3D0bxGoijysqtnZkzWOU7NfbCTODLlyJZnRr0RnPFlGu\n0lrDICUYdCubkxLPljDgMCvq5vXYTDAbSS1svKNxZIo1ndCKHZ3hy9w+3Vjc0bRydX0YWw8hZayV\nSFpYlPbYlbNWhtw2RHTs5Xs5Koi/lpY/gJo1rmZ3r+cvRuB3WnBoxKPaZzRiOuBAqUKxupnT9HMZ\nW+0blTNS2DqXUuKvdIIXICTZBZxWRLoYo/AQ6kPLv1exmY1wWIwdi67SdX0YSnfzYmGeSlorQx4r\nqnQr1FVrrkQysJoMGFVQKDphOuDAmIqtHSmleH4hgrv2BWDQqEMTY4+YL7GoU8P6kEruSUC54m6x\njDruloDL0p3l369un16mm+xaNer6AIDdYoTVZFBswTecLiCo4A0FbN1Uerl+LkcymA44NRdIQgju\nng3ihUtRVWY9F8MZbCQLmvv7ASHiBwAWY/os+rICbIou+IquTuXcPsqv8QGC3z/ajc8/U1Q04qgT\ndr74O80du31q2b0Ku30AacWemiH07lX2gmWFt/Sq7imEeSrbsL1T7p0NYjNbwplV5Vs7shmFms1b\nmjHiscFiMuhm+dcCExRc8PXYTbAYDcpa/iqIf9BlQaTDUM9ypYpkvqxqpddG7Hzx76KoWkR0eahh\nCfgcFsUqeyqZ3cuoTad1sPwrVYqlWBZ7gy7NPxvYSrx6XoXWjs8vRDDpt2MqoP2DzWAgmPI7sBjV\nx/IPJfPw2EywKdAekUEIUSzRq1qliGdLis/0ASDosiKa6SwklTWc0jLBC9gF4t+N6KpR14ch1PeR\n7/apVCliGeXq+jC2irtpH+65Es+hVKHYq5PlP+SxYf+wS3G/f7lSxQuXorpY/YzpgENXn7+Si72M\noELin8yXUKlSVSz/gNOCfKmKTLF9aZmtXAPu9lGUbkSXuWWUTvICpHf32Q5rjqG05W8zG+G1m3VJ\n9GKRPnpZ/oDQ2P2VK7GuinG14/RqEql8Gffo4O9nTPmdWIxmdennu5HMK7rYy1AqyzdWq+CrvOgy\n13Enfv+4DnV9gF0h/hYkciWUO6irE8kUFK/rszUOZSp7RlLCeygt/uw99VjwvRJhYZ76WP6A4PfP\nl6p4bSmu2HvW4vs1qufTiOmgA7lSRZfSHUrX9WEoVdxtS/yVv5eYAdmJ3z+mQhn5Ttjx4s+iYjpZ\nbFWjrg+DPYSqMiNK2EKXGuKvV5bvYjQLh8WouCurG+6c8cNoIIpW+fzxfAQHR9yqBBB0ypSfRfxo\n6/qhVMzuVclIiWaKHRl0raiJrgoWd9DZueXPHmRBja+TnS/+4tO0k+iAmAp1fRg+hwVVKvgZ5aBG\ndi9Dr/o+S7EsJgccqvbtbYfbZsYtE17FFn1T+RKOL8bwwIEhRd5PKtM6xfonciUUy8pVnq1n0G0F\npd3VzmlETfxVuOdrxd06GCObzXPLX2GY5d9Jhb1IuqCalcb8inIvWCb+QbfyF8qQx4ZwSrmiWZ2y\nHM9i0q+fy4dx72wQJ69uyn5AA4LLp1ShePCA/Oq0chgfsMNoIJpH/KiR3ctgYc5yDRXWZF0Nyz/Q\nRSZyNFOA165cz4NO2fni30WRJbWmqcBW1UC5ET/hVAFOixEOi/LrEkNuKwplIeZYKygVwjynekD8\n794XRJUCL12S39rxmXNhuG0m3LZHmxLOzTAbDRj32TW3/NnakZJ1fRhsNiHX7x/PFGEzG2C3KF9J\n02oywucwd+RGjaQLipVn74ZdIP5s4aX1hVKtCt2xlGg03YitCqMyLf+08jH+jK2iWdr5/aOZIrLF\nCib96nfvasdte3xCa8d5eY2EKKV45nwI988NwqxRY5pW7AloH+vPRE8dy1+ZLN9opoiACou9jGG3\nDRsdBFBEUkXN/f3ALhB/l9UEi8nQdtU9JlYgVDIVvR6/hO4+jQin8qqJvx69fK+KC5G9YPlbTUbc\nvS+I758LyXJ9nVlLIpQq4AGdXT6MPQGH5gu+TPTUmEkzl6fcLF+1K2kOeTpbQxMsfy7+ikMIwaCr\nfWjYVh0Sldw+4kUmt76PGtm9DJaGr+Wi71IPiT8APHRoGMvxHM5vpCS/xw/PCzOHt/aK+Pud2MyW\nkFCotlQnhFJ5OC1GVZrVOywmuKwm2ZZ/LFNUJcyTMei2Ipzkbh9d6aTOhpoLVADgtppgMhDZsf6R\ndFG1kEg9snyZ5T8x0CviL0TnPPXmhuT3eOZcCDePe1WbRXbLlA4F3tSK8WcoUeIhli3Cr2JW7bDH\nhlCq0DK8u1CuIJkvc8tfLQKu9rW1Qypb/oQQ+LqoMNqIQrmCRK6kmuXvtppgMxs0dfssxbIYdFtV\nWXSTwpDHhsOTPjx1Vpr4xzNFvLYUx4MH9Q3xrIeFe6rZsGY74aR6M1RAmSxfIa9HvTEOua0oV2nL\nez6qYjHJduwK8Q+6LG3r1DPBU7IC4Xb8TrMsnz+bvah1UxFCMOS2aVrZ82os1zMuH8bDNwzj1HIC\n64nuZ0BPndlAlW7NIHoBtph+VUO//0Yqr9osGtjq5SuVfKmCTLGiSmkHBpv5tHKjMvHnbh+VCLqs\niKaLLadfoVQBPodZ1QbKfqelo3yDZrDZiZpTxCGNSzz0SphnPQ/fMAwAeFqC9f+tN9YwMWDHzeNe\npYclGYfFhKDLqpn4U0oRSqoXNg3Id/uwtTc1irox2P9/o4Xfv5bdq+K5asauEf9ytXXTZ7WKUNUT\ncFllWf7MglDTlypEKGjj8y9VqlhL5DA5oH+YZz1zQy7sCTjw1JnuxH8zW8TzCxH81M2jumYrN2LK\nb68trqtNulBGrlRRLWwaEMQ/lS9LLsTHPAFqVPBl1KLnWjykauVauNtHHQIdxPqrvUAFCBdaN63d\ntqNGW7ztDLltmkX7rG7mUKXoiezeegghePjQMF64GO0q2/epMxsoVynedfOoiqOTxpTfoZn4b12n\n6t1PnebvNCOeUb+SZi16rgPLX62yMq3YFeI/Ior6eosvIZRUL36e4XcKxd1KEgtShZJ5GIi6i0Ny\nLapu6LUwz3redcsoipUqvtdF1M+3RZfPLRO94/JhTPkdWN3MSb72ukHtsGmgPiFRmvjXLH8VRddm\nNsJjM7U0pjYSebhtJlUy9tuxK8R/zCe4FdY2G4t/pUo1s/wBSK7rH0oKySBGFfvcatnLl4l/r1n+\nAHBk0oeJATu+cXK1o+MTuRJ+vBDBu3rQ5QMI57hKhdmW2qjRvnE7crN82T2odg39Ea8Nay0CB1YT\neYx59XF77grxH/bYQAiwmmh84W8k8yhXKSZU9j2zsDKprp9QKq/qDQVoG+u/FMvCYjSo/tCVAiEE\nP33rGH68EOmoLO9TZzZQqvSmywfYesBejakv/luRc+pG+wDSs3xjmSIIgep9c8d9dqzEm5/ztUQO\nI159rv9dIf4WkwFBl7Wp5b8iWkPjPnXFn00xpS76biQLGFY5cYj5abVo/rEcy2FCrDrZizx6eAyV\nKsXXTrS3/v/na8uY9Ntxaw+6fIAt15oWfv9QKg+b2QC3Ctm9jG6qZjYili3CZzerfu1NDDhq+tKI\ntc08xnxc/FVlzGtravkvx7XJMmVuH+mWf0F1y1/LEg9LsSwmetDlwzg44sGtE178y/GrLWv9LEWz\nOHYxip97y2RPunwAYfZrMRo0Ef+NZAFDbpuq58JsNMDvtMhw+5RUDfNkjA/YkciVGgYO5EsVRDNF\njHK3j7qMeu1NfW9sWqa+20e0/CVMVcuVKqKZAgZVtvz9DgtMBqKZ22eqB6p5tuLnbp/EufUUTi4n\nmh7zxKtXYSDAB45OaDiy7jAaCCYG7JrE+odS6odNA/KyfKOZgqphngymKY1cPyyJcJS7fdRl1GfD\n2mauoQW3HM8h6LLAZla3xIDPYQEh0iz/SLoISqFq7DQAGAwEQZf6iV6JXAmJXKknI33q+elbx+Cw\nGPHFF6403F8oV/Cll6/irfsHdbPgOmVSo3BPLYInAHm9fOOZkiYN05k3oZH4M0/EmMru5mbsGvEf\n89qRKVYaNipZ2cxhXIPCYkYDwYBDWqx/rT66BsXCOi1FKwdmgU72SEG3ZnhsZvzc0Ul84+Rqw3jt\nJ0+sIpIu4CP3zugwuu7QKtZf7bo+DDklHqIqtmyth60jMtdyPWwNklv+KjMqLqqsNfD7L8dzmNDo\n6RtwWhCTUOIhpGJ99O1o0cv3ag+HeW7nw/dMo1yl+NzzV67ZXq1SfPa5yzg44sY9swF9BtcFk357\nbcalFtliGalCWfW1KWCrxEO3vRcoFYqtaWH5B10WWE2Ghou+TIv62udPCHmEEHKeELJACPlUg/1W\nQshXxP0vEUKmlfjcbmAneHvET7VKsbKZU93fz/A7LZKifTZEy1+b6bRN9W5etQSvQO+L/56AE+++\nZQyfP3b5mjotXzuxgvMbKXz8gX09u9Bbz1Qt3FM963/LSNHgOnVZkS9VkSp013Y0mSujUqWaNEwn\nRFhrWW7o9sljwGHWraKtbPEnhBgBfAbAOwHcAOAXCCE3bDvsIwDilNJZAH8C4I/kfm63MHG/um36\nFUkXUCxXMa6R+Ac7aCzTiFCyAEK0qf436LYimimirGI26NV4Fj6HGR6belUVleQ/vv0AKlWK//e7\n5wEAmUIZ/9/3LuDmcS9++pYxnUfXGZNaiH+t/pQGM1SPtIRElt2rhfgDwPiAo6H4X41lNdOdRihh\n+d8BYIFSeolSWgTwZQCPbjvmUQBfEH9/AsBPEo1NpSG3FW6rCQuh9DXbF8LC36zmudpI9VOGUkJ0\ngkmDnrBDbisolR6S2glLsVzP+/vrmQo48NH7ZvDEq8v4hxcX8Z//9RTWEjn83rtvgKFH8xS2M6lB\nrP9WaQcN1qbEz2hVNbMRYQ1qD9WzN+DApXD6uqrCF0NpzA66NBlDI5RQknEAV+v+Xha3NTyGUloG\nkACgqZOUEILZYRcubGvPd35d+PvgiFuTcQRdFkm1c0LJvGYXqxYlHq72YCnndvzWw/txx7Qfv/u1\n0/jmqTX8h3ccwB17/XoPq2M8NjMGHGZVxV+L4oMMlhnbtfjXyihrY/kfGPEgU6xc4/dP5UtYTeQx\nN6yN7jRC+2pCLSCEfAzAxwBgampK8fffP+TG989dW6jr/HoKfqdFk+gE4NqCVN0sdmqR4MUYqjWh\nyANQPmO1UqVYiefwjhtHFH9vNTEbDfjch2/HsxfCcNtMuHc2qPeQukbtiJ9QKg+L0QCfiu0RGVv1\n8rszUlhXP63KKB8QDctz66naPc88EHND/W35rwCYrPt7QtzW8BhCiAmCokS3vxGl9HFK6VFK6dHB\nQeWbX88NuxBJF69ZcD23nsKBYbdmC3ZM/Lv1+4dSedVLOzBqlr9KET8byTyKlWqtw1Q/4bKa8K6b\nR3Hf3GBfLPJuZ9LvUNXnz8I8tTg3TqsJbqtJkuXPwq61gIn/+fVkbdu8KP77dbT8lRD/VwDMEUL2\nEkIsAB4D8OS2Y54E8EHx9w8A+AHtNj5LAWbFpyx76larFBc2UrUvRwukVCOsVCnCGlr+rFOYWm6f\nXi7lvNOZ9Au1ZiotutrJYUOD4oP1DHttknz+QZdFs7Ual9WEiQE7zq1vuZwXQmlYTQZdQ51li7/o\nw/8NAN8FcBbAP1NK3ySEfJoQ8h7xsL8FECCELAD4LQDXhYNqAXvKMr//cjyHbLGimb8f2PIzdrPo\nG80UUKXa+FEBoRCe32lRrcQDF3/9mPI7UKrQlr0t5KB2+8btDHusXYt/JF1UtRVqIw6OuGvri4Cg\nQfsGXboWNVTE508p/TaAb2/b9vt1v+cB/KwSnyWHUa8NbqsJb64KdVrYv1pa/gGxrHMk1XkkjRYl\ncrczJLNHaiuWY1kYiH5p7buZWnXPaFaVKrYbyTzu2qddLMew24aXLse6ek04pU0Gcj0HRtx45nwY\n2WIZNpMRZ1aTuFvD89SIXZPhCwgRP/ftD+LpsyFUqhTfO7MBr92MG8e0K8NrMRkw4DAjnO7cWtkq\n7aDdBTuoYpbvUiyLUa8dZg3CVjnXomaiV04sn6Jlf4Yhjw2hVP66MMpWhFMFzXvm3jMbRKVK8cy5\nME4ubyKUKuD+/cqva3bDrrv73nnTKMKpAo5djOCpMxt45MYRWEzanoZgl9UI9bD8B1W0/Jf6MMxz\npzDqtcFoIKpE/DBX0oiG1+mIx4pSRSjX0AnVKkUkXUBQY8v/zr0BDLqt+OapVXzn9DrMRoKfPDSs\n6Ri2s+vE/8GDQ7CYDPjdr51GulDGu2/VvvOSUI2wC7ePxqFpgJAAI6VuSidcjef6MtJnJ2AyGjDu\ns6si/lu1arQT/+EO+nPXk8iVUK5SzS1/o4HgXTeN4AfnQvj6iRXcMxuE165vdvuuE3+X1YT3HR7H\nYjSLvUEn7prR3u/WrVW9nswj4LRoOkMZcltRrFSxmVW2CFiuWEE4VeCWv45M+tURf7bwOqyl+HeZ\n6MUCLbT2+QPAzx6dBKXCgvPPH51s/wKV6akkL634ow/cgj94/80AoEtqPmtCQSntKB56bTNXq0qq\nFfUdvZTseMRqK/VDNc+dypTfgafObLQ/sEvWE4Kwaun2Yc3PV5u0aN0OM7r0EP+bxr04938/AkLQ\nEzkiu87yZxgMRLeaLEMeK3KlSsfVCFc385qXfWWlJJQO91yKcvHXm0m/A5F0EZkuq2G2YyOZh9tq\nglPF3r3bGXRbYTIQrLbok1sPmyHoIf6AoDu9IPzALhZ/PRkRhXyjSVvJ7awmcqo3l9+OWvV9FkV3\nwx4u/rpRi/hp0GBEDmuJnKYuH0DwpQ97bE1btG6HrQ3o1UCll+DirwPswuvkgk3lS0jly5pfrLUa\nRBI7JTXjaiwLl9WkWTldzvXUx/oryXqyoIuojvvsDZulNGI9kYfXbobDsis93tfAxV8HmE90vQPx\nZw8IrROinFYTnBaj8pZ/NINJv6Nnpr67kSmVSjtvJPKaxvgzRn22jt0+a4k8t/pFuPjrALtBOrH8\nmUUzpvGCL7CVQKMkS7Esd/nojNduhttqUjTRq1KlCKcLmi72MsZ8dmwk8x3VK1pP5GuloHc7XPx1\nwGIyIOiyYj3Z3lpZrYm/9nHxSmf5VqsUV+M57OmD1o07GUIIJhUu7RxJF1CpUs19/gAw5rWhVKEd\nVcrllv8WXPx1YtTb2SLV2mYeRgPRrJFLPaMSKia2Yj2ZR7Fc5ZE+PcCU34GrDVoLSoVdy3pZ/gDa\nun6K5Soi6QJGPDzBEODirxsjXltHPv/VzRxGPDZdqv+NiA8opbJ8maXJLX/9mQoIdf27qYnTCnYt\n62FVb4l/6/tpg0f6XAMXf50Y6TA8bWUzp9vFOuqxoViuXtP8Rg4suoRn9+rPpN+BQrmqWDRXLbtX\nD8vf25nlv65DBnIvw8VfJ0a8NiRyJWSLrRNt9Ox1y/IROo2hbsdSLAujgfBSzj2A0hE/68k8zEaC\ngA4hvF6HGR6bqe3/ZU3H2UkvwsVfJ9gF2Mr1ky9VsJbMY0onN0k3+QidsBgTasjzUs76o3Ss/0Yi\njyG3Tbes+T0BZy2BsBnrYuE5Hu0jwO9CnWAZu8stFt2W41lQCkwHnFoN6xpYPSF208iFl3LuHcZ8\nNhCinOW/lshjWMP2jduZCjiwFM20PGY5noPbJvT95XDx1409oqAvtrhgF5mPXCfLP+gU6qYo5vaJ\nZnT7v3CuxWoyYtRjU6zEw0ZS3/j5PX4HluM5lCvVpsdciWaxJ8ATDBlc/HViyG2FzWyoCXwj2D69\nkqIMXdZNaUUyX0I8W+KWfw8x6XcokuhFqdATWM8QyumAE+UqbRnxsxTNYI9fn1l0L8LFXycMBoIp\nv6Oln3IxmoFb5zo4Qj6CfLfPks4PMs71TCmU6JUqlJEtVjDi1dftAwCLscYz6XKlimWeYHgNXPx1\nZMrvbO32iWUxpfM0tdN8hHYwkeFun95hyu/ARrKAfKki631YdVo9wjwZTNSbzaTXEnmUq5SLfx1c\n/HVkT0CwvJolUS2JPko9GfXasKpAoldN/Lnl3zOwB/GyTL+/ntm9jGG3DRaToelMprZ+xt0+Nbj4\n68h0wIF8qdqwfk6xXMXVeFa3SB/GuM8upsXLS/RajGbhd1rgtunbt5SzxcRAa2u5U1jxwfEB/Xz+\nBgPBdMCBS+F0w/3MHaS3MdVLcPHXkalaxM/1N9+lSBqlCsWBEbfWw7qGcVEgOq2X3ozLkTSm+Y3X\nU+wNCtff5UjrEMl2rMRzMBqIrpY/ABwY8eDceqrhvqVoFhaTQfcx9hJc/HWEieHlyPXWyrk14SI+\nNOrRdEzbYfkIKzKLgF0KZzAz6FJiSByF8Dst8DnMuCRX/MX6Uyadk/cOjrixHM8hmS9dt+9yJIPJ\nAbtuSWi9CBd/HZkccMBhMeLs2vXWytn1JCxGQ8060ws2lZfjF07lSwilCpgZ5P7WXmMm6GzqKumU\n5XhWV5cP49CoMEu+0MD6P7OWxEGdDaleg4u/jhgMBDeMevDmauK6fefWUpgdculeCsFrN8NtM8ly\n+zC3wkyQW/69xsygC5fC8t0+Ez1Qr+ngiCDuZ7eJ/2a2iOV4DjeNefUYVs/CxV9nbhzz4Mxq8rrS\nuufWkzg4qq+/nzHus8ty+zBx2cct/55jZtCJUKqAVANXSSeUKlWsJ/M9YfmPem3w2Ew4t5a8ZvuZ\nVeHvG8e45V8PF3+duXHMi0yxgit18f6xTBEbyQIOjfTGxTox0HmD7EZcCqdhIDzGvxdhszGpi77r\niTyqdGttSE8IITg46sHZbeJ/WpxZc/G/Fi7+OnPjuHBBnl7dumBfvhwFANw66dNlTNthlr/UWP+L\nEaFpu9VkVHhkHLmw2ZhU108vhHnWc2TShzdWEteUSj+9ksSY14aAS78M5F5ElvgTQvyEkKcIIfPi\nvwNNjqsQQk6IP0/K+cydxtyQGxajAW8sb9a2/ehCBC6rCUemekP8JwYcSBXKSOZa9x5oxqVwBjM6\nL1xzGjMVcMBAIHnRl1WlZTkDenPf3CBKFYoXL0Vr295YSeAG7u+/DrmW/6cAfJ9SOgfg++LfjchR\nSg+LP++R+Zk7CovJgDtn/PjemQ1QSkEpxbMXwrhrX0D3xV7GhGjVSakAWa1SXI6keZhnj2I1GTHp\nd+CiRLfPcjwLQnqnQcrR6QHYzAY8eyECAJjfSOFyJIN7ZwM6j6z3kKsujwL4gvj7FwC8V+b77Up+\n6uZRLEazOL2SxJVoFiubOdy/f1DvYdVgvnopRcDWknnkS1XdQ1Y5zdkbdEp2+yxFsxj12GAz94ZL\nz2Y24s69ATw3HwYAfPPUGggB3nXzqM4j6z3kiv8wpXRN/H0dwHCT42yEkOOEkBcJIfwBsY133DgC\nk4Hg6ydW8Nc/uggDAR7oIfFnvQeutGmW0QjmTuAx/r3LTNCFy5G0pGbuV6KZ2vXRKzx0aAgXwxn8\n2+l1fPPUKu7c68cQz+y9jrYtbQghTwMYabDrd+r/oJRSQkizq2cPpXSFEDID4AeEkDcopRcbfNbH\nAHwMAKamptoOfqcw4LTg4RuG8dkfXwYA/OpbZzDZQwXQXFYTgi4LFiPdW/5bYZ7c7dOrzAw6kS9V\nsZbMdx21sxjN4uEbmtl8+vDzt0/hH19awsf/8VVQCnz8gVm9h9STtBV/SulDzfYRQjYIIaOU0jVC\nyCiAUJP3WBH/vUQI+SGAIwCuE39K6eMAHgeAo0ePyisj2Wf8yc8fxpjvPC5spPCbD+3XezjXIfRI\nlUp/cS8AAAwvSURBVGb5Oy1GDLl5pEWvMlOL+El3Jf6pfAnRTLHnLH+LyYA//tlb8dv/8w185N69\nePTwmN5D6knkNrN8EsAHAfyh+O/Xtx8gRgBlKaUFQkgQwD0A/pvMz91x2MxG/N67b9B7GE3ZE3Dg\nhYvR9gdu41JEqOnDW+f1LmxWdimcwX1znbsbWUHCXizYd9O4F9/4xL16D6Onkevz/0MADxNC5gE8\nJP4NQshRQshnxWMOAThOCDkJ4BkAf0gpPSPzczkas8fvxFoi33XjD6GgW29ZhpxrGXJb4bQYuw73\n1LvHNEcesix/SmkUwE822H4cwEfF348BuFnO53D0Zzoo3OBXY1nMDXdWdiJbLGNlM4efC06qOTSO\nTAgh2DfkwsUuI362auTzh3s/0huB5Jyeh3Xg6qYMwIUNwZLslRpFnOYcGHY3rYXfjMVIFkGXBS6r\nXO8xRw+4+HM6giVpdVP7nRXY6pUaRZzmHBz1IJIuINygq1wzLobTvFJrH8PFn9MRXrsZwx4rLmx0\nbh2eW0/BaTHWMoQ5vcshsWPc+Q6tf0op5kNpzA1z8e9XuPhzOmZuyI2FUOeLgmfXkjgw4ubdk/oA\n1i703HqyzZEC4XQBiVwJc0Nc/PsVLv6cjpkdcmEh1FkmKKUU59ZTvHtSnxBwWTHktjbsKteIeXE9\np9PFf07vwcWf0zH7h93IFisd1fZfT+aRyJVq7gRO79OoFn4z5kX3H3f79C9c/Dkdw270Tlw/p1fE\nxV5u+fcNh0bdmA+lUCi3z+WYD6XhtZsxyGvk9y1c/Dkdw/y786H2roGTVzdhNBDcyOuo9w2HJ3wo\nVWhHrp/5UBpzQzxzu5/h4s/pGJ/DghGPrdYTtRUnlzdxYNgNu6U3Sv1y2sM6x528utnyuGqV1hbz\nOf0LF39OV9w84cWp5UTLYyilOHl1s2faUHI6Y9Rrw6Db2lb8r0QzSOXLuHWCf7/9DBd/TlfcOuHF\npUgGiVyp6TFXolkk82UcnuQun36CEIJbJ3w4sdxa/E+K+2/h329fw8Wf0xW3iNbe6ZXm1v+Jq/Fr\njuX0D4cnvbgUziCRbf5wP3k1AZvZgFneo6Gv4eLP6YpbJgRr72QL6/CFi1F4bCbs5zHgfcfRaT8A\n4KXLzct3n1rexE1jXph6pMc0Rxr82+N0hc9hwZ6Ao6lfmFKK5xeiuHtfEEae2dt3HJnywW424vmF\nSMP9pUoVb64m+axuB8DFn9M1d0z78eKlGMqV6nX7FsUG9PfMBnQYGUcuVpMRt+/14/kmjXteXYyj\nUK7ijr0DGo+MozRc/Dld89YDg0jkSjjZIOrn+YuCxXjPbFDrYXEU4t7ZABZCaWwk89ft+9GFMEwG\ngrv599v3cPHndM29s0EYiCAE23n6zAbGfXbsDfIGH/0Ka+X49NmN6/b96HwYt+0ZgMdm1npYHIXh\n4s/pGp/DgsOTPvzofOia7eFUAc/OR/Cew2M887OPOTjixtyQC199beWa7aFkHmfWknjgQOd9fjm9\nCxd/jiTefuMITi4nrikB/I2Tq6hUKd5/ZFzHkXHkQgjB+2+bwPHFOBajW817/uXVZQDAw4eG9Roa\nR0G4+HMk8djtk7Cbjfjb5y4DAArlCv7hxUXcPO7lZX53AO89MgZCgL97/goA4fv9/LEruG8uyL/f\nHQIXf44kfA4LPvCWCXz9xCpeXYzjMz9YwKVIBr/19v16D42jAKNeO37xzil88YUreG0pjr/84UWE\nUwV89L4ZvYfGUQjeeZkjmU+8bRbPzYfxM395DADwnlvH8OCBIZ1HxVGK//TIQTx1ZgPv/4ut7/f+\nOR7ls1MglLbvyqQHR48epcePH9d7GJw2hFMF/OnTF3DLhBePHh6HzcyreO4k1hI5/PMryyAE+PUH\nZ3niXh9ACHmVUnq07XFc/DkcDmfn0Kn4c58/h8Ph7EK4+HM4HM4uhIs/h8Ph7EK4+HM4HM4uhIs/\nh8Ph7EK4+HM4HM4uhIs/h8Ph7EK4+HM4HM4upGeTvAghYQCLMt4iCKBxLzp94ePqDj6u7uDj6o6d\nOK49lNK2dbd7VvzlQgg53kmWm9bwcXUHH1d38HF1x24eF3f7cDgczi6Eiz+Hw+HsQnay+D+u9wCa\nwMfVHXxc3cHH1R27dlw71ufP4XA4nObsZMufw+FwOE3oa/EnhPwsIeRNQkiVENJ0ZZwQ8ggh5Dwh\nZIEQ8qm67XsJIS+J279CCLEoNC4/IeQpQsi8+O9Ag2MeJIScqPvJE0LeK+77PCHkct2+w1qNSzyu\nUvfZT9Zt1/N8HSaEvCB+36cIIT9ft0+x89XsWqnbbxX/7wviuZiu2/fb4vbzhJB3SB2DxHH9FiHk\njHhuvk8I2VO3r+H3qeHYPkQICdeN4aN1+z4ofu/zhJAPajimP6kbzwVCyGbdPtXOFyHkc4SQECHk\ndJP9hBDy38VxnyKE3Fa3T9lzRSnt2x8AhwAcAPBDAEebHGMEcBHADAALgJMAbhD3/TOAx8Tf/wrA\nxxUa138D8Cnx908B+KM2x/sBxAA4xL8/D+ADKpyvjsYFIN1ku27nC8B+AHPi72MA1gD4lDxfra6V\numP+HYC/En9/DMBXxN9vEI+3Atgrvo9RofPTybgerLt+Ps7G1er71HBsHwLw5w1e6wdwSfx3QPx9\nQIsxbTv+EwA+p9H5uh/AbQBON9n/LgDfAUAA/ASAl9Q6V31t+VNKz1JKz7c57A4AC5TSS5TSIoAv\nA3iUEEIAvA3AE+JxXwDwXoWG9qj4fp2+7wcAfIdSmlXo85vR7bhq6H2+KKUXKKXz4u+rAEIA2iay\ndEnDa6XFWJ8A8JPiuXkUwJcppQVK6WUAC+L7aTIuSukzddfPiwAmFPps2WNrwTsAPEUpjVFK4wCe\nAvCIDmP6BQD/pMDntoVS+iwEQ68ZjwL4IhV4EYCPEDIKFc5VX4t/h4wDuFr397K4LQBgk1Ja3rZd\nCYYppWvi7+sAhtsc/xiuv/j+qzjt+xNCiFXjcdkIIccJIS8yVxR66HwRQu6AYNFdrNusxPlqdq00\nPEY8FwkI56aT10ql2/f+CATrkdHo+1SKTsf2M+L38wQhZLLL16o1Jojusb0AflC3Wc3z1Y5mY1f8\nXJnkvFgLCCFPAxhpsOt3KKVf13o8jFbjqv+DUkoJIU1DqsSn+s0Avlu3+bchiKAFQsjXfwbwaQ3H\ntYdSukIImQHwA0LIGxBETjIKn6+/B/BBSmlV3Cz5fO00CCG/BOAogLfWbb7u+6SUXmz8DqrwDQD/\nRCktEEJ+FcLM6W0afn4rHgPwBKW0UrdN7/OlCT0v/pTSh2S+xQqAybq/J8RtUQhTKpNowbHtssdF\nCNkghIxSStdEsQq1eKufA/BVSmmp7r2ZFVwghPwdgP+g5bgopSviv5cIIT8EcATAv0Ln80UI8QD4\nFoQH/4t17y35fG2j2bXS6JhlQogJgBfCtdTJa6XS0XsTQh6C8DB9K6W0wLY3+T6VErO2Y6OURuv+\n/CyENR722ge2vfaHWoypjscA/Hr9BpXPVzuajV3xc7Ub3D6vAJgjQqSKBcKX/SQVVlGegeBvB4AP\nAlBqJvGk+H6dvO91/kZRAJmf/b0AGkYGqDEuQsgAc5sQQoIA7gFwRu/zJX53X4XgD31i2z6lzlfD\na6XFWD8A4AfiuXkSwGNEiAbaC2AOwMsSx9H1uAghRwD8NYD3UEpDddsbfp8KjavTsY3W/fkeAGfF\n378L4O3iGAcAvB3XzoBVG5M4roMQFk9fqNum9vlqx5MAflmM+vkJAAnRuFH+XCm9mq3lD4D3QfB9\nFQBsAPiuuH0MwLfrjnsXgAsQnt6/U7d9BsINugDgXwBYFRpXAMD3AcwDeBqAX9x+FMBn646bhvBE\nN2x7/Q8AvAFBxP4BgEurcQG4W/zsk+K/H+mF8wXglwCUAJyo+zms9PlqdK1AcCG9R/zdJv7fF8Rz\nMVP32t8RX3cewDsVvtbbjetp8R5g5+bJdt+nhmP7AwBvimN4BsDButf+inguFwB8WKsxiX//nwD+\ncNvrVD1fEAy9NfFaXoawPvNrAH5N3E8AfEYc9xuoi2JU+lzxDF8Oh8PZhewGtw+Hw+FwtsHFn8Ph\ncHYhXPw5HA5nF8LFn8PhcHYhXPw5HA5nF8LFn8PhcHYhXPw5HA5nF8LFn8PhcHYh/z90kKqzf7Y/\nbQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "plt.plot(x, y);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Generate the design matrix $X \\in \\RR^{n \\times (d+1)}$ where each row is $(x,1) \\in \\RR^{d+1}$. The 1 is append to capture the bias in a seamless way." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "X = np.hstack(( MakeCol(x), np.ones((n,1)) ))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Multi-Layer Perceptron\n", "--------------------\n", "\n", "We consider approximation of the data using functions of the form\n", "$$ f_{A,c}(x) \\eqdef \\sum_{k=1}^q c_k \\phi( \\dotp{x}{a_k} )$$\n", "where $\\phi: \\RR \\rightarrow \\RR$ is a non-linear activation function, $q>0$ is the number of neurons, $a_k \\in \\RR^{d+1}$ are the neurons parameters, and $c_k \\in \\RR$ the neurons weights. We store these neurons in a matrix $A \\in \\RR^{(d+1) \\times q}$ where each column is a neuron. " ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Load the activation function. Here we use an atan sigmoid function." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def phi(x): return 1/(1+np.exp(-x))\n", "def phiD(x): return np.exp(-x)/(1+np.exp(-x))**2" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Display the activation." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "t = np.linspace(-5,5,201)\n", "plt.clf\n", "plt.plot(t, phi(t))\n", "plt.plot(t, phiD(t)/np.max(phiD(t)))\n", "plt.axis('tight');" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Using matrix/vector notation, one can re-write the functions as\n", "$$ \\Phi(A,c) \\eqdef (f_{A,c}(x_i))_{i=1}^n = \\phi(XA)c $$\n", "where here $\\phi$ is applied component-wise." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "def Phi(A,c): return phi(X.dot(A)).dot(c)\n", "def PhiD(A,c): return phiD(X.dot(A)).dot(c);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The function to be minimized for regression is a simple least square\n", "$$ \\umin{A,c} \\Ee(A,c) \\eqdef \\frac{1}{2}\\sum_{i=1}^n ( f_{A,c}(x_i)-y_i )^2 = \\frac{1}{2}\\norm{ \\phi(XA)c-y }^2.$$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def E(A,c): return 1/(2*n)*np.linalg.norm(Phi(A,c)-y)**2" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The function $\\Ee$ is convex with respect to $c$, and it is a quadratic function, which gradient is easily computed as\n", "$$ \\nabla_c \\Ee(A,c) = \\phi(XA)^\\top ( \\phi(XA) c - y ) \\in \\RR^q$$" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "def R(A,c): return Phi(A,c)-y;\n", "def nablaEc(A,c): return 1/n * ( phi(X.dot(A)).transpose() ).dot( R(A,c) )" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$\\Ee$ is however non-convex with respect to $A$, and its gradient reads\n", "$$\n", " \\nabla_A \\Ee(A,c) = X^\\top (\n", " \\phi'(XA) \\odot (R c^\\top)\n", " ) \\in \\RR^{(q+1) \\times q}\n", " \\qwhereq\n", " R = \\phi(XA)c - y.\n", "$$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "def nablaEA(A,c): return 1/n * X.transpose().dot( phiD(X.dot(A)) * ( R(A,c).dot(c.transpose()) ) )" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Gradient Descent\n", "-------------------\n", "\n", "We first try vanilla gradient descent. Unfortunately, tuning the descent parameter is very hard, so this method is often not succesful. " ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Number $q$ of neurons." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "q=10;" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "deletable": true, "editable": true }, "source": [ "Implement a gradient descent, which reads\n", "$$ A^{(\\ell+1)} \\eqdef A^{(\\ell)} - \\tau_A \\nabla_A \\Ee(A^{(\\ell)}, c^{(\\ell)}) \\qandq\n", "c^{(\\ell+1)} \\eqdef c^{(\\ell)} - \\tau_c \\nabla_c \\Ee(A^{(\\ell)}, c^{(\\ell)}).$$\n", "where $(\\tau_A,\\tau_c)$ are two step size." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Initialize $A$ and $c$." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "q = 10 #\n", "A = np.random.randn(d+1,q)*10\n", "c = np.random.randn(q,1)/10" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Display initialization." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nyV8IIQrkF1DBIARQYQfeAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "plt.plot(x, y)\n", "plt.plot(x, Phi(A,c));" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Implement the gradient descent." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nKZj/D8Qmbg7yZBmaAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "q = 20\n", "A = np.random.randn(d+1,q)*10\n", "c = np.random.randn(q,1)/10\n", "niter = 2000\n", "Elist = np.zeros((niter,1))\n", "tauA = .2/2\n", "tauc = .2\n", "for it in np.arange(0,niter):\n", " Elist[it] = E(A,c)\n", " gA = nablaEA(A,c)\n", " gc = nablaEc(A,c)\n", " A = A - tauA*gA\n", " c = c - tauc*gc\n", "plt.clf\n", "plt.plot(np.sqrt(2*Elist))\n", "plt.title('$E(A^{(\\ell)}, c^{(\\ell)})$');" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Display the resulting fit." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "plt.plot(x, y)\n", "plt.plot(x, Phi(A,c));" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Quasi-Newton (BFGS) Solver\n", "--------------------" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Create callback functions." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def BFGSfunc(u): \n", " A = u[0:q*(d+1)].reshape((d+1),q)\n", " c = MakeCol( u[q*(d+1):] )\n", " return E(A,c); # 1/2*np.linalg.norm(c)**2\n", "def nablaBFGSfunc(u):\n", " A = u[0:q*(d+1)].reshape((d+1),q)\n", " c = MakeCol( u[q*(d+1):] )\n", " gc = nablaEc(A,c).flatten()\n", " gA = nablaEA(A,c).flatten()\n", " return np.concatenate((gA, gc), axis=0)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Initialization" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "A = np.random.randn(d+1,q)\n", "c = np.random.randn(q,1)\n", "u = np.concatenate((A.flatten(), c.flatten()), axis=0)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Run BFGS" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Warning: Maximum number of iterations has been exceeded.\n", " Current function value: 0.007018\n", " Iterations: 600\n", " Function evaluations: 645\n", " Gradient evaluations: 645\n" ] } ], "source": [ "from scipy.optimize import minimize\n", "res = minimize(BFGSfunc, u, method='BFGS', jac=nablaBFGSfunc, options={'gtol': 1e-6, 'disp': True, 'maxiter': 600});\n", "u = res.x\n", "A = u[0:q*(d+1)].reshape((d+1),q)\n", "c = MakeCol( u[q*(d+1):] )" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.clf\n", "plt.plot(x, y)\n", "plt.plot(x, Phi(A,c));" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**Exercise:** try with an increasing number of neurons." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.4.5" } }, "nbformat": 4, "nbformat_minor": 0 }