Files
FYS-STK4155/doc/LectureNotes/_build/jupyter_execute/chapteroptimization.ipynb
T
Morten Hjorth-Jensen 7ca589a654 buidl
2021-12-08 06:59:22 +01:00

3938 lines
419 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "4d72e1df",
"metadata": {
"editable": true
},
"source": [
"<!-- HTML file automatically generated from DocOnce source (https://github.com/doconce/doconce/)\n",
"doconce format html chapteroptimization.do.txt -->"
]
},
{
"cell_type": "markdown",
"id": "fb6e8fcd",
"metadata": {
"editable": true
},
"source": [
"# Optimization, the central part of any Machine Learning algortithm\n",
"\n",
"Almost every problem in machine learning and data science starts with\n",
"a dataset $X$, a model $g(\\beta)$, which is a function of the\n",
"parameters $\\beta$ and a cost function $C(X, g(\\beta))$ that allows\n",
"us to judge how well the model $g(\\beta)$ explains the observations\n",
"$X$. The model is fit by finding the values of $\\beta$ that minimize\n",
"the cost function. Ideally we would be able to solve for $\\beta$\n",
"analytically, however this is not possible in general and we must use\n",
"some approximative/numerical method to compute the minimum.\n",
"\n",
"In our discussion on Logistic Regression we studied the \n",
"case of\n",
"two classes, with $y_i$ either\n",
"$0$ or $1$. Furthermore we assumed also that we have only two\n",
"parameters $\\beta$ in our fitting, that is we\n",
"defined probabilities"
]
},
{
"cell_type": "markdown",
"id": "a507b82a",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\begin{align*}\n",
"p(y_i=1|x_i,\\boldsymbol{\\beta}) &= \\frac{\\exp{(\\beta_0+\\beta_1x_i)}}{1+\\exp{(\\beta_0+\\beta_1x_i)}},\\nonumber\\\\\n",
"p(y_i=0|x_i,\\boldsymbol{\\beta}) &= 1 - p(y_i=1|x_i,\\boldsymbol{\\beta}),\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "4071429e",
"metadata": {
"editable": true
},
"source": [
"where $\\boldsymbol{\\beta}$ are the weights we wish to extract from data, in our case $\\beta_0$ and $\\beta_1$. \n",
"\n",
"Our compact equations used a definition of a vector $\\boldsymbol{y}$ with $n$\n",
"elements $y_i$, an $n\\times p$ matrix $\\boldsymbol{X}$ which contains the\n",
"$x_i$ values and a vector $\\boldsymbol{p}$ of fitted probabilities\n",
"$p(y_i\\vert x_i,\\boldsymbol{\\beta})$. We rewrote in a more compact form\n",
"the first derivative of the cost function as"
]
},
{
"cell_type": "markdown",
"id": "a3cca0b2",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\frac{\\partial \\mathcal{C}(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}} = -\\boldsymbol{X}^T\\left(\\boldsymbol{y}-\\boldsymbol{p}\\right).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "12a4ad28",
"metadata": {
"editable": true
},
"source": [
"If we in addition define a diagonal matrix $\\boldsymbol{W}$ with elements \n",
"$p(y_i\\vert x_i,\\boldsymbol{\\beta})(1-p(y_i\\vert x_i,\\boldsymbol{\\beta})$, we can obtain a compact expression of the second derivative as"
]
},
{
"cell_type": "markdown",
"id": "5d6e7796",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\frac{\\partial^2 \\mathcal{C}(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}\\partial \\boldsymbol{\\beta}^T} = \\boldsymbol{X}^T\\boldsymbol{W}\\boldsymbol{X}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "b324ae78",
"metadata": {
"editable": true
},
"source": [
"This defines what is called the Hessian matrix.\n",
"\n",
"If we can set up these equations, Newton-Raphson's iterative method is normally the method of choice. It requires however that we can compute in an efficient way the matrices that define the first and second derivatives. \n",
"\n",
"Our iterative scheme is then given by"
]
},
{
"cell_type": "markdown",
"id": "7c39cc3f",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{\\beta}^{\\mathrm{new}} = \\boldsymbol{\\beta}^{\\mathrm{old}}-\\left(\\frac{\\partial^2 \\mathcal{C}(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}\\partial \\boldsymbol{\\beta}^T}\\right)^{-1}_{\\boldsymbol{\\beta}^{\\mathrm{old}}}\\times \\left(\\frac{\\partial \\mathcal{C}(\\boldsymbol{\\beta})}{\\partial \\boldsymbol{\\beta}}\\right)_{\\boldsymbol{\\beta}^{\\mathrm{old}}},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "10749f5d",
"metadata": {
"editable": true
},
"source": [
"or in matrix form as"
]
},
{
"cell_type": "markdown",
"id": "3ec50136",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{\\beta}^{\\mathrm{new}} = \\boldsymbol{\\beta}^{\\mathrm{old}}-\\left(\\boldsymbol{X}^T\\boldsymbol{W}\\boldsymbol{X} \\right)^{-1}\\times \\left(-\\boldsymbol{X}^T(\\boldsymbol{y}-\\boldsymbol{p}) \\right)_{\\boldsymbol{\\beta}^{\\mathrm{old}}}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "0145d9eb",
"metadata": {
"editable": true
},
"source": [
"The right-hand side is computed with the old values of $\\beta$. \n",
"\n",
"If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement. \n",
"\n",
"Let us quickly remind ourselves how we derive the above method.\n",
"\n",
"Perhaps the most celebrated of all one-dimensional root-finding\n",
"routines is Newton's method, also called the Newton-Raphson\n",
"method. This method requires the evaluation of both the\n",
"function $f$ and its derivative $f'$ at arbitrary points. \n",
"If you can only calculate the derivative\n",
"numerically and/or your function is not of the smooth type, we\n",
"normally discourage the use of this method.\n",
"\n",
"The Newton-Raphson formula consists geometrically of extending the\n",
"tangent line at a current point until it crosses zero, then setting\n",
"the next guess to the abscissa of that zero-crossing. The mathematics\n",
"behind this method is rather simple. Employing a Taylor expansion for\n",
"$x$ sufficiently close to the solution $s$, we have"
]
},
{
"cell_type": "markdown",
"id": "43c17534",
"metadata": {
"editable": true
},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"eq:taylornr\"></div>\n",
"\n",
"$$\n",
"f(s)=0=f(x)+(s-x)f'(x)+\\frac{(s-x)^2}{2}f''(x) +\\dots.\n",
" \\label{eq:taylornr} \\tag{1}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "32ef04f0",
"metadata": {
"editable": true
},
"source": [
"For small enough values of the function and for well-behaved\n",
"functions, the terms beyond linear are unimportant, hence we obtain"
]
},
{
"cell_type": "markdown",
"id": "6700017c",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"f(x)+(s-x)f'(x)\\approx 0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "8791dec4",
"metadata": {
"editable": true
},
"source": [
"yielding"
]
},
{
"cell_type": "markdown",
"id": "69008872",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"s\\approx x-\\frac{f(x)}{f'(x)}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "fce4ef1f",
"metadata": {
"editable": true
},
"source": [
"Having in mind an iterative procedure, it is natural to start iterating with"
]
},
{
"cell_type": "markdown",
"id": "e64aef7e",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"x_{n+1}=x_n-\\frac{f(x_n)}{f'(x_n)}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "9acecc44",
"metadata": {
"editable": true
},
"source": [
"The above is Newton-Raphson's method. It has a simple geometric\n",
"interpretation, namely $x_{n+1}$ is the point where the tangent from\n",
"$(x_n,f(x_n))$ crosses the $x$-axis. Close to the solution,\n",
"Newton-Raphson converges fast to the desired result. However, if we\n",
"are far from a root, where the higher-order terms in the series are\n",
"important, the Newton-Raphson formula can give grossly inaccurate\n",
"results. For instance, the initial guess for the root might be so far\n",
"from the true root as to let the search interval include a local\n",
"maximum or minimum of the function. If an iteration places a trial\n",
"guess near such a local extremum, so that the first derivative nearly\n",
"vanishes, then Newton-Raphson may fail totally\n",
"\n",
"Newton's method can be generalized to systems of several non-linear equations\n",
"and variables. Consider the case with two equations"
]
},
{
"cell_type": "markdown",
"id": "18bc9fd6",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\begin{array}{cc} f_1(x_1,x_2) &=0\\\\\n",
" f_2(x_1,x_2) &=0,\\end{array}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "7dcad370",
"metadata": {
"editable": true
},
"source": [
"which we Taylor expand to obtain"
]
},
{
"cell_type": "markdown",
"id": "f1724121",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\begin{array}{cc} 0=f_1(x_1+h_1,x_2+h_2)=&f_1(x_1,x_2)+h_1\n",
" \\partial f_1/\\partial x_1+h_2\n",
" \\partial f_1/\\partial x_2+\\dots\\\\\n",
" 0=f_2(x_1+h_1,x_2+h_2)=&f_2(x_1,x_2)+h_1\n",
" \\partial f_2/\\partial x_1+h_2\n",
" \\partial f_2/\\partial x_2+\\dots\n",
" \\end{array}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "d04bfa9f",
"metadata": {
"editable": true
},
"source": [
"Defining the Jacobian matrix $\\boldsymbol{J}$ we have"
]
},
{
"cell_type": "markdown",
"id": "a4d3a9e3",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{J}=\\left( \\begin{array}{cc}\n",
" \\partial f_1/\\partial x_1 & \\partial f_1/\\partial x_2 \\\\\n",
" \\partial f_2/\\partial x_1 &\\partial f_2/\\partial x_2\n",
" \\end{array} \\right),\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "d9d6ff69",
"metadata": {
"editable": true
},
"source": [
"we can rephrase Newton's method as"
]
},
{
"cell_type": "markdown",
"id": "362a86a3",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\left(\\begin{array}{c} x_1^{n+1} \\\\ x_2^{n+1} \\end{array} \\right)=\n",
"\\left(\\begin{array}{c} x_1^{n} \\\\ x_2^{n} \\end{array} \\right)+\n",
"\\left(\\begin{array}{c} h_1^{n} \\\\ h_2^{n} \\end{array} \\right),\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "4b8c2937",
"metadata": {
"editable": true
},
"source": [
"where we have defined"
]
},
{
"cell_type": "markdown",
"id": "7580aa9a",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\left(\\begin{array}{c} h_1^{n} \\\\ h_2^{n} \\end{array} \\right)=\n",
" -\\boldsymbol{J}^{-1}\n",
" \\left(\\begin{array}{c} f_1(x_1^{n},x_2^{n}) \\\\ f_2(x_1^{n},x_2^{n}) \\end{array} \\right).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "a2e3adc3",
"metadata": {
"editable": true
},
"source": [
"We need thus to compute the inverse of the Jacobian matrix and it\n",
"is to understand that difficulties may\n",
"arise in case $\\boldsymbol{J}$ is nearly singular.\n",
"\n",
"It is rather straightforward to extend the above scheme to systems of\n",
"more than two non-linear equations. In our case, the Jacobian matrix is given by the Hessian that represents the second derivative of cost function."
]
},
{
"cell_type": "markdown",
"id": "83a585c9",
"metadata": {
"editable": true
},
"source": [
"## Steepest descent\n",
"\n",
"The basic idea of gradient descent is\n",
"that a function $F(\\mathbf{x})$, \n",
"$\\mathbf{x} \\equiv (x_1,\\cdots,x_n)$, decreases fastest if one goes from $\\bf {x}$ in the\n",
"direction of the negative gradient $-\\nabla F(\\mathbf{x})$.\n",
"\n",
"It can be shown that if"
]
},
{
"cell_type": "markdown",
"id": "e127ea11",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{x}_{k+1} = \\mathbf{x}_k - \\gamma_k \\nabla F(\\mathbf{x}_k),\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "bce435bc",
"metadata": {
"editable": true
},
"source": [
"with $\\gamma_k > 0$.\n",
"\n",
"For $\\gamma_k$ small enough, then $F(\\mathbf{x}_{k+1}) \\leq\n",
"F(\\mathbf{x}_k)$. This means that for a sufficiently small $\\gamma_k$\n",
"we are always moving towards smaller function values, i.e a minimum.\n",
"\n",
"The previous observation is the basis of the method of steepest\n",
"descent, which is also referred to as just gradient descent (GD). One\n",
"starts with an initial guess $\\mathbf{x}_0$ for a minimum of $F$ and\n",
"computes new approximations according to"
]
},
{
"cell_type": "markdown",
"id": "2691da5f",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{x}_{k+1} = \\mathbf{x}_k - \\gamma_k \\nabla F(\\mathbf{x}_k), \\ \\ k \\geq 0.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "e7ae7322",
"metadata": {
"editable": true
},
"source": [
"The parameter $\\gamma_k$ is often referred to as the step length or\n",
"the learning rate within the context of Machine Learning.\n",
"\n",
"Ideally the sequence $\\{\\mathbf{x}_k \\}_{k=0}$ converges to a global\n",
"minimum of the function $F$. In general we do not know if we are in a\n",
"global or local minimum. In the special case when $F$ is a convex\n",
"function, all local minima are also global minima, so in this case\n",
"gradient descent can converge to the global solution. The advantage of\n",
"this scheme is that it is conceptually simple and straightforward to\n",
"implement. However the method in this form has some severe\n",
"limitations:\n",
"\n",
"In machine learing we are often faced with non-convex high dimensional\n",
"cost functions with many local minima. Since GD is deterministic we\n",
"will get stuck in a local minimum, if the method converges, unless we\n",
"have a very good intial guess. This also implies that the scheme is\n",
"sensitive to the chosen initial condition.\n",
"\n",
"Note that the gradient is a function of $\\mathbf{x} =\n",
"(x_1,\\cdots,x_n)$ which makes it expensive to compute numerically.\n",
"\n",
"The gradient descent method \n",
"is sensitive to the choice of learning rate $\\gamma_k$. This is due\n",
"to the fact that we are only guaranteed that $F(\\mathbf{x}_{k+1}) \\leq\n",
"F(\\mathbf{x}_k)$ for sufficiently small $\\gamma_k$. The problem is to\n",
"determine an optimal learning rate. If the learning rate is chosen too\n",
"small the method will take a long time to converge and if it is too\n",
"large we can experience erratic behavior.\n",
"\n",
"Many of these shortcomings can be alleviated by introducing\n",
"randomness. One such method is that of Stochastic Gradient Descent\n",
"(SGD), see below."
]
},
{
"cell_type": "markdown",
"id": "a6a44ea7",
"metadata": {
"editable": true
},
"source": [
"## Convex functions\n",
"\n",
"Ideally we want our cost/loss function to be convex(concave).\n",
"\n",
"First we give the definition of a convex set: A set $C$ in\n",
"$\\mathbb{R}^n$ is said to be convex if, for all $x$ and $y$ in $C$ and\n",
"all $t \\in (0,1)$ , the point $(1 t)x + ty$ also belongs to\n",
"C. Geometrically this means that every point on the line segment\n",
"connecting $x$ and $y$ is in $C$ as discussed below.\n",
"\n",
"The convex subsets of $\\mathbb{R}$ are the intervals of\n",
"$\\mathbb{R}$. Examples of convex sets of $\\mathbb{R}^2$ are the\n",
"regular polygons (triangles, rectangles, pentagons, etc...).\n",
"\n",
"**Convex function**: Let $X \\subset \\mathbb{R}^n$ be a convex set. Assume that the function $f: X \\rightarrow \\mathbb{R}$ is continuous, then $f$ is said to be convex if $$f(tx_1 + (1-t)x_2) \\leq tf(x_1) + (1-t)f(x_2) $$ for all $x_1, x_2 \\in X$ and for all $t \\in [0,1]$. If $\\leq$ is replaced with a strict inequaltiy in the definition, we demand $x_1 \\neq x_2$ and $t\\in(0,1)$ then $f$ is said to be strictly convex. For a single variable function, convexity means that if you draw a straight line connecting $f(x_1)$ and $f(x_2)$, the value of the function on the interval $[x_1,x_2]$ is always below the line as illustrated below.\n",
"\n",
"In the following we state first and second-order conditions which\n",
"ensures convexity of a function $f$. We write $D_f$ to denote the\n",
"domain of $f$, i.e the subset of $R^n$ where $f$ is defined. For more\n",
"details and proofs we refer to: [S. Boyd and L. Vandenberghe. Convex Optimization. Cambridge University Press](http://stanford.edu/boyd/cvxbook/, 2004).\n",
"\n",
"**First order condition.**\n",
"\n",
"Suppose $f$ is differentiable (i.e $\\nabla f(x)$ is well defined for\n",
"all $x$ in the domain of $f$). Then $f$ is convex if and only if $D_f$\n",
"is a convex set and $$f(y) \\geq f(x) + \\nabla f(x)^T (y-x) $$ holds\n",
"for all $x,y \\in D_f$. This condition means that for a convex function\n",
"the first order Taylor expansion (right hand side above) at any point\n",
"a global under estimator of the function. To convince yourself you can\n",
"make a drawing of $f(x) = x^2+1$ and draw the tangent line to $f(x)$ and\n",
"note that it is always below the graph.\n",
"\n",
"**Second order condition.**\n",
"\n",
"Assume that $f$ is twice\n",
"differentiable, i.e the Hessian matrix exists at each point in\n",
"$D_f$. Then $f$ is convex if and only if $D_f$ is a convex set and its\n",
"Hessian is positive semi-definite for all $x\\in D_f$. For a\n",
"single-variable function this reduces to $f''(x) \\geq 0$. Geometrically this means that $f$ has nonnegative curvature\n",
"everywhere.\n",
"\n",
"This condition is particularly useful since it gives us an procedure for determining if the function under consideration is convex, apart from using the definition.\n",
"\n",
"The next result is of great importance to us and the reason why we are\n",
"going on about convex functions. In machine learning we frequently\n",
"have to minimize a loss/cost function in order to find the best\n",
"parameters for the model we are considering. \n",
"\n",
"Ideally we want the\n",
"global minimum (for high-dimensional models it is hard to know\n",
"if we have local or global minimum). However, if the cost/loss function\n",
"is convex the following result provides invaluable information:\n",
"\n",
"**Any minimum is global for convex functions.**\n",
"\n",
"Consider the problem of finding $x \\in \\mathbb{R}^n$ such that $f(x)$\n",
"is minimal, where $f$ is convex and differentiable. Then, any point\n",
"$x^*$ that satisfies $\\nabla f(x^*) = 0$ is a global minimum.\n",
"\n",
"This result means that if we know that the cost/loss function is convex and we are able to find a minimum, we are guaranteed that it is a global minimum."
]
},
{
"cell_type": "markdown",
"id": "809f8f01",
"metadata": {
"editable": true
},
"source": [
"### Some simple problems\n",
"\n",
"1. Show that $f(x)=x^2$ is convex for $x \\in \\mathbb{R}$ using the definition of convexity. Hint: If you re-write the definition, $f$ is convex if the following holds for all $x,y \\in D_f$ and any $\\lambda \\in [0,1]$ $\\lambda f(x)+(1-\\lambda)f(y)-f(\\lambda x + (1-\\lambda) y ) \\geq 0$.\n",
"\n",
"2. Using the second order condition show that the following functions are convex on the specified domain.\n",
"\n",
" * $f(x) = e^x$ is convex for $x \\in \\mathbb{R}$.\n",
"\n",
" * $g(x) = -\\ln(x)$ is convex for $x \\in (0,\\infty)$.\n",
"\n",
"3. Let $f(x) = x^2$ and $g(x) = e^x$. Show that $f(g(x))$ and $g(f(x))$ is convex for $x \\in \\mathbb{R}$. Also show that if $f(x)$ is any convex function than $h(x) = e^{f(x)}$ is convex.\n",
"\n",
"4. A norm is any function that satisfy the following properties\n",
"\n",
" * $f(\\alpha x) = |\\alpha| f(x)$ for all $\\alpha \\in \\mathbb{R}$.\n",
"\n",
" * $f(x+y) \\leq f(x) + f(y)$\n",
"\n",
" * $f(x) \\leq 0$ for all $x \\in \\mathbb{R}^n$ with equality if and only if $x = 0$\n",
"\n",
"Using the definition of convexity, try to show that a function satisfying the properties above is convex (the third condition is not needed to show this)."
]
},
{
"cell_type": "markdown",
"id": "f3b91277",
"metadata": {
"editable": true
},
"source": [
"## Standard steepest descent\n",
"\n",
"Before we proceed, we would like to discuss the approach called the\n",
"**standard Steepest descent** (different from the above steepest descent discussion), which again leads to us having to be able\n",
"to compute a matrix. It belongs to the class of Conjugate Gradient methods (CG).\n",
"\n",
"[The success of the CG method](https://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf)\n",
"for finding solutions of non-linear problems is based on the theory\n",
"of conjugate gradients for linear systems of equations. It belongs to\n",
"the class of iterative methods for solving problems from linear\n",
"algebra of the type"
]
},
{
"cell_type": "markdown",
"id": "ec752109",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{A}\\boldsymbol{x} = \\boldsymbol{b}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "eb64c8e7",
"metadata": {
"editable": true
},
"source": [
"In the iterative process we end up with a problem like"
]
},
{
"cell_type": "markdown",
"id": "7e99eb7f",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{r}= \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "3a3f6414",
"metadata": {
"editable": true
},
"source": [
"where $\\boldsymbol{r}$ is the so-called residual or error in the iterative process.\n",
"\n",
"When we have found the exact solution, $\\boldsymbol{r}=0$.\n",
"\n",
"The residual is zero when we reach the minimum of the quadratic equation"
]
},
{
"cell_type": "markdown",
"id": "a88175a4",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"P(\\boldsymbol{x})=\\frac{1}{2}\\boldsymbol{x}^T\\boldsymbol{A}\\boldsymbol{x} - \\boldsymbol{x}^T\\boldsymbol{b},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "6992cc4f",
"metadata": {
"editable": true
},
"source": [
"with the constraint that the matrix $\\boldsymbol{A}$ is positive definite and\n",
"symmetric. This defines also the Hessian and we want it to be positive definite. \n",
"\n",
"We denote the initial guess for $\\boldsymbol{x}$ as $\\boldsymbol{x}_0$. \n",
"We can assume without loss of generality that"
]
},
{
"cell_type": "markdown",
"id": "00e22e2b",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{x}_0=0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "faab896d",
"metadata": {
"editable": true
},
"source": [
"or consider the system"
]
},
{
"cell_type": "markdown",
"id": "02cb8061",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{A}\\boldsymbol{z} = \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x}_0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "fe52c448",
"metadata": {
"editable": true
},
"source": [
"instead.\n",
"\n",
"One can show that the solution $\\boldsymbol{x}$ is also the unique minimizer of the quadratic form"
]
},
{
"cell_type": "markdown",
"id": "f698b7fe",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"f(\\boldsymbol{x}) = \\frac{1}{2}\\boldsymbol{x}^T\\boldsymbol{A}\\boldsymbol{x} - \\boldsymbol{x}^T \\boldsymbol{x} , \\quad \\boldsymbol{x}\\in\\mathbf{R}^n.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "022bda7f",
"metadata": {
"editable": true
},
"source": [
"This suggests taking the first basis vector $\\boldsymbol{r}_1$ (see below for definition) \n",
"to be the gradient of $f$ at $\\boldsymbol{x}=\\boldsymbol{x}_0$, \n",
"which equals"
]
},
{
"cell_type": "markdown",
"id": "b64077bc",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{A}\\boldsymbol{x}_0-\\boldsymbol{b},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "dec06904",
"metadata": {
"editable": true
},
"source": [
"and \n",
"$\\boldsymbol{x}_0=0$ it is equal $-\\boldsymbol{b}$.\n",
"\n",
"We can compute the residual iteratively as"
]
},
{
"cell_type": "markdown",
"id": "b566de75",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{r}_{k+1}=\\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x}_{k+1},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "2c2d16e7",
"metadata": {
"editable": true
},
"source": [
"which equals"
]
},
{
"cell_type": "markdown",
"id": "6c97f03d",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{b}-\\boldsymbol{A}(\\boldsymbol{x}_k+\\alpha_k\\boldsymbol{r}_k),\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "2b40818b",
"metadata": {
"editable": true
},
"source": [
"or"
]
},
{
"cell_type": "markdown",
"id": "6619d064",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"(\\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x}_k)-\\alpha_k\\boldsymbol{A}\\boldsymbol{r}_k,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "467c71be",
"metadata": {
"editable": true
},
"source": [
"which gives"
]
},
{
"cell_type": "markdown",
"id": "d58fd1af",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\alpha_k = \\frac{\\boldsymbol{r}_k^T\\boldsymbol{r}_k}{\\boldsymbol{r}_k^T\\boldsymbol{A}\\boldsymbol{r}_k}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "38e32957",
"metadata": {
"editable": true
},
"source": [
"leading to the iterative scheme"
]
},
{
"cell_type": "markdown",
"id": "98043fd6",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{x}_{k+1}=\\boldsymbol{x}_k-\\alpha_k\\boldsymbol{r}_{k},\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "8c7efe84",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/jy/g42mrgv128v34gnnhxwk9nrc0000gp/T/ipykernel_47735/483257001.py:18: MatplotlibDeprecationWarning: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4. Starting two minor releases later, gca() will take no keyword arguments. The gca() function should only be used to get the current axes, or if no axes exist, create new axes with default keyword arguments. To create a new axes with non-default arguments, use plt.axes() or plt.subplot().\n",
" ax = fig.gca(projection=\"3d\")\n"
]
},
{
"data": {
"text/plain": [
"<mpl_toolkits.mplot3d.art3d.Poly3DCollection at 0x7fd098df3280>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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s9x0002sXbt2xL3ajuMUiO55XuFEP12EOZ9eOh/yxhAUyxw7dowVK1aM6DTOT/fo6OgobHCni7wPF1JK9u7di67rZyT2Sy+9xIMPPsjTTz894S3Bo4wiuUcTiUSCxx9/nMcee4zu7m5uvPFG1q1bN+JKtbzcUHt7O7ZtF174fO13fijg+ZBegmDWdL6G/lzM7PwG19HRUajzH2nNe57YmqYxd+7cIX9u8+bN3H///fzsZz+bcI34MUCR3GOFrq4unnzySTZu3EhbWxvXX389t912GwsXLhxRQGlwBDqTyRAOh0mn06xcuXLC00sQVMF1dnaybNmyUc3tD/69h1vzng+CKopyxg1127ZtfPzjH+fxxx8/YwT9AkWR3OOB3t5ennrqKR577DGampp4xzvewbp161i+fPmIiH7s2DEOHz5MLBYjk8mMeZPHmXD48GF6e3tZtmzZmEbA8/PRE4kEfX19lJSUFNRm8huKlJLGxkaklMyfP3/I72Pnzp185CMfYcOGDcybN2/M1j3BKJJ7vJFMJtm0aRMbN25k3759XHvttaxdu5ZLLrlkSIIcPXq0cELqul544dvb2wsjhWtqasZNKXRw19t4p7b6+voKxUL5Ro++vj6AMxJ7z549fOhDH+KnP/3puOh8TyCK5J5IDO5J3759O29961tZu3Yta9asOeFEOlOdeH6kcHt7O729vYWTbSxyyvm0YH766EQXp6RSKfbu3UsmkyEejw8ZeW9sbOT9738/P/7xj1m6dOkErHhccWGS+7Of/SxPPfUUpmkye/ZsfvSjH034CJ5zRS6X4/nnn2fDhg1s2bKFK664gltvvZVNmzZx1113cemllw6LSPmTrb29ne7u7sLs8KqqqnP2ifOmr+/7Y1a3PtL1HDhwANd1WbhwYSG1eKrIe1NTE+95z3v493//91MOjRwNPPvss3zqU5/C930+8pGPFAQUJwgXJrmfe+45rrnmGnRd53Of+xwAf//3f3+ulz1v4DgOzz//PJ/+9KeJRCKsWrWK2267jauuumpEVW1SSvr7+wsmbF72eSh996GutXfvXhRFOaPpOx7IWxC2bbNo0aLXrSevsNPQ0MAXv/hFXNflb/7mb7j33nvHZO2+7zNv3jyef/556urquPTSS/mv//qviTT9x+QBjbkDdt111xVezjVr1tDS0jLWtxxXmKbJgQMH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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapteroptimization_61_2.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import numpy as np\n",
"import numpy.linalg as la\n",
"\n",
"import scipy.optimize as sopt\n",
"\n",
"import matplotlib.pyplot as pt\n",
"from mpl_toolkits.mplot3d import axes3d\n",
"\n",
"def f(x):\n",
" return 0.5*x[0]**2 + 2.5*x[1]**2\n",
"\n",
"def df(x):\n",
" return np.array([x[0], 5*x[1]])\n",
"\n",
"fig = pt.figure()\n",
"ax = fig.gca(projection=\"3d\")\n",
"\n",
"xmesh, ymesh = np.mgrid[-2:2:50j,-2:2:50j]\n",
"fmesh = f(np.array([xmesh, ymesh]))\n",
"ax.plot_surface(xmesh, ymesh, fmesh)"
]
},
{
"cell_type": "markdown",
"id": "3bdeb3c1",
"metadata": {
"editable": true
},
"source": [
"And then as countor plot"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "e6e460db",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapteroptimization_63_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pt.axis(\"equal\")\n",
"pt.contour(xmesh, ymesh, fmesh)\n",
"guesses = [np.array([2, 2./5])]"
]
},
{
"cell_type": "markdown",
"id": "d165add7",
"metadata": {
"editable": true
},
"source": [
"Find guesses"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "236615ae",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"x = guesses[-1]\n",
"s = -df(x)"
]
},
{
"cell_type": "markdown",
"id": "4b90442c",
"metadata": {
"editable": true
},
"source": [
"Run it!"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "0346fd1d",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1.33333333 -0.26666667]\n"
]
}
],
"source": [
"def f1d(alpha):\n",
" return f(x + alpha*s)\n",
"\n",
"alpha_opt = sopt.golden(f1d)\n",
"next_guess = x + alpha_opt * s\n",
"guesses.append(next_guess)\n",
"print(next_guess)"
]
},
{
"cell_type": "markdown",
"id": "ecff8b5b",
"metadata": {
"editable": true
},
"source": [
"What happened?"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "0d9b7732",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fd0a9063be0>]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapteroptimization_69_1.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pt.axis(\"equal\")\n",
"pt.contour(xmesh, ymesh, fmesh, 50)\n",
"it_array = np.array(guesses)\n",
"pt.plot(it_array.T[0], it_array.T[1], \"x-\")"
]
},
{
"cell_type": "markdown",
"id": "b0f8920b",
"metadata": {
"editable": true
},
"source": [
"## Conjugate gradient method\n",
"In the CG method we define so-called conjugate directions and two vectors \n",
"$\\boldsymbol{s}$ and $\\boldsymbol{t}$\n",
"are said to be\n",
"conjugate if"
]
},
{
"cell_type": "markdown",
"id": "67b215c6",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{s}^T\\boldsymbol{A}\\boldsymbol{t}= 0.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "efc1c192",
"metadata": {
"editable": true
},
"source": [
"The philosophy of the CG method is to perform searches in various conjugate directions\n",
"of our vectors $\\boldsymbol{x}_i$ obeying the above criterion, namely"
]
},
{
"cell_type": "markdown",
"id": "eb4e1832",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{x}_i^T\\boldsymbol{A}\\boldsymbol{x}_j= 0.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "775cf999",
"metadata": {
"editable": true
},
"source": [
"Two vectors are conjugate if they are orthogonal with respect to \n",
"this inner product. Being conjugate is a symmetric relation: if $\\boldsymbol{s}$ is conjugate to $\\boldsymbol{t}$, then $\\boldsymbol{t}$ is conjugate to $\\boldsymbol{s}$.\n",
"\n",
"An example is given by the eigenvectors of the matrix"
]
},
{
"cell_type": "markdown",
"id": "95893950",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{v}_i^T\\boldsymbol{A}\\boldsymbol{v}_j= \\lambda\\boldsymbol{v}_i^T\\boldsymbol{v}_j,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "16bfad5c",
"metadata": {
"editable": true
},
"source": [
"which is zero unless $i=j$. \n",
"\n",
"Assume now that we have a symmetric positive-definite matrix $\\boldsymbol{A}$ of size\n",
"$n\\times n$. At each iteration $i+1$ we obtain the conjugate direction of a vector"
]
},
{
"cell_type": "markdown",
"id": "e2577f1c",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{x}_{i+1}=\\boldsymbol{x}_{i}+\\alpha_i\\boldsymbol{p}_{i}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "e4defaaf",
"metadata": {
"editable": true
},
"source": [
"We assume that $\\boldsymbol{p}_{i}$ is a sequence of $n$ mutually conjugate directions. \n",
"Then the $\\boldsymbol{p}_{i}$ form a basis of $R^n$ and we can expand the solution \n",
"$ \\boldsymbol{A}\\boldsymbol{x} = \\boldsymbol{b}$ in this basis, namely"
]
},
{
"cell_type": "markdown",
"id": "b4632612",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{x} = \\sum^{n}_{i=1} \\alpha_i \\boldsymbol{p}_i.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "a0a06bf2",
"metadata": {
"editable": true
},
"source": [
"The coefficients are given by"
]
},
{
"cell_type": "markdown",
"id": "1db7cc6a",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{A}\\mathbf{x} = \\sum^{n}_{i=1} \\alpha_i \\mathbf{A} \\mathbf{p}_i = \\mathbf{b}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "e7aa5384",
"metadata": {
"editable": true
},
"source": [
"Multiplying with $\\boldsymbol{p}_k^T$ from the left gives"
]
},
{
"cell_type": "markdown",
"id": "884580b0",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{p}_k^T \\boldsymbol{A}\\boldsymbol{x} = \\sum^{n}_{i=1} \\alpha_i\\boldsymbol{p}_k^T \\boldsymbol{A}\\boldsymbol{p}_i= \\boldsymbol{p}_k^T \\boldsymbol{b},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "934990e4",
"metadata": {
"editable": true
},
"source": [
"and we can define the coefficients $\\alpha_k$ as"
]
},
{
"cell_type": "markdown",
"id": "8be96384",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\alpha_k = \\frac{\\boldsymbol{p}_k^T \\boldsymbol{b}}{\\boldsymbol{p}_k^T \\boldsymbol{A} \\boldsymbol{p}_k}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "44f4d8d5",
"metadata": {
"editable": true
},
"source": [
"If we choose the conjugate vectors $\\boldsymbol{p}_k$ carefully, \n",
"then we may not need all of them to obtain a good approximation to the solution \n",
"$\\boldsymbol{x}$. \n",
"We want to regard the conjugate gradient method as an iterative method. \n",
"This will us to solve systems where $n$ is so large that the direct \n",
"method would take too much time.\n",
"\n",
"We denote the initial guess for $\\boldsymbol{x}$ as $\\boldsymbol{x}_0$. \n",
"We can assume without loss of generality that"
]
},
{
"cell_type": "markdown",
"id": "a8739d7d",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{x}_0=0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "d871e171",
"metadata": {
"editable": true
},
"source": [
"or consider the system"
]
},
{
"cell_type": "markdown",
"id": "7ed84e84",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{A}\\boldsymbol{z} = \\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x}_0,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "b690f75b",
"metadata": {
"editable": true
},
"source": [
"instead.\n",
"\n",
"One can show that the solution $\\boldsymbol{x}$ is also the unique minimizer of the quadratic form"
]
},
{
"cell_type": "markdown",
"id": "86ce9e8a",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"f(\\boldsymbol{x}) = \\frac{1}{2}\\boldsymbol{x}^T\\boldsymbol{A}\\boldsymbol{x} - \\boldsymbol{x}^T \\boldsymbol{x} , \\quad \\boldsymbol{x}\\in\\mathbf{R}^n.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "7968787f",
"metadata": {
"editable": true
},
"source": [
"This suggests taking the first basis vector $\\boldsymbol{p}_1$ \n",
"to be the gradient of $f$ at $\\boldsymbol{x}=\\boldsymbol{x}_0$, \n",
"which equals"
]
},
{
"cell_type": "markdown",
"id": "0d510b11",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{A}\\boldsymbol{x}_0-\\boldsymbol{b},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "c7c47a8e",
"metadata": {
"editable": true
},
"source": [
"and \n",
"$\\boldsymbol{x}_0=0$ it is equal $-\\boldsymbol{b}$.\n",
"The other vectors in the basis will be conjugate to the gradient, \n",
"hence the name conjugate gradient method.\n",
"\n",
"Let $\\boldsymbol{r}_k$ be the residual at the $k$-th step:"
]
},
{
"cell_type": "markdown",
"id": "5dc0e4ac",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{r}_k=\\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x}_k.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "0aecb4b3",
"metadata": {
"editable": true
},
"source": [
"Note that $\\boldsymbol{r}_k$ is the negative gradient of $f$ at \n",
"$\\boldsymbol{x}=\\boldsymbol{x}_k$, \n",
"so the gradient descent method would be to move in the direction $\\boldsymbol{r}_k$. \n",
"Here, we insist that the directions $\\boldsymbol{p}_k$ are conjugate to each other, \n",
"so we take the direction closest to the gradient $\\boldsymbol{r}_k$ \n",
"under the conjugacy constraint. \n",
"This gives the following expression"
]
},
{
"cell_type": "markdown",
"id": "f3dfc701",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{p}_{k+1}=\\boldsymbol{r}_k-\\frac{\\boldsymbol{p}_k^T \\boldsymbol{A}\\boldsymbol{r}_k}{\\boldsymbol{p}_k^T\\boldsymbol{A}\\boldsymbol{p}_k} \\boldsymbol{p}_k.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "12e92892",
"metadata": {
"editable": true
},
"source": [
"We can also compute the residual iteratively as"
]
},
{
"cell_type": "markdown",
"id": "1514b03f",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{r}_{k+1}=\\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x}_{k+1},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "7b09db3d",
"metadata": {
"editable": true
},
"source": [
"which equals"
]
},
{
"cell_type": "markdown",
"id": "4a0638f8",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{b}-\\boldsymbol{A}(\\boldsymbol{x}_k+\\alpha_k\\boldsymbol{p}_k),\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "298f5e46",
"metadata": {
"editable": true
},
"source": [
"or"
]
},
{
"cell_type": "markdown",
"id": "acd35abb",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"(\\boldsymbol{b}-\\boldsymbol{A}\\boldsymbol{x}_k)-\\alpha_k\\boldsymbol{A}\\boldsymbol{p}_k,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "79625f01",
"metadata": {
"editable": true
},
"source": [
"which gives"
]
},
{
"cell_type": "markdown",
"id": "dc5888e2",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{r}_{k+1}=\\boldsymbol{r}_k-\\boldsymbol{A}\\boldsymbol{p}_{k},\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "d11b96a9",
"metadata": {
"editable": true
},
"source": [
"## Revisiting our Linear Regression Solvers\n",
"\n",
"We will use linear regression as a case study for the gradient descent\n",
"methods. Linear regression is a great test case for the gradient\n",
"descent methods discussed in the lectures since it has several\n",
"desirable properties such as:\n",
"\n",
"1. An analytical solution.\n",
"\n",
"2. The gradient can be computed analytically.\n",
"\n",
"3. The cost function is convex which guarantees that gradient descent converges for small enough learning rates\n",
"\n",
"We revisit an example similar to what we had in the first homework set. We had a function of the type"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "cf7c349e",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"m = 100\n",
"x = 2*np.random.rand(m,1)\n",
"y = 4+3*x+np.random.randn(m,1)"
]
},
{
"cell_type": "markdown",
"id": "adf34219",
"metadata": {
"editable": true
},
"source": [
"with $x_i \\in [0,1] $ is chosen randomly using a uniform distribution. Additionally we have a stochastic noise chosen according to a normal distribution $\\cal {N}(0,1)$. \n",
"The linear regression model is given by"
]
},
{
"cell_type": "markdown",
"id": "d28eb4e0",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"h_\\beta(x) = \\boldsymbol{y} = \\beta_0 + \\beta_1 x,\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "60060fcb",
"metadata": {
"editable": true
},
"source": [
"such that"
]
},
{
"cell_type": "markdown",
"id": "82983f16",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{y}_i = \\beta_0 + \\beta_1 x_i.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "60fc4bc0",
"metadata": {
"editable": true
},
"source": [
"Let $\\mathbf{y} = (y_1,\\cdots,y_n)^T$, $\\mathbf{\\boldsymbol{y}} = (\\boldsymbol{y}_1,\\cdots,\\boldsymbol{y}_n)^T$ and $\\beta = (\\beta_0, \\beta_1)^T$\n",
"\n",
"It is convenient to write $\\mathbf{\\boldsymbol{y}} = X\\beta$ where $X \\in \\mathbb{R}^{100 \\times 2} $ is the design matrix given by (we keep the intercept here)"
]
},
{
"cell_type": "markdown",
"id": "0c5dac72",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"X \\equiv \\begin{bmatrix}\n",
"1 & x_1 \\\\\n",
"\\vdots & \\vdots \\\\\n",
"1 & x_{100} & \\\\\n",
"\\end{bmatrix}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "002d8c9b",
"metadata": {
"editable": true
},
"source": [
"The cost/loss/risk function is given by ("
]
},
{
"cell_type": "markdown",
"id": "b91d8b5a",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"C(\\beta) = \\frac{1}{n}||X\\beta-\\mathbf{y}||_{2}^{2} = \\frac{1}{n}\\sum_{i=1}^{100}\\left[ (\\beta_0 + \\beta_1 x_i)^2 - 2 y_i (\\beta_0 + \\beta_1 x_i) + y_i^2\\right]\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "d0fc6c20",
"metadata": {
"editable": true
},
"source": [
"and we want to find $\\beta$ such that $C(\\beta)$ is minimized.\n",
"\n",
"Computing $\\partial C(\\beta) / \\partial \\beta_0$ and $\\partial C(\\beta) / \\partial \\beta_1$ we can show that the gradient can be written as"
]
},
{
"cell_type": "markdown",
"id": "3f99dab5",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\nabla_{\\beta} C(\\beta) = \\frac{2}{n}\\begin{bmatrix} \\sum_{i=1}^{100} \\left(\\beta_0+\\beta_1x_i-y_i\\right) \\\\\n",
"\\sum_{i=1}^{100}\\left( x_i (\\beta_0+\\beta_1x_i)-y_ix_i\\right) \\\\\n",
"\\end{bmatrix} = \\frac{2}{n}X^T(X\\beta - \\mathbf{y}),\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "e1305a22",
"metadata": {
"editable": true
},
"source": [
"where $X$ is the design matrix defined above.\n",
"\n",
"The Hessian matrix of $C(\\beta)$ is given by"
]
},
{
"cell_type": "markdown",
"id": "ef62073f",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{H} \\equiv \\begin{bmatrix}\n",
"\\frac{\\partial^2 C(\\beta)}{\\partial \\beta_0^2} & \\frac{\\partial^2 C(\\beta)}{\\partial \\beta_0 \\partial \\beta_1} \\\\\n",
"\\frac{\\partial^2 C(\\beta)}{\\partial \\beta_0 \\partial \\beta_1} & \\frac{\\partial^2 C(\\beta)}{\\partial \\beta_1^2} & \\\\\n",
"\\end{bmatrix} = \\frac{2}{n}X^T X.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "dfb78235",
"metadata": {
"editable": true
},
"source": [
"This result implies that $C(\\beta)$ is a convex function since the matrix $X^T X$ always is positive semi-definite.\n",
"\n",
"We can now write a program that minimizes $C(\\beta)$ using the gradient descent method with a constant learning rate $\\gamma$ according to"
]
},
{
"cell_type": "markdown",
"id": "56cee86c",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\beta_{k+1} = \\beta_k - \\gamma \\nabla_\\beta C(\\beta_k), \\ k=0,1,\\cdots\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "6cc71454",
"metadata": {
"editable": true
},
"source": [
"We can use the expression we computed for the gradient and let use a\n",
"$\\beta_0$ be chosen randomly and let $\\gamma = 0.001$. Stop iterating\n",
"when $||\\nabla_\\beta C(\\beta_k) || \\leq \\epsilon = 10^{-8}$. **Note that the code below does not include the latter stop criterion**.\n",
"\n",
"And finally we can compare our solution for $\\beta$ with the analytic result given by \n",
"$\\beta= (X^TX)^{-1} X^T \\mathbf{y}$.\n",
"\n",
"Here is our simple example"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "90fab6b7",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.28001319 4.21265216]\n",
"[[3.96987657]\n",
" [3.02493054]]\n",
"[[3.96987657]\n",
" [3.02493054]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapteroptimization_123_1.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\n",
"# Importing various packages\n",
"from random import random, seed\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"from matplotlib import cm\n",
"from matplotlib.ticker import LinearLocator, FormatStrFormatter\n",
"import sys\n",
"\n",
"# the number of datapoints\n",
"n = 100\n",
"x = 2*np.random.rand(n,1)\n",
"y = 4+3*x+np.random.randn(n,1)\n",
"\n",
"X = np.c_[np.ones((n,1)), x]\n",
"# Hessian matrix\n",
"H = (2.0/n)* X.T @ X\n",
"# Get the eigenvalues\n",
"EigValues, EigVectors = np.linalg.eig(H)\n",
"print(EigValues)\n",
"\n",
"beta_linreg = np.linalg.inv(X.T @ X) @ X.T @ y\n",
"print(beta_linreg)\n",
"beta = np.random.randn(2,1)\n",
"\n",
"eta = 1.0/np.max(EigValues)\n",
"Niterations = 1000\n",
"\n",
"for iter in range(Niterations):\n",
" gradient = (2.0/n)*X.T @ (X @ beta-y)\n",
" beta -= eta*gradient\n",
"\n",
"print(beta)\n",
"xnew = np.array([[0],[2]])\n",
"xbnew = np.c_[np.ones((2,1)), xnew]\n",
"ypredict = xbnew.dot(beta)\n",
"ypredict2 = xbnew.dot(beta_linreg)\n",
"plt.plot(xnew, ypredict, \"r-\")\n",
"plt.plot(xnew, ypredict2, \"b-\")\n",
"plt.plot(x, y ,'ro')\n",
"plt.axis([0,2.0,0, 15.0])\n",
"plt.xlabel(r'$x$')\n",
"plt.ylabel(r'$y$')\n",
"plt.title(r'Gradient descent example')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "48ba87fe",
"metadata": {
"editable": true
},
"source": [
"Alternatively, we can use **Scikit-Learn** as done here"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "7522775d",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[4.00275135]\n",
" [2.99724883]]\n",
"[3.97065296] [3.07656896]\n"
]
}
],
"source": [
"# Importing various packages\n",
"from random import random, seed\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.linear_model import SGDRegressor\n",
"\n",
"n = 100\n",
"x = 2*np.random.rand(n,1)\n",
"y = 4+3*x+np.random.randn(n,1)\n",
"\n",
"X = np.c_[np.ones((n,1)), x]\n",
"beta_linreg = np.linalg.inv(X.T @ X) @ (X.T @ y)\n",
"print(beta_linreg)\n",
"sgdreg = SGDRegressor(max_iter = 50, penalty=None, eta0=0.1)\n",
"sgdreg.fit(x,y.ravel())\n",
"print(sgdreg.intercept_, sgdreg.coef_)"
]
},
{
"cell_type": "markdown",
"id": "90552e2f",
"metadata": {
"editable": true
},
"source": [
"We have also discussed Ridge regression where the loss function contains a regularized term given by the $L_2$ norm of $\\beta$,"
]
},
{
"cell_type": "markdown",
"id": "5d7c032c",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"C_{\\text{ridge}}(\\beta) = \\frac{1}{n}||X\\beta -\\mathbf{y}||^2 + \\lambda ||\\beta||^2, \\ \\lambda \\geq 0.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "ed86f1ba",
"metadata": {
"editable": true
},
"source": [
"In order to minimize $C_{\\text{ridge}}(\\beta)$ using GD we only have adjust the gradient as follows"
]
},
{
"cell_type": "markdown",
"id": "0386e23c",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\nabla_\\beta C_{\\text{ridge}}(\\beta) = \\frac{2}{n}\\begin{bmatrix} \\sum_{i=1}^{100} \\left(\\beta_0+\\beta_1x_i-y_i\\right) \\\\\n",
"\\sum_{i=1}^{100}\\left( x_i (\\beta_0+\\beta_1x_i)-y_ix_i\\right) \\\\\n",
"\\end{bmatrix} + 2\\lambda\\begin{bmatrix} \\beta_0 \\\\ \\beta_1\\end{bmatrix} = 2 (X^T(X\\beta - \\mathbf{y})+\\lambda \\beta).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "b65523fc",
"metadata": {
"editable": true
},
"source": [
"We can easily extend our program to minimize $C_{\\text{ridge}}(\\beta)$ using gradient descent and compare with the analytical solution given by"
]
},
{
"cell_type": "markdown",
"id": "c62584ee",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\beta_{\\text{ridge}} = \\left(X^T X + \\lambda I_{2 \\times 2} \\right)^{-1} X^T \\mathbf{y}.\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "e8d43667",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[4.1533795 ]\n",
" [2.92819235]]\n",
"[[4.06858699]\n",
" [2.99829953]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapteroptimization_132_1.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from random import random, seed\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"from matplotlib import cm\n",
"from matplotlib.ticker import LinearLocator, FormatStrFormatter\n",
"import sys\n",
"\n",
"# the number of datapoints\n",
"n = 100\n",
"x = 2*np.random.rand(n,1)\n",
"y = 4+3*x+np.random.randn(n,1)\n",
"\n",
"X = np.c_[np.ones((n,1)), x]\n",
"XT_X = X.T @ X\n",
"\n",
"#Ridge parameter lambda\n",
"lmbda = 0.001\n",
"Id = lmbda* np.eye(XT_X.shape[0])\n",
"\n",
"beta_linreg = np.linalg.inv(XT_X+Id) @ X.T @ y\n",
"print(beta_linreg)\n",
"# Start plain gradient descent\n",
"beta = np.random.randn(2,1)\n",
"\n",
"eta = 0.1\n",
"Niterations = 100\n",
"\n",
"for iter in range(Niterations):\n",
" gradients = 2.0/n*X.T @ (X @ (beta)-y)+2*lmbda*beta\n",
" beta -= eta*gradients\n",
"\n",
"print(beta)\n",
"ypredict = X @ beta\n",
"ypredict2 = X @ beta_linreg\n",
"plt.plot(x, ypredict, \"r-\")\n",
"plt.plot(x, ypredict2, \"b-\")\n",
"plt.plot(x, y ,'ro')\n",
"plt.axis([0,2.0,0, 15.0])\n",
"plt.xlabel(r'$x$')\n",
"plt.ylabel(r'$y$')\n",
"plt.title(r'Gradient descent example for Ridge')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "1ca83847",
"metadata": {
"editable": true
},
"source": [
"## Using gradient descent methods, limitations\n",
"\n",
"* **Gradient descent (GD) finds local minima of our function**. Since the GD algorithm is deterministic, if it converges, it will converge to a local minimum of our cost/loss/risk function. Because in ML we are often dealing with extremely rugged landscapes with many local minima, this can lead to poor performance.\n",
"\n",
"* **GD is sensitive to initial conditions**. One consequence of the local nature of GD is that initial conditions matter. Depending on where one starts, one will end up at a different local minima. Therefore, it is very important to think about how one initializes the training process. This is true for GD as well as more complicated variants of GD.\n",
"\n",
"* **Gradients are computationally expensive to calculate for large datasets**. In many cases in statistics and ML, the cost/loss/risk function is a sum of terms, with one term for each data point. For example, in linear regression, $E \\propto \\sum_{i=1}^n (y_i - \\mathbf{w}^T\\cdot\\mathbf{x}_i)^2$; for logistic regression, the square error is replaced by the cross entropy. To calculate the gradient we have to sum over *all* $n$ data points. Doing this at every GD step becomes extremely computationally expensive. An ingenious solution to this, is to calculate the gradients using small subsets of the data called \"mini batches\". This has the added benefit of introducing stochasticity into our algorithm.\n",
"\n",
"* **GD is very sensitive to choices of learning rates**. GD is extremely sensitive to the choice of learning rates. If the learning rate is very small, the training process take an extremely long time. For larger learning rates, GD can diverge and give poor results. Furthermore, depending on what the local landscape looks like, we have to modify the learning rates to ensure convergence. Ideally, we would *adaptively* choose the learning rates to match the landscape.\n",
"\n",
"* **GD treats all directions in parameter space uniformly.** Another major drawback of GD is that unlike Newton's method, the learning rate for GD is the same in all directions in parameter space. For this reason, the maximum learning rate is set by the behavior of the steepest direction and this can significantly slow down training. Ideally, we would like to take large steps in flat directions and small steps in steep directions. Since we are exploring rugged landscapes where curvatures change, this requires us to keep track of not only the gradient but second derivatives. The ideal scenario would be to calculate the Hessian but this proves to be too computationally expensive. \n",
"\n",
"* GD can take exponential time to escape saddle points, even with random initialization. As we mentioned, GD is extremely sensitive to initial condition since it determines the particular local minimum GD would eventually reach. However, even with a good initialization scheme, through the introduction of randomness, GD can still take exponential time to escape saddle points."
]
},
{
"cell_type": "markdown",
"id": "dcf3e808",
"metadata": {
"editable": true
},
"source": [
"## Stochastic Gradient Descent (SGD)\n",
"\n",
"In stochastic gradient descent, the extreme case is the case where we\n",
"have only one batch, that is we include the whole data set.\n",
"\n",
"This process is called Stochastic Gradient\n",
"Descent (SGD) (or also sometimes on-line gradient descent). This is\n",
"relatively less common to see because in practice due to vectorized\n",
"code optimizations it can be computationally much more efficient to\n",
"evaluate the gradient for 100 examples, than the gradient for one\n",
"example 100 times. Even though SGD technically refers to using a\n",
"single example at a time to evaluate the gradient, you will hear\n",
"people use the term SGD even when referring to mini-batch gradient\n",
"descent (i.e. mentions of MGD for “Minibatch Gradient Descent”, or BGD\n",
"for “Batch gradient descent” are rare to see), where it is usually\n",
"assumed that mini-batches are used. The size of the mini-batch is a\n",
"hyperparameter but it is not very common to cross-validate or bootstrap it. It is\n",
"usually based on memory constraints (if any), or set to some value,\n",
"e.g. 32, 64 or 128. We use powers of 2 in practice because many\n",
"vectorized operation implementations work faster when their inputs are\n",
"sized in powers of 2.\n",
"\n",
"In our notes with SGD we mean stochastic gradient descent with mini-batches.\n",
"\n",
"Stochastic gradient descent (SGD) and variants thereof address some of\n",
"the shortcomings of the Gradient descent method discussed above.\n",
"\n",
"The underlying idea of SGD comes from the observation that the cost\n",
"function, which we want to minimize, can almost always be written as a\n",
"sum over $n$ data points $\\{\\mathbf{x}_i\\}_{i=1}^n$,"
]
},
{
"cell_type": "markdown",
"id": "473b1af6",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"C(\\mathbf{\\beta}) = \\sum_{i=1}^n c_i(\\mathbf{x}_i,\n",
"\\mathbf{\\beta}).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "3353fe2a",
"metadata": {
"editable": true
},
"source": [
"This in turn means that the gradient can be\n",
"computed as a sum over $i$-gradients"
]
},
{
"cell_type": "markdown",
"id": "6e8e47c3",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\nabla_\\beta C(\\mathbf{\\beta}) = \\sum_i^n \\nabla_\\beta c_i(\\mathbf{x}_i,\n",
"\\mathbf{\\beta}).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "a2eeb6ad",
"metadata": {
"editable": true
},
"source": [
"Stochasticity/randomness is introduced by only taking the\n",
"gradient on a subset of the data called minibatches. If there are $n$\n",
"data points and the size of each minibatch is $M$, there will be $n/M$\n",
"minibatches. We denote these minibatches by $B_k$ where\n",
"$k=1,\\cdots,n/M$.\n",
"\n",
"As an example, suppose we have $10$ data points $(\\mathbf{x}_1,\\cdots, \\mathbf{x}_{10})$ \n",
"and we choose to have $M=5$ minibathces,\n",
"then each minibatch contains two data points. In particular we have\n",
"$B_1 = (\\mathbf{x}_1,\\mathbf{x}_2), \\cdots, B_5 =\n",
"(\\mathbf{x}_9,\\mathbf{x}_{10})$. Note that if you choose $M=1$ you\n",
"have only a single batch with all data points and on the other extreme,\n",
"you may choose $M=n$ resulting in a minibatch for each datapoint, i.e\n",
"$B_k = \\mathbf{x}_k$.\n",
"\n",
"The idea is now to approximate the gradient by replacing the sum over\n",
"all data points with a sum over the data points in one the minibatches\n",
"picked at random in each gradient descent step"
]
},
{
"cell_type": "markdown",
"id": "5a7a0f8b",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\nabla_{\\beta}\n",
"C(\\mathbf{\\beta}) = \\sum_{i=1}^n \\nabla_\\beta c_i(\\mathbf{x}_i,\n",
"\\mathbf{\\beta}) \\rightarrow \\sum_{i \\in B_k}^n \\nabla_\\beta\n",
"c_i(\\mathbf{x}_i, \\mathbf{\\beta}).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "b7b5884f",
"metadata": {
"editable": true
},
"source": [
"Thus a gradient descent step now looks like"
]
},
{
"cell_type": "markdown",
"id": "6492d660",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\beta_{j+1} = \\beta_j - \\gamma_j \\sum_{i \\in B_k}^n \\nabla_\\beta c_i(\\mathbf{x}_i,\n",
"\\mathbf{\\beta})\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "584164f4",
"metadata": {
"editable": true
},
"source": [
"where $k$ is picked at random with equal\n",
"probability from $[1,n/M]$. An iteration over the number of\n",
"minibathces (n/M) is commonly referred to as an epoch. Thus it is\n",
"typical to choose a number of epochs and for each epoch iterate over\n",
"the number of minibatches, as exemplified in the code below."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "42d97cf8",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"import numpy as np \n",
"\n",
"n = 100 #100 datapoints \n",
"M = 5 #size of each mini-batche\n",
"m = int(n/M) #number of minibatches\n",
"n_epochs = 10 #number of epochs\n",
"\n",
"j = 0\n",
"for epoch in range(1,n_epochs+1):\n",
" for i in range(m):\n",
" k = np.random.randint(m) #Pick the k-th minibatch at random\n",
" #Compute the gradient using the data in minibatch Bk\n",
" #Compute new suggestion for \n",
" j += 1"
]
},
{
"cell_type": "markdown",
"id": "ca9c6c58",
"metadata": {
"editable": true
},
"source": [
"Taking the gradient only on a subset of the data has two important\n",
"benefits. First, it introduces randomness which decreases the chance\n",
"that our opmization scheme gets stuck in a local minima. Second, if\n",
"the size of the minibatches are small relative to the number of\n",
"datapoints ($M < n$), the computation of the gradient is much\n",
"cheaper since we sum over the datapoints in the $k-th$ minibatch and not\n",
"all $n$ datapoints.\n",
"\n",
"A natural question is when do we stop the search for a new minimum?\n",
"One possibility is to compute the full gradient after a given number\n",
"of epochs and check if the norm of the gradient is smaller than some\n",
"threshold and stop if true. However, the condition that the gradient\n",
"is zero is valid also for local minima, so this would only tell us\n",
"that we are close to a local/global minimum. However, we could also\n",
"evaluate the cost function at this point, store the result and\n",
"continue the search. If the test kicks in at a later stage we can\n",
"compare the values of the cost function and keep the $\\beta$ that\n",
"gave the lowest value.\n",
"\n",
"Another approach is to let the step length $\\gamma_j$ depend on the\n",
"number of epochs in such a way that it becomes very small after a\n",
"reasonable time such that we do not move at all.\n",
"\n",
"As an example, let $e = 0,1,2,3,\\cdots$ denote the current epoch and let $t_0, t_1 > 0$ be two fixed numbers. Furthermore, let $t = e \\cdot m + i$ where $m$ is the number of minibatches and $i=0,\\cdots,m-1$. Then the function $$\\gamma_j(t; t_0, t_1) = \\frac{t_0}{t+t_1} $$ goes to zero as the number of epochs gets large. I.e. we start with a step length $\\gamma_j (0; t_0, t_1) = t_0/t_1$ which decays in *time* $t$.\n",
"\n",
"In this way we can fix the number of epochs, compute $\\beta$ and\n",
"evaluate the cost function at the end. Repeating the computation will\n",
"give a different result since the scheme is random by design. Then we\n",
"pick the final $\\beta$ that gives the lowest value of the cost\n",
"function."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "d2921658",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"gamma_j after 500 epochs: 9.97108e-05\n"
]
}
],
"source": [
"import numpy as np \n",
"\n",
"def step_length(t,t0,t1):\n",
" return t0/(t+t1)\n",
"\n",
"n = 100 #100 datapoints \n",
"M = 5 #size of each minibatch\n",
"m = int(n/M) #number of minibatches\n",
"n_epochs = 500 #number of epochs\n",
"t0 = 1.0\n",
"t1 = 10\n",
"\n",
"gamma_j = t0/t1\n",
"j = 0\n",
"for epoch in range(1,n_epochs+1):\n",
" for i in range(m):\n",
" k = np.random.randint(m) #Pick the k-th minibatch at random\n",
" #Compute the gradient using the data in minibatch Bk\n",
" #Compute new suggestion for beta\n",
" t = epoch*m+i\n",
" gamma_j = step_length(t,t0,t1)\n",
" j += 1\n",
"\n",
"print(\"gamma_j after %d epochs: %g\" % (n_epochs,gamma_j))"
]
},
{
"cell_type": "markdown",
"id": "84469eb8",
"metadata": {
"editable": true
},
"source": [
"We note that we have defined several hyperparameters. These are now the number of epochs, the number of mini-batches and the parameters $t_0$ and $t_1$."
]
},
{
"cell_type": "markdown",
"id": "b4b94e7a",
"metadata": {
"editable": true
},
"source": [
"### Program for stochastic gradient"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "71dcdb35",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Own inversion\n",
"[[3.99775949]\n",
" [2.94659383]]\n",
"Eigenvalues of Hessian Matrix:[0.36102113 4.18276924]\n",
"theta from own gd\n",
"[[3.99775949]\n",
" [2.94659383]]\n",
"theta from own sdg\n",
"[[3.96489434]\n",
" [2.98399675]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapteroptimization_148_1.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Importing various packages\n",
"# Importing various packages\n",
"from math import exp, sqrt\n",
"from random import random, seed\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"n = 100\n",
"x = 2*np.random.rand(n,1)\n",
"y = 4+3*x+np.random.randn(n,1)\n",
"\n",
"X = np.c_[np.ones((n,1)), x]\n",
"XT_X = X.T @ X\n",
"theta_linreg = np.linalg.inv(X.T @ X) @ (X.T @ y)\n",
"print(\"Own inversion\")\n",
"print(theta_linreg)\n",
"# Hessian matrix\n",
"H = (2.0/n)* XT_X\n",
"EigValues, EigVectors = np.linalg.eig(H)\n",
"print(f\"Eigenvalues of Hessian Matrix:{EigValues}\")\n",
"\n",
"theta = np.random.randn(2,1)\n",
"eta = 1.0/np.max(EigValues)\n",
"Niterations = 1000\n",
"\n",
"\n",
"for iter in range(Niterations):\n",
" gradients = 2.0/n*X.T @ ((X @ theta)-y)\n",
" theta -= eta*gradients\n",
"print(\"theta from own gd\")\n",
"print(theta)\n",
"\n",
"xnew = np.array([[0],[2]])\n",
"Xnew = np.c_[np.ones((2,1)), xnew]\n",
"ypredict = Xnew.dot(theta)\n",
"ypredict2 = Xnew.dot(theta_linreg)\n",
"\n",
"n_epochs = 50\n",
"M = 5 #size of each minibatch\n",
"m = int(n/M) #number of minibatches\n",
"t0, t1 = 5, 50\n",
"def learning_schedule(t):\n",
" return t0/(t+t1)\n",
"\n",
"theta = np.random.randn(2,1)\n",
"\n",
"for epoch in range(n_epochs):\n",
"# Can you figure out a better way of setting up the contributions to each batch?\n",
" for i in range(m):\n",
" random_index = M*np.random.randint(m)\n",
" xi = X[random_index:random_index+M]\n",
" yi = y[random_index:random_index+M]\n",
" gradients = (2.0/M)* xi.T @ ((xi @ theta)-yi)\n",
" eta = learning_schedule(epoch*m+i)\n",
" theta = theta - eta*gradients\n",
"print(\"theta from own sdg\")\n",
"print(theta)\n",
"\n",
"\n",
"\n",
"\n",
"plt.plot(xnew, ypredict, \"r-\")\n",
"plt.plot(xnew, ypredict2, \"b-\")\n",
"plt.plot(x, y ,'ro')\n",
"plt.axis([0,2.0,0, 15.0])\n",
"plt.xlabel(r'$x$')\n",
"plt.ylabel(r'$y$')\n",
"plt.title(r'Random numbers ')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "6231b86f",
"metadata": {
"editable": true
},
"source": [
"In the above code, we have use replacement in setting up the\n",
"mini-batches. The discussion\n",
"[here](https://sebastianraschka.com/faq/docs/sgd-methods.html) may be\n",
"useful. More material will be added later."
]
},
{
"cell_type": "markdown",
"id": "8d50214c",
"metadata": {
"editable": true
},
"source": [
"## Momentum based GD\n",
"\n",
"The stochastic gradient descent (SGD) is almost always used with a\n",
"*momentum* or inertia term that serves as a memory of the direction we\n",
"are moving in parameter space. This is typically implemented as\n",
"follows"
]
},
{
"cell_type": "markdown",
"id": "45d43ca3",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t) \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "dcdd91bf",
"metadata": {
"editable": true
},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto1\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \n",
"\\boldsymbol{\\theta}_{t+1}= \\boldsymbol{\\theta}_t -\\mathbf{v}_{t},\n",
"\\label{_auto1} \\tag{2}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "c7519d1e",
"metadata": {
"editable": true
},
"source": [
"where we have introduced a momentum parameter $\\gamma$, with\n",
"$0\\le\\gamma\\le 1$, and for brevity we dropped the explicit notation to\n",
"indicate the gradient is to be taken over a different mini-batch at\n",
"each step. We call this algorithm gradient descent with momentum\n",
"(GDM). From these equations, it is clear that $\\mathbf{v}_t$ is a\n",
"running average of recently encountered gradients and\n",
"$(1-\\gamma)^{-1}$ sets the characteristic time scale for the memory\n",
"used in the averaging procedure. Consistent with this, when\n",
"$\\gamma=0$, this just reduces down to ordinary SGD as discussed\n",
"earlier. An equivalent way of writing the updates is"
]
},
{
"cell_type": "markdown",
"id": "f4d4340d",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\Delta \\boldsymbol{\\theta}_{t+1} = \\gamma \\Delta \\boldsymbol{\\theta}_t -\\ \\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t),\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "41ad532a",
"metadata": {
"editable": true
},
"source": [
"where we have defined $\\Delta \\boldsymbol{\\theta}_{t}= \\boldsymbol{\\theta}_t-\\boldsymbol{\\theta}_{t-1}$.\n",
"\n",
"Let us try to get more intuition from these equations. It is helpful\n",
"to consider a simple physical analogy with a particle of mass $m$\n",
"moving in a viscous medium with drag coefficient $\\mu$ and potential\n",
"$E(\\mathbf{w})$. If we denote the particle's position by $\\mathbf{w}$,\n",
"then its motion is described by"
]
},
{
"cell_type": "markdown",
"id": "eef8ae92",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"m {d^2 \\mathbf{w} \\over dt^2} + \\mu {d \\mathbf{w} \\over dt }= -\\nabla_w E(\\mathbf{w}).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "80481a6d",
"metadata": {
"editable": true
},
"source": [
"We can discretize this equation in the usual way to get"
]
},
{
"cell_type": "markdown",
"id": "6aab8db7",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"m { \\mathbf{w}_{t+\\Delta t}-2 \\mathbf{w}_{t} +\\mathbf{w}_{t-\\Delta t} \\over (\\Delta t)^2}+\\mu {\\mathbf{w}_{t+\\Delta t}- \\mathbf{w}_{t} \\over \\Delta t} = -\\nabla_w E(\\mathbf{w}).\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "dd6414d2",
"metadata": {
"editable": true
},
"source": [
"Rearranging this equation, we can rewrite this as"
]
},
{
"cell_type": "markdown",
"id": "b76a8372",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\Delta \\mathbf{w}_{t +\\Delta t}= - { (\\Delta t)^2 \\over m +\\mu \\Delta t} \\nabla_w E(\\mathbf{w})+ {m \\over m +\\mu \\Delta t} \\Delta \\mathbf{w}_t.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "07bbe6db",
"metadata": {
"editable": true
},
"source": [
"Notice that this equation is identical to previous one if we identify\n",
"the position of the particle, $\\mathbf{w}$, with the parameters\n",
"$\\boldsymbol{\\theta}$. This allows us to identify the momentum\n",
"parameter and learning rate with the mass of the particle and the\n",
"viscous drag as:"
]
},
{
"cell_type": "markdown",
"id": "7a9a2ecf",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\gamma= {m \\over m +\\mu \\Delta t }, \\qquad \\eta = {(\\Delta t)^2 \\over m +\\mu \\Delta t}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "fe5a2bbc",
"metadata": {
"editable": true
},
"source": [
"Thus, as the name suggests, the momentum parameter is proportional to\n",
"the mass of the particle and effectively provides inertia.\n",
"Furthermore, in the large viscosity/small learning rate limit, our\n",
"memory time scales as $(1-\\gamma)^{-1} \\approx m/(\\mu \\Delta t)$.\n",
"\n",
"Why is momentum useful? SGD momentum helps the gradient descent\n",
"algorithm gain speed in directions with persistent but small gradients\n",
"even in the presence of stochasticity, while suppressing oscillations\n",
"in high-curvature directions. This becomes especially important in\n",
"situations where the landscape is shallow and flat in some directions\n",
"and narrow and steep in others. It has been argued that first-order\n",
"methods (with appropriate initial conditions) can perform comparable\n",
"to more expensive second order methods, especially in the context of\n",
"complex deep learning models.\n",
"\n",
"These beneficial properties of momentum can sometimes become even more\n",
"pronounced by using a slight modification of the classical momentum\n",
"algorithm called Nesterov Accelerated Gradient (NAG).\n",
"\n",
"In the NAG algorithm, rather than calculating the gradient at the\n",
"current parameters, $\\nabla_\\theta E(\\boldsymbol{\\theta}_t)$, one\n",
"calculates the gradient at the expected value of the parameters given\n",
"our current momentum, $\\nabla_\\theta E(\\boldsymbol{\\theta}_t +\\gamma\n",
"\\mathbf{v}_{t-1})$. This yields the NAG update rule"
]
},
{
"cell_type": "markdown",
"id": "04540023",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{v}_{t}=\\gamma \\mathbf{v}_{t-1}+\\eta_{t}\\nabla_\\theta E(\\boldsymbol{\\theta}_t +\\gamma \\mathbf{v}_{t-1}) \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "dfbf53a5",
"metadata": {
"editable": true
},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto2\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \n",
"\\boldsymbol{\\theta}_{t+1}= \\boldsymbol{\\theta}_t -\\mathbf{v}_{t}.\n",
"\\label{_auto2} \\tag{3}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "32ac3869",
"metadata": {
"editable": true
},
"source": [
"One of the major advantages of NAG is that it allows for the use of a larger learning rate than GDM for the same choice of $\\gamma$.\n",
"\n",
"In stochastic gradient descent, with and without momentum, we still\n",
"have to specify a schedule for tuning the learning rates $\\eta_t$\n",
"as a function of time. As discussed in the context of Newton's\n",
"method, this presents a number of dilemmas. The learning rate is\n",
"limited by the steepest direction which can change depending on the\n",
"current position in the landscape. To circumvent this problem, ideally\n",
"our algorithm would keep track of curvature and take large steps in\n",
"shallow, flat directions and small steps in steep, narrow directions.\n",
"Second-order methods accomplish this by calculating or approximating\n",
"the Hessian and normalizing the learning rate by the\n",
"curvature. However, this is very computationally expensive for\n",
"extremely large models. Ideally, we would like to be able to\n",
"adaptively change the step size to match the landscape without paying\n",
"the steep computational price of calculating or approximating\n",
"Hessians.\n",
"\n",
"Recently, a number of methods have been introduced that accomplish\n",
"this by tracking not only the gradient, but also the second moment of\n",
"the gradient. These methods include AdaGrad, AdaDelta, Root Mean Squared Propagation (RMS-Prop), and\n",
"ADAM."
]
},
{
"cell_type": "markdown",
"id": "6f575b16",
"metadata": {
"editable": true
},
"source": [
"### RMS prop\n",
"\n",
"In RMS prop, in addition to keeping a running average of the first\n",
"moment of the gradient, we also keep track of the second moment\n",
"denoted by $\\mathbf{s}_t=\\mathbb{E}[\\mathbf{g}_t^2]$. The update rule\n",
"for RMS prop is given by"
]
},
{
"cell_type": "markdown",
"id": "274604c4",
"metadata": {
"editable": true
},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto3\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
"\\mathbf{g}_t = \\nabla_\\theta E(\\boldsymbol{\\theta}) \n",
"\\label{_auto3} \\tag{4}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "cd679323",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{s}_t =\\beta \\mathbf{s}_{t-1} +(1-\\beta)\\mathbf{g}_t^2 \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "0a7f8e9d",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\mathbf{g}_t \\over \\sqrt{\\mathbf{s}_t +\\epsilon}}, \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "48ba8fff",
"metadata": {
"editable": true
},
"source": [
"where $\\beta$ controls the averaging time of the second moment and is\n",
"typically taken to be about $\\beta=0.9$, $\\eta_t$ is a learning rate\n",
"typically chosen to be $10^{-3}$, and $\\epsilon\\sim 10^{-8} $ is a\n",
"small regularization constant to prevent divergences. Multiplication\n",
"and division by vectors is understood as an element-wise operation. It\n",
"is clear from this formula that the learning rate is reduced in\n",
"directions where the norm of the gradient is consistently large. This\n",
"greatly speeds up the convergence by allowing us to use a larger\n",
"learning rate for flat directions."
]
},
{
"cell_type": "markdown",
"id": "83140ab2",
"metadata": {
"editable": true
},
"source": [
"### ADAM optimizer\n",
"\n",
"A related algorithm is the ADAM optimizer. In ADAM, we keep a running\n",
"average of both the first and second moment of the gradient and use\n",
"this information to adaptively change the learning rate for different\n",
"parameters. In addition to keeping a running average of the first and\n",
"second moments of the gradient\n",
"(i.e. $\\mathbf{m}_t=\\mathbb{E}[\\mathbf{g}_t]$ and\n",
"$\\mathbf{s}_t=\\mathbb{E}[\\mathbf{g}^2_t]$, respectively), ADAM\n",
"performs an additional bias correction to account for the fact that we\n",
"are estimating the first two moments of the gradient using a running\n",
"average (denoted by the hats in the update rule below). The update\n",
"rule for ADAM is given by (where multiplication and division are once\n",
"again understood to be element-wise operations below)"
]
},
{
"cell_type": "markdown",
"id": "61874dc3",
"metadata": {
"editable": true
},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto4\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
"\\mathbf{g}_t = \\nabla_\\theta E(\\boldsymbol{\\theta}) \n",
"\\label{_auto4} \\tag{5}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "24e19d86",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{m}_t = \\beta_1 \\mathbf{m}_{t-1} + (1-\\beta_1) \\mathbf{g}_t \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "506f78ea",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\mathbf{s}_t =\\beta_2 \\mathbf{s}_{t-1} +(1-\\beta_2)\\mathbf{g}_t^2 \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "cb4b8585",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{\\mathbf{m}}_t={\\mathbf{m}_t \\over 1-\\beta_1^t} \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "9b5b11b1",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{\\mathbf{s}}_t ={\\mathbf{s}_t \\over1-\\beta_2^t} \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "92292a73",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\boldsymbol{\\theta}_{t+1}=\\boldsymbol{\\theta}_t - \\eta_t { \\boldsymbol{\\mathbf{m}}_t \\over \\sqrt{\\boldsymbol{\\mathbf{s}}_t} +\\epsilon}, \\nonumber\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "1a264832",
"metadata": {
"editable": true
},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto5\"></div>\n",
"\n",
"$$\n",
"\\begin{equation} \n",
"\\label{_auto5} \\tag{6}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "6a307202",
"metadata": {
"editable": true
},
"source": [
"where $\\beta_1$ and $\\beta_2$ set the memory lifetime of the first and\n",
"second moment and are typically taken to be $0.9$ and $0.99$\n",
"respectively, and $\\eta$ and $\\epsilon$ are identical to RMSprop.\n",
"\n",
"Like in RMSprop, the effective step size of a parameter depends on the\n",
"magnitude of its gradient squared. To understand this better, let us\n",
"rewrite this expression in terms of the variance\n",
"$\\boldsymbol{\\sigma}_t^2 = \\boldsymbol{\\mathbf{s}}_t -\n",
"(\\boldsymbol{\\mathbf{m}}_t)^2$. Consider a single parameter $\\theta_t$. The\n",
"update rule for this parameter is given by"
]
},
{
"cell_type": "markdown",
"id": "3285f010",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"\\Delta \\theta_{t+1}= -\\eta_t { \\boldsymbol{m}_t \\over \\sqrt{\\sigma_t^2 + m_t^2 }+\\epsilon}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "657349da",
"metadata": {
"editable": true
},
"source": [
"## Practical tips\n",
"\n",
"* **Randomize the data when making mini-batches**. It is always important to randomly shuffle the data when forming mini-batches. Otherwise, the gradient descent method can fit spurious correlations resulting from the order in which data is presented.\n",
"\n",
"* **Transform your inputs**. Learning becomes difficult when our landscape has a mixture of steep and flat directions. One simple trick for minimizing these situations is to standardize the data by subtracting the mean and normalizing the variance of input variables. Whenever possible, also decorrelate the inputs. To understand why this is helpful, consider the case of linear regression. It is easy to show that for the squared error cost function, the Hessian of the cost function is just the correlation matrix between the inputs. Thus, by standardizing the inputs, we are ensuring that the landscape looks homogeneous in all directions in parameter space. Since most deep networks can be viewed as linear transformations followed by a non-linearity at each layer, we expect this intuition to hold beyond the linear case.\n",
"\n",
"* **Monitor the out-of-sample performance.** Always monitor the performance of your model on a validation set (a small portion of the training data that is held out of the training process to serve as a proxy for the test set. If the validation error starts increasing, then the model is beginning to overfit. Terminate the learning process. This *early stopping* significantly improves performance in many settings.\n",
"\n",
"* **Adaptive optimization methods don't always have good generalization.** Recent studies have shown that adaptive methods such as ADAM, RMSPorp, and AdaGrad tend to have poor generalization compared to SGD or SGD with momentum, particularly in the high-dimensional limit (i.e. the number of parameters exceeds the number of data points). Although it is not clear at this stage why these methods perform so well in training deep neural networks, simpler procedures like properly-tuned SGD may work as well or better in these applications."
]
},
{
"cell_type": "markdown",
"id": "65044ac7",
"metadata": {
"editable": true
},
"source": [
"## Automatic differentiation\n",
"\n",
"[Automatic differentiation (AD)](https://en.wikipedia.org/wiki/Automatic_differentiation), \n",
"also called algorithmic\n",
"differentiation or computational differentiation,is a set of\n",
"techniques to numerically evaluate the derivative of a function\n",
"specified by a computer program. AD exploits the fact that every\n",
"computer program, no matter how complicated, executes a sequence of\n",
"elementary arithmetic operations (addition, subtraction,\n",
"multiplication, division, etc.) and elementary functions (exp, log,\n",
"sin, cos, etc.). By applying the chain rule repeatedly to these\n",
"operations, derivatives of arbitrary order can be computed\n",
"automatically, accurately to working precision, and using at most a\n",
"small constant factor more arithmetic operations than the original\n",
"program.\n",
"\n",
"Automatic differentiation is neither:\n",
"\n",
"* Symbolic differentiation, nor\n",
"\n",
"* Numerical differentiation (the method of finite differences).\n",
"\n",
"Symbolic differentiation can lead to inefficient code and faces the\n",
"difficulty of converting a computer program into a single expression,\n",
"while numerical differentiation can introduce round-off errors in the\n",
"discretization process and cancellation\n",
"\n",
"Python has tools for so-called **automatic differentiation**.\n",
"Consider the following example"
]
},
{
"cell_type": "markdown",
"id": "dacf05cf",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"f(x) = \\sin\\left(2\\pi x + x^2\\right)\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "da4ad36e",
"metadata": {
"editable": true
},
"source": [
"which has the following derivative"
]
},
{
"cell_type": "markdown",
"id": "f4c3e6c4",
"metadata": {
"editable": true
},
"source": [
"$$\n",
"f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right)\n",
"$$"
]
},
{
"cell_type": "markdown",
"id": "1c8bfd4a",
"metadata": {
"editable": true
},
"source": [
"Using **autograd** we have"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "e1d91b8b",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/MortenImac/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapteroptimization_188_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"The max absolute difference is: 1.77636e-15\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"\n",
"# To do elementwise differentiation:\n",
"from autograd import elementwise_grad as egrad \n",
"\n",
"# To plot:\n",
"import matplotlib.pyplot as plt \n",
"\n",
"\n",
"def f(x):\n",
" return np.sin(2*np.pi*x + x**2)\n",
"\n",
"def f_grad_analytic(x):\n",
" return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)\n",
"\n",
"# Do the comparison:\n",
"x = np.linspace(0,1,1000)\n",
"\n",
"f_grad = egrad(f)\n",
"\n",
"computed = f_grad(x)\n",
"analytic = f_grad_analytic(x)\n",
"\n",
"plt.title('Derivative computed from Autograd compared with the analytical derivative')\n",
"plt.plot(x,computed,label='autograd')\n",
"plt.plot(x,analytic,label='analytic')\n",
"\n",
"plt.xlabel('x')\n",
"plt.ylabel('y')\n",
"plt.legend()\n",
"\n",
"plt.show()\n",
"\n",
"print(\"The max absolute difference is: %g\"%(np.max(np.abs(computed - analytic))))"
]
},
{
"cell_type": "markdown",
"id": "cd1158a5",
"metadata": {
"editable": true
},
"source": [
"Here we\n",
"experiment with what kind of functions Autograd is capable\n",
"of finding the gradient of. The following Python functions are just\n",
"meant to illustrate what Autograd can do, but please feel free to\n",
"experiment with other, possibly more complicated, functions as well."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "e2e9faff",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The gradient of f1 evaluated at a = 1 using autograd is: 3\n",
"The gradient of f1 evaluated at a = 1 by finding the analytic expression is: 3\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"\n",
"def f1(x):\n",
" return x**3 + 1\n",
"\n",
"f1_grad = grad(f1)\n",
"\n",
"# Remember to send in float as argument to the computed gradient from Autograd!\n",
"a = 1.0\n",
"\n",
"# See the evaluated gradient at a using autograd:\n",
"print(\"The gradient of f1 evaluated at a = %g using autograd is: %g\"%(a,f1_grad(a)))\n",
"\n",
"# Compare with the analytical derivative, that is f1'(x) = 3*x**2 \n",
"grad_analytical = 3*a**2\n",
"print(\"The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g\"%(a,grad_analytical))"
]
},
{
"cell_type": "markdown",
"id": "e4a83059",
"metadata": {
"editable": true
},
"source": [
"To differentiate with respect to two (or more) arguments of a Python\n",
"function, Autograd need to know at which variable the function if\n",
"being differentiated with respect to."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "f65983d8",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Evaluating at x1 = 1, x2 = 3\n",
"------------------------------\n",
"The derivative of f2 w.r.t x1: 12\n",
"The analytical derivative of f2 w.r.t x1: 12\n",
"\n",
"The derivative of f2 w.r.t x2: -4\n",
"The analytical derivative of f2 w.r.t x2: -4\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f2(x1,x2):\n",
" return 3*x1**3 + x2*(x1 - 5) + 1\n",
"\n",
"# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1\n",
"f2_grad_x1 = grad(f2,0)\n",
"\n",
"# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad\n",
"f2_grad_x2 = grad(f2,1)\n",
"\n",
"x1 = 1.0\n",
"x2 = 3.0 \n",
"\n",
"print(\"Evaluating at x1 = %g, x2 = %g\"%(x1,x2))\n",
"print(\"-\"*30)\n",
"\n",
"# Compare with the analytical derivatives:\n",
"\n",
"# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:\n",
"f2_grad_x1_analytical = 9*x1**2 + x2\n",
"\n",
"# Derivative of f2 w.r.t x2 is: x1 - 5:\n",
"f2_grad_x2_analytical = x1 - 5\n",
"\n",
"# See the evaluated derivations:\n",
"print(\"The derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n",
"print(\"The analytical derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n",
"\n",
"print()\n",
"\n",
"print(\"The derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))\n",
"print(\"The analytical derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))"
]
},
{
"cell_type": "markdown",
"id": "1d369f97",
"metadata": {
"editable": true
},
"source": [
"Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "46ea0652",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The computed gradient of f3 is: [ 2. 3. 5. 7. 88.]\n",
"The analytical gradient of f3 is: [ 2. 3. 5. 7. 88.]\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f3(x): # Assumes x is an array of length 5 or higher\n",
" return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2\n",
"\n",
"f3_grad = grad(f3)\n",
"\n",
"x = np.linspace(0,4,5)\n",
"\n",
"# Print the computed gradient:\n",
"print(\"The computed gradient of f3 is: \", f3_grad(x))\n",
"\n",
"# The analytical gradient is: (2, 3, 5, 7, 22*x[4])\n",
"f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])\n",
"\n",
"# Print the analytical gradient:\n",
"print(\"The analytical gradient of f3 is: \", f3_grad_analytical)"
]
},
{
"cell_type": "markdown",
"id": "9cc6674a",
"metadata": {
"editable": true
},
"source": [
"Note that in this case, when sending an array as input argument, the\n",
"output from Autograd is another array. This is the true gradient of\n",
"the function, as opposed to the function in the previous example. By\n",
"using arrays to represent the variables, the output from Autograd\n",
"might be easier to work with, as the output is closer to what one\n",
"could expect form a gradient-evaluting function."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "17813055",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The computed derivative of f4 at x = 2.7 is: 13.8759\n",
"The analytical gradient of f4 at x = 2.7 is: 13.8759\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f4(x):\n",
" return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)\n",
"\n",
"f4_grad = grad(f4)\n",
"\n",
"x = 2.7\n",
"\n",
"# Print the computed derivative:\n",
"print(\"The computed derivative of f4 at x = %g is: %g\"%(x,f4_grad(x)))\n",
"\n",
"# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi\n",
"f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi\n",
"\n",
"# Print the analytical gradient:\n",
"print(\"The analytical gradient of f4 at x = %g is: %g\"%(x,f4_grad_analytical))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "6da49540",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The computed derivative of f5 at x = 2.7 is: 5.4\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f5(x):\n",
" if x >= 0:\n",
" return x**2\n",
" else:\n",
" return -3*x + 1\n",
"\n",
"f5_grad = grad(f5)\n",
"\n",
"x = 2.7\n",
"\n",
"# Print the computed derivative:\n",
"print(\"The computed derivative of f5 at x = %g is: %g\"%(x,f5_grad(x)))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "a8ff2c17",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The computed derivative of f6_for at x = 0.5 is: 3.95703\n",
"The computed derivative of f6_while at x = 0.5 is: 3.95703\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f6_for(x):\n",
" val = 0\n",
" for i in range(10):\n",
" val = val + x**i\n",
" return val\n",
"\n",
"def f6_while(x):\n",
" val = 0\n",
" i = 0\n",
" while i < 10:\n",
" val = val + x**i\n",
" i = i + 1\n",
" return val\n",
"\n",
"f6_for_grad = grad(f6_for)\n",
"f6_while_grad = grad(f6_while)\n",
"\n",
"x = 0.5\n",
"\n",
"# Print the computed derivaties of f6_for and f6_while\n",
"print(\"The computed derivative of f6_for at x = %g is: %g\"%(x,f6_for_grad(x)))\n",
"print(\"The computed derivative of f6_while at x = %g is: %g\"%(x,f6_while_grad(x)))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "ec67d4a3",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The analytical derivative of f6 at x = 0.5 is: 3.95703\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9\n",
"# The analytical derivative is: sum(i*x**(i-1)) \n",
"f6_grad_analytical = 0\n",
"for i in range(10):\n",
" f6_grad_analytical += i*x**(i-1)\n",
"\n",
"print(\"The analytical derivative of f6 at x = %g is: %g\"%(x,f6_grad_analytical))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "742a2d68",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The computed derivative of f7 at n = 2 is: 1\n",
"The analytical derivative of f7 at n = 2 is: 1\n"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"\n",
"def f7(n): # Assume that n is an integer\n",
" if n == 1 or n == 0:\n",
" return 1\n",
" else:\n",
" return n*f7(n-1)\n",
"\n",
"f7_grad = grad(f7)\n",
"\n",
"n = 2.0\n",
"\n",
"print(\"The computed derivative of f7 at n = %d is: %g\"%(n,f7_grad(n)))\n",
"\n",
"# The function f7 is an implementation of the factorial of n.\n",
"# By using the product rule, one can find that the derivative is:\n",
"\n",
"f7_grad_analytical = 0\n",
"for i in range(int(n)-1):\n",
" tmp = 1\n",
" for k in range(int(n)-1):\n",
" if k != i:\n",
" tmp *= (n - k)\n",
" f7_grad_analytical += tmp\n",
"\n",
"print(\"The analytical derivative of f7 at n = %d is: %g\"%(n,f7_grad_analytical))"
]
},
{
"cell_type": "markdown",
"id": "e7be6348",
"metadata": {
"editable": true
},
"source": [
"Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input.\n",
"\n",
"Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd.\n",
"\n",
"Assigning a value to the variable being differentiated with respect to"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "c551058c",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"ename": "TypeError",
"evalue": "'ArrayBox' object does not support item assignment",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/var/folders/jy/g42mrgv128v34gnnhxwk9nrc0000gp/T/ipykernel_47735/1122558214.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8.4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The derivative of f8 is:\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mf8_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36mnary_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margnum\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0munary_operator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munary_f\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mnary_op_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mnary_op_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_operator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/autograd/differential_operators.py\u001b[0m in \u001b[0;36mgrad\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0marguments\u001b[0m \u001b[0;32mas\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbut\u001b[0m \u001b[0mreturns\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mgradient\u001b[0m \u001b[0minstead\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mThe\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m should be scalar-valued. The gradient has the same type as the argument.\"\"\"\n\u001b[0;32m---> 25\u001b[0;31m \u001b[0mvjp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mans\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_make_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 26\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mans\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 27\u001b[0m raise TypeError(\"Grad only applies to real scalar-output functions. \"\n",
"\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/autograd/core.py\u001b[0m in \u001b[0;36mmake_vjp\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmake_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVJPNode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_root\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_node\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/autograd/tracer.py\u001b[0m in \u001b[0;36mtrace\u001b[0;34m(start_node, fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtrace_stack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_trace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_box\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_node\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_box\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mend_box\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mstart_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_node\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36munary_f\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msubargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubvals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msubargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/var/folders/jy/g42mrgv128v34gnnhxwk9nrc0000gp/T/ipykernel_47735/1122558214.py\u001b[0m in \u001b[0;36mf8\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mautograd\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgrad\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf8\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Assume x is an array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: 'ArrayBox' object does not support item assignment"
]
}
],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f8(x): # Assume x is an array\n",
" x[2] = 3\n",
" return x*2\n",
"\n",
"f8_grad = grad(f8)\n",
"\n",
"x = 8.4\n",
"\n",
"print(\"The derivative of f8 is:\",f8_grad(x))"
]
},
{
"cell_type": "markdown",
"id": "7a13b21d",
"metadata": {
"editable": true
},
"source": [
"Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible."
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "19c7502b",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f9(a): # Assume a is an array with 2 elements\n",
" b = np.array([1.0,2.0])\n",
" return a.dot(b)\n",
"\n",
"f9_grad = grad(f9)\n",
"\n",
"x = np.array([1.0,0.0])\n",
"\n",
"print(\"The derivative of f9 is:\",f9_grad(x))"
]
},
{
"cell_type": "markdown",
"id": "4450885d",
"metadata": {
"editable": true
},
"source": [
"Here we are told that the 'dot' function does not belong to Autograd's\n",
"version of a Numpy array. To overcome this, an alternative syntax\n",
"which also computed the dot product can be used:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "013fc7f8",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"def f9_alternative(x): # Assume a is an array with 2 elements\n",
" b = np.array([1.0,2.0])\n",
" return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2\n",
"\n",
"f9_alternative_grad = grad(f9_alternative)\n",
"\n",
"x = np.array([3.0,0.0])\n",
"\n",
"print(\"The gradient of f9 is:\",f9_alternative_grad(x))\n",
"\n",
"# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively\n",
"# w.r.t x is (b_1, b_2)."
]
},
{
"cell_type": "markdown",
"id": "8d360f7d",
"metadata": {
"editable": true
},
"source": [
"The documentation recommends to avoid inplace operations such as"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "e29a24eb",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"a += b\n",
"a -= b\n",
"a*= b\n",
"a /=b"
]
},
{
"cell_type": "markdown",
"id": "ad8fbbb7",
"metadata": {
"editable": true
},
"source": [
"## Using Autograd with OLS\n",
"\n",
"We conclude the part on optmization by showing how we can make codes\n",
"for linear regression and logistic regression using **autograd**. The\n",
"first example shows results with ordinary leats squares."
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "904f65dc",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"# Using Autograd to calculate gradients for OLS\n",
"from random import random, seed\n",
"import numpy as np\n",
"import autograd.numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from autograd import grad\n",
"\n",
"def CostOLS(beta):\n",
" return (1.0/n)*np.sum((y-X @ beta)**2)\n",
"\n",
"n = 100\n",
"x = 2*np.random.rand(n,1)\n",
"y = 4+3*x+np.random.randn(n,1)\n",
"\n",
"X = np.c_[np.ones((n,1)), x]\n",
"XT_X = X.T @ X\n",
"theta_linreg = np.linalg.pinv(XT_X) @ (X.T @ y)\n",
"print(\"Own inversion\")\n",
"print(theta_linreg)\n",
"# Hessian matrix\n",
"H = (2.0/n)* XT_X\n",
"EigValues, EigVectors = np.linalg.eig(H)\n",
"print(f\"Eigenvalues of Hessian Matrix:{EigValues}\")\n",
"\n",
"theta = np.random.randn(2,1)\n",
"eta = 1.0/np.max(EigValues)\n",
"Niterations = 1000\n",
"# define the gradient\n",
"training_gradient = grad(CostOLS)\n",
"\n",
"for iter in range(Niterations):\n",
" gradients = training_gradient(theta)\n",
" theta -= eta*gradients\n",
"print(\"theta from own gd\")\n",
"print(theta)\n",
"\n",
"xnew = np.array([[0],[2]])\n",
"Xnew = np.c_[np.ones((2,1)), xnew]\n",
"ypredict = Xnew.dot(theta)\n",
"ypredict2 = Xnew.dot(theta_linreg)\n",
"\n",
"plt.plot(xnew, ypredict, \"r-\")\n",
"plt.plot(xnew, ypredict2, \"b-\")\n",
"plt.plot(x, y ,'ro')\n",
"plt.axis([0,2.0,0, 15.0])\n",
"plt.xlabel(r'$x$')\n",
"plt.ylabel(r'$y$')\n",
"plt.title(r'Random numbers ')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "ce338980",
"metadata": {
"editable": true
},
"source": [
"### Including Stochastic Gradient Descent with Autograd\n",
"\n",
"In this code we include the stochastic gradient descent approach discussed above. Note here that we specify which argument we are taking the derivative with respect to when using **autograd**."
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "de261f10",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"# Using Autograd to calculate gradients using SGD\n",
"# OLS example\n",
"from random import random, seed\n",
"import numpy as np\n",
"import autograd.numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from autograd import grad\n",
"\n",
"# Note change from previous example\n",
"def CostOLS(y,X,theta):\n",
" return np.sum((y-X @ theta)**2)\n",
"\n",
"n = 100\n",
"x = 2*np.random.rand(n,1)\n",
"y = 4+3*x+np.random.randn(n,1)\n",
"\n",
"X = np.c_[np.ones((n,1)), x]\n",
"XT_X = X.T @ X\n",
"theta_linreg = np.linalg.pinv(XT_X) @ (X.T @ y)\n",
"print(\"Own inversion\")\n",
"print(theta_linreg)\n",
"# Hessian matrix\n",
"H = (2.0/n)* XT_X\n",
"EigValues, EigVectors = np.linalg.eig(H)\n",
"print(f\"Eigenvalues of Hessian Matrix:{EigValues}\")\n",
"\n",
"theta = np.random.randn(2,1)\n",
"eta = 1.0/np.max(EigValues)\n",
"Niterations = 1000\n",
"\n",
"# Note that we request the derivative wrt third argument (theta, 2 here)\n",
"training_gradient = grad(CostOLS,2)\n",
"\n",
"for iter in range(Niterations):\n",
" gradients = (1.0/n)*training_gradient(y, X, theta)\n",
" theta -= eta*gradients\n",
"print(\"theta from own gd\")\n",
"print(theta)\n",
"\n",
"xnew = np.array([[0],[2]])\n",
"Xnew = np.c_[np.ones((2,1)), xnew]\n",
"ypredict = Xnew.dot(theta)\n",
"ypredict2 = Xnew.dot(theta_linreg)\n",
"\n",
"plt.plot(xnew, ypredict, \"r-\")\n",
"plt.plot(xnew, ypredict2, \"b-\")\n",
"plt.plot(x, y ,'ro')\n",
"plt.axis([0,2.0,0, 15.0])\n",
"plt.xlabel(r'$x$')\n",
"plt.ylabel(r'$y$')\n",
"plt.title(r'Random numbers ')\n",
"plt.show()\n",
"\n",
"n_epochs = 50\n",
"M = 5 #size of each minibatch\n",
"m = int(n/M) #number of minibatches\n",
"t0, t1 = 5, 50\n",
"def learning_schedule(t):\n",
" return t0/(t+t1)\n",
"\n",
"theta = np.random.randn(2,1)\n",
"\n",
"for epoch in range(n_epochs):\n",
"# Can you figure out a better way of setting up the contributions to each batch?\n",
" for i in range(m):\n",
" random_index = M*np.random.randint(m)\n",
" xi = X[random_index:random_index+M]\n",
" yi = y[random_index:random_index+M]\n",
" gradients = (1.0/M)*training_gradient(yi, xi, theta)\n",
" eta = learning_schedule(epoch*m+i)\n",
" theta = theta - eta*gradients\n",
"print(\"theta from own sdg\")\n",
"print(theta)"
]
},
{
"cell_type": "markdown",
"id": "ccd8829e",
"metadata": {
"editable": true
},
"source": [
"### And Logistic Regression"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "cc5811d1",
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"import autograd.numpy as np\n",
"from autograd import grad\n",
"\n",
"def sigmoid(x):\n",
" return 0.5 * (np.tanh(x / 2.) + 1)\n",
"\n",
"def logistic_predictions(weights, inputs):\n",
" # Outputs probability of a label being true according to logistic model.\n",
" return sigmoid(np.dot(inputs, weights))\n",
"\n",
"def training_loss(weights):\n",
" # Training loss is the negative log-likelihood of the training labels.\n",
" preds = logistic_predictions(weights, inputs)\n",
" label_probabilities = preds * targets + (1 - preds) * (1 - targets)\n",
" return -np.sum(np.log(label_probabilities))\n",
"\n",
"# Build a toy dataset.\n",
"inputs = np.array([[0.52, 1.12, 0.77],\n",
" [0.88, -1.08, 0.15],\n",
" [0.52, 0.06, -1.30],\n",
" [0.74, -2.49, 1.39]])\n",
"targets = np.array([True, True, False, True])\n",
"\n",
"# Define a function that returns gradients of training loss using Autograd.\n",
"training_gradient_fun = grad(training_loss)\n",
"\n",
"# Optimize weights using gradient descent.\n",
"weights = np.array([0.0, 0.0, 0.0])\n",
"print(\"Initial loss:\", training_loss(weights))\n",
"for i in range(100):\n",
" weights -= training_gradient_fun(weights) * 0.01\n",
"\n",
"print(\"Trained loss:\", training_loss(weights))"
]
}
],
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}