Files
FYS-STK4155/doc/LectureNotes/_build/jupyter_execute/chapter11.ipynb
T
Morten Hjorth-Jensen 4446c1be47 update book
2021-04-26 00:16:57 -04:00

3310 lines
402 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Solving Differential Equations with Deep Learning\n",
"\n",
"The Universal Approximation Theorem states that a neural network can\n",
"approximate any function at a single hidden layer along with one input\n",
"and output layer to any given precision. \n",
"\n",
"\n",
"An ordinary differential equation (ODE) is an equation involving functions having one variable.\n",
"\n",
"In general, an ordinary differential equation looks like"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"ode\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{ode} \\tag{1}\n",
"f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right) = 0\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $g(x)$ is the function to find, and $g^{(n)}(x)$ is the $n$-th derivative of $g(x)$.\n",
"\n",
"The $f\\left(x, g(x), g'(x), g''(x), \\, \\dots \\, , g^{(n)}(x)\\right)$ is just a way to write that there is an expression involving $x$ and $g(x), \\ g'(x), \\ g''(x), \\, \\dots \\, , \\text{ and } g^{(n)}(x)$ on the left side of the equality sign in ([1](#ode)).\n",
"The highest order of derivative, that is the value of $n$, determines to the order of the equation.\n",
"The equation is referred to as a $n$-th order ODE.\n",
"Along with ([1](#ode)), some additional conditions of the function $g(x)$ are typically given\n",
"for the solution to be unique.\n",
"\n",
"\n",
"\n",
"Let the trial solution $g_t(x)$ be"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto1\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
"\tg_t(x) = h_1(x) + h_2(x,N(x,P))\n",
"\\label{_auto1} \\tag{2}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $h_1(x)$ is a function that makes $g_t(x)$ satisfy a given set\n",
"of conditions, $N(x,P)$ a neural network with weights and biases\n",
"described by $P$ and $h_2(x, N(x,P))$ some expression involving the\n",
"neural network. The role of the function $h_2(x, N(x,P))$, is to\n",
"ensure that the output from $N(x,P)$ is zero when $g_t(x)$ is\n",
"evaluated at the values of $x$ where the given conditions must be\n",
"satisfied. The function $h_1(x)$ should alone make $g_t(x)$ satisfy\n",
"the conditions.\n",
"\n",
"But what about the network $N(x,P)$?\n",
"\n",
"\n",
"As described previously, an optimization method could be used to minimize the parameters of a neural network, that being its weights and biases, through backward propagation.\n",
"\n",
"\n",
"\n",
"For the minimization to be defined, we need to have a cost function at hand to minimize.\n",
"\n",
"It is given that $f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)$ should be equal to zero in ([1](#ode)).\n",
"We can choose to consider the mean squared error as the cost function for an input $x$.\n",
"Since we are looking at one input, the cost function is just $f$ squared.\n",
"The cost function $c\\left(x, P \\right)$ can therefore be expressed as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C\\left(x, P\\right) = \\big(f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)\\big)^2\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If $N$ inputs are given as a vector $\\boldsymbol{x}$ with elements $x_i$ for $i = 1,\\dots,N$,\n",
"the cost function becomes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"cost\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{cost} \\tag{3}\n",
"\tC\\left(\\boldsymbol{x}, P\\right) = \\frac{1}{N} \\sum_{i=1}^N \\big(f\\left(x_i, \\, g(x_i), \\, g'(x_i), \\, g''(x_i), \\, \\dots \\, , \\, g^{(n)}(x_i)\\right)\\big)^2\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The neural net should then find the parameters $P$ that minimizes the cost function in\n",
"([3](#cost)) for a set of $N$ training samples $x_i$.\n",
"\n",
"\n",
"\n",
"To perform the minimization using gradient descent, the gradient of $C\\left(\\boldsymbol{x}, P\\right)$ is needed.\n",
"It might happen so that finding an analytical expression of the gradient of $C(\\boldsymbol{x}, P)$ from ([3](#cost)) gets too messy, depending on which cost function one desires to use.\n",
"\n",
"Luckily, there exists libraries that makes the job for us through automatic differentiation.\n",
"Automatic differentiation is a method of finding the derivatives numerically with very high precision.\n",
"\n",
"\n",
"### Example: Exponential decay\n",
"\n",
"An exponential decay of a quantity $g(x)$ is described by the equation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"solve_expdec\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{solve_expdec} \\tag{4}\n",
" g'(x) = -\\gamma g(x)\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with $g(0) = g_0$ for some chosen initial value $g_0$.\n",
"\n",
"The analytical solution of ([4](#solve_expdec)) is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto2\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
" g(x) = g_0 \\exp\\left(-\\gamma x\\right)\n",
"\\label{_auto2} \\tag{5}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Having an analytical solution at hand, it is possible to use it to compare how well a neural network finds a solution of ([4](#solve_expdec)).\n",
"\n",
"\n",
"\n",
"The program will use a neural network to solve"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"solveode\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{solveode} \\tag{6}\n",
"g'(x) = -\\gamma g(x)\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $g(0) = g_0$ with $\\gamma$ and $g_0$ being some chosen values.\n",
"\n",
"In this example, $\\gamma = 2$ and $g_0 = 10$.\n",
"\n",
"\n",
"To begin with, a trial solution $g_t(t)$ must be chosen. A general trial solution for ordinary differential equations could be"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"g_t(x, P) = h_1(x) + h_2(x, N(x, P))\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with $h_1(x)$ ensuring that $g_t(x)$ satisfies some conditions and $h_2(x,N(x, P))$ an expression involving $x$ and the output from the neural network $N(x,P)$ with $P $ being the collection of the weights and biases for each layer. For now, it is assumed that the network consists of one input layer, one hidden layer, and one output layer.\n",
"\n",
"\n",
"\n",
"In this network, there are no weights and bias at the input layer, so $P = \\{ P_{\\text{hidden}}, P_{\\text{output}} \\}$.\n",
"If there are $N_{\\text{hidden} }$ neurons in the hidden layer, then $P_{\\text{hidden}}$ is a $N_{\\text{hidden} } \\times (1 + N_{\\text{input}})$ matrix, given that there are $N_{\\text{input}}$ neurons in the input layer.\n",
"\n",
"The first column in $P_{\\text{hidden} }$ represents the bias for each neuron in the hidden layer and the second column represents the weights for each neuron in the hidden layer from the input layer.\n",
"If there are $N_{\\text{output} }$ neurons in the output layer, then $P_{\\text{output}} $ is a $N_{\\text{output} } \\times (1 + N_{\\text{hidden} })$ matrix.\n",
"\n",
"Its first column represents the bias of each neuron and the remaining columns represents the weights to each neuron.\n",
"\n",
"It is given that $g(0) = g_0$. The trial solution must fulfill this condition to be a proper solution of ([6](#solveode)). A possible way to ensure that $g_t(0, P) = g_0$, is to let $F(N(x,P)) = x \\cdot N(x,P)$ and $A(x) = g_0$. This gives the following trial solution:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"trial\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{trial} \\tag{7}\n",
"g_t(x, P) = g_0 + x \\cdot N(x, P)\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Reformulating the problem\n",
"\n",
"We wish that our neural network manages to minimize a given cost function.\n",
"\n",
"A reformulation of out equation, ([6](#solveode)), must therefore be done,\n",
"such that it describes the problem a neural network can solve for.\n",
"\n",
"The neural network must find the set of weights and biases $P$ such that the trial solution in ([7](#trial)) satisfies ([6](#solveode)).\n",
"\n",
"The trial solution"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"g_t(x, P) = g_0 + x \\cdot N(x, P)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"has been chosen such that it already solves the condition $g(0) = g_0$. What remains, is to find $P$ such that"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"nnmin\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{nnmin} \\tag{8}\n",
"g_t'(x, P) = - \\gamma g_t(x, P)\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"is fulfilled as *best as possible*.\n",
"\n",
"\n",
"The left hand side and right hand side of ([8](#nnmin)) must be computed separately, and then the neural network must choose weights and biases, contained in $P$, such that the sides are equal as best as possible.\n",
"This means that the absolute or squared difference between the sides must be as close to zero, ideally equal to zero.\n",
"In this case, the difference squared shows to be an appropriate measurement of how erroneous the trial solution is with respect to $P$ of the neural network.\n",
"\n",
"This gives the following cost function our neural network must solve for:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\min_{P}\\Big\\{ \\big(g_t'(x, P) - ( -\\gamma g_t(x, P) \\big)^2 \\Big\\}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(the notation $\\min_{P}\\{ f(x, P) \\}$ means that we desire to find $P$ that yields the minimum of $f(x, P)$)\n",
"\n",
"or, in terms of weights and biases for the hidden and output layer in our network:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }}\\Big\\{ \\big(g_t'(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) - ( -\\gamma g_t(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) \\big)^2 \\Big\\}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"for an input value $x$.\n",
"\n",
"\n",
"\n",
"If the neural network evaluates $g_t(x, P)$ at more values for $x$, say $N$ values $x_i$ for $i = 1, \\dots, N$, then the *total* error to minimize becomes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"min\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{min} \\tag{9}\n",
"\\min_{P}\\Big\\{\\frac{1}{N} \\sum_{i=1}^N \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2 \\Big\\}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Letting $\\boldsymbol{x}$ be a vector with elements $x_i$ and $C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2$ denote the cost function, the minimization problem that our network must solve, becomes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\min_{P} C(\\boldsymbol{x}, P)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In terms of $P_{\\text{hidden} }$ and $P_{\\text{output} }$, this could also be expressed as\n",
"\n",
"$$\n",
"\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }} C(\\boldsymbol{x}, \\{P_{\\text{hidden} }, P_{\\text{output} }\\})\n",
"$$\n",
"\n",
"\n",
"For simplicity, it is assumed that the input is an array $\\boldsymbol{x} = (x_1, \\dots, x_N)$ with $N$ elements. It is at these points the neural network should find $P$ such that it fulfills ([9](#min)).\n",
"\n",
"First, the neural network must feed forward the inputs.\n",
"This means that $\\boldsymbol{x}s$ must be passed through an input layer, a hidden layer and a output layer. The input layer in this case, does not need to process the data any further.\n",
"The input layer will consist of $N_{\\text{input} }$ neurons, passing its element to each neuron in the hidden layer. The number of neurons in the hidden layer will be $N_{\\text{hidden} }$.\n",
"\n",
"\n",
"For the $i$-th in the hidden layer with weight $w_i^{\\text{hidden} }$ and bias $b_i^{\\text{hidden} }$, the weighting from the $j$-th neuron at the input layer is:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"z_{i,j}^{\\text{hidden}} &= b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_j \\\\\n",
"&=\n",
"\\begin{pmatrix}\n",
"b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"1 \\\\\n",
"x_j\n",
"\\end{pmatrix}\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result after weighting the inputs at the $i$-th hidden neuron can be written as a vector:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"\\boldsymbol{z}_{i}^{\\text{hidden}} &= \\Big( b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_1 , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_2, \\ \\dots \\, , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_N\\Big) \\\\\n",
"&=\n",
"\\begin{pmatrix}\n",
" b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"1 & 1 & \\dots & 1 \\\\\n",
"x_1 & x_2 & \\dots & x_N\n",
"\\end{pmatrix} \\\\\n",
"&= \\boldsymbol{p}_{i, \\text{hidden}}^T X\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The vector $\\boldsymbol{p}_{i, \\text{hidden}}^T$ constitutes each row in $P_{\\text{hidden} }$, which contains the weights for the neural network to minimize according to ([9](#min)).\n",
"\n",
"After having found $\\boldsymbol{z}_{i}^{\\text{hidden}} $ for every $i$-th neuron within the hidden layer, the vector will be sent to an activation function $a_i(\\boldsymbol{z})$.\n",
"\n",
"In this example, the sigmoid function has been chosen to be the activation function for each hidden neuron:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"f(z) = \\frac{1}{1 + \\exp{(-z)}}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is possible to use other activations functions for the hidden layer also.\n",
"\n",
"The output $\\boldsymbol{x}_i^{\\text{hidden}}$ from each $i$-th hidden neuron is:\n",
"\n",
"$$\n",
"\\boldsymbol{x}_i^{\\text{hidden} } = f\\big( \\boldsymbol{z}_{i}^{\\text{hidden}} \\big)\n",
"$$\n",
"\n",
"The outputs $\\boldsymbol{x}_i^{\\text{hidden} } $ are then sent to the output layer.\n",
"\n",
"The output layer consists of one neuron in this case, and combines the\n",
"output from each of the neurons in the hidden layers. The output layer\n",
"combines the results from the hidden layer using some weights $w_i^{\\text{output}}$\n",
"and biases $b_i^{\\text{output}}$. In this case,\n",
"it is assumes that the number of neurons in the output layer is one.\n",
"\n",
"\n",
"\n",
"The procedure of weighting the output neuron $j$ in the hidden layer to the $i$-th neuron in the output layer is similar as for the hidden layer described previously."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"z_{1,j}^{\\text{output}} & =\n",
"\\begin{pmatrix}\n",
"b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"1 \\\\\n",
"\\boldsymbol{x}_j^{\\text{hidden}}\n",
"\\end{pmatrix}\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Expressing $z_{1,j}^{\\text{output}}$ as a vector gives the following way of weighting the inputs from the hidden layer:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\boldsymbol{z}_{1}^{\\text{output}} =\n",
"\\begin{pmatrix}\n",
"b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"1 & 1 & \\dots & 1 \\\\\n",
"\\boldsymbol{x}_1^{\\text{hidden}} & \\boldsymbol{x}_2^{\\text{hidden}} & \\dots & \\boldsymbol{x}_N^{\\text{hidden}}\n",
"\\end{pmatrix}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this case we seek a continuous range of values since we are approximating a function. This means that after computing $\\boldsymbol{z}_{1}^{\\text{output}}$ the neural network has finished its feed forward step, and $\\boldsymbol{z}_{1}^{\\text{output}}$ is the final output of the network.\n",
"\n",
"\n",
"The next step is to decide how the parameters should be changed such that they minimize the cost function.\n",
"\n",
"The chosen cost function for this problem is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In order to minimize the cost function, an optimization method must be chosen.\n",
"\n",
"Here, gradient descent with a constant step size has been chosen.\n",
"\n",
"### Gradient descent\n",
"\n",
"The idea of the gradient descent algorithm is to update parameters in\n",
"a direction where the cost function decreases goes to a minimum.\n",
"\n",
"In general, the update of some parameters $\\boldsymbol{\\omega}$ given a cost\n",
"function defined by some weights $\\boldsymbol{\\omega}$, $C(\\boldsymbol{x},\n",
"\\boldsymbol{\\omega})$, goes as follows:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\boldsymbol{\\omega}_{\\text{new} } = \\boldsymbol{\\omega} - \\lambda \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"for a number of iterations or until $ \\big|\\big| \\boldsymbol{\\omega}_{\\text{new} } - \\boldsymbol{\\omega} \\big|\\big|$ becomes smaller than some given tolerance.\n",
"\n",
"The value of $\\lambda$ decides how large steps the algorithm must take\n",
"in the direction of $ \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})$.\n",
"The notation $\\nabla_{\\boldsymbol{\\omega}}$ express the gradient with respect\n",
"to the elements in $\\boldsymbol{\\omega}$.\n",
"\n",
"In our case, we have to minimize the cost function $C(\\boldsymbol{x}, P)$ with\n",
"respect to the two sets of weights and biases, that is for the hidden\n",
"layer $P_{\\text{hidden} }$ and for the output layer $P_{\\text{output}\n",
"}$ .\n",
"\n",
"This means that $P_{\\text{hidden} }$ and $P_{\\text{output} }$ is updated by"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"P_{\\text{hidden},\\text{new}} &= P_{\\text{hidden}} - \\lambda \\nabla_{P_{\\text{hidden}}} C(\\boldsymbol{x}, P) \\\\\n",
"P_{\\text{output},\\text{new}} &= P_{\\text{output}} - \\lambda \\nabla_{P_{\\text{output}}} C(\\boldsymbol{x}, P)\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The code for solving the ODE"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial cost: 367.01\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final cost: 0.0666807\n",
"Max absolute difference: 0.0437499\n"
]
},
{
"data": {
"image/png": "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4hgvSZK0/pYtW8aECRNYvHhx0lEqhcLCQlq2bEl+fn6Zr2PxkiSpipgwYQK1a9emdevWhBCSjlOhxRiZMWMGEyZMoE2bNmW+nrsaJUmqIhYvXkzDhg0tXRtACIGGDRuu9eihxUuSpCrE0rXhrMtjafGSJEnKEIuXJEmqcB599FHOPvvsNV5m0qRJv/5+yimnMHLkyLW+rz59+nDIIYes9fVWxuIlSZIqpdLF68EHH6Rjx44JJrJ4SZKkDOvevTtdunShU6dO3H///QDUqlWLK664gm222YZu3boxdepUAN544w123HFHtt12W/bZZ59f/77CvHnzaNOmDcuWLQNg7ty5tGnThhdeeIHBgwfTq1cvOnfuzKJFi9hjjz1+/QrCd955h+22245tttmGvffeG4CBAwey0047se2227LzzjszatSoDT7vnk5CkqQq6Oo3RjBy0twNepsdN6rDlb/vtMbLPfzwwzRo0IBFixax/fbbc+SRR7JgwQK6devGv//9by655BIeeOAB/va3v7HrrrvSv39/Qgg8+OCD3Hjjjdxyyy2/3lbt2rXZY489eOutt+jevTvPPvssRxxxBD169OCuu+7i5ptvpmvXrr+5/+nTp3PqqafSt29f2rRpw8yZMwHYfPPN+fTTT8nLy+ODDz7g8ssv56WXXtqgj5HFS5IkZdTtt9/OK6+8AsD48eP54YcfKCgo+PU4qi5duvD+++8DqXOP/eEPf2Dy5MksXbp0pefMOuWUU7jxxhvp3r07jzzyCA888MBq779///787ne/+/W2GjRoAMCcOXM44YQT+OGHHwgh/DqKtiFZvCRJqoLKMjJVHvr06cMHH3zAF198QY0aNdhjjz1YvHgx+fn5v56eITc3l+XLlwNwzjnn8Je//IVDDz2UPn36cNVVV/3Pbe6yyy6MGTOGPn36UFRUxJZbbrlO2f7+97+z55578sorrzBmzBj22GOPdZ3NVfIYL0mSlDFz5syhfv361KhRg++++47+/fuv8fItWrQA4LHHHlvl5Y4//nh69uzJSSed9Ovfateuzbx58/7nst26daNv3778/PPPAL/uaix5X48++uhazVdZWbwkSVLGHHDAASxfvpwtttiCv/71r3Tr1m21l7/qqqvo0aMHXbp0oVGjRqu8XK9evZg1axbHHHPMr3878cQTOeOMM349uH6Fxo0b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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_47_2.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import autograd.numpy as np\n",
"from autograd import grad, elementwise_grad\n",
"import autograd.numpy.random as npr\n",
"from matplotlib import pyplot as plt\n",
"\n",
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"# Assuming one input, hidden, and output layer\n",
"def neural_network(params, x):\n",
"\n",
" # Find the weights (including and biases) for the hidden and output layer.\n",
" # Assume that params is a list of parameters for each layer.\n",
" # The biases are the first element for each array in params,\n",
" # and the weights are the remaning elements in each array in params.\n",
"\n",
" w_hidden = params[0]\n",
" w_output = params[1]\n",
"\n",
" # Assumes input x being an one-dimensional array\n",
" num_values = np.size(x)\n",
" x = x.reshape(-1, num_values)\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
"\n",
" ## Hidden layer:\n",
"\n",
" # Add a row of ones to include bias\n",
" x_input = np.concatenate((np.ones((1,num_values)), x_input ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_input)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" ## Output layer:\n",
"\n",
" # Include bias:\n",
" x_hidden = np.concatenate((np.ones((1,num_values)), x_hidden ), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_hidden)\n",
" x_output = z_output\n",
"\n",
" return x_output\n",
"\n",
"# The trial solution using the deep neural network:\n",
"def g_trial(x,params, g0 = 10):\n",
" return g0 + x*neural_network(params,x)\n",
"\n",
"# The right side of the ODE:\n",
"def g(x, g_trial, gamma = 2):\n",
" return -gamma*g_trial\n",
"\n",
"# The cost function:\n",
"def cost_function(P, x):\n",
"\n",
" # Evaluate the trial function with the current parameters P\n",
" g_t = g_trial(x,P)\n",
"\n",
" # Find the derivative w.r.t x of the neural network\n",
" d_net_out = elementwise_grad(neural_network,1)(P,x)\n",
"\n",
" # Find the derivative w.r.t x of the trial function\n",
" d_g_t = elementwise_grad(g_trial,0)(x,P)\n",
"\n",
" # The right side of the ODE\n",
" func = g(x, g_t)\n",
"\n",
" err_sqr = (d_g_t - func)**2\n",
" cost_sum = np.sum(err_sqr)\n",
"\n",
" return cost_sum / np.size(err_sqr)\n",
"\n",
"# Solve the exponential decay ODE using neural network with one input, hidden, and output layer\n",
"def solve_ode_neural_network(x, num_neurons_hidden, num_iter, lmb):\n",
" ## Set up initial weights and biases\n",
"\n",
" # For the hidden layer\n",
" p0 = npr.randn(num_neurons_hidden, 2 )\n",
"\n",
" # For the output layer\n",
" p1 = npr.randn(1, num_neurons_hidden + 1 ) # +1 since bias is included\n",
"\n",
" P = [p0, p1]\n",
"\n",
" print('Initial cost: %g'%cost_function(P, x))\n",
"\n",
" ## Start finding the optimal weights using gradient descent\n",
"\n",
" # Find the Python function that represents the gradient of the cost function\n",
" # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n",
" cost_function_grad = grad(cost_function,0)\n",
"\n",
" # Let the update be done num_iter times\n",
" for i in range(num_iter):\n",
" # Evaluate the gradient at the current weights and biases in P.\n",
" # The cost_grad consist now of two arrays;\n",
" # one for the gradient w.r.t P_hidden and\n",
" # one for the gradient w.r.t P_output\n",
" cost_grad = cost_function_grad(P, x)\n",
"\n",
" P[0] = P[0] - lmb * cost_grad[0]\n",
" P[1] = P[1] - lmb * cost_grad[1]\n",
"\n",
" print('Final cost: %g'%cost_function(P, x))\n",
"\n",
" return P\n",
"\n",
"def g_analytic(x, gamma = 2, g0 = 10):\n",
" return g0*np.exp(-gamma*x)\n",
"\n",
"# Solve the given problem\n",
"if __name__ == '__main__':\n",
" # Set seed such that the weight are initialized\n",
" # with same weights and biases for every run.\n",
" npr.seed(15)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" N = 10\n",
" x = np.linspace(0, 1, N)\n",
"\n",
" ## Set up the initial parameters\n",
" num_hidden_neurons = 10\n",
" num_iter = 10000\n",
" lmb = 0.001\n",
"\n",
" # Use the network\n",
" P = solve_ode_neural_network(x, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" # Print the deviation from the trial solution and true solution\n",
" res = g_trial(x,P)\n",
" res_analytical = g_analytic(x)\n",
"\n",
" print('Max absolute difference: %g'%np.max(np.abs(res - res_analytical)))\n",
"\n",
" # Plot the results\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n",
" plt.plot(x, res_analytical)\n",
" plt.plot(x, res[0,:])\n",
" plt.legend(['analytical','nn'])\n",
" plt.xlabel('x')\n",
" plt.ylabel('g(x)')\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The network with one input layer, specified number of hidden layers, and one output layer\n",
"\n",
"It is also possible to extend the construction of our network into a more general one, allowing the network to contain more than one hidden layers.\n",
"\n",
"The number of neurons within each hidden layer are given as a list of integers in the program below."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial cost: 324.246\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" return array(a, dtype, copy=False, order=order)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final cost: 0.119936\n"
]
},
{
"data": {
"image/png": "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F2dXZSTOd1N19n4iWiRoGWPicd5kdHY3SejSrkYRERERH9GuRhEREREfCYhdjRUqVLC1atVyO4aIiIhIvhYuXLjXWpvrl28HRPGqVasWcXFxbscQERERyZcxJs9fUdCuRhEREREfUfESERER8REVLxEREREfCYhjvEREROTUpaens23bNlJTU92OEhSio6OpVq0aERERBb6NipeIiEiI2LZtGyVLlqRWrVo4v0stJ8taS2JiItu2baN27doFvp12NYqIiISI1NRUypcvr9JVCIwxlC9f/oRHD1W8REREQohKV+E5mXmp4iUiIiLiIypeIiIiEnAGDBhA3759873Ojh07/jndq1cvVq5cecKPNXXqVK655poTvl1uVLxEREQkKOUsXv3796dRo0YuJlLxEhERER/r3LkzLVu2pHHjxnz99dcAlChRgueee46mTZtyzjnnsHv3bgDGjBlDmzZtaN68OR06dPjn/GOSk5OpXbs26enpABw8eJDatWszfPhw4uLi6NmzJ82aNePIkSO0a9fun58g/P3332nRogVNmzalffv2AMyfP59zzz2X5s2bc95557FmzZpCn3Z9nYSIiEgIemXMClbuOFio99moSileurZxvtf77rvvKFeuHEeOHKF169Zcf/31HD58mHPOOYc33niDJ598km+++Ybnn3+e888/n7lz52KMoX///rzzzju8//77/9xXyZIladeuHePGjaNz584MGzaMLl260LVrVz777DPee+89WrVq9a/HT0hI4O6772b69OnUrl2bffv2AXDGGWcwY8YMwsPDmTRpEs8++yy//PJLoc4jFS8RERHxqY8//piRI0cCsHXrVtatW0dkZOQ/x1G1bNmSiRMnAs53j3Xr1o2dO3dy9OjRXL8zq1evXrzzzjt07tyZ77//nm+++ea4jz937lwuvPDCf+6rXLlyACQlJXHbbbexbt06jDH/jKIVJhUvERGREFSQkamiMHXqVCZNmsScOXOIiYmhXbt2pKamEhER8c/XM4SFhZGRkQHAAw88wKOPPkrHjh2ZOnUqL7/88n/us23btsTHxzN16lQyMzNp0qTJSWV74YUXuPjiixk5ciTx8fG0a9fuZCczTzrGS0RERHwmKSmJsmXLEhMTw+rVq5k7d26+169atSoAAwcOzPN6t956Kz169OCOO+7457ySJUuSnJz8n+uec845TJ8+nU2bNgH8s6sx+2MNGDDghKaroFS8RERExGeuuOIKMjIyaNiwIU8//TTnnHPOca//8ssv07VrV1q2bEmFChXyvF7Pnj3Zv38/3bt3/+e822+/nd69e/9zcP0xsbGxfP3113Tp0oWmTZvSrVs3AJ588kmeeeYZmjdv/s+IW2Ez1toiuePC1KpVK3vsUwgiIiJyclatWkXDhg3djlEkRowYwejRoxk8eLBPHze3eWqMWWitbZXb9XWMl4iIiAS0Bx54gAkTJjB+/Hi3o+RLxUtEREQC2ieffOJ2hALTMV4iIiIiPlJkxcsY850xZo8xZnm288oZYyYaY9Z5/y1bVI8vIiIi4m+KcsRrAHBFjvOeBv6y1tYD/vKe9gsZ6UfdjiAiIiJBrsiKl7V2OrAvx9mdgGNfwjEQ6FxUj38i5gx8lo3/a0tWZqbbUURERCSI+foYr0rW2p3e/+8CKuV1RWPMPcaYOGNMXEJCQpGGCi9bg/oZa1k6aWiRPo6IiIj828svv8x7773ndgyfce3geut8gVieXyJmrf3aWtvKWtsqNja2SLM0v/IutpgqlJ7/PjZLo14iIiJSNHxdvHYbYyoDeP/d4+PHz1V4RAS7mj3I6ZnxLJ30g9txREREgtobb7xB/fr1Of/881mzZg0A7dq146mnnuLss8+mfv36zJgxA3B+uqdLly5cccUV1KtXjyeffNLN6KfM19/j9RtwG/C299/RPn78PLW46i62LPmYUvPex3bogfGEuR1JRESk6Ex4Gnb9Xbj3edqZcOXbx73KwoULGTZsGEuWLCEjI4MWLVrQsmVLADIyMpg/fz7jx4/nlVdeYdKkSQAsWbKExYsXExUVRYMGDXjggQeoXr164Wb3kaL8OokfgTlAA2PMNmPMXTiF61JjzDqgg/e0XwiPiGRH0wc4PXMTf/+lUS8REZGiMGPGDK677jpiYmIoVaoUHTt2/OeyLl26ANCyZUvi4+P/Ob99+/aULl2a6OhoGjVqxObNm30du9AU2YiXtbZ7Hhe1L6rHPFUtr+7FlqWfUGLu+9j2GvUSEZEgls/IlBuioqIACAsL+9ePVB87P7fLAo2+uT6biIhIdpzVl9MzN7F8yjC344iIiASdCy+8kFGjRnHkyBGSk5MZM2aM25F8SsUrhxZX380WU5nic97DZmW5HUdERCSotGjRgm7dutG0aVOuvPJKWrdu7XYknzLOtzr4t1atWtm4uDifPd7sXz/jvGXPsvyCL2jSvofPHldERKQorVq1ioYNG7odI6jkNk+NMQutta1yu75GvHLR6hpn1Ctmzrsa9RIREZFCo+KVi8jISLY26cPpGRtZNVXHeomIiEjhUPHKQ6tr72ErlSk2W6NeIiISPALhEKNAcTLzUsUrD1GRUcQ36UPtjI2snvaT23FEREROWXR0NImJiSpfhcBaS2JiItHR0Sd0O19/c31AaX3tPWxd/inRs96FdjeBMW5HEhEROWnVqlVj27ZtJCQkuB0lKERHR1OtWrUTuo2K13FER0WxqXEfLlzxAmum/USDdje5HUlEROSkRUREULt2bbdjhDTtaszH2R3vZQunETnrXdDQrIiIiJwCFa98REdFsanRfdROX8/a6T+7HUdEREQCmIpXAZzd8T62chqRM9/RqJeIiIicNBWvAigWHcWGhvdRK30962dq1EtEREROjopXAZ3dqTdbOY3w6Rr1EhERkZOj4lVAMdHRrD+jN7XS17Nh1gi344iIiEgAUvE6AWd3uo8tVCJs+v806iUiIiInTMXrBBQvFs26Br2pdXQdG2f/4nYcERERCTAqXieoTef72UIlPNPe1qiXiIiInBAVrxNUolg06+rfS62j64jXqJeIiIicABWvk9C6031spRJM07FeIiIiUnAqXiehVPEYVte7l1pH17J5zq9uxxEREZEAoeJ1ks7+Z9RLx3qJiIhIwah4naTSJWJYWfceaqatZeu8kW7HERERkQCg4nUKzul0P9tsRbKmvKVRLxEREcmXitcpKF0yhhXeUa9t80e7HUdERET8nIrXKWrT+X622opkTn5To14iIiJyXCpep6hMyeIsr3M3NdPWsH2BRr1EREQkbypehaBN5z5stRXJ0KiXiIiIHIeKVyEoV6o4f59+NzVT17Aj7je344iIiIifUvEqJG063882G0v6Xxr1EhERkdypeBWS8qVLsPT0u6mZupqdGvUSERGRXKh4FaKzO/XRqJeIiIjkScWrEMWWKcGSWr2okbqa3QvHuB1HRERE/IyKVyE7+zrnWK80jXqJiIhIDipehaximVIsqnUXNY6sYs+isW7HERERET+i4lUEnO/1iiV10hsa9RIREZF/qHgVgUplS7G4xp3UOLKKhMUa9RIRERGH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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_49_3.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad, elementwise_grad\n",
"import autograd.numpy.random as npr\n",
"from matplotlib import pyplot as plt\n",
"\n",
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"# The neural network with one input layer and one output layer,\n",
"# but with number of hidden layers specified by the user.\n",
"def deep_neural_network(deep_params, x):\n",
" # N_hidden is the number of hidden layers\n",
"\n",
" N_hidden = np.size(deep_params) - 1 # -1 since params consists of\n",
" # parameters to all the hidden\n",
" # layers AND the output layer.\n",
"\n",
" # Assumes input x being an one-dimensional array\n",
" num_values = np.size(x)\n",
" x = x.reshape(-1, num_values)\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
"\n",
" # Due to multiple hidden layers, define a variable referencing to the\n",
" # output of the previous layer:\n",
" x_prev = x_input\n",
"\n",
" ## Hidden layers:\n",
"\n",
" for l in range(N_hidden):\n",
" # From the list of parameters P; find the correct weigths and bias for this layer\n",
" w_hidden = deep_params[l]\n",
"\n",
" # Add a row of ones to include bias\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_prev)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" # Update x_prev such that next layer can use the output from this layer\n",
" x_prev = x_hidden\n",
"\n",
" ## Output layer:\n",
"\n",
" # Get the weights and bias for this layer\n",
" w_output = deep_params[-1]\n",
"\n",
" # Include bias:\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_prev)\n",
" x_output = z_output\n",
"\n",
" return x_output\n",
"\n",
"# The trial solution using the deep neural network:\n",
"def g_trial_deep(x,params, g0 = 10):\n",
" return g0 + x*deep_neural_network(params, x)\n",
"\n",
"# The right side of the ODE:\n",
"def g(x, g_trial, gamma = 2):\n",
" return -gamma*g_trial\n",
"\n",
"# The same cost function as before, but calls deep_neural_network instead.\n",
"def cost_function_deep(P, x):\n",
"\n",
" # Evaluate the trial function with the current parameters P\n",
" g_t = g_trial_deep(x,P)\n",
"\n",
" # Find the derivative w.r.t x of the neural network\n",
" d_net_out = elementwise_grad(deep_neural_network,1)(P,x)\n",
"\n",
" # Find the derivative w.r.t x of the trial function\n",
" d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n",
"\n",
" # The right side of the ODE\n",
" func = g(x, g_t)\n",
"\n",
" err_sqr = (d_g_t - func)**2\n",
" cost_sum = np.sum(err_sqr)\n",
"\n",
" return cost_sum / np.size(err_sqr)\n",
"\n",
"# Solve the exponential decay ODE using neural network with one input and one output layer,\n",
"# but with specified number of hidden layers from the user.\n",
"def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n",
" # num_hidden_neurons is now a list of number of neurons within each hidden layer\n",
"\n",
" # The number of elements in the list num_hidden_neurons thus represents\n",
" # the number of hidden layers.\n",
"\n",
" # Find the number of hidden layers:\n",
" N_hidden = np.size(num_neurons)\n",
"\n",
" ## Set up initial weights and biases\n",
"\n",
" # Initialize the list of parameters:\n",
" P = [None]*(N_hidden + 1) # + 1 to include the output layer\n",
"\n",
" P[0] = npr.randn(num_neurons[0], 2 )\n",
" for l in range(1,N_hidden):\n",
" P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n",
"\n",
" # For the output layer\n",
" P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n",
"\n",
" print('Initial cost: %g'%cost_function_deep(P, x))\n",
"\n",
" ## Start finding the optimal weights using gradient descent\n",
"\n",
" # Find the Python function that represents the gradient of the cost function\n",
" # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n",
" cost_function_deep_grad = grad(cost_function_deep,0)\n",
"\n",
" # Let the update be done num_iter times\n",
" for i in range(num_iter):\n",
" # Evaluate the gradient at the current weights and biases in P.\n",
" # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n",
" # in the hidden layers and output layers evaluated at x.\n",
" cost_deep_grad = cost_function_deep_grad(P, x)\n",
"\n",
" for l in range(N_hidden+1):\n",
" P[l] = P[l] - lmb * cost_deep_grad[l]\n",
"\n",
" print('Final cost: %g'%cost_function_deep(P, x))\n",
"\n",
" return P\n",
"\n",
"def g_analytic(x, gamma = 2, g0 = 10):\n",
" return g0*np.exp(-gamma*x)\n",
"\n",
"# Solve the given problem\n",
"if __name__ == '__main__':\n",
" npr.seed(15)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" N = 10\n",
" x = np.linspace(0, 1, N)\n",
"\n",
" ## Set up the initial parameters\n",
" num_hidden_neurons = np.array([10,10])\n",
" num_iter = 10000\n",
" lmb = 0.001\n",
"\n",
" P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" res = g_trial_deep(x,P)\n",
" res_analytical = g_analytic(x)\n",
"\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.title('Performance of a deep neural network solving an ODE compared to the analytical solution')\n",
" plt.plot(x, res_analytical)\n",
" plt.plot(x, res[0,:])\n",
" plt.legend(['analytical','dnn'])\n",
" plt.ylabel('g(x)')\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example: Population growth\n",
"\n",
"A logistic model of population growth assumes that a population converges toward an equilibrium.\n",
"The population growth can be modeled by"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"log\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{log} \\tag{10}\n",
"\tg'(t) = \\alpha g(t)(A - g(t))\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $g(t)$ is the population density at time $t$, $\\alpha > 0$ the growth rate and $A > 0$ is the maximum population number in the environment.\n",
"Also, at $t = 0$ the population has the size $g(0) = g_0$, where $g_0$ is some chosen constant.\n",
"\n",
"In this example, similar network as for the exponential decay using Autograd has been used to solve the equation. However, as the implementation might suffer from e.g numerical instability\n",
"and high execution time (this might be more apparent in the examples solving PDEs),\n",
"using a library like TensorFlow is recommended.\n",
"Here, we stay with a more simple approach and implement for comparison, the simple forward Euler method.\n",
"\n",
"\n",
"\n",
"Here, we will model a population $g(t)$ in an environment having carrying capacity $A$.\n",
"The population follows the model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"solveode_population\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{solveode_population} \\tag{11}\n",
"g'(t) = \\alpha g(t)(A - g(t))\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $g(0) = g_0$.\n",
"\n",
"In this example, we let $\\alpha = 2$, $A = 1$, and $g_0 = 1.2$.\n",
"\n",
"\n",
"We will get a slightly different trial solution, as the boundary conditions are different\n",
"compared to the case for exponential decay.\n",
"\n",
"A possible trial solution satisfying the condition $g(0) = g_0$ could be\n",
"\n",
"$$\n",
"h_1(t) = g_0 + t \\cdot N(t,P)\n",
"$$\n",
"\n",
"with $N(t,P)$ being the output from the neural network with weights and biases for each layer collected in the set $P$.\n",
"\n",
"The analytical solution is\n",
"\n",
"$$\n",
"g(t) = \\frac{Ag_0}{g_0 + (A - g_0)\\exp(-\\alpha A t)}\n",
"$$\n",
"\n",
"\n",
"\n",
"The network will be the similar as for the exponential decay example, but with some small modifications for our problem."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial cost: 0.221805\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" return array(a, dtype, copy=False, order=order)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final cost: 0.000417932\n",
"The max absolute difference between the solutions is: 0.00424909\n"
]
},
{
"data": {
"image/png": "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P8fyWSq4iYiIiIQJBTcREREpcoYMGcKNN954xHHWrVv39/Orr76aBQsWHPV7jR07lh49ehz163Ki4CYiIiKSg+zB7Z133qFx48Y+VqTgJiIiImGmd+/etG7dmiZNmjB48GAASpUqxf3330/z5s1p3749GzduBGDUqFG0a9eOli1b0q1bt7+HH7Br1y5q165NWloaADt37qR27dp8/vnnTJs2jcsuu4wWLVqwb98+unbt+vctNH/44QdatWpF8+bNOfXUUwGYMmUKJ554Ii1btqRDhw4sWrQo3+dd3YGIiIjIUXtk1HwWrNuZr9NsXLU0D53T5Ijjvffee8THx7Nv3z5OOOEEzjvvPPbs2UP79u154oknuPvuu3n77bd54IEH6NixI5MmTcLMeOedd3jmmWd47rnn/p5WXFwcXbt25bvvvqN3794MGzaMPn36cMEFF/Daa6/x7LPP0qZNm0PePzk5mWuuuYbx48dTu3Zttm7dCkDDhg35/fffiYqK4pdffuG+++5jxIgR+foZKbiJiIhIWHn55ZcZOXIkAGvWrGHJkiXExMT8fR5Z69at+fnnnwGv77mLLrqI9evXs3///hz7TLv66qt55pln6N27N++//z5vv/32Yd9/0qRJdO7c+e9pxcfHA7Bjxw769evHkiVLMLO/9+LlJwU3EREROWp52TMWDGPHjuWXX35h4sSJlChRgq5du5KSkkJ0dPTf3WtERkaSnp4OwE033cTtt99Oz549GTt2LA8//PA/pnnSSSexcuVKxo4dS0ZGBk2bNj2m2v773/9y8sknM3LkSFauXEnXrl2PdTZzpXPcREREJGzs2LGDcuXKUaJECRYuXMikSZOOOH61atUA+OCDD3Id74orruDSSy/lyiuv/HtYXFwcu3bt+se47du3Z/z48axYsQLg70OlWd9ryJAhRzVfeaXgJiIiImGje/fupKen06hRI+69917at29/2PEffvhhLrjgAlq3bk2FChVyHe+yyy5j27ZtXHLJJX8P69+/P4MGDfr74oQDEhISGDx4MH369KF58+ZcdNFFANx999385z//oWXLln/v8ctv5pwLyoRDSZs2bdyBq0BERETk2Pz11180atTI7zKC4osvvuDrr7/mo48+KtD3zekzNbPpzrk2OY2vc9xERESkSLvpppv4/vvvGT16tN+lHJGCm4iIiBRpr7zyit8l5JnOcRMREREJE0ENbmb2npltMrN5ubRfZmZzzGyumf1pZs2ztHU3s0VmttTM7s0yvLaZTQ4M/8zMYoI5DyIiIiKhIth73IYA3Q/TvgLo4pxrBjwGDAYws0jgNeBMoDFwiZkduDnY08ALzrl6wDZgQHBKPzoZQbp6REREROSAoAY359x4YOth2v90zm0LPJ0EJAZ+bwssdc4td87tB4YBvczrWe8U4IvAeB8AvYNR+9GYMvIV1j/RhJS9u/0uRURERAqxUDrHbQDwfeD3asCaLG1JgWHlge3OufRsw//BzAaa2TQzm5acnBykkj0lK9Ul0W1gzui3gvo+IiIiUrSFRHAzs5Pxgts9+TVN59xg51wb51ybhISE/Jpsjhq3786SyHpUWvAeLjMjqO8lIiIiRZfvwc3MjgfeAXo557YEBq8FqmcZLTEwbAtQ1syisg33lUVEsK35NdTMTGLu2C+O/AIRERE5JitXrqRRo0Zcc801NGnShNNPP519+/bRtWtX7rnnHtq2bUv9+vX5/fff/S41KHztx83MagBfApc75xZnaZoKHGdmtfGC2cXApc45Z2ZjgPPxznvrB3xdwGXnqMUZV7JxxjNETn4dTrnI73JERESC6/t7YcPc/J1m5WZw5lNHHG3JkiUMHTqUt99+mwsvvJARI0YAkJ6ezpQpUxg9ejSPPPIIv/zyS/7WFwKC3R3IUGAi0MDMksxsgJkNMrNBgVEexDtv7XUzm2Vm0wAC57DdCPwI/AUMd87ND7zmHuB2M1saeO27wZyHvIopVoxldfrSJHUWK+cd/oa3IiIicuxq165NixYtAGjdujUrV64EoE+fPv8YVtgEdY+bc+6SI7RfDVydS9to4B/3nnDOLce76jTkND77Jva8/BZbfnmeWk2H+12OiIhI8ORhz1iwFCtW7O/fIyMj/74B/IHhkZGRQbvJu998P8etMClbPoFZCedw/LZf2Lp+pd/liIiISCGj4JbPqnW/nQgyWfbdC36XIiIiIoWMbjKfz2rVa8zUkh1pkPQ5KXseJbZkGb9LEhERKTRq1arFvHkH76R55513/mOcChUqFNpz3LTHLQhiOt1CafawYPSbfpciIiIihYiCWxAc374bCyIbUvmv93AZhfPkSBERESl4Cm5BYGZsa3EtVTM3sHDcZ36XIyIikm+cc36XUGgcy2ep4BYkrU/vSxIViZz8mt+liIiI5IvY2Fi2bNmi8JYPnHNs2bKF2NjYo3qdLk4IkthiMSyrfTldVjzHmrnjqd6ss98liYiI/CuJiYkkJSWRnJzsdymFQmxsLImJiUf1GgW3IGp6zg3sfOkNtv3ygoKbiIiEvejoaGrXru13GUWaDpUGUfn48sxI6EWT7WPYsW6p3+WIiIhImFNwC7IaZ95GJhGs+O55v0sRERGRMKfgFmR16jZgasnO1Fv7Jft3b/O7HBEREQljCm4FIKbTzZRiHwtH6wpTEREROXYKbgWgdfuTmR3ZlMoLh+Ay0vwuR0RERMKUglsBMDO2t7iWipnJLBnzid/liIiISJhScCsg7c64hJVUJXrK66COC0VEROQYKLgVkNiYaJbWuZza+xexbu4Yv8sRERGRMKTgVoCO7zGIbS6O7b++4HcpIiIiEoYU3ApQxfh4piWcS8Ptv7MraaHf5YiIiEiYUXArYDW630Iakaz6/jm/SxEREZEwo+BWwBrUq8fEkqdQd+3XpO3e4nc5IiIiEkYU3HwQ2+kmipPKktEv+12KiIiIhBEFNx+0bdeJqZEtqLTwQ1x6qt/liIiISJhQcPNBRISxo8W1lM/cyoqxH/pdjoiIiIQJBTefdDj9ApZSnRh1yCsiIiJ5pODmkxLFollS5woS9y9n4+yf/C5HREREwoCCm49ann0tya4MO35Th7wiIiJyZApuPqpcvgxTE86j/s6J7E6a73c5IiIiEuIU3HxWq/vNpLhokkY/63cpIiIiEuIU3HzWuF5tfi95GrXXjSJ950a/yxEREZEQpuAWAmI730Qx0lj+vTrkFRERkdwpuIWADm1P5M/INlRa+BGk7fO7HBEREQlRCm4hIDLC2NniWsq4HawaO8TvckRERCREKbiFiE6nncsCahMz9Q3IzPS7HBEREQlBCm4homRsNEvr9KPK/lVsnj3a73JEREQkBCm4hZA2Zw9gvYtn1xh1yCsiIiL/pOAWQqqWL83khPOpvXMae1fP8rscERERCTEKbiGmbvcb2eOKse77//O7FBEREQkxCm4hplm9mowt0Z2a638gY8c6v8sRERGREKLgFoJKdL6RSJfBytEv+l2KiIiIhBAFtxDUqW0bxke2o9LiT2D/Hr/LERERkRCh4BaCoiIj2NnyWkq53awd+47f5YiIiEiIUHALUSd368FsdxwxU9+CzAy/yxEREZEQoOAWouKKx7Ckbj8S0taybebXfpcjIiIiIUDBLYS1O6sfSa4Cu8e+5HcpIiIiEgIU3EJY9QqlmZhwIdV3zSJl5RS/yxERERGfKbiFuHpnDGKnK876H57zuxQRERHxmYJbiGtRrwa/ljiLGht+InPbar/LERERER8puIU4M6NU5+txDtZ8r5vPi4iIFGUKbmGga9tW/BZ5EglLhkHKTr/LEREREZ8ouIWB6MgIdrW8lhJuLxvGvu13OSIiIuITBbcw0a1bd6a6RsRMHwwZ6X6XIyIiIj5QcAsTZYpHs6ROP+LTNrBjxgi/yxEREREfKLiFkQ5n9WVFZiX2jnsJnPO7HBERESlgCm5hpFZCHH8mXESV3fNJXfGn3+WIiIhIAVNwCzPHnT6Qba4Um35Uh7wiIiJFjYJbmDmhfiI/lTiLaht/I3Pzcr/LERERkQKk4BZmzIy4zteT7iJY9+PzfpcjIiIiBUjBLQx1O6E5P0V0ImHpcNi3ze9yREREpIAouIWhmKgIdrcaRDGXSvLYN/0uR0RERApI0IKbmb1nZpvMbF4u7Q3NbKKZpZrZnVmGNzCzWVkeO83s1kDbw2a2NkvbWcGqP9R1P/VU/nDNiJn+DqTv97scERERKQDB3OM2BOh+mPatwM3As1kHOucWOedaOOdaAK2BvcDILKO8cKDdOTc6f0sOH2VLxLCkTj/KpG9m1/TP/C5HRERECkDQgptzbjxeOMutfZNzbiqQdpjJnAosc86tyu/6CoNOZ17M4sxq7Bv/sjrkFRERKQJC/Ry3i4Gh2YbdaGZzAodiy+X2QjMbaGbTzGxacnJycKv0Sd2KcfyRcDEV9yxm/9KxfpcjIiIiQRaywc3MYoCewOdZBr8B1AVaAOuBXHuhdc4Nds61cc61SUhICGapvmpw+gCSXWk2/6yuQURERAq7kA1uwJnADOfcxgMDnHMbnXMZzrlM4G2grW/VhYgT61fl++I9qLppPG7TQr/LERERkSAK5eB2CdkOk5pZlSxPzwVyvGK1KDEzynQaRIqLZsNPL/hdjoiIiARRMLsDGQpMBBqYWZKZDTCzQWY2KNBe2cySgNuBBwLjlA60lQROA77MNtlnzGyumc0BTgZuC1b94aR7u6aMjuhK+WVfwp7NfpcjIiIiQRIVrAk75y45QvsGIDGXtj1A+RyGX54/1RUuxaIi2dPqWmKm/8yWsa9T/uwH/S5JREREgiCUD5XKUTjr5M6MyWxJsZnvQVqK3+WIiIhIECi4FRLlSxVjad1+lErfxu5pn/pdjoiIiASBglsh0uWM85ifWZPU319Rh7wiIiKFkIJbIVK/cml+T7iI8nuXs3/xT36XIyIiIvlMwa2QadytPxtcObb9/KLfpYiIiEg+U3ArZDo1rMq3sedQafOfuA1z/S5HRERE8pGCWyFjZsR3GsheV4zkn9Uhr4iISGGi4FYIndWuMd9EnEL8sq9h1wa/yxEREZF8ouBWCMVGR7K35TVEuAy2j3vd73JEREQknyi4FVLnnNyRX1wbYma+D/v3+F2OiIiI5AMFt0IqIa4Yi+v0o0TGTvZO/djvckRERCQfKLgVYqee3pNZmXXZP+FVyMz0uxwRERH5lxTcCrFGVcvwe4ULKbtvNekLR/tdjoiIiPxLCm6FXNNul5PkKrD9V3UNIiIiEu4U3Aq5Lg2r8k1sTypsmYZbO8PvckRERORfUHAr5CIijPKdrmaXK87WX7TXTUREJJwpuBUBPds2ZKSdStkV38KOJL/LERERkWOk4FYEFI+JZF+rq3EOdo591e9yRERE5BgpuBURvbueyA+uHTGzP4TUXX6XIyIiIsdAwa2IqFQ6liV1+hGbuYeUKUP8LkdERESOgYJbEXLaaWcxJbMBaX+8DhnpfpcjIiIiR0nBrQhpWq0M48pfRFzKOjIWfON3OSIiInKUFNyKmOanXszKzErsHPOi36WIiIjIUVJwK2JObVyVr2J7UW7rbFg92e9yRERE5CgouBUxkRFGQscr2e5Ksk23wRIREQkrCm5FUO929fnCTqPMqh9h6wq/yxEREZE8UnArgkoWi2JfywGkO2PX+Ff8LkdERETySMGtiDqvywl8m9mBYnM+hX3b/C5HRERE8kDBrYiqWrY4i+v0IyZzH6lT3ve7HBEREckDBbcirHu305iQ0YT0P9+A9P1+lyMiIiJHoOBWhLWoXpZx5S+kZOomMueP9LscEREROQIFtyKu1SkXsCSzGrvGvAjO+V2OiIiIHIaCWxF3etOqjIztSZntC2DlBL/LERERkcNQcCviIiOMiif1Y7Mrzc7f1CGviIhIKFNwE85rV4/hnE7pNb/C5iV+lyMiIiK5UHAT4mKjSWlxJakumj3jXva7HBEREcmFgpsAcEGXVozM7EjMvM9gzxa/yxEREZEcKLgJANXjS7C49uVEu1T2T3rb73JEREQkBwpu8rezTz2FMRnNyZj8FqSl+F2OiIiIZKPgJn9rXbMcY+Ivovj+rWTOGe53OSIiIpKNgpsc4oSTe/NXZg32jntZHfKKiIiEGAU3OcSZzaowolgvSu1cAst+9bscERERyULBTQ4RFRlB5ZP6stGVZffYl/wuR0RERLJQcJN/uKBdXYa67pRKGg8bF/hdjoiIiAQouMk/lCkeTWqL/ux1xdg3XnvdREREQoWCm+To4i7HMyKzM9ELRsCujX6XIyIiIii4SS5qli/Jolp9iXDppE16y+9yREREBAU3OYyep3Tml4xWZEx5F/bv9bscERGRIk/BTXJ1Qq1y/FruQmLTtpM5a6jf5YiIiBR5Cm6SKzPjxK49mJ1Zh5TfX4HMTL9LEhERKdIU3OSwzjq+Kp9H96bErhWw6Du/yxERESnSFNzksGKiIkg86UKWZFYj7bt7Yf8ev0sSEREpshTc5Igubl+XR+1aoncnwdgn/S5HRESkyFJwkyMqWyKGLt3O4dP0k8mc+Dqsn+N3SSIiIkWSgpvkSb8OtRhe7hq2u1JkfnMzZGb4XZKIiEiRo+AmeRIdGcFdvdrx8P7LiVg/E6a+43dJIiIiRY6Cm+TZSfUqkN74XH53zcn85RHYsdbvkkRERIoUBTc5Kvf3aMLDmQNIT0+H7+/2uxwREZEiRcFNjkq1ssXp3bUDz+3vAwu/hb++9bskERGRIkPBTY7aNZ3r8FPp81gWUQs3+i5I2el3SSIiIkVC0IKbmb1nZpvMbF4u7Q3NbKKZpZrZndnaVprZXDObZWbTsgyPN7OfzWxJ4Ge5YNUvuYuNjuSBnsdzx76rYNd6+O1xv0sSEREpEoK5x20I0P0w7VuBm4Fnc2k/2TnXwjnXJsuwe4FfnXPHAb8GnosPTm1UiXL1T2SoOx03ZTAkTfe7JBERkUIvaMHNOTceL5zl1r7JOTcVSDuKyfYCPgj8/gHQ+5gLlH/twXOa8H/pF7EzqjyMugUy0v0uSUREpFAL1XPcHPCTmU03s4FZhldyzq0P/L4BqJTbBMxsoJlNM7NpycnJway1yKpdoSSXdm7C3Xv7wsa5MOl1v0sSEREp1EI1uHV0zrUCzgRuMLPO2Udwzjm8gJcj59xg51wb51ybhISEIJZatN1wcj3mlOrExOh2uLFPwrZVfpckIiJSaIVkcHPOrQ383ASMBNoGmjaaWRWAwM9N/lQoB5SIieL+Ho25fVdf0jOB7+4Al2ueFhERkX8h5IKbmZU0s7gDvwOnAweuTP0G6Bf4vR/wdcFXKNmd3awKterU54XMC2HpzzD/S79LEhERKZSC2R3IUGAi0MDMksxsgJkNMrNBgfbKZpYE3A48EBinNN55axPMbDYwBfjOOfdDYLJPAaeZ2RKgW+C5+MzMeKRXE95OPY2k4g3g+3th3za/yxIRESl0zBWBw1pt2rRx06ZNO/KI8q88OmoBUyb+xqhi/8Va9YNzXvS7JBERkbBjZtOzdYf2t5A7VCrh69bTjmNDiQaMiu0F09+H1ZP8LklERKRQUXCTfFM6Npp7ujfk3m3nsKd4Fa9vt/T9fpclIiJSaCi4Sb46r1UiDWpU5r7U/pC8EP58ye+SRERECg0FN8lXERHGoz2b8s2+ZiwodwqM+z/YsszvskRERAoFBTfJd80Sy3BJ2xpctfF8MiJj4Ntb1bebiIhIPlBwk6C46/QG7CuWwJDi/WDFeJg9zO+SREREwp6CmwRFuZIx3HlGAx7f2J5t8S3gx/tgzxa/yxIREQlrCm4SNJe2rUGjKmW5cVc/XOpO+Pm/fpckIiIS1hTcJGgiI4xHezXhj12VmFzlMpj1iXfYVERERI6JgpsEVZta8fRpWY1rVp5KWplaMOpWSEvxuywREZGwpOAmQXfvmQ1xUbG8FHsdbF0Gvz/nd0kiIiJhScFNgq5i6VhuOfU4Xl1VnfU1e8KEF2DTQr/LEhERCTsKblIg+p9Ui3oVSzEouQ+uWCmvb7fMTL/LEhERCSsKblIgoiMjePicJszeGsNv1W+E1RNh5kd+lyUiIhJWFNykwHQ8rgJnNq3MDX81JrXaiV73ILs3+V2WiIhI2FBwkwJ1/9mNAOPJqGshbR/88B+/SxIREQkbCm5SoBLLleCGrvUYsiiG1U2ug3lfwJJf/C5LREQkLCi4SYG7pnMdasSX4NoVnXHl68N3t8P+vX6XJSIiEvIU3KTAxUZH8mCPxvyVnMp3Ne+G7atg3FN+lyUiIhLyFNzEF6c2qsjJDRK4d3pp9jW9BP58FTbM9bssERGRkKbgJr4wMx48pwn70zN5Iu1SKF7Oux1WZobfpYmIiIQsBTfxTe0KJbm6U20+nr2LFW3uh7XTYNp7fpclIiISshTcxFc3nlKPKmViuXFuPVydU+CXR2DnOr/LEhERCUkKbuKrEjFR3H92I+av38XXiXdAZhp8f7ffZYmIiIQkBTfx3dnNqnBinfI8PGEvezvcCX+NgoWj/S5LREQk5Ci4ie/MjId7NmFXSjpPbu8GFRvD6DshdZffpYmIiIQUBTcJCQ0qx9HvxFp8PHUdy9o/4Z3n9tsTfpclIiISUhTcJGTcetpxlC8Zw12TiuHaXAVT3oK1M/wuS0REJGQouEnIKB0bzT3dGzJj9Xa+qXANlKwIo26BjHS/SxMREQkJCm4SUs5rlUjLGmV57Je17O32P9gwBya/6XdZIiIiIUHBTUJKRITxaM+mbNmTynNrGkL97jDmCdi+2u/SREREfKfgJiGnWWIZLj6hBkMmrmJ520cAg+/uBOf8Lk1ERMRXCm4Sku46owGlikXxwJjtuJP/A0t+hAVf+V2WiIiIrxTcJCTFl4zhztPr8+eyLXxfojdUaQ7f3wP7tvtdmoiIiG8U3CRkXdquJo2rlOax7xezr/vzsCcZfn3U77JERER8o+AmISsywni0VxPW70jhtYVx0G4QTHsP1kzxuzQRERFfKLhJSGtTK55zW1Zj8PjlrDr+NihdLdC3W5rfpYmIiBQ4BTcJef85syHRkcYjP62Cs5+FTQvgz5f9LktERKTAKbhJyKtYOpZbu9Xnt4Wb+DWzFTTqCeOega3L/S5NRESkQCm4SVjo16EWdRNK8ui3C0jp9j+IiIZvb1PfbiIiUqQouElYiImK4OGeTVi1ZS/vzE6Bbg/B8rEwZ7jfpYmIiBQYBTcJG52OS+DMppV5dcxS1ta7BKq1gR//A3u3+l2aiIhIgVBwk7By/9mNAPjf94vhnJcgZQf8/F+fqxIRESkYCm4SVhLLleD6rvX4bu56/thdGU68EWZ+DCsn+F2aiIhI0Cm4SdgZ2LkONeJL8PA380nrdBeUrQmjboX0VL9LExERCSoFNwk7sdGRPNijMUs27eaDqZugx/OwZQn8/rzfpYmIiASVgpuEpVMbVaRrgwRe/GUJmyp1hKbnw4TnIXmx36WJiIgEjYKbhCUz46FzmrA/PZOnv18E3Z+E6OLw7a2Qmel3eSIiIkGh4CZhq3aFklzdqTYjZiQxfUsUnPYYrPoDZn3id2kiIiJBoeAmYe2Gk+tRuXQsD349n4wWfaFGB/jpAdid7HdpIiIi+U7BTcJayWJR3H92I+av28mwaUlwzouwfw/8eJ/fpYmIiOQ7BTcJez2Or0L7OvH834+L2FaiNnS6HeYOh2W/+V2aiIhIvlJwk7BnZjzSsym7UtJ59qdF0PF2KF/Puwn9/r1+lyciIpJvFNykUGhQOY4rTqzJp1NWM29TKvR4AbathPHP+F2aiIhIvlFwk0Lj1m71KV8yhge/nkdmzU7Q4jL48xXYON/v0kRERPKFgpsUGmWKR3N394bMWL2dkTPXwumPQ2wZGHWL+nYTEZFCQcFNCpXzWyXSonpZnvx+ITsj4uCM/0HSVJj+nt+liYiI/GsKblKoREQYj/ZqwpY9qbz8yxI4/iKo3QV+eQR2rve7PBERkX9FwU0KneMTy3LxCTV4/8+VLN6027tQIWM//HCP36WJiIj8KwpuUijddUYDShWL4uFv5uPi60Dnu2DB17DoB79LExEROWYKblIoxZeM4c7T6/Pnsi18P28DdLgZEhrB6Dshdbff5YmIiByToAU3M3vPzDaZ2bxc2hua2UQzSzWzO7MMr25mY8xsgZnNN7NbsrQ9bGZrzWxW4HFWsOqX8Hdpu5o0rlKax79dwN7MCO92WDvWwJj/+V2aiIjIMQnmHrchQPfDtG8FbgaezTY8HbjDOdcYaA/cYGaNs7S/4JxrEXiMzs+CpXCJjDAe6dWEdTtSeH3MMqjRHlpfCZPfgHWz/C5PRETkqAUtuDnnxuOFs9zaNznnpgJp2Yavd87NCPy+C/gLqBasOqVwO6FWPOe2rMbg8ctZuXkPdHsYSiZ4fbtlpPtdnoiIyFEJ6XPczKwW0BKYnGXwjWY2J3AottxhXjvQzKaZ2bTk5ORglyoh7D9nNiQ60njs2wVQvCx0fwrWz4Ipg/0uTURE5KiEbHAzs1LACOBW59zOwOA3gLpAC2A98Fxur3fODXbOtXHOtUlISAh2uRLCKpaO5ZZux/Hrwk38tnAjNDkXjjsdfnsctq/xuzwREZE8C8ngZmbReKHtE+fclweGO+c2OucynHOZwNtAW79qlPDSv0Nt6iaU5JFRC0hJz4SzngUcjL4LnPO7PBERkTwJueBmZga8C/zlnHs+W1uVLE/PBXK8YlUku5ioCB7u2YRVW/by7oQVUK4mdP0PLP4e/vrG7/JERETyJJjdgQwFJgINzCzJzAaY2SAzGxRor2xmScDtwAOBcUoDJwGXA6fk0O3HM2Y218zmACcDtwWrfil8Oh2XQPcmlXn1t6Ws274P2l8PlZvB6LshZYff5YmIiByRuSJwmKhNmzZu2rRpfpchISBp215OfW4c3RpX4rVLW8Ha6fBON2gzAM7O3jONiIhIwTOz6c65Njm1hdyhUpFgSixXghtOrsd3c9bz59LNUK01tB0IU9+BNVP9Lk9EROSwFNykyBnYuQ7V44vz0DfzScvIhFMegNJV4evrIWXnkScgIiLiEwU3KXJioyN5sEcTlmzazYcTV0GxODj3LdiyDEZeC5mZfpcoIiKSIwU3KZK6NapI1wYJvPjzYjbtSoHanaD7k7BoNIx72u/yREREcqTgJkWSmfFgj8akpGfw9PeLvIFtB0KLy2DcU/DXKH8LFBERyYGCmxRZdRJKcXWnOoyYkcT0VVvBDM5+3rtgYeQg2PSX3yWKiIgcQsFNirQbT65H5dKxPPTNfDIyHUTHwkUfQ3QJGHYp7Nvmd4kiIiJ/U3CTIq1ksSjuP7sR89buZOiU1d7A0lW98LZ9DXwxADIz/C1SREQkQMFNirwex1fhxDrleXL0XyzdtNsbWKOd1yHvsl/h10f9LVBERCRAwU2KPDPj+YuaExsdyaCPp7M7Nd1raN0f2lwFf7wIc7/ws0QRERFAwU0EgCplivPKpS1Znrybe76Yw9+3guv+NNQ4Eb6+EdbP8bdIEREp8hTcRAI61K3APd0b8t3c9bw7YYU3MCoGLvwQSsTDsMtgz2Z/ixQRkSJNwU0ki4Gd69C9SWWe/H4hk5dv8QaWquhdrLB7I3zeHzLSfK1RRESKLgU3kSzMjP+74Hhqli/BDZ/OZOPOFK+hWivo+TKs/B1+esDfIkVEpMhScBPJJi42mrf6tmbv/nSu/2QG+9MD9y5tfjG0vwEmvwkzP/G3SBERKZIU3ERycFylOJ45/3imr9rG/0ZnuYPCaY9C7S7w7W2QNN2/AkVEpEhScBPJRY/jqzKgY22G/LmSr2et9QZGRsEFQyCuEnx2Geza6GuNIiJStCi4iRzGvWc2pG2teO4dMZeFG3Z6A0vEw8VDIWUHDL8c0lP9LVJERIoMBTeRw4iOjODVy1oSFxvFoI+mszMlcEVp5abQ+3VYMxm+v9vfIkVEpMhQcBM5gopxsbx2WSuStu3jjuGzycwMdM7b5FzoeDtMHwJT3/W1RhERKRoU3ETy4IRa8dx/diN+XrCRN8YtO9hwygNQ7zRvr9uqP/0rUEREigQFN5E86t+hFj2bV+W5nxYxYUngDgoRkXDeO1C2Jgy/Anas9bdIEREp1BTcRPLIzHjqvGYcVzGOm4fNZO32fV5D8bJwyVBIS/GuNE3b52udIiJSeCm4iRyFEjFRvNG3FWnpmVz/8XRS0zO8hoQG0GcwrJvp9fF24Cb1IiIi+UjBTeQo1UkoxbMXNmd20g4eGbXgYEPDs6DrfTB7KEx6w78CRUSk0FJwEzkGZzSpzHVd6/Lp5NUMn7bmYEPnu6BhD+9+psvH+lafiIgUTgpuIsfojtPqc1K98jzw1Tzmrd3hDYyIgHPfhAr14fP+sG2lnyWKiEghk+fgZmblzKyJmdUxMwU+KfKiIiN4+eKWlC8Zw6CPp7N9736voVgcXPwJuEwYdhns3+NvoSIiUmgcNoCZWRkzu8/M5gKTgLeA4cAqM/vczE4uiCJFQlX5UsV4o29rNu1M5ZZhsw52zlu+Lpz/HmxaAF9dr4sVREQkXxxpz9kXwBqgk3OugXOuo3OujXOuOvA00MvMBgS9SpEQ1qJ6WR7q2Zhxi5N56dclBxvqdYNuD8OCr2DCC36VJyIihUjU4Rqdc6cdpm0aMC3fKxIJQ5e2rcHM1dt56dclNK9ehlMaVvIaOtwM6+fAr49CpaZQ/3R/CxURkbCWp3PVzOzXvAwTKarMjMd7N6VxldLcOmwWq7fsPdAAPV/xbko/4mrYvNTfQkVEJKwd6Ry3WDOLByoELk6IDzxqAdUKpEKRMBEbHcmbfVtjZgz6eDopaYHOeWNKwMWfQmQUDLsUUnb6W6iIiIStI+1xuxaYDjQM/Dzw+Bp4NbiliYSfGuVL8OLFLfhrw07uHzkPd+CihLI14IIPYMtSGHktZGb6W6iIiISlwwY359xLzrnawJ3OuTrOudqBR3PnnIKbSA5OblCRm085jhEzkvh0yuqDDbU7QfcnYdFoGPe0fwWKiEjYOtKh0o4AzrlXcmkvbWZNg1GYSDi75dTj6NoggYe/mc/M1dsONrQdCC0ug3FPwV+j/CtQRETC0pEOlZ5nZn+a2YNmdraZtTWzzmZ2lZl9BHwLFC+AOkXCSkSE8eJFLahUOpbrP5nBlt2pXoMZnP08VGsNIwfBpr/8LVRERMLKkQ6V3gb0ANYDFwCPArcB9YA3nXOdnXNTg16lSBgqWyKGN/u2Zuue/dw0dCbpGYHz2qJj4aKPIaakd7HCvm2Hn5CIiEjAEbsDcc5tBUoDc4CfgQnAZqChmbUIanUiYa5ptTI83rspfy7bwnM/Lz7YULoqXPgRbF8DXwyAzAz/ihQRkbCR13uOtgYGAVWAqnhXm3YH3jazu4NUm0ihcEGb6lzargZvjF3GD/M2HGyo0Q7OfhaW/Qq/PuJfgSIiEjbyGtwSgVbOuTudc3fgBbmKQGegf5BqEyk0HjqnMc0Ty3Dn57NZnrz7YEPr/tBmAPzxEsz9wrf6REQkPOQ1uFUEUrM8TwMqOef2ZRsuIjkoFhXJ631bExMVwaCPp7N3f/rBxu5PQY0T4esbYf1s/4oUEZGQl9fg9gkw2cweMrOHgD+AT82sJLAgaNWJFCLVyhbnlUtasnTTbu4dMfdg57xRMXDhh1AiHoZdBns2+1uoiIiErDwFN+fcY8BAYHvgMcg596hzbo9z7rLglSdSuJxUrwJ3nN6Ab2avY8ifKw82lKroXWm6Jxk+7w8ZaX6VKCIiISyve9xwzk0L3EnhJefctGAWJVKYXdelLqc1rsQT3/3F1JVbDzZUawXnvAQrf4efHvCvQBERCVl5Dm4ikj8iIoznLmxOYrniXP/JDDbtTDnY2PxiaH8DTH4TZn7sX5EiIhKSFNxEfFA6Npo3L2/N7pR0bvx0JmkZWW46f9qjULsLfHsbJGnntoiIHKTgJuKThpVL89R5zZiycitPfb/wYENkFFwwBOIqw2d9YddG32oUEZHQouAm4qNeLarRv0Mt3p2wglGz1x1sKBEPFw+FlB0w/HJIV687IiKi4Cbiu/vOakSbmuW4Z8QcFm/cdbChclPo/TqsmQzf6wYlIiKi4Cbiu5ioCF67rBUlYqIY9NF0dqVk6QqkybnQ8XaYPgSmvutbjSIiEhoU3ERCQKXSsbx2aUtWbd3LXZ/POdg5L8ApD8Bxp3t73Vb96V+RIiLiOwU3kRDRrk55/nNmQ36Yv4HB45cfbIiIhD5vQ7laMPwK2JHkW40iIuIvBTeREDKgY23OblaFp39YyJ9Ls9z6qnhZuPhTSEvxbouVts+3GkVExD8KbiIhxMx4+vzjqZNQipuGzmT9jiwBLaEB9BkM62fBqFsh6+FUEREpEhTcREJMqWJRvNm3NSlpGVz38QxS0zMONjY8C06+H+YMg0lv+FekiIj4QsFNJATVq1iKZy9ozqw123n8278Obex0JzTs4d3PdPlYX+oTERF/KLiJhKgzm1Xh2s51+GjSKkZMz3JBQkQEnPsmVKgPn/eHbSv9KlFERAqYgptICLvrjAa0rxPPfSPnMn/djoMNxeLg4k/AZXoXK+zf41+RIiJSYBTcREJYVGQEr1zSinIlYrju4xns2Julc97ydeH892DTAvjqel2sICJSBAQ1uJnZe2a2yczm5dLe0Mwmmlmqmd2Zra27mS0ys6Vmdm+W4bXNbHJg+GdmFhPMeRDxW0JcMV67rBXrd+zjtuGzyMzMEtDqdYNuD8OCr2DCC36VKCIiBSTYe9yGAN0P074VuBl4NutAM4sEXgPOBBoDl5hZ40Dz08ALzrl6wDZgQD7XLBJyWtcsx4M9GvPbwk28OmbpoY0dboam58Ovj8Lin/wpUERECkRQg5tzbjxeOMutfZNzbiqQlq2pLbDUObfcObcfGAb0MjMDTgG+CIz3AdA73wsXCUF929fk3JbVeOGXxYxbnHywwQx6vuLdlH7E1bB5ae4TERGRsBaq57hVA9ZkeZ4UGFYe2O6cS882/B/MbKCZTTOzacnJyTmNIhJWzIz/nduMBpXiuGXYTNZs3XuwMaaEd2eFyCgYdimk7PSvUBERCZpQDW7/mnNusHOujXOuTUJCgt/liOSL4jGRvNm3NRmZjus+mU5KWpbOecvWgAs+gC1LYeS1kJnpX6EiIhIUoRrc1gLVszxPDAzbApQ1s6hsw0WKjFoVSvLChS2Yt3YnD309/9DG2p2g+5OwaDSMe8qfAkVEJGhCNbhNBY4LXEEaA1wMfOOcc8AY4PzAeP2Ar32qUcQ33RpX4qZT6vHZtDUMm7L60Ma2A6FFXxj3NPw1yp8CRUQkKKKOPMqxM7OhQFeggpklAQ8B0QDOuTfNrDIwDSgNZJrZrUBj59xOM7sR+BGIBN5zzh3YtXAPMMzMHgdmAu8Gcx5EQtWt3eoza812Hvx6Po2qlKZ59bJegxmc/Rwk/wUjB0H5elCxka+1iohI/jBXBDrtbNOmjZs2bZrfZYjku2179tPjlQkAjLqpI/Els3RruHMdDO4K0SVg4BgoXs6fIkVE5KiY2XTnXJuc2kL1UKmI5EG5kjG80bcVybtTuWXYTDKyds5buipc+BHsSIIvroLMjNwnJCIiYUHBTSTMHZ9Ylsd6NeH3JZt54efFhzbWaOcdNl32G/z6iD8FiohIvgnqOW4iUjAuOqEGM1Zt59UxS2levSynNa50sLF1P1g/G/54CeKqQvtB/hUqIiL/iva4iRQSj/RqQrNqZbh9+CxWbt5zaOOZT0PDHvDDPTD1HX8KFBGRf03BTaSQiI2O5PXLWhEZYQz6eDr79mc5py0yGs5/H+qfCd/dAdOH+FaniIgcOwU3kUKkenwJXrq4JYs27uK+kXM55KrxqBi48AOodxqMuhVmfuJbnSIicmwU3EQKmS71E7i9W31GzlzLR5NWHdoYVQwu+hjqdIWvb4DZn/lSo4iIHBsFN5FC6IaT63Fqw4o8OmoB01dtPbQxOta7IX2tjvDVIJg3wp8iRUTkqCm4iRRCERHG8xe1oFq54lz/yQySd6UeOkJMCbj0M6hxIoy4BhboznEiIuFAwU2kkCpTPJo3LmvNjn1p3PjpDNIzMg8dIaakF94S23gd9C78zp9CRUQkzxTcRAqxxlVL82SfZkxesZVnflz0zxGKxcFlX0CVFjC8Hyz+scBrFBGRvFNwEynkzm2ZyBUn1mTw+OW88/vyf44QWxr6joDKTeGzvrD0l4IvUkRE8kTBTaQI+G+PxpzZtDKPf/cXg8cv++cIxctC3y8hoQEMuwyWjy3oEkVEJA8U3ESKgOjICF6+pCU9jq/C/0Yv5PWxS/85Uol4uPxriK8Ln14MK34v+EJFROSwFNxEiojoyAhevKgFvVpU5ZkfFvHyr0v+OVLJ8nDF11CuJnx6EayaWPCFiohIrhTcRIqQqMgInr+wBX1aVeP5nxfz/M+LD727AkCpBLjiGyhdFT45H9ZM8adYERH5BwU3kSImMsL4v/Obc2GbRF7+dQnP/rTon+EtrhL0GwWlKsLH50HSdH+KFRGRQyi4iRRBkRHGU32O55K21XltzDKe+mHhP8Nb6SpeeCteDj4+F9bN8qVWERE5SMFNpIiKiDCe6N2Mvu1r8Na45Tzx3V//DG9lEqH/t1CsDHzYCzbM9adYEREBFNxEirSICOOxXk3p36EW70xYwSOjFvwzvJWtAf2+8e608GEv2LjAn2JFRETBTaSoMzMeOqcxAzrWZsifK/nv1/PIzMwW3uJre4dNI2Pgw56QnMNdGEREJOgU3EQEM+OBsxtxbZc6fDxpNfd/lUN4K1/XC28WAR+cA5tz6E5ERESCSsFNRAAvvN3bvSE3nFyXoVNWc++Xc8jIHt4qHOd1FZKZ4YW3LTnchUFERIJGwU1E/mZm3Hl6A2459TiGT0viri9m/zO8VWzo7XlLT4UPesK2lb7UKiJSFCm4icghzIzbTqvP7afV58sZa7l9+CzSMzIPHalSY+8OC/t3w5BzYPtqf4oVESliFNxEJEc3n3ocd53RgK9nreOWz2aRlj28VTkervgKUnZ4h013rPWlThGRokTBTURydcPJ9bjvrIZ8N2c9Nw+d+c/wVrUlXD4S9m6FD3rAzvX+FCoiUkQouInIYQ3sXJf/9mjM9/M2cMMnM9ifni28JbaGviNg9yZvz9uujf4UKiJSBCi4icgRDehYm0d6NuGnBRu57uPppKZnHDpC9bZw2eewc63Xz9vuZH8KFREp5BTcRCRP+nWoxeO9m/Lrwk1c+9F0UtKyhbeaHeDS4bBtlXeHhT1b/ClURKQQU3ATkTzr274mT/VpxrjFyVzz4bR/hrfaneCSobB1GXzUyzv3TURE8o2Cm4gclYvb1uCZ845nwtLNXDVkKvv2ZwtvdU+Giz/xbov10bmwb7svdYqIFEYKbiJy1C5oU53nL2zOpOVb6P/+FPakph86Qr1ucNHHsHE+fHwepOz0p1ARkUJGwU1Ejsm5LRN54aIWTF25lf7vT2F39vBW/wy48ANYPws+OR9Sd/lSp4hIYaLgJiLHrFeLarxySStmrN7OFe9OZldK2qEjNDwbzn8PkqbBJxfC/j3+FCoiUkgouInIv3L28VV47dKWzEnaQd93p7BjX7bw1rgXnPc2rJkEn14E+/f6U6iISCGg4CYi/1r3plV4/bJWLFi3g77vTGb73v2HjtD0POj9JqycAMMuhbQUfwoVEQlzCm4iki9Ob1KZN/u2ZtGGXVz2zmS27ckW3ppfBL1eg+Vj4bPLID3VlzpFRMKZgpuI5JtTG1Vi8BWtWbJpN5e8PYktu7OFs5aXwTkvwdJfYPgVkL4/5wmJiEiOFNxEJF91bVCRd/u1YcXmPVzy9iSSd2ULb637wdnPweIf4IsrISMt5wmJiMg/KLiJSL7rdFwC7/c/gTVb93HJ25PYtCvbOW0nXA1nPgMLv4URV0NGes4TEhGRQyi4iUhQdKhXgfevPIF12/dx8eBJbNyZLby1uxZOfwIWfAVfDYLMjBynIyIiBym4iUjQtK9Tng+uasvGHSlc9NZE1u/Yd+gIHW6Ebg/D3M/h6xsU3kREjkDBTUSC6oRa8Xw4oB1bdu/norcmkbQtWz9uHW+Dkx+A2UNh1M2QmelPoSIiYUDBTUSCrnXNcnx0dTu27fXC25qt2cJbl7ugyz0w82P47nZwzp9CRURCnIKbiBSIFtXL8unV7dmdms7Fgyexaku22191/Q90vB2mvw+j71J4ExHJgYKbiBSYZoll+PSaduzdn85Fb01ixeYs4c0MTn0QOtwEU9+GH+9TeBMRyUbBTUQKVJOqZfj0mvbsz8jkorcmsix598FGMzjtMWh3HUx6HX5+UOFNRCQLBTcRKXCNqpRm6DXtyXSOi96axJKNuw42mkH3J+GEa+DPl+G3xxTeREQCFNxExBcNKscxbGB7zODiwZNYtCFbeDvzGWjdH35/DsY+5VudIiKhRMFNRHxTr6IX3qIijUvensSCdTsPNkZEwNkvQMu+MO4pGP9//hUqIhIiFNxExFd1E0rx2cATKRYVwaXvTGLe2h0HGyMi4JyX4fiL4bfHYcKLvtUpIhIKFNxExHe1KpTks4EnUjImikvfnsScpO0HGyMioffr0PQ8+OUhmPiab3WKiPhNwU1EQkKN8iUYNrA9ZUpEc9k7k5m5etvBxohIOHcwNO7ldRMy+S3/ChUR8ZGCm4iEjOrxJRg28ETiS8Zw+btTmL5q68HGyCg4711o2AO+vxumvutfoSIiPlFwE5GQUq1scYYNbE9CXDGueHcKU1ZkDW/RcP77UL+7d2us6R/4V6iIiA8U3EQk5FQp44W3ymVi6ffeFCYu23KwMSoGLvwQ6nWDUbfArE/9K1REpIApuIlISKpUOpahA9uTWK44Vw6Zwh9LNx9sjCoGF30MdbrAV9fDnOH+FSoiUoAU3EQkZFWM88JbzfiSXDVkKuMXJx9sjC4OFw+FWh1h5LUwb4R/hYqIFBAFNxEJaRVKFWPowPbUSSjF1R9OY8zCTQcbY0rApZ9B9fYw4hqY87l/hYqIFICgBTcze8/MNpnZvFzazcxeNrOlZjbHzFoFhp9sZrOyPFLMrHegbYiZrcjS1iJY9YtI6IgvGcPQa9pRv1Iprv1oOr8s2HiwMaYkXDYcarSHL6+GsU/r3qYiUmgFc4/bEKD7YdrPBI4LPAYCbwA458Y451o451oApwB7gZ+yvO6uA+3OuVlBqFtEQlDZEjF8MqA9jarEcd0n0/lx/oaDjcXi4PKR0PwSGPs/+HIgpKX4V6yISJAELbg558YDWw8zSi/gQ+eZBJQ1syrZxjkf+N45tzdYdYpI+ChTIpqPrm5H02pluOGTGYyeu/5gY1Qx6P0GnPJfmDscPuwJezbnPjERkTDk5zlu1YA1WZ4nBYZldTEwNNuwJwKHVl8ws2K5TdzMBprZNDOblpycnNtoIhJmSsdG8+FVbWlevSw3DZ3JqNnrDjaaQec74YIhsH42vH0KbFroW60iIvktZC9OCOx9awb8mGXwf4CGwAlAPHBPbq93zg12zrVxzrVJSEgIaq0iUrDiYqP54Kq2tK5RjluGzeTrWWsPHaHJudB/NKTtg3dPg2W/+VOoiEg+8zO4rQWqZ3meGBh2wIXASOdc2oEBzrn1gUOrqcD7QNsCqVREQk6pYlEMueoE2tUuz22fzWLE9KRDR0hsDdf8BmWqw8fn6xZZIlIo+BncvgGuCFxd2h7Y4ZzLcsIKl5DtMOmBc+DMzIDeQI5XrIpI0VAiJor3+p9Ah7oVuPOL2bw7YQUu6xWlZavDgB+9uyx8dzv88B/IzPCvYBGRfymY3YEMBSYCDcwsycwGmNkgMxsUGGU0sBxYCrwNXJ/ltbXw9saNyzbZT8xsLjAXqAA8Hqz6RSQ8FI+J5J1+bejWqBKPfbuAGz+dya6UtIMjFIuDS4ZCu+tg0usw7FJI3eVfwSIi/4K5ItDfUZs2bdy0adP8LkNEgigz0zH49+X834+LqBFfgtcva0WjKqUPHWnqOzD6bqjYyOu4t0yiP8WKiByGmU13zrXJqS1kL04QETkaERHGoC51+fTqduxJTaf3a38wfOqaQ0c64Wqvs97tq70rTtdO96dYEZFjpOAmIoVKuzrl+e7mTrSuWY67R8zhzs9ns29/lvPa6nWDAT9DVCy8fzbM/8q3WkVEjpaCm4gUOglxxfhoQDtuPqUeI2Ykce7rf7AseffBESo29K44rXI8fN4Pfn9Ot8kSkbCg4CYihVJkhHH76Q14v/8JbNyZQs9XJvDtnCyd9ZasAFd8A80ugF8fha+uh/T9/hUsIpIHCm4iUqh1bVCR727uRIPKcdz46Uwe+noeqemBQ6fRsdDnbeh6H8z+FD7qDXsPd6c+ERF/KbiJSKFXtWxxPrv2RAZ0rM0HE1dx4ZsTSdoWuAWyGXS9B857F5KmwTunwuYl/hYsIpILBTcRKRKiIyP4b4/GvNm3FcuT93D2yxP4beHGgyM0Ox/6fwspO73wtjx7N5IiIv5TcBORIqV70yqMuqkj1coW56oh03j6h4WkZ2R6jdXbehctxFWFj/vA9A/8LVZEJBsFNxEpcmpVKMmX13fgkrbVeWPsMi57ZzKbdqZ4jeVqerfJqt0FRt0MPz2g22SJSMhQcBORIik2OpIn+xzP8xc2Z07SDs56eQJ/LtscaCwDlw6HE66BP1+Bzy6H/Xv8LVhEBAU3ESni+rRK5OsbT6JM8Sj6vjOZV39bQmamg8goOPtZOPMZWPw9vNcddq478gRFRIJIwU1Eirz6leL45saO9Di+Ks/+tJirPpjKtj2BPt3aXQuXfAZbl3u3yVo3y9daRaRoU3ATEQFKFovipYtb8Fjvpvy5dAtnv/w7M1Zv8xrrnw4DfoKIKHj/TPjrW3+LFZEiS8FNRCTAzLi8fU2+uO5EIiKMi96ayHsTVuCcg0pN4OpfoWIj+Kwv/PGSbpMlIgVOwU1EJJvjE8vy3U2d6FK/Io9+u4AbPp3BrpQ0iKsE/b+DJr3h5wfhm5t0mywRKVAKbiIiOShTIpq3r2jNf85syI/zN3LOKxNYsG4nRBeH896DznfBzI+8/t72bfO7XBEpIhTcRERyYWZc26UuQ69pz760DM59/Q+GT10DERFwygNw7luwZjK80w22LPO7XBEpAhTcRESOoG3teL67uRNtapXj7hFzuPPz2ezbnwHNL4YrvvZuTP/OqbDyD79LFZFCTsFNRCQPKpQqxodXtePmU49jxIwker/2B8uSd0PNDnDNr1AyAT7sBbM+9btUESnEFNxERPIoMsK4/bT6fHBlW5J3p9LzlQmMmr0O4uvAgJ+9EPfVdfDLI5CZ6Xe5IlIIKbiJiBylzvUT+O7mjjSsUpqbhs7kwa/nkRodB31HQOv+MOF5+KI/7N/rd6kiUsgouImIHIMqZYozbGB7ru5Ymw8nruLCNyeyZkca9HgRTn8CFnwDQ86GXRv8LlVEChEFNxGRYxQdGcEDPRrzZt/WLE/eQ49XJvDrwk3Q4Ua4+FNIXgRvnwob5vpdqogUEgpuIiL/Uvemlfn25o4klivOgA+m8dT3C0k/rjtc9QO4TO8G9Yt+8LtMESkEFNxERPJBzfIlGXFdBy5pW4M3xy3j0ncms6lkfbjmNyhfD4ZeDBNf022yRORfUXATEcknsdGRPNmnGS9c1Jy5STs46+Xf+XNTNFw5Ghr1gB/vg29vg4w0v0sVkTCl4CYiks/ObZnI1zeeRJni0fR9dzKv/L6OzPM/gJNuhenvwycXwL7tfpcpImFIwU1EJAjqV4rjmxs7ck7zqjz382Ku/GA6WzvcD71eg5W/w7unw9YVfpcpImFGwU1EJEhKFovixYta8HjvpkxctoUeL//OjPJnw+Vfwe6N3m2yVk/yu0wRCSMKbiIiQWRm9G1fkxHXdSAy0rjwzYm8tzYRd/UvEFsWPjgH5gz3u0wRCRMKbiIiBaBZYhm+vbETJzesyKPfLuD6H3ay8/IfILEtfHkN/PaErjgVkSNScBMRKSBlSkQz+PLW3HdWQ35asJGe78xnQbcPoEVfGP8MfHEVpO3zu0wRCWEKbiIiBcjMGNi5LsMGtmdfWgbnvjWVz6rejTv1YZj/pXfodPcmv8sUkRCl4CYi4oMTasXz3c2dOKFWPPd8OY87159Cap8hsGGed5usjQv8LlFEQpCCm4iITyqUKsYHV7XlllOP48uZSZzzazxreo+AjP1edyFLfvG7RBEJMQpuIiI+iowwbjutPh9c2ZbNu/fTffgufuo4FOJrwacXwOTBfpcoIiFEwU1EJAR0rp/Adzd3pGGV0gz8aj2PJTxPRr3T4fu7YPRdkJHud4kiEgIU3EREQkSVMsUZNrA913SqzbtTkzlv6/XsbDkIpgz2blKfstPvEkXEZwpuIiIhJDoygvvPbsxbl7dm2ZYUOs48hQWtH4PlY7w7Layf43eJIuIjBTcRkRB0RpPKfHtTR6rHl+CsP+rySf2XcCk74e1T4I+XIDPD7xJFxAcKbiIiIapm+ZKMuK4Dl7arwf2zytEv9kV21ugGPz8IH/aC7Wv8LlFECpiCm4hICIuNjuR/5zbjpYtbMG9bFC0W9WVkjftwa2fAGyfB3C/8LlFECpCCm4hIGOjVohpj7ujK5e1rcceSpvTMeIbNJWrDiAEw4mrYt93vEkWkACi4iYiEiTIlonmkV1O+vakTsRXr0G79HXxc4nLcvC+9vW8rfve7RBEJMgU3EZEw07hqaYZfeyLPXtSKl9J6c27qQ2xOAffBOd75b+mpfpcoIkGi4CYiEobMjHNbJvLbHV044aTTOHn3Y3xBN/jjJdw7p8KmhX6XKCJBoOAmIhLG4mKjuf/sxnx5y2l8lXgnA/bfwY6Nq8l8qzNMfguc87tEEclHCm4iIoXAcZXi+HhAO8675Boui36BMfsbw/d3k/rBubBrg9/liUg+UXATESkkzIyzmlXh8zt7MeOkN3gwYwCZK/4g5eV2pM//xu/yRCQfKLiJiBQyJWKiuKt7I6685TEeqfYmi1PLEfX55Wz86GpI3eV3eSLyLyi4iYgUUrUrlOTJa/qQfMEoPog6nwpLvyD52bYkL1C3ISLhSsFNRKQQMzNObVadi+4ZzJfN3yZ1fxrxn53D1PfvJDU1xe/yROQoKbiJiBQBsdGRXNDnAhg0gSlx3Thh1dsse7oTk6dN8bs0ETkKCm4iIkVIYpXKnHjnFyw46SUSM9fRdFQPPnj1EdZs2eN3aSKSBwpuIiJFUOPT+hN78yS2xTen3+bnWfRST94cPZmUtAy/SxORw1BwExEpomLiq5N404/s7PIIXSNnc97kC3jg/57nx/kbcOq4VyQkKbiJiBRlERGUPvlWogaNo0S5yjy7/3E2DL2Rge/+zvLk3X5XJyLZKLiJiAhUakLJG8aT0f4G+kX9zH/WDOK2Fz/g6R8Wsic13e/qRCRAwU1ERDzRsUR2/x9c8TU14zL5Mvq/8PsLnPbsb4yavU6HT0VCgIKbiIgcqk5XIq//k8jG53BP9DAGu4d5ethPXPL2JBZt0J0XRPwU1OBmZu+Z2SYzm5dLu5nZy2a21MzmmFmrLG0ZZjYr8Pgmy/DaZjY58JrPzCwmmPMgIlIklYiHC4bAuW/RJGI1v5W8nzrrv+Osl8fz6KgF7ExJ87tCkSIp2HvchgDdD9N+JnBc4DEQeCNL2z7nXIvAo2eW4U8DLzjn6gHbgAH5W7KIiABgBs0vxq77g5iqzfife4WRFd9lxJ9zOeXZcYyYnkRmpg6fihSkoAY359x4YOthRukFfOg8k4CyZlYlt5HNzIBTgC8Cgz4AeudTuSIikpNyNaH/d3Dqgxy/cxxT4x/irFKLuOPz2Vzw1kTmrd3hd4UiRYbf57hVA9ZkeZ4UGAYQa2bTzGySmfUODCsPbHfOpecw/iHMbGDg9dOSk5ODULqISBESEQmd7oCrfyEmthSPbr+PHxv/yLrN2znn1Qk88NVctu/d73eVIoWe38HtcGo659oAlwIvmlndo3mxc26wc66Nc65NQkJCcCoUESlqqraEa8fDCVfTYPkHTIh/nLtaZjB0yhpOfnYsn05eTYYOn4oEjd/BbS1QPcvzxMAwnHMHfi4HxgItgS14h1Ojso8vIiIFJKYEnP0cXDqcyL2buH7R1fzRZSH1K5bkvpFz6f3aH8xYvc3vKkUKJb+D2zfAFYGrS9sDO5xz682snJkVAzCzCsBJwALndSI0Bjg/8Pp+wNd+FC4iUuTVPwOumwh1T6HyxEcYVuIZ3upVhU27Uujz+p/c/cVsNu9O9btKkULFgtmhopkNBboCFYCNwENANIBz7s3AxQav4l15uhe40jk3zcw6AG8BmXjh8kXn3LuBadYBhgHxwEygr3PusFuGNm3auGnTpuX/DIqICDgH04fAj/dBZAz7znyBF9c14r0JK4iNjuSO0+rTt31NoiL93lcgEh7MbHrgdLF/thWFnrAV3ERECsDmpfDlNbBuBrS4jGVt/svDP67m9yWbaVg5jkd6NqFdnfJ+VykS8g4X3PTvj4iI5I8K9WDAT9D5bpg9lLpfnMGH3TJ5s29rdqWkc9HgSdwybCYbd6b4XalI2FJwExGR/BMZDafcD1f+AIANOYvum97hl1s6cPMp9fh+3gZOeXYsb41bxv70TJ+LFQk/Cm4iIpL/arSDQROg+aUw/v8o/lF3bm8Vyc+3debEuuV58vuFdH9pPL8vUT+bIkdDwU1ERIIjtjT0fg0u+AC2rYS3OlFzxWe8c0Ub3uvfhoxMx+XvTuG6j6eTtG2v39WKhAVdnCAiIsG3cx18dT0sHwP1u0PPV0kpFs+7E1bwym9LALi+az0GdKxNyWJRR5iYSOGmq0oV3ERE/JeZCVPegp8f8vbG9XwVGnRn7fZ9PPHdAkbP3UCZ4tH0O7Em/TrUonypYn5XLOILBTcFNxGR0LFxgddtyMZ50OYqOP1xiCnJjNXbeHPsMn5asJHY6AgubFOdazrVoXp8Cb8rFilQCm4KbiIioSU9FX57DP58FcrXhT5vQ7VWACzdtJvB45cxcuZaMh30OL4Kg7rUpVGV0j4XLVIwFNwU3EREQtPycfDVdbB7I3S5Fzre6nUpAqzfsY/3Jqzg08mr2bM/g64NEhjUpS7tasfj3XhHpHBScFNwExEJXfu2wbe3w/wvoUJ9OP0JOO40CISzHXvT+HjyKt6bsIIte/bTonpZBnWpy+mNKxERoQAnhY+Cm4KbiEhocw4W/wA/PQBblkLdU+GMJ6Bio79HSUnL4PPpSQwev4w1W/dRN6Ek13auS++W1YiJUu9WUngouCm4iYiEh/T9MPUdGPcUpO6GNldC1/ug5MF7nKZnZDJ63gbeHLuMBet3Url0LAM61uaSdjUopa5EpBBQcFNwExEJL3u2wNgnYdp7EFMKut4DJ1wDUTF/j+KcY/ySzbw5dhkTl2+hdGwUV5xYi/4n1aKCuhKRMKbgpuAmIhKeNi2EH++DZb9CfF3v8Gn97n+f/3bArDXbeXPsMn5csIGYyAguaJPIwE51qVFeXYlI+FFwU3ATEQlvS372AtzmxVC7C5zxP6jc9B+jLUvezdvjl/PljLWkZ2Zy9vFVGdSlDk2qlvGhaJFjo+Cm4CYiEv4y0mDa+zD2f5CyA1pdASc/AKUS/jHqxp0pvDdhBZ9MXs3u1HQ6109gUJc6nFinvLoSkZCn4KbgJiJSeOzdCuOegalvQ3QJ6HwntBsEUf88r23HvjQ+nrSK9/9YyebdqTRPLMN1XetyWuPKRKorEQlRCm4KbiIihc/mJV73IYt/gHK1vFtnNezxj/PfwOtKZMSMJAaPX86qLXupU6EkAzvX4dxW1SgWFVnwtYschoKbgpuISOG19Ff48X5I/gtqdoTu/4MqzXMcNSPT8f289bw5bhnz1u6kYlwxBnSszaXtahAXG13AhYvkTMFNwU1EpHDLSIcZH8CYJ7xDqS37win/hbhKOY7unOOPpVt4Y9xS/li6hbjYKC5vX5MrT6pNQpy6EhF/KbgpuImIFA37tsP4/4PJb3nnvHW6HdrfANGxub5kTtJ23hq3nNHz1hMdGcEFrRMZ2LkONcuXLLi6RbJQcFNwExEpWrYsg58fhIXfQtkacNqj0Lh3jue/HbBi8x4Gj1/OiOlJpGdmcmazKlzXpS5Nq6krESlYCm4KbiIiRdPycV7/bxvnQY0Tvf7fqrU67Es27UzhvT9W8smkVexKTafTcRUY1KUuHeqqKxEpGApuCm4iIkVXZgbM/Ah+exz2JEPzS+HUB6F0lcO+bGdKGp9OXs27E1aQvCuV4xPLMKhLXc5ooq5EJLgU3BTcREQkZSf8/hxMeh0ioqDjbXDijRBz+NtipaRlMHLmWgaPX86KzXuoXaEk13SqQ59W1YiNVlcikv8U3BTcRETkgK0rvPPf/voGSifCaY9A0/MOe/4beF2J/Dh/A2+OW8acpB0kxBXjqpNqc1n7GpRWVyKSjxTcFNxERCS7lRPgh//AhjmQ2Ba6PwmJOf6tPIRzjonLtvDGuGX8vmQzccWiuKx9Ta46qRYVS+d+9apIXim4KbiJiEhOMjNg9lD49VHYvRGaXQjdHoIyiXl6+by1O3hz3DJGz11PVEQE5wW6EqldQV2JyLFTcFNwExGRw0ndBRNegD9fBYuAk26Bk26GmLwFsFVbvK5EPp+eRFpGJmc2rcygLnU5PrFscOuWQknBTcFNRETyYtsq+OVhmP8lxFX19r41uxAiIvL08uRdqbz/xwo+mrSKXSnpnFSvPIO61KVjvQrqSkTyTMFNwU1ERI7G6knww72wbiZUbQXdn4Ia7fL88l0paQydspp3fl/Bpl2pNK1WmkFd6nJm0yrqSkSOSMFNwU1ERI5WZibM+Qx+fQR2rfeuPO32sHcnhjxKTc/gq5lreWvccpZv3kOl0sXo3bIa57VKpH6luODVLmFNwU3BTUREjtX+PfDHS/DHy4Dz+n7reBsUK5XnSWRkOn75ayOfT0ti7KJNpGc6mlYrTZ+WifRsUZUKpXRjezlIwU3BTURE/q0dSfDLIzB3OJSqBKc+BM0vyfP5bwds2Z3KqNnr+HLmWuYk7SAywuhaP4E+rRI5tVFFdeorCm4KbiIikm/WTPXOf1s7Dao0hzOehFonHdOklmzcxZcz1zJyxlo27EwhLjaKHsdX5bxW1Whds5wuaCiiFNwU3EREJD85B3O/8K5A3ZkEjXvBaY9CuVrHNLmMTMek5VsYMSOJH+ZtYO/+DGrEl6BPq2r0aZlIjfKHvy2XFC4KbgpuIiISDPv3wsRXvT7gMtOh/fXQ6Q6ILX3Mk9yTms6P8zfw5Yy1/LFsM87BCbXK0adVImc1q0KZ4rq9VmGn4KbgJiIiwbRznXf3hdlDoWQCnPJfaNkXIv7d+Wrrd+zjq5nrGDEjiaWbdhMTFcFpjStxXqtqdDougejIozu/TsKDgpuCm4iIFIS10+GH+2DNJKjUDLr/D2p3/teTdc4xb+1ORsxI4pvZ69i6Zz8VSsXQs3k1+rSqRpOqpXU+XCGi4KbgJiIiBcU5mD8Sfn4IdqyGhj2889/K182XyadlZDJuUTJfzkzilwWb2J+RSYNKcfRpVY3eLatRSTe6D3sKbgpuIiJS0NL2waTX4ffnIT0V2l3rnf9WIj7f3mLH3jS+nbuOL2esZfqqbUQYnFSvAue1SuT0JpUoEROVb+8lBUfBTcFNRET8smsD/PYYzPwEoopBk3Oh9ZVQvS3k4+HNFZv3MHJGEl/OXEvStn2UjInkzGZV6NOqGu1rlydCt9oKGwpuCm4iIuK3jfNhytsw93PYvxsqNobW/eH4i6B42Xx7m8xMx9SVWxk5cy3fzVnPrtR0qpaJ5dxW1Ti3ZSL1Kub9jg/iDwU3BTcREQkVqbth3hcwfYh3E/uo4t5euDZXQuIJ+boXLiUtg58XbOTLGUmMX7KZjExH8+plOa9VNXocX5X4kjH59l6SfxTcFNxERCQUrZsF09/3OvPdvxsqNgnshbswX/fCAWzalcI3s7zz4Ras30l0pHFyg4r0aZXIyQ0TKBalW22FCgU3BTcREQllqbu88Db9fVg/29sL17SPdy5cYpt83QsH8Nf6nYycuZaRM9eSvCuVsiWiOef4qvRpVY0W1cuqaxGfKbgpuImISLhYNxOmBfbCpe2BSk0P7oWLLZOvb5WekcmEpZv5csZafpy/gdT0TOpUKPl31yKJ5XSrLT8ouCm4iYhIuEnd5V3IMO192DAHoksc3AtXrXW+74XblZLG93M3MGJGEpNXbAWgfZ14+rRK5MymlYmL1a22CoqCm4KbiIiEK+e8vXDT34e5IwJ74ZpBm/7Q7IJ83wsHsGbrXr6auZYvZ65lxeY9xEZHcEaTyvRplchJdcsTpVttBZWCm4KbiIgUBik7vb1w09+HDXMDe+HO865Irdoq3/fCOeeYuWY7X85IYtTs9ezYl0bFuGL0bundaqth5dL5+n7iUXBTcBMRkcLEOVg3wzuMOm8EpO2Fys28w6jNLoDY/A9UqekZjFm4iREz1jJm4SbSMx2Nq5SmT6tq9GxRlYpxutVWflFwU3ATEZHCKmVH4Fy4IbBxLkSXhGbnBc6FaxWUt9y6Zz+jZq/jyxlJzE7aQWSE0fm4CvRuWY0u9RMoW0L9w/0bCm4KbiIiUtg5B2tnwPT3YN6X3l64Ks29K1KbXQDF4oLytks37eLLGV7XIut3pBBh0KpGOU5uWJGTG1SkUZU4dS9ylBTcFNxERKQoSdkBc4Z7d2fYOC+wF+78wLlwLYPylpmZjllJ2xm7cBNjFiUzd+0OACqXjuXkhgl0bVCRk+pVoFQx3fj+SBTcFNxERKQocg7WTj94Llz6PqjSIrAX7vyg7YUD2LQzhbGLkxm7aBO/L97MrtR0oiONtrXjOblBRU5uWJE6FUpqb1wOFNwU3EREpKjbt/1gv3Cb5kNMKS+8tb4SqrYI6lunZWQybeU2xi7axJhFm1i8cTcANeJLcErDinRtkED7OuWJjdZtt0DBTcFNRETkAOcgaZrXpci8L729cFVbenvhmp4PxUoFvYQ1W/d6e+MWbuKPZZtJScskNjqCDnUrBM6NSyjSd21QcFNwExER+ad92wPnwr0PmxZATBwcf4EX4qo0L5ASUtIymLR8C2MXJfPbwk2s3roXgOMqlvr7Aoc2tcoRXYQ6/VVwU3ATERHJnXOQNNU7jDr/S0hP8Tr0bXMlNOlTIHvhvDIcyzfvYczCTYxdlMzkFVtIy3DEFYui43He3riu9ROoWLpw9xmn4KbgJiIikjf7tnl74aa9D8l/BfbCXeiFuMrNCrSU3anp/LF0s3du3MJkNuxMAaBptdKc0qAiXRtWpHliWSIjCtcFDr4ENzN7D+gBbHLONc2h3YCXgLOAvUB/59wMM2sBvAGUBjKAJ5xznwVeMwToAuwITKa/c27WkWpRcBMRETlKzsGayV6XIvNHenvhqrX2LmZo2gdiShZwOY6/1u9izKJNjFm4iRmrt5HpIL5kDF3qJ9C1QUKh6fzXr+DWGdgNfJhLcDsLuAkvuLUDXnLOtTOz+oBzzi0xs6rAdKCRc257ILh965z74mhqUXATERH5F/ZuPXguXPJCKFba2wvX+kqo/I8/8QVi+979jF+ymbELNzF2cTJb9+wnwqBljXJ/X6nauErpsOxuxLdDpWZWCy9o5RTc3gLGOueGBp4vAro659ZnG282cH4gyA1BwU1ERMQfzsHqSQf3wmWkQuIJ3sUMTfpAjD9XgmZkOuYkbWfMomTGLNz0d+e/lUoX4+QGFenaoCIdjwufzn9DNbh9CzzlnJsQeP4rcI9zblqWcdoCHwBNnHOZgeB2IpAK/Arc65xLzeW9BwIDAWrUqNF61apV+TlrIiIiRdverTB7mBfiNi+CYmWg0TlQqQkk1IcKDaB0NYgo+KtBN+1KYdyiZMZk6/z3hFrxgb1xFambELqd/4ZlcDOzKsBYoJ9zblKWYRuAGGAwsMw59+iR6tAeNxERkSBxDlZP9C5mWPqzd3HDAdEloMJxXohLqA8VAoEuvg5EFcy5aGkZmUxfte3vc+MOdP5bPb7433dwODHEOv8N1eCW66FSMyuNF9r+l9thUTPrCtzpnOtxpDoU3ERERAqAc7Bns7cHbvNiSF4c+H0J7FhzcDyL9MJbhfoH985VqO+FvNjSQS0xadtexi7ybsX1x9It7EvLoFhUBB3qlv97b1z1eH87/z1ccPPzYO83wI1mNgzv4oQdgdAWA4zEu6jhkNBmZlUC4xjQG5hX0EWLiIhILsygVIL3qNXx0LbU3bBlSSDMBQJd8mJY8iNkph8cL65qlr1z9SGhgRfsSlX0pv8vJZYrQd/2NenbviYpaRlMXrGVMQu9W3GN+Xo+MJ96FUv9fYFDm5rxxESFTue/wbyqdCjQFagAbAQeAqIBnHNvBsLXq0B3vO5ArnTOTTOzvsD7wPwsk+vvnJtlZr8BCYABs4BBzrndR6pFe9xERERCVEYabFsJyYsOhrnNgcf+LH/iY8scPNSaNdiVqwUR//4wp3OOFZv3/H2Bw4HOf0sVi6LTcRUCFzkUTOe/6oBXwU1ERCS8OAc71x0MccmLDv6+e+PB8SKLQfl63mHWhAYH99KVrwfRxY/57fcEOv89EOQOdP77wkXNObdl4r+du8NScFNwExERKTz2bfPOm8sa5pIXwfZV4DIDIxmUrXEwzP192LU+lIg/qrdzzrFwg9f5b8/mVUksF9xz4EL1HDcRERGRo1e8HFRv6z2ySkuBrcuyBbrFsGK8d+eHA0pUOHTv3IErX8sk5ngenZnRqEppGlUJ7oUTeaHgJiIiIoVDdKzXj1ylJocOz8yA7au9vXSbFx0MdvNHQsr2LK8vGQhxWa52TWgA5WoXWPclR6LgJiIiIoVbRCTE1/Ye9U8/ODy37ktW/Qlzh2d5fZQX3hIaQIeboEb7gp+HAAU3ERERKZqOpfuStL3+1Bqg4CYiIiKSXbFSULWl9wghodOjnIiIiIgcloKbiIiISJhQcBMREREJEwpuIiIiImFCwU1EREQkTCi4iYiIiIQJBTcRERGRMKHgJiIiIhImFNxEREREwoSCm4iIiEiYUHATERERCRMKbiIiIiJhQsFNREREJEwouImIiIiECQU3ERERkTCh4CYiIiISJhTcRERERMKEgpuIiIhImFBwExEREQkTCm4iIiIiYULBTURERCRMKLiJiIiIhAkFNxEREZEwYc45v2sIOjNLBlYF+W0qAJuD/B5y9LRcQo+WSWjScgk9WiahqSCWS03nXEJODUUiuBUEM5vmnGvjdx1yKC2X0KNlEpq0XEKPlklo8nu56FCpiIiISJhQcBMREREJEwpu+Wew3wVIjrRcQo+WSWjScgk9WiahydflonPcRERERMKE9riJiIiIhAkFNxEREZEwoeB2lMysu5ktMrOlZnZvDu3FzOyzQPtkM6vlQ5lFSh6Wye1mtsDM5pjZr2ZW0486i5ojLZcs451nZs7M1O1BkOVlmZjZhYHvy3wz+7SgayyK8rANq2FmY8xsZmA7dpYfdRYlZvaemW0ys3m5tJuZvRxYZnPMrFVB1abgdhTMLBJ4DTgTaAxcYmaNs402ANjmnKsHvAA8XbBVFi15XCYzgTbOueOBL4BnCrbKoiePywUziwNuASYXbIVFT16WiZkdB/wHOMk51wS4taDrLGry+F15ABjunGsJXAy8XrBVFklDgO6HaT8TOC7wGAi8UQA1AQpuR6stsNQ5t9w5tx8YBvTKNk4v4IPA718Ap5qZFWCNRc0Rl4lzboxzbm/g6SQgsYBrLIry8l0BeAzvn5uUgiyuiMrLMrkGeM05tw3AObepgGssivKyXBxQOvB7GWBdAdZXJDnnxgNbDzNKL+BD55kElDWzKgVRm4Lb0akGrMnyPCkwLMdxnHPpwA6gfIFUVzTlZZlkNQD4PqgVCeRhuQQOLVR3zn1XkIUVYXn5rtQH6pvZH2Y2ycwOt8dB8kdelsvDQF8zSwJGAzcVTGlyGEf7tyffRBXEm4iEAjPrC7QBuvhdS1FnZhHA80B/n0uRQ0XhHfrpirdneryZNXPObfezKOESYIhz7jkzOxH4yMyaOucy/S5MCp72uB2dtUD1LM8TA8NyHMfMovB2a28pkOqKprwsE8ysG3A/0NM5l1pAtRVlR1oucUBTYKyZrQTaA9/oAoWgyst3JQn4xjmX5pxbASzGC3ISPHlZLgOA4QDOuYlALN6NzsU/efrbEwwKbkdnKnCcmdU2sxi8k0S/yTbON0C/wO/nA7859XIcTEdcJmbWEngLL7TpnJ2Ccdjl4pzb4Zyr4Jyr5ZyrhXfuYU/n3DR/yi0S8rL9+gpvbxtmVgHv0OnyAqyxKMrLclkNnApgZo3wgltygVYp2X0DXBG4urQ9sMM5t74g3liHSo+Ccy7dzG4EfgQigfecc/PN7FFgmnPuG+BdvN3YS/FObLzYv4oLvzwuk/8DSgGfB64TWe2c6+lb0UVAHpeLFKA8LpMfgdPNbAGQAdzlnNMRgyDK43K5A3jbzG7Du1Chv3YIBJeZDcX7J6ZC4NzCh4BoAOfcm3jnGp4FLAX2AlcWWG1a9iIiIiLhQYdKRURERMKEgpuIiIhImFBwExEREQkTCm4iIiIiYULBTURERCRMKLiJiBwlMytrZtf7XYeIFD0KbiIiR68soOAmIgVOwU1E5Og9BdQ1s1lm9n9+FyMiRYc64BUROUpmVgv41jnX1O9aRKRo0R43ERERkTCh4CYiIiISJhTcRESO3i4gzu8iRKToUXATETlKzrktwB9mNk8XJ4hIQdLFCSIiIiJhQnvcRERERMKEgpuIiIhImFBwExEREQkTCm4iIiIiYULBTURERCRMKLiJiIiIhAkFNxEREZEw8f9Gpsgdf0owhQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_55_3.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad, elementwise_grad\n",
"import autograd.numpy.random as npr\n",
"from matplotlib import pyplot as plt\n",
"\n",
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"# Function to get the parameters.\n",
"# Done such that one can easily change the paramaters after one's liking.\n",
"def get_parameters():\n",
" alpha = 2\n",
" A = 1\n",
" g0 = 1.2\n",
" return alpha, A, g0\n",
"\n",
"def deep_neural_network(P, x):\n",
" # N_hidden is the number of hidden layers\n",
" N_hidden = np.size(P) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n",
"\n",
" # Assumes input x being an one-dimensional array\n",
" num_values = np.size(x)\n",
" x = x.reshape(-1, num_values)\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
"\n",
" # Due to multiple hidden layers, define a variable referencing to the\n",
" # output of the previous layer:\n",
" x_prev = x_input\n",
"\n",
" ## Hidden layers:\n",
"\n",
" for l in range(N_hidden):\n",
" # From the list of parameters P; find the correct weigths and bias for this layer\n",
" w_hidden = P[l]\n",
"\n",
" # Add a row of ones to include bias\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_prev)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" # Update x_prev such that next layer can use the output from this layer\n",
" x_prev = x_hidden\n",
"\n",
" ## Output layer:\n",
"\n",
" # Get the weights and bias for this layer\n",
" w_output = P[-1]\n",
"\n",
" # Include bias:\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_prev)\n",
" x_output = z_output\n",
"\n",
" return x_output\n",
"\n",
"\n",
"def cost_function_deep(P, x):\n",
"\n",
" # Evaluate the trial function with the current parameters P\n",
" g_t = g_trial_deep(x,P)\n",
"\n",
" # Find the derivative w.r.t x of the trial function\n",
" d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n",
"\n",
" # The right side of the ODE\n",
" func = f(x, g_t)\n",
"\n",
" err_sqr = (d_g_t - func)**2\n",
" cost_sum = np.sum(err_sqr)\n",
"\n",
" return cost_sum / np.size(err_sqr)\n",
"\n",
"# The right side of the ODE:\n",
"def f(x, g_trial):\n",
" alpha,A, g0 = get_parameters()\n",
" return alpha*g_trial*(A - g_trial)\n",
"\n",
"# The trial solution using the deep neural network:\n",
"def g_trial_deep(x, params):\n",
" alpha,A, g0 = get_parameters()\n",
" return g0 + x*deep_neural_network(params,x)\n",
"\n",
"# The analytical solution:\n",
"def g_analytic(t):\n",
" alpha,A, g0 = get_parameters()\n",
" return A*g0/(g0 + (A - g0)*np.exp(-alpha*A*t))\n",
"\n",
"def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n",
" # num_hidden_neurons is now a list of number of neurons within each hidden layer\n",
"\n",
" # Find the number of hidden layers:\n",
" N_hidden = np.size(num_neurons)\n",
"\n",
" ## Set up initial weigths and biases\n",
"\n",
" # Initialize the list of parameters:\n",
" P = [None]*(N_hidden + 1) # + 1 to include the output layer\n",
"\n",
" P[0] = npr.randn(num_neurons[0], 2 )\n",
" for l in range(1,N_hidden):\n",
" P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n",
"\n",
" # For the output layer\n",
" P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n",
"\n",
" print('Initial cost: %g'%cost_function_deep(P, x))\n",
"\n",
" ## Start finding the optimal weigths using gradient descent\n",
"\n",
" # Find the Python function that represents the gradient of the cost function\n",
" # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n",
" cost_function_deep_grad = grad(cost_function_deep,0)\n",
"\n",
" # Let the update be done num_iter times\n",
" for i in range(num_iter):\n",
" # Evaluate the gradient at the current weights and biases in P.\n",
" # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n",
" # in the hidden layers and output layers evaluated at x.\n",
" cost_deep_grad = cost_function_deep_grad(P, x)\n",
"\n",
" for l in range(N_hidden+1):\n",
" P[l] = P[l] - lmb * cost_deep_grad[l]\n",
"\n",
" print('Final cost: %g'%cost_function_deep(P, x))\n",
"\n",
" return P\n",
"\n",
"if __name__ == '__main__':\n",
" npr.seed(4155)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" Nt = 10\n",
" T = 1\n",
" t = np.linspace(0,T, Nt)\n",
"\n",
" ## Set up the initial parameters\n",
" num_hidden_neurons = [100, 50, 25]\n",
" num_iter = 1000\n",
" lmb = 1e-3\n",
"\n",
" P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" g_dnn_ag = g_trial_deep(t,P)\n",
" g_analytical = g_analytic(t)\n",
"\n",
" # Find the maximum absolute difference between the solutons:\n",
" diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n",
" print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n",
"\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n",
" plt.plot(t, g_analytical)\n",
" plt.plot(t, g_dnn_ag[0,:])\n",
" plt.legend(['analytical','nn'])\n",
" plt.xlabel('t')\n",
" plt.ylabel('g(t)')\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using forward Euler to solve the ODE\n",
"\n",
"A straightforward way of solving an ODE numerically, is to use Euler's method.\n",
"\n",
"Euler's method uses Taylor series to approximate the value at a function $f$ at a step $\\Delta x$ from $x$:\n",
"\n",
"$$\n",
"f(x + \\Delta x) \\approx f(x) + \\Delta x f'(x)\n",
"$$\n",
"\n",
"In our case, using Euler's method to approximate the value of $g$ at a step $\\Delta t$ from $t$ yields"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
" g(t + \\Delta t) &\\approx g(t) + \\Delta t g'(t) \\\\\n",
" &= g(t) + \\Delta t \\big(\\alpha g(t)(A - g(t))\\big)\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"along with the condition that $g(0) = g_0$.\n",
"\n",
"Let $t_i = i \\cdot \\Delta t$ where $\\Delta t = \\frac{T}{N_t-1}$ where $T$ is the final time our solver must solve for and $N_t$ the number of values for $t \\in [0, T]$ for $i = 0, \\dots, N_t-1$.\n",
"\n",
"For $i \\geq 1$, we have that"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"t_i &= i\\Delta t \\\\\n",
"&= (i - 1)\\Delta t + \\Delta t \\\\\n",
"&= t_{i-1} + \\Delta t\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, if $g_i = g(t_i)$ then"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"odenum\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
" \\begin{aligned}\n",
" g_i &= g(t_i) \\\\\n",
" &= g(t_{i-1} + \\Delta t) \\\\\n",
" &\\approx g(t_{i-1}) + \\Delta t \\big(\\alpha g(t_{i-1})(A - g(t_{i-1}))\\big) \\\\\n",
" &= g_{i-1} + \\Delta t \\big(\\alpha g_{i-1}(A - g_{i-1})\\big)\n",
" \\end{aligned}\n",
"\\end{equation} \\label{odenum} \\tag{12}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"for $i \\geq 1$ and $g_0 = g(t_0) = g(0) = g_0$.\n",
"\n",
"Equation ([12](#odenum)) could be implemented in the following way,\n",
"extending the program that uses the network using Autograd:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial cost: 0.221805\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" return array(a, dtype, copy=False, order=order)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final cost: 0.000417932\n",
"The max absolute difference between the solutions is: 0.00424909\n",
"Max absolute difference between Euler method and analytical: 0.011225\n",
"Max absolute difference between deep neural network and analytical: 0.00424909\n"
]
},
{
"data": {
"image/png": "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P8fyWSq4iYiIiIQJBTcREREpcoYMGcKNN954xHHWrVv39/Orr76aBQsWHPV7jR07lh49ehz163Ki4CYiIiKSg+zB7Z133qFx48Y+VqTgJiIiImGmd+/etG7dmiZNmjB48GAASpUqxf3330/z5s1p3749GzduBGDUqFG0a9eOli1b0q1bt7+HH7Br1y5q165NWloaADt37qR27dp8/vnnTJs2jcsuu4wWLVqwb98+unbt+vctNH/44QdatWpF8+bNOfXUUwGYMmUKJ554Ii1btqRDhw4sWrQo3+dd3YGIiIjIUXtk1HwWrNuZr9NsXLU0D53T5Ijjvffee8THx7Nv3z5OOOEEzjvvPPbs2UP79u154oknuPvuu3n77bd54IEH6NixI5MmTcLMeOedd3jmmWd47rnn/p5WXFwcXbt25bvvvqN3794MGzaMPn36cMEFF/Daa6/x7LPP0qZNm0PePzk5mWuuuYbx48dTu3Zttm7dCkDDhg35/fffiYqK4pdffuG+++5jxIgR+foZKbiJiIhIWHn55ZcZOXIkAGvWrGHJkiXExMT8fR5Z69at+fnnnwGv77mLLrqI9evXs3///hz7TLv66qt55pln6N27N++//z5vv/32Yd9/0qRJdO7c+e9pxcfHA7Bjxw769evHkiVLMLO/9+LlJwU3EREROWp52TMWDGPHjuWXX35h4sSJlChRgq5du5KSkkJ0dPTf3WtERkaSnp4OwE033cTtt99Oz549GTt2LA8//PA/pnnSSSexcuVKxo4dS0ZGBk2bNj2m2v773/9y8sknM3LkSFauXEnXrl2PdTZzpXPcREREJGzs2LGDcuXKUaJECRYuXMikSZOOOH61atUA+OCDD3Id74orruDSSy/lyiuv/HtYXFwcu3bt+se47du3Z/z48axYsQLg70OlWd9ryJAhRzVfeaXgJiIiImGje/fupKen06hRI+69917at29/2PEffvhhLrjgAlq3bk2FChVyHe+yyy5j27ZtXHLJJX8P69+/P4MGDfr74oQDEhISGDx4MH369KF58+ZcdNFFANx999385z//oWXLln/v8ctv5pwLyoRDSZs2bdyBq0BERETk2Pz11180atTI7zKC4osvvuDrr7/mo48+KtD3zekzNbPpzrk2OY2vc9xERESkSLvpppv4/vvvGT16tN+lHJGCm4iIiBRp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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_63_3.png"
},
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_63_4.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Assume that all function definitions from the example program using Autograd\n",
"# are located here.\n",
"\n",
"if __name__ == '__main__':\n",
" npr.seed(4155)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" Nt = 10\n",
" T = 1\n",
" t = np.linspace(0,T, Nt)\n",
"\n",
" ## Set up the initial parameters\n",
" num_hidden_neurons = [100,50,25]\n",
" num_iter = 1000\n",
" lmb = 1e-3\n",
"\n",
" P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" g_dnn_ag = g_trial_deep(t,P)\n",
" g_analytical = g_analytic(t)\n",
"\n",
" # Find the maximum absolute difference between the solutons:\n",
" diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n",
" print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n",
"\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n",
" plt.plot(t, g_analytical)\n",
" plt.plot(t, g_dnn_ag[0,:])\n",
" plt.legend(['analytical','nn'])\n",
" plt.xlabel('t')\n",
" plt.ylabel('g(t)')\n",
"\n",
" ## Find an approximation to the funtion using forward Euler\n",
"\n",
" alpha, A, g0 = get_parameters()\n",
" dt = T/(Nt - 1)\n",
"\n",
" # Perform forward Euler to solve the ODE\n",
" g_euler = np.zeros(Nt)\n",
" g_euler[0] = g0\n",
"\n",
" for i in range(1,Nt):\n",
" g_euler[i] = g_euler[i-1] + dt*(alpha*g_euler[i-1]*(A - g_euler[i-1]))\n",
"\n",
" # Print the errors done by each method\n",
" diff1 = np.max(np.abs(g_euler - g_analytical))\n",
" diff2 = np.max(np.abs(g_dnn_ag[0,:] - g_analytical))\n",
"\n",
" print('Max absolute difference between Euler method and analytical: %g'%diff1)\n",
" print('Max absolute difference between deep neural network and analytical: %g'%diff2)\n",
"\n",
" # Plot results\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.plot(t,g_euler)\n",
" plt.plot(t,g_analytical)\n",
" plt.plot(t,g_dnn_ag[0,:])\n",
"\n",
" plt.legend(['euler','analytical','dnn'])\n",
" plt.xlabel('Time t')\n",
" plt.ylabel('g(t)')\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Solving the one dimensional Poisson equation\n",
"\n",
"The Poisson equation for $g(x)$ in one dimension is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"poisson\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{poisson} \\tag{13}\n",
" -g''(x) = f(x)\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $f(x)$ is a given function for $x \\in (0,1)$.\n",
"\n",
"The conditions that $g(x)$ is chosen to fulfill, are"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
" g(0) &= 0 \\\\\n",
" g(1) &= 0\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This equation can be solved numerically using programs where e.g Autograd and TensorFlow are used.\n",
"The results from the networks can then be compared to the analytical solution.\n",
"In addition, it could be interesting to see how a typical method for numerically solving second order ODEs compares to the neural networks.\n",
"\n",
"\n",
"Here, the function $g(x)$ to solve for follows the equation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"-g''(x) = f(x),\\qquad x \\in (0,1)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $f(x)$ is a given function, along with the chosen conditions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"cond\"></div>\n",
"\n",
"$$\n",
"\\begin{aligned}\n",
"g(0) = g(1) = 0\n",
"\\end{aligned}\\label{cond} \\tag{14}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this example, we consider the case when $f(x) = (3x + x^2)\\exp(x)$.\n",
"\n",
"For this case, a possible trial solution satisfying the conditions could be"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"g_t(x) = x \\cdot (1-x) \\cdot N(P,x)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The analytical solution for this problem is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"g(x) = x(1 - x)\\exp(x)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" return array(a, dtype, copy=False, order=order)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial cost: 457.256\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final cost: 0.00310113\n",
"The max absolute difference between the solutions is: 0.000464088\n"
]
},
{
"data": {
"image/png": "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REREjlxNTQ15eXlUVla6jhISYmNjSUtLIyoqqtm/oxImIiIShvLy8khMTCQzMxNjjOs4Qc1aS2FhIXl5eWRlZTX79/R1pIiISBiqrKykS5cuKmBtwBhDly5dWrxXUSVMREQkTKmAtZ3WPJcqYSIiIiIOqISJiIhIUHvqqae46aabDnud/Pz8b05fe+21rFmzpsX3NXfuXE477bQW/15TVMJEREQk5DUuYf/6178YMmSIw0QqYSIiIuLQmWeeydixYxk6dCiPPfYYAAkJCfzyl79k5MiRTJo0iV27dgEwe/ZsJk6cyOjRo5k+ffo35x+wf/9+srKyqKmpAaCkpISsrCxefvllFi9ezCWXXMKoUaOoqKhg6tSp30yD+O677zJmzBhGjhzJCSecAMDChQuZPHkyo0eP5qijjmL9+vVt/th1iAoREZEw9/vZq1mTX9KmtzmkV0d+e/rQw17vySefJDk5mYqKCsaPH88555xDWVkZkyZN4o9//CN33HEHjz/+OL/61a+YMmUK8+fPxxjDv/71L+6++27uueeeb24rMTGRqVOn8vbbb3PmmWfy4osvcvbZZ3Peeefx0EMP8be//Y1x48Z96/4LCgr4/ve/z2effUZWVhZFRUUADBo0iM8//5zIyEg+/PBDfvGLX/Dqq6+26XOkEiYiIiLO3H///bz++usA5ObmsnHjRqKjo78ZdzV27Fg++OADwHtsswsuuIAdO3ZQXV3d5DG5rr32Wu6++27OPPNM/v3vf/P4448f8v7nz5/Pscce+81tJScnA1BcXMwVV1zBxo0bMcZ8s3etLamEiYiIhLnm7LHyh7lz5/Lhhx/y1VdfERcXx9SpU6msrCQqKuqbQz5ERERQW1sLwI9+9CNuu+02Zs6cydy5c/nd7373nds8+uijyc7OZu7cudTV1TFs2LBWZfv1r3/N8ccfz+uvv052djZTp05t7cM8KI0JExERESeKi4vp3LkzcXFxrFu3jvnz5x/2+qmpqQA8/fTTB73e5ZdfzsUXX8xVV131zXmJiYns37//O9edNGkSn332GVu3bgX45uvIhvf11FNPtehxNZdKmIiIiDhx8sknU1tby+DBg/nZz37GpEmTDnn93/3ud5x33nmMHTuWrl27HvR6l1xyCXv37uWiiy765rwrr7ySG2644ZuB+QekpKTw2GOPcfbZZzNy5Egu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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_76_3.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad, elementwise_grad\n",
"import autograd.numpy.random as npr\n",
"from matplotlib import pyplot as plt\n",
"\n",
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"def deep_neural_network(deep_params, x):\n",
" # N_hidden is the number of hidden layers\n",
" N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n",
"\n",
" # Assumes input x being an one-dimensional array\n",
" num_values = np.size(x)\n",
" x = x.reshape(-1, num_values)\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
"\n",
" # Due to multiple hidden layers, define a variable referencing to the\n",
" # output of the previous layer:\n",
" x_prev = x_input\n",
"\n",
" ## Hidden layers:\n",
"\n",
" for l in range(N_hidden):\n",
" # From the list of parameters P; find the correct weigths and bias for this layer\n",
" w_hidden = deep_params[l]\n",
"\n",
" # Add a row of ones to include bias\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_prev)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" # Update x_prev such that next layer can use the output from this layer\n",
" x_prev = x_hidden\n",
"\n",
" ## Output layer:\n",
"\n",
" # Get the weights and bias for this layer\n",
" w_output = deep_params[-1]\n",
"\n",
" # Include bias:\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_prev)\n",
" x_output = z_output\n",
"\n",
" return x_output\n",
"\n",
"def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n",
" # num_hidden_neurons is now a list of number of neurons within each hidden layer\n",
"\n",
" # Find the number of hidden layers:\n",
" N_hidden = np.size(num_neurons)\n",
"\n",
" ## Set up initial weigths and biases\n",
"\n",
" # Initialize the list of parameters:\n",
" P = [None]*(N_hidden + 1) # + 1 to include the output layer\n",
"\n",
" P[0] = npr.randn(num_neurons[0], 2 )\n",
" for l in range(1,N_hidden):\n",
" P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n",
"\n",
" # For the output layer\n",
" P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n",
"\n",
" print('Initial cost: %g'%cost_function_deep(P, x))\n",
"\n",
" ## Start finding the optimal weigths using gradient descent\n",
"\n",
" # Find the Python function that represents the gradient of the cost function\n",
" # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n",
" cost_function_deep_grad = grad(cost_function_deep,0)\n",
"\n",
" # Let the update be done num_iter times\n",
" for i in range(num_iter):\n",
" # Evaluate the gradient at the current weights and biases in P.\n",
" # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n",
" # in the hidden layers and output layers evaluated at x.\n",
" cost_deep_grad = cost_function_deep_grad(P, x)\n",
"\n",
" for l in range(N_hidden+1):\n",
" P[l] = P[l] - lmb * cost_deep_grad[l]\n",
"\n",
" print('Final cost: %g'%cost_function_deep(P, x))\n",
"\n",
" return P\n",
"\n",
"## Set up the cost function specified for this Poisson equation:\n",
"\n",
"# The right side of the ODE\n",
"def f(x):\n",
" return (3*x + x**2)*np.exp(x)\n",
"\n",
"def cost_function_deep(P, x):\n",
"\n",
" # Evaluate the trial function with the current parameters P\n",
" g_t = g_trial_deep(x,P)\n",
"\n",
" # Find the derivative w.r.t x of the trial function\n",
" d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n",
"\n",
" right_side = f(x)\n",
"\n",
" err_sqr = (-d2_g_t - right_side)**2\n",
" cost_sum = np.sum(err_sqr)\n",
"\n",
" return cost_sum/np.size(err_sqr)\n",
"\n",
"# The trial solution:\n",
"def g_trial_deep(x,P):\n",
" return x*(1-x)*deep_neural_network(P,x)\n",
"\n",
"# The analytic solution;\n",
"def g_analytic(x):\n",
" return x*(1-x)*np.exp(x)\n",
"\n",
"if __name__ == '__main__':\n",
" npr.seed(4155)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" Nx = 10\n",
" x = np.linspace(0,1, Nx)\n",
"\n",
" ## Set up the initial parameters\n",
" num_hidden_neurons = [200,100]\n",
" num_iter = 1000\n",
" lmb = 1e-3\n",
"\n",
" P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" g_dnn_ag = g_trial_deep(x,P)\n",
" g_analytical = g_analytic(x)\n",
"\n",
" # Find the maximum absolute difference between the solutons:\n",
" max_diff = np.max(np.abs(g_dnn_ag - g_analytical))\n",
" print(\"The max absolute difference between the solutions is: %g\"%max_diff)\n",
"\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n",
" plt.plot(x, g_analytical)\n",
" plt.plot(x, g_dnn_ag[0,:])\n",
" plt.legend(['analytical','nn'])\n",
" plt.xlabel('x')\n",
" plt.ylabel('g(x)')\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Comparing with a numerical scheme\n",
"\n",
"The Poisson equation is possible to solve using Taylor series to approximate the second derivative.\n",
"\n",
"Using Taylor series, the second derivative can be expressed as\n",
"\n",
"$$\n",
"g''(x) = \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2} + E_{\\Delta x}(x)\n",
"$$\n",
"\n",
"where $\\Delta x$ is a small step size and $E_{\\Delta x}(x)$ being the error term.\n",
"\n",
"Looking away from the error terms gives an approximation to the second derivative:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"approx\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{approx} \\tag{15}\n",
"g''(x) \\approx \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If $x_i = i \\Delta x = x_{i-1} + \\Delta x$ and $g_i = g(x_i)$ for $i = 1,\\dots N_x - 2$ with $N_x$ being the number of values for $x$, ([15](#approx)) becomes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"g''(x_i) &\\approx \\frac{g(x_i + \\Delta x) - 2g(x_i) + g(x_i -\\Delta x)}{\\Delta x^2} \\\\\n",
"&= \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2}\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since we know from our problem that"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"-g''(x) &= f(x) \\\\\n",
"&= (3x + x^2)\\exp(x)\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"along with the conditions $g(0) = g(1) = 0$,\n",
"the following scheme can be used to find an approximate solution for $g(x)$ numerically:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"odesys\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
" \\begin{aligned}\n",
" -\\Big( \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2} \\Big) &= f(x_i) \\\\\n",
" -g_{i+1} + 2g_i - g_{i-1} &= \\Delta x^2 f(x_i)\n",
" \\end{aligned}\n",
"\\end{equation} \\label{odesys} \\tag{16}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"for $i = 1, \\dots, N_x - 2$ where $g_0 = g_{N_x - 1} = 0$ and $f(x_i) = (3x_i + x_i^2)\\exp(x_i)$, which is given for our specific problem.\n",
"\n",
"The equation can be rewritten into a matrix equation:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{aligned}\n",
"\\begin{pmatrix}\n",
"2 & -1 & 0 & \\dots & 0 \\\\\n",
"-1 & 2 & -1 & \\dots & 0 \\\\\n",
"\\vdots & & \\ddots & & \\vdots \\\\\n",
"0 & \\dots & -1 & 2 & -1 \\\\\n",
"0 & \\dots & 0 & -1 & 2\\\\\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"g_1 \\\\\n",
"g_2 \\\\\n",
"\\vdots \\\\\n",
"g_{N_x - 3} \\\\\n",
"g_{N_x - 2}\n",
"\\end{pmatrix}\n",
"&=\n",
"\\Delta x^2\n",
"\\begin{pmatrix}\n",
"f(x_1) \\\\\n",
"f(x_2) \\\\\n",
"\\vdots \\\\\n",
"f(x_{N_x - 3}) \\\\\n",
"f(x_{N_x - 2})\n",
"\\end{pmatrix} \\\\\n",
"\\boldsymbol{A}\\boldsymbol{g} &= \\boldsymbol{f},\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which makes it possible to solve for the vector $\\boldsymbol{g}$.\n",
"\n",
"\n",
"We can then compare the result from this numerical scheme with the output from our network using Autograd:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial cost: 457.256\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" return array(a, dtype, copy=False, order=order)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final cost: 0.00310113\n",
"The max absolute difference between the analytical solution and DNN Autograd: 0.000464088\n",
"The max absolute difference between the analytical solution and numerical scheme: 0.00266858\n"
]
},
{
"data": {
"image/png": "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REREjlxNTQ15eXlUVla6jhISYmNjSUtLIyoqqtm/oxImIiIShvLy8khMTCQzMxNjjOs4Qc1aS2FhIXl5eWRlZTX79/R1pIiISBiqrKykS5cuKmBtwBhDly5dWrxXUSVMREQkTKmAtZ3WPJcqYSIiIiIOqISJiIhIUHvqqae46aabDnud/Pz8b05fe+21rFmzpsX3NXfuXE477bQW/15TVMJEREQk5DUuYf/6178YMmSIw0QqYSIiIuLQmWeeydixYxk6dCiPPfYYAAkJCfzyl79k5MiRTJo0iV27dgEwe/ZsJk6cyOjRo5k+ffo35x+wf/9+srKyqKmpAaCkpISsrCxefvllFi9ezCWXXMKoUaOoqKhg6tSp30yD+O677zJmzBhGjhzJCSecAMDChQuZPHkyo0eP5qijjmL9+vVt/th1iAoREZEw9/vZq1mTX9KmtzmkV0d+e/rQw17vySefJDk5mYqKCsaPH88555xDWVkZkyZN4o9//CN33HEHjz/+OL/61a+YMmUK8+fPxxjDv/71L+6++27uueeeb24rMTGRqVOn8vbbb3PmmWfy4osvcvbZZ3Peeefx0EMP8be//Y1x48Z96/4LCgr4/ve/z2effUZWVhZFRUUADBo0iM8//5zIyEg+/PBDfvGLX/Dqq6+26XOkEiYiIiLO3H///bz++usA5ObmsnHjRqKjo78ZdzV27Fg++OADwHtsswsuuIAdO3ZQXV3d5DG5rr32Wu6++27OPPNM/v3vf/P4448f8v7nz5/Pscce+81tJScnA1BcXMwVV1zBxo0bMcZ8s3etLamEiYiIhLnm7LHyh7lz5/Lhhx/y1VdfERcXx9SpU6msrCQqKuqbQz5ERERQW1sLwI9+9CNuu+02Zs6cydy5c/nd7373nds8+uijyc7OZu7cudTV1TFs2LBWZfv1r3/N8ccfz+uvv052djZTp05t7cM8KI0JExERESeKi4vp3LkzcXFxrFu3jvnz5x/2+qmpqQA8/fTTB73e5ZdfzsUXX8xVV131zXmJiYns37//O9edNGkSn332GVu3bgX45uvIhvf11FNPtehxNZdKmIiIiDhx8sknU1tby+DBg/nZz37GpEmTDnn93/3ud5x33nmMHTuWrl27HvR6l1xyCXv37uWiiy765rwrr7ySG2644ZuB+QekpKTw2GOPcfbZZzNy5Egu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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_88_3.png"
},
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter11_88_4.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad, elementwise_grad\n",
"import autograd.numpy.random as npr\n",
"from matplotlib import pyplot as plt\n",
"\n",
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"def deep_neural_network(deep_params, x):\n",
" # N_hidden is the number of hidden layers\n",
" N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n",
"\n",
" # Assumes input x being an one-dimensional array\n",
" num_values = np.size(x)\n",
" x = x.reshape(-1, num_values)\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
"\n",
" # Due to multiple hidden layers, define a variable referencing to the\n",
" # output of the previous layer:\n",
" x_prev = x_input\n",
"\n",
" ## Hidden layers:\n",
"\n",
" for l in range(N_hidden):\n",
" # From the list of parameters P; find the correct weigths and bias for this layer\n",
" w_hidden = deep_params[l]\n",
"\n",
" # Add a row of ones to include bias\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_prev)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" # Update x_prev such that next layer can use the output from this layer\n",
" x_prev = x_hidden\n",
"\n",
" ## Output layer:\n",
"\n",
" # Get the weights and bias for this layer\n",
" w_output = deep_params[-1]\n",
"\n",
" # Include bias:\n",
" x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_prev)\n",
" x_output = z_output\n",
"\n",
" return x_output\n",
"\n",
"def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n",
" # num_hidden_neurons is now a list of number of neurons within each hidden layer\n",
"\n",
" # Find the number of hidden layers:\n",
" N_hidden = np.size(num_neurons)\n",
"\n",
" ## Set up initial weigths and biases\n",
"\n",
" # Initialize the list of parameters:\n",
" P = [None]*(N_hidden + 1) # + 1 to include the output layer\n",
"\n",
" P[0] = npr.randn(num_neurons[0], 2 )\n",
" for l in range(1,N_hidden):\n",
" P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n",
"\n",
" # For the output layer\n",
" P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n",
"\n",
" print('Initial cost: %g'%cost_function_deep(P, x))\n",
"\n",
" ## Start finding the optimal weigths using gradient descent\n",
"\n",
" # Find the Python function that represents the gradient of the cost function\n",
" # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n",
" cost_function_deep_grad = grad(cost_function_deep,0)\n",
"\n",
" # Let the update be done num_iter times\n",
" for i in range(num_iter):\n",
" # Evaluate the gradient at the current weights and biases in P.\n",
" # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n",
" # in the hidden layers and output layers evaluated at x.\n",
" cost_deep_grad = cost_function_deep_grad(P, x)\n",
"\n",
" for l in range(N_hidden+1):\n",
" P[l] = P[l] - lmb * cost_deep_grad[l]\n",
"\n",
" print('Final cost: %g'%cost_function_deep(P, x))\n",
"\n",
" return P\n",
"\n",
"## Set up the cost function specified for this Poisson equation:\n",
"\n",
"# The right side of the ODE\n",
"def f(x):\n",
" return (3*x + x**2)*np.exp(x)\n",
"\n",
"def cost_function_deep(P, x):\n",
"\n",
" # Evaluate the trial function with the current parameters P\n",
" g_t = g_trial_deep(x,P)\n",
"\n",
" # Find the derivative w.r.t x of the trial function\n",
" d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n",
"\n",
" right_side = f(x)\n",
"\n",
" err_sqr = (-d2_g_t - right_side)**2\n",
" cost_sum = np.sum(err_sqr)\n",
"\n",
" return cost_sum/np.size(err_sqr)\n",
"\n",
"# The trial solution:\n",
"def g_trial_deep(x,P):\n",
" return x*(1-x)*deep_neural_network(P,x)\n",
"\n",
"# The analytic solution;\n",
"def g_analytic(x):\n",
" return x*(1-x)*np.exp(x)\n",
"\n",
"if __name__ == '__main__':\n",
" npr.seed(4155)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" Nx = 10\n",
" x = np.linspace(0,1, Nx)\n",
"\n",
" ## Set up the initial parameters\n",
" num_hidden_neurons = [200,100]\n",
" num_iter = 1000\n",
" lmb = 1e-3\n",
"\n",
" P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" g_dnn_ag = g_trial_deep(x,P)\n",
" g_analytical = g_analytic(x)\n",
"\n",
" # Find the maximum absolute difference between the solutons:\n",
"\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n",
" plt.plot(x, g_analytical)\n",
" plt.plot(x, g_dnn_ag[0,:])\n",
" plt.legend(['analytical','nn'])\n",
" plt.xlabel('x')\n",
" plt.ylabel('g(x)')\n",
"\n",
" ## Perform the computation using the numerical scheme\n",
"\n",
" dx = 1/(Nx - 1)\n",
"\n",
" # Set up the matrix A\n",
" A = np.zeros((Nx-2,Nx-2))\n",
"\n",
" A[0,0] = 2\n",
" A[0,1] = -1\n",
"\n",
" for i in range(1,Nx-3):\n",
" A[i,i-1] = -1\n",
" A[i,i] = 2\n",
" A[i,i+1] = -1\n",
"\n",
" A[Nx - 3, Nx - 4] = -1\n",
" A[Nx - 3, Nx - 3] = 2\n",
"\n",
" # Set up the vector f\n",
" f_vec = dx**2 * f(x[1:-1])\n",
"\n",
" # Solve the equation\n",
" g_res = np.linalg.solve(A,f_vec)\n",
"\n",
" g_vec = np.zeros(Nx)\n",
" g_vec[1:-1] = g_res\n",
"\n",
" # Print the differences between each method\n",
" max_diff1 = np.max(np.abs(g_dnn_ag - g_analytical))\n",
" max_diff2 = np.max(np.abs(g_vec - g_analytical))\n",
" print(\"The max absolute difference between the analytical solution and DNN Autograd: %g\"%max_diff1)\n",
" print(\"The max absolute difference between the analytical solution and numerical scheme: %g\"%max_diff2)\n",
"\n",
" # Plot the results\n",
" plt.figure(figsize=(10,10))\n",
"\n",
" plt.plot(x,g_vec)\n",
" plt.plot(x,g_analytical)\n",
" plt.plot(x,g_dnn_ag[0,:])\n",
"\n",
" plt.legend(['numerical scheme','analytical','dnn'])\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Partial Differential Equations\n",
"\n",
"A partial differential equation (PDE) has a solution here the function\n",
"is defined by multiple variables. The equation may involve all kinds\n",
"of combinations of which variables the function is differentiated with\n",
"respect to.\n",
"\n",
"In general, a partial differential equation for a function $g(x_1,\\dots,x_N)$ with $N$ variables may be expressed as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"PDE\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{PDE} \\tag{17}\n",
" f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) = 0\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $f$ is an expression involving all kinds of possible mixed derivatives of $g(x_1,\\dots,x_N)$ up to an order $n$. In order for the solution to be unique, some additional conditions must also be given.\n",
"\n",
"### Type of problem\n",
"\n",
"The problem our network must solve for, is similar to the ODE case.\n",
"We must have a trial solution $g_t$ at hand.\n",
"\n",
"For instance, the trial solution could be expressed as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
" g_t(x_1,\\dots,x_N) = h_1(x_1,\\dots,x_N) + h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $h_1(x_1,\\dots,x_N)$ is a function that ensures $g_t(x_1,\\dots,x_N)$ satisfies some given conditions.\n",
"The neural network $N(x_1,\\dots,x_N,P)$ has weights and biases described by $P$ and $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$ is an expression using the output from the neural network in some way.\n",
"\n",
"The role of the function $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$, is to ensure that the output of $N(x_1,\\dots,x_N,P)$ is zero when $g_t(x_1,\\dots,x_N)$ is evaluated at the values of $x_1,\\dots,x_N$ where the given conditions must be satisfied. The function $h_1(x_1,\\dots,x_N)$ should alone make $g_t(x_1,\\dots,x_N)$ satisfy the conditions.\n",
"\n",
"\n",
"\n",
"### Network requirements\n",
"\n",
"The network tries then the minimize the cost function following the\n",
"same ideas as described for the ODE case, but now with more than one\n",
"variables to consider. The concept still remains the same; find a set\n",
"of parameters $P$ such that the expression $f$ in ([17](#PDE)) is as\n",
"close to zero as possible.\n",
"\n",
"As for the ODE case, the cost function is the mean squared error that\n",
"the network must try to minimize. The cost function for the network to\n",
"minimize is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C\\left(x_1, \\dots, x_N, P\\right) = \\left( f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) \\right)^2\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we let $\\boldsymbol{x} = \\big( x_1, \\dots, x_N \\big)$ be an array containing the values for $x_1, \\dots, x_N$ respectively, the cost function can be reformulated into the following:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C\\left(\\boldsymbol{x}, P\\right) = f\\left( \\left( \\boldsymbol{x}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}) }{\\partial x_N^n} \\right) \\right)^2\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we also have $M$ different sets of values for $x_1, \\dots, x_N$, that is $\\boldsymbol{x}_i = \\big(x_1^{(i)}, \\dots, x_N^{(i)}\\big)$ for $i = 1,\\dots,M$ being the rows in matrix $X$, the cost function can be generalized into"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C\\left(X, P \\right) = \\sum_{i=1}^M f\\left( \\left( \\boldsymbol{x}_i, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}_i) }{\\partial x_N^n} \\right) \\right)^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example: The diffusion equation\n",
"\n",
"In one spatial dimension, the equation reads"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where a possible choice of conditions are"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n",
"g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n",
"g(x,0) &= u(x),\\qquad x\\in [0,1]\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with $u(x)$ being some given function.\n",
"\n",
"\n",
"\n",
"For this case, we want to find $g(x,t)$ such that"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"diffonedim\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
" \\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n",
"\\end{equation} \\label{diffonedim} \\tag{18}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n",
"g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n",
"g(x,0) &= u(x),\\qquad x\\in [0,1]\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with $u(x) = \\sin(\\pi x)$.\n",
"\n",
"First, let us set up the deep neural network.\n",
"The deep neural network will follow the same structure as discussed in the examples solving the ODEs.\n",
"First, we will look into how Autograd could be used in a network tailored to solve for bivariate functions.\n",
"\n",
"\n",
"\n",
"\n",
"The only change to do here, is to extend our network such that\n",
"functions of multiple parameters are correctly handled. In this case\n",
"we have two variables in our function to solve for, that is time $t$\n",
"and position $x$. The variables will be represented by a\n",
"one-dimensional array in the program. The program will evaluate the\n",
"network at each possible pair $(x,t)$, given an array for the desired\n",
"$x$-values and $t$-values to approximate the solution at."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"def deep_neural_network(deep_params, x):\n",
" # x is now a point and a 1D numpy array; make it a column vector\n",
" num_coordinates = np.size(x,0)\n",
" x = x.reshape(num_coordinates,-1)\n",
"\n",
" num_points = np.size(x,1)\n",
"\n",
" # N_hidden is the number of hidden layers\n",
" N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
" x_prev = x_input\n",
"\n",
" ## Hidden layers:\n",
"\n",
" for l in range(N_hidden):\n",
" # From the list of parameters P; find the correct weigths and bias for this layer\n",
" w_hidden = deep_params[l]\n",
"\n",
" # Add a row of ones to include bias\n",
" x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_prev)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" # Update x_prev such that next layer can use the output from this layer\n",
" x_prev = x_hidden\n",
"\n",
" ## Output layer:\n",
"\n",
" # Get the weights and bias for this layer\n",
" w_output = deep_params[-1]\n",
"\n",
" # Include bias:\n",
" x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_prev)\n",
" x_output = z_output\n",
"\n",
" return x_output[0][0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The cost function must then iterate through the given arrays\n",
"containing values for $x$ and $t$, defines a point $(x,t)$ the deep\n",
"neural network and the trial solution is evaluated at, and then finds\n",
"the Jacobian of the trial solution.\n",
"\n",
"A possible trial solution for this PDE is\n",
"\n",
"$$\n",
"g_t(x,t) = h_1(x,t) + x(1-x)tN(x,t,P)\n",
"$$\n",
"\n",
"with $A(x,t)$ being a function ensuring that $g_t(x,t)$ satisfies our given conditions, and $N(x,t,P)$ being the output from the deep neural network using weights and biases for each layer from $P$.\n",
"\n",
"To fulfill the conditions, $A(x,t)$ could be:\n",
"\n",
"$$\n",
"h_1(x,t) = (1-t)\\Big(u(x) - \\big((1-x)u(0) + x u(1)\\big)\\Big) = (1-t)u(x) = (1-t)\\sin(\\pi x)\n",
"$$\n",
"since $(0) = u(1) = 0$ and $u(x) = \\sin(\\pi x)$.\n",
"\n",
"\n",
"\n",
"The Jacobian is used because the program must find the derivative of\n",
"the trial solution with respect to $x$ and $t$.\n",
"\n",
"This gives the necessity of computing the Jacobian matrix, as we want\n",
"to evaluate the gradient with respect to $x$ and $t$ (note that the\n",
"Jacobian of a scalar-valued multivariate function is simply its\n",
"gradient).\n",
"\n",
"In Autograd, the differentiation is by default done with respect to\n",
"the first input argument of your Python function. Since the points is\n",
"an array representing $x$ and $t$, the Jacobian is calculated using\n",
"the values of $x$ and $t$.\n",
"\n",
"To find the second derivative with respect to $x$ and $t$, the\n",
"Jacobian can be found for the second time. The result is a Hessian\n",
"matrix, which is the matrix containing all the possible second order\n",
"mixed derivatives of $g(x,t)$."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"# Set up the trial function:\n",
"def u(x):\n",
" return np.sin(np.pi*x)\n",
"\n",
"def g_trial(point,P):\n",
" x,t = point\n",
" return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n",
"\n",
"# The right side of the ODE:\n",
"def f(point):\n",
" return 0.\n",
"\n",
"# The cost function:\n",
"def cost_function(P, x, t):\n",
" cost_sum = 0\n",
"\n",
" g_t_jacobian_func = jacobian(g_trial)\n",
" g_t_hessian_func = hessian(g_trial)\n",
"\n",
" for x_ in x:\n",
" for t_ in t:\n",
" point = np.array([x_,t_])\n",
"\n",
" g_t = g_trial(point,P)\n",
" g_t_jacobian = g_t_jacobian_func(point,P)\n",
" g_t_hessian = g_t_hessian_func(point,P)\n",
"\n",
" g_t_dt = g_t_jacobian[1]\n",
" g_t_d2x = g_t_hessian[0][0]\n",
"\n",
" func = f(point)\n",
"\n",
" err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n",
" cost_sum += err_sqr\n",
"\n",
" return cost_sum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Setting up the network using Autograd; The full program\n",
"\n",
"Having set up the network, along with the trial solution and cost function, we can now see how the deep neural network performs by comparing the results to the analytical solution.\n",
"\n",
"The analytical solution of our problem is\n",
"\n",
"$$\n",
"g(x,t) = \\exp(-\\pi^2 t)\\sin(\\pi x)\n",
"$$\n",
"\n",
"A possible way to implement a neural network solving the PDE, is given below.\n",
"Be aware, though, that it is fairly slow for the parameters used.\n",
"A better result is possible, but requires more iterations, and thus longer time to complete.\n",
"\n",
"\n",
"Indeed, the program below is not optimal in its implementation, but rather serves as an example on how to implement and use a neural network to solve a PDE.\n",
"Using TensorFlow results in a much better execution time. Try it!"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mhjensen/opt/anaconda3/lib/python3.8/site-packages/numpy/core/_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" return array(a, dtype, copy=False, order=order)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial cost: 41.05505310046363\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import jacobian,hessian,grad\n",
"import autograd.numpy.random as npr\n",
"from matplotlib import cm\n",
"from matplotlib import pyplot as plt\n",
"from mpl_toolkits.mplot3d import axes3d\n",
"\n",
"## Set up the network\n",
"\n",
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"def deep_neural_network(deep_params, x):\n",
" # x is now a point and a 1D numpy array; make it a column vector\n",
" num_coordinates = np.size(x,0)\n",
" x = x.reshape(num_coordinates,-1)\n",
"\n",
" num_points = np.size(x,1)\n",
"\n",
" # N_hidden is the number of hidden layers\n",
" N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
" x_prev = x_input\n",
"\n",
" ## Hidden layers:\n",
"\n",
" for l in range(N_hidden):\n",
" # From the list of parameters P; find the correct weigths and bias for this layer\n",
" w_hidden = deep_params[l]\n",
"\n",
" # Add a row of ones to include bias\n",
" x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_prev)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" # Update x_prev such that next layer can use the output from this layer\n",
" x_prev = x_hidden\n",
"\n",
" ## Output layer:\n",
"\n",
" # Get the weights and bias for this layer\n",
" w_output = deep_params[-1]\n",
"\n",
" # Include bias:\n",
" x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_prev)\n",
" x_output = z_output\n",
"\n",
" return x_output[0][0]\n",
"\n",
"## Define the trial solution and cost function\n",
"def u(x):\n",
" return np.sin(np.pi*x)\n",
"\n",
"def g_trial(point,P):\n",
" x,t = point\n",
" return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n",
"\n",
"# The right side of the ODE:\n",
"def f(point):\n",
" return 0.\n",
"\n",
"# The cost function:\n",
"def cost_function(P, x, t):\n",
" cost_sum = 0\n",
"\n",
" g_t_jacobian_func = jacobian(g_trial)\n",
" g_t_hessian_func = hessian(g_trial)\n",
"\n",
" for x_ in x:\n",
" for t_ in t:\n",
" point = np.array([x_,t_])\n",
"\n",
" g_t = g_trial(point,P)\n",
" g_t_jacobian = g_t_jacobian_func(point,P)\n",
" g_t_hessian = g_t_hessian_func(point,P)\n",
"\n",
" g_t_dt = g_t_jacobian[1]\n",
" g_t_d2x = g_t_hessian[0][0]\n",
"\n",
" func = f(point)\n",
"\n",
" err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n",
" cost_sum += err_sqr\n",
"\n",
" return cost_sum /( np.size(x)*np.size(t) )\n",
"\n",
"## For comparison, define the analytical solution\n",
"def g_analytic(point):\n",
" x,t = point\n",
" return np.exp(-np.pi**2*t)*np.sin(np.pi*x)\n",
"\n",
"## Set up a function for training the network to solve for the equation\n",
"def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n",
" ## Set up initial weigths and biases\n",
" N_hidden = np.size(num_neurons)\n",
"\n",
" ## Set up initial weigths and biases\n",
"\n",
" # Initialize the list of parameters:\n",
" P = [None]*(N_hidden + 1) # + 1 to include the output layer\n",
"\n",
" P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n",
" for l in range(1,N_hidden):\n",
" P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n",
"\n",
" # For the output layer\n",
" P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n",
"\n",
" print('Initial cost: ',cost_function(P, x, t))\n",
"\n",
" cost_function_grad = grad(cost_function,0)\n",
"\n",
" # Let the update be done num_iter times\n",
" for i in range(num_iter):\n",
" cost_grad = cost_function_grad(P, x , t)\n",
"\n",
" for l in range(N_hidden+1):\n",
" P[l] = P[l] - lmb * cost_grad[l]\n",
"\n",
" print('Final cost: ',cost_function(P, x, t))\n",
"\n",
" return P\n",
"\n",
"if __name__ == '__main__':\n",
" ### Use the neural network:\n",
" npr.seed(15)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" Nx = 10; Nt = 10\n",
" x = np.linspace(0, 1, Nx)\n",
" t = np.linspace(0,1,Nt)\n",
"\n",
" ## Set up the parameters for the network\n",
" num_hidden_neurons = [100, 25]\n",
" num_iter = 250\n",
" lmb = 0.01\n",
"\n",
" P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" ## Store the results\n",
" g_dnn_ag = np.zeros((Nx, Nt))\n",
" G_analytical = np.zeros((Nx, Nt))\n",
" for i,x_ in enumerate(x):\n",
" for j, t_ in enumerate(t):\n",
" point = np.array([x_, t_])\n",
" g_dnn_ag[i,j] = g_trial(point,P)\n",
"\n",
" G_analytical[i,j] = g_analytic(point)\n",
"\n",
" # Find the map difference between the analytical and the computed solution\n",
" diff_ag = np.abs(g_dnn_ag - G_analytical)\n",
" print('Max absolute difference between the analytical solution and the network: %g'%np.max(diff_ag))\n",
"\n",
" ## Plot the solutions in two dimensions, that being in position and time\n",
"\n",
" T,X = np.meshgrid(t,x)\n",
"\n",
" fig = plt.figure(figsize=(10,10))\n",
" ax = fig.gca(projection='3d')\n",
" ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n",
" s = ax.plot_surface(T,X,g_dnn_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n",
" ax.set_xlabel('Time $t$')\n",
" ax.set_ylabel('Position $x$');\n",
"\n",
"\n",
" fig = plt.figure(figsize=(10,10))\n",
" ax = fig.gca(projection='3d')\n",
" ax.set_title('Analytical solution')\n",
" s = ax.plot_surface(T,X,G_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n",
" ax.set_xlabel('Time $t$')\n",
" ax.set_ylabel('Position $x$');\n",
"\n",
" fig = plt.figure(figsize=(10,10))\n",
" ax = fig.gca(projection='3d')\n",
" ax.set_title('Difference')\n",
" s = ax.plot_surface(T,X,diff_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n",
" ax.set_xlabel('Time $t$')\n",
" ax.set_ylabel('Position $x$');\n",
"\n",
" ## Take some slices of the 3D plots just to see the solutions at particular times\n",
" indx1 = 0\n",
" indx2 = int(Nt/2)\n",
" indx3 = Nt-1\n",
"\n",
" t1 = t[indx1]\n",
" t2 = t[indx2]\n",
" t3 = t[indx3]\n",
"\n",
" # Slice the results from the DNN\n",
" res1 = g_dnn_ag[:,indx1]\n",
" res2 = g_dnn_ag[:,indx2]\n",
" res3 = g_dnn_ag[:,indx3]\n",
"\n",
" # Slice the analytical results\n",
" res_analytical1 = G_analytical[:,indx1]\n",
" res_analytical2 = G_analytical[:,indx2]\n",
" res_analytical3 = G_analytical[:,indx3]\n",
"\n",
" # Plot the slices\n",
" plt.figure(figsize=(10,10))\n",
" plt.title(\"Computed solutions at time = %g\"%t1)\n",
" plt.plot(x, res1)\n",
" plt.plot(x,res_analytical1)\n",
" plt.legend(['dnn','analytical'])\n",
"\n",
" plt.figure(figsize=(10,10))\n",
" plt.title(\"Computed solutions at time = %g\"%t2)\n",
" plt.plot(x, res2)\n",
" plt.plot(x,res_analytical2)\n",
" plt.legend(['dnn','analytical'])\n",
"\n",
" plt.figure(figsize=(10,10))\n",
" plt.title(\"Computed solutions at time = %g\"%t3)\n",
" plt.plot(x, res3)\n",
" plt.plot(x,res_analytical3)\n",
" plt.legend(['dnn','analytical'])\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Solving the wave equation with Neural Networks\n",
"\n",
"The wave equation is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2\\frac{\\partial^2 g(x,t)}{\\partial x^2}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with $c$ being the specified wave speed.\n",
"\n",
"Here, the chosen conditions are"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"\tg(0,t) &= 0 \\\\\n",
"\tg(1,t) &= 0 \\\\\n",
"\tg(x,0) &= u(x) \\\\\n",
"\t\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0} &= v(x)\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0}$ means the derivative of $g(x,t)$ with respect to $t$ is evaluated at $t = 0$, and $u(x)$ and $v(x)$ being given functions.\n",
"\n",
"\n",
"The wave equation to solve for, is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"wave\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \\label{wave} \\tag{19}\n",
"\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2 \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $c$ is the given wave speed.\n",
"The chosen conditions for this equation are"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"condwave\"></div>\n",
"\n",
"$$\n",
"\\begin{aligned}\n",
"g(0,t) &= 0, &t \\geq 0 \\\\\n",
"g(1,t) &= 0, &t \\geq 0 \\\\\n",
"g(x,0) &= u(x), &x\\in[0,1] \\\\\n",
"\\frac{\\partial g(x,t)}{\\partial t}\\Big |_{t = 0} &= v(x), &x \\in [0,1]\n",
"\\end{aligned} \\label{condwave} \\tag{20}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this example, let $c = 1$ and $u(x) = \\sin(\\pi x)$ and $v(x) = -\\pi\\sin(\\pi x)$.\n",
"\n",
"\n",
"\n",
"Setting up the network is done in similar matter as for the example of solving the diffusion equation.\n",
"The only things we have to change, is the trial solution such that it satisfies the conditions from ([20](#condwave)) and the cost function.\n",
"\n",
"The trial solution becomes slightly different since we have other conditions than in the example of solving the diffusion equation. Here, a possible trial solution $g_t(x,t)$ is\n",
"\n",
"$$\n",
"g_t(x,t) = h_1(x,t) + x(1-x)t^2N(x,t,P)\n",
"$$\n",
"\n",
"where\n",
"\n",
"$$\n",
"h_1(x,t) = (1-t^2)u(x) + tv(x)\n",
"$$\n",
"\n",
"Note that this trial solution satisfies the conditions only if $u(0) = v(0) = u(1) = v(1) = 0$, which is the case in this example.\n",
"\n",
"\n",
"The analytical solution for our specific problem, is\n",
"\n",
"$$\n",
"g(x,t) = \\sin(\\pi x)\\cos(\\pi t) - \\sin(\\pi x)\\sin(\\pi t)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"import autograd.numpy as np\n",
"from autograd import hessian,grad\n",
"import autograd.numpy.random as npr\n",
"from matplotlib import cm\n",
"from matplotlib import pyplot as plt\n",
"from mpl_toolkits.mplot3d import axes3d\n",
"\n",
"## Set up the trial function:\n",
"def u(x):\n",
" return np.sin(np.pi*x)\n",
"\n",
"def v(x):\n",
" return -np.pi*np.sin(np.pi*x)\n",
"\n",
"def h1(point):\n",
" x,t = point\n",
" return (1 - t**2)*u(x) + t*v(x)\n",
"\n",
"def g_trial(point,P):\n",
" x,t = point\n",
" return h1(point) + x*(1-x)*t**2*deep_neural_network(P,point)\n",
"\n",
"## Define the cost function\n",
"def cost_function(P, x, t):\n",
" cost_sum = 0\n",
"\n",
" g_t_hessian_func = hessian(g_trial)\n",
"\n",
" for x_ in x:\n",
" for t_ in t:\n",
" point = np.array([x_,t_])\n",
"\n",
" g_t_hessian = g_t_hessian_func(point,P)\n",
"\n",
" g_t_d2x = g_t_hessian[0][0]\n",
" g_t_d2t = g_t_hessian[1][1]\n",
"\n",
" err_sqr = ( (g_t_d2t - g_t_d2x) )**2\n",
" cost_sum += err_sqr\n",
"\n",
" return cost_sum / (np.size(t) * np.size(x))\n",
"\n",
"## The neural network\n",
"def sigmoid(z):\n",
" return 1/(1 + np.exp(-z))\n",
"\n",
"def deep_neural_network(deep_params, x):\n",
" # x is now a point and a 1D numpy array; make it a column vector\n",
" num_coordinates = np.size(x,0)\n",
" x = x.reshape(num_coordinates,-1)\n",
"\n",
" num_points = np.size(x,1)\n",
"\n",
" # N_hidden is the number of hidden layers\n",
" N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n",
"\n",
" # Assume that the input layer does nothing to the input x\n",
" x_input = x\n",
" x_prev = x_input\n",
"\n",
" ## Hidden layers:\n",
"\n",
" for l in range(N_hidden):\n",
" # From the list of parameters P; find the correct weigths and bias for this layer\n",
" w_hidden = deep_params[l]\n",
"\n",
" # Add a row of ones to include bias\n",
" x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n",
"\n",
" z_hidden = np.matmul(w_hidden, x_prev)\n",
" x_hidden = sigmoid(z_hidden)\n",
"\n",
" # Update x_prev such that next layer can use the output from this layer\n",
" x_prev = x_hidden\n",
"\n",
" ## Output layer:\n",
"\n",
" # Get the weights and bias for this layer\n",
" w_output = deep_params[-1]\n",
"\n",
" # Include bias:\n",
" x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n",
"\n",
" z_output = np.matmul(w_output, x_prev)\n",
" x_output = z_output\n",
"\n",
" return x_output[0][0]\n",
"\n",
"## The analytical solution\n",
"def g_analytic(point):\n",
" x,t = point\n",
" return np.sin(np.pi*x)*np.cos(np.pi*t) - np.sin(np.pi*x)*np.sin(np.pi*t)\n",
"\n",
"def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n",
" ## Set up initial weigths and biases\n",
" N_hidden = np.size(num_neurons)\n",
"\n",
" ## Set up initial weigths and biases\n",
"\n",
" # Initialize the list of parameters:\n",
" P = [None]*(N_hidden + 1) # + 1 to include the output layer\n",
"\n",
" P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n",
" for l in range(1,N_hidden):\n",
" P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n",
"\n",
" # For the output layer\n",
" P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n",
"\n",
" print('Initial cost: ',cost_function(P, x, t))\n",
"\n",
" cost_function_grad = grad(cost_function,0)\n",
"\n",
" # Let the update be done num_iter times\n",
" for i in range(num_iter):\n",
" cost_grad = cost_function_grad(P, x , t)\n",
"\n",
" for l in range(N_hidden+1):\n",
" P[l] = P[l] - lmb * cost_grad[l]\n",
"\n",
"\n",
" print('Final cost: ',cost_function(P, x, t))\n",
"\n",
" return P\n",
"\n",
"if __name__ == '__main__':\n",
" ### Use the neural network:\n",
" npr.seed(15)\n",
"\n",
" ## Decide the vales of arguments to the function to solve\n",
" Nx = 10; Nt = 10\n",
" x = np.linspace(0, 1, Nx)\n",
" t = np.linspace(0,1,Nt)\n",
"\n",
" ## Set up the parameters for the network\n",
" num_hidden_neurons = [50,20]\n",
" num_iter = 1000\n",
" lmb = 0.01\n",
"\n",
" P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n",
"\n",
" ## Store the results\n",
" res = np.zeros((Nx, Nt))\n",
" res_analytical = np.zeros((Nx, Nt))\n",
" for i,x_ in enumerate(x):\n",
" for j, t_ in enumerate(t):\n",
" point = np.array([x_, t_])\n",
" res[i,j] = g_trial(point,P)\n",
"\n",
" res_analytical[i,j] = g_analytic(point)\n",
"\n",
" diff = np.abs(res - res_analytical)\n",
" print(\"Max difference between analytical and solution from nn: %g\"%np.max(diff))\n",
"\n",
" ## Plot the solutions in two dimensions, that being in position and time\n",
"\n",
" T,X = np.meshgrid(t,x)\n",
"\n",
" fig = plt.figure(figsize=(10,10))\n",
" ax = fig.gca(projection='3d')\n",
" ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n",
" s = ax.plot_surface(T,X,res,linewidth=0,antialiased=False,cmap=cm.viridis)\n",
" ax.set_xlabel('Time $t$')\n",
" ax.set_ylabel('Position $x$');\n",
"\n",
"\n",
" fig = plt.figure(figsize=(10,10))\n",
" ax = fig.gca(projection='3d')\n",
" ax.set_title('Analytical solution')\n",
" s = ax.plot_surface(T,X,res_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n",
" ax.set_xlabel('Time $t$')\n",
" ax.set_ylabel('Position $x$');\n",
"\n",
"\n",
" fig = plt.figure(figsize=(10,10))\n",
" ax = fig.gca(projection='3d')\n",
" ax.set_title('Difference')\n",
" s = ax.plot_surface(T,X,diff,linewidth=0,antialiased=False,cmap=cm.viridis)\n",
" ax.set_xlabel('Time $t$')\n",
" ax.set_ylabel('Position $x$');\n",
"\n",
" ## Take some slices of the 3D plots just to see the solutions at particular times\n",
" indx1 = 0\n",
" indx2 = int(Nt/2)\n",
" indx3 = Nt-1\n",
"\n",
" t1 = t[indx1]\n",
" t2 = t[indx2]\n",
" t3 = t[indx3]\n",
"\n",
" # Slice the results from the DNN\n",
" res1 = res[:,indx1]\n",
" res2 = res[:,indx2]\n",
" res3 = res[:,indx3]\n",
"\n",
" # Slice the analytical results\n",
" res_analytical1 = res_analytical[:,indx1]\n",
" res_analytical2 = res_analytical[:,indx2]\n",
" res_analytical3 = res_analytical[:,indx3]\n",
"\n",
" # Plot the slices\n",
" plt.figure(figsize=(10,10))\n",
" plt.title(\"Computed solutions at time = %g\"%t1)\n",
" plt.plot(x, res1)\n",
" plt.plot(x,res_analytical1)\n",
" plt.legend(['dnn','analytical'])\n",
"\n",
" plt.figure(figsize=(10,10))\n",
" plt.title(\"Computed solutions at time = %g\"%t2)\n",
" plt.plot(x, res2)\n",
" plt.plot(x,res_analytical2)\n",
" plt.legend(['dnn','analytical'])\n",
"\n",
" plt.figure(figsize=(10,10))\n",
" plt.title(\"Computed solutions at time = %g\"%t3)\n",
" plt.plot(x, res3)\n",
" plt.plot(x,res_analytical3)\n",
" plt.legend(['dnn','analytical'])\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Resources on differential equations and deep learning\n",
"\n",
"1. [Artificial neural networks for solving ordinary and partial differential equations by I.E. Lagaris et al](https://pdfs.semanticscholar.org/d061/df393e0e8fbfd0ea24976458b7d42419040d.pdf)\n",
"\n",
"2. [Neural networks for solving differential equations by A. Honchar](https://becominghuman.ai/neural-networks-for-solving-differential-equations-fa230ac5e04c)\n",
"\n",
"3. [Solving differential equations using neural networks by M.M Chiaramonte and M. Kiener](http://cs229.stanford.edu/proj2013/ChiaramonteKiener-SolvingDifferentialEquationsUsingNeuralNetworks.pdf)\n",
"\n",
"4. [Introduction to Partial Differential Equations by A. Tveito, R. Winther](https://www.springer.com/us/book/9783540225515)"
]
}
],
"metadata": {
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}