From 20e8b8fbec9f0112c5f91855d5d28b72bd81ea99 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 27 Sep 2018 04:35:41 +0200 Subject: [PATCH] Update on steepest descent --- doc/pub/Splines/html/._Splines-bs000.html | 176 +++--- doc/pub/Splines/html/._Splines-bs001.html | 174 +++--- doc/pub/Splines/html/._Splines-bs002.html | 200 ++++--- doc/pub/Splines/html/._Splines-bs003.html | 199 ++++--- doc/pub/Splines/html/._Splines-bs004.html | 208 ++++--- doc/pub/Splines/html/._Splines-bs005.html | 198 ++++--- doc/pub/Splines/html/._Splines-bs006.html | 212 ++++--- doc/pub/Splines/html/._Splines-bs007.html | 188 +++--- doc/pub/Splines/html/._Splines-bs008.html | 257 +++++---- doc/pub/Splines/html/._Splines-bs009.html | 209 ++++--- doc/pub/Splines/html/._Splines-bs010.html | 208 ++++--- doc/pub/Splines/html/._Splines-bs011.html | 217 +++---- doc/pub/Splines/html/._Splines-bs012.html | 202 ++++--- doc/pub/Splines/html/._Splines-bs013.html | 197 ++++--- doc/pub/Splines/html/._Splines-bs014.html | 186 +++--- doc/pub/Splines/html/._Splines-bs015.html | 237 ++++---- doc/pub/Splines/html/._Splines-bs016.html | 234 ++++---- doc/pub/Splines/html/._Splines-bs017.html | 211 ++++--- doc/pub/Splines/html/._Splines-bs018.html | 239 ++++---- doc/pub/Splines/html/._Splines-bs019.html | 199 ++++--- doc/pub/Splines/html/._Splines-bs020.html | 225 +++++--- doc/pub/Splines/html/._Splines-bs021.html | 225 +++++--- doc/pub/Splines/html/._Splines-bs022.html | 210 ++++--- doc/pub/Splines/html/._Splines-bs023.html | 217 +++---- doc/pub/Splines/html/._Splines-bs024.html | 194 ++++--- doc/pub/Splines/html/._Splines-bs025.html | 226 ++++---- doc/pub/Splines/html/._Splines-bs026.html | 233 ++++---- doc/pub/Splines/html/._Splines-bs027.html | 230 +++++--- doc/pub/Splines/html/._Splines-bs028.html | 213 ++++--- doc/pub/Splines/html/._Splines-bs029.html | 244 +++++--- doc/pub/Splines/html/._Splines-bs030.html | 202 ++++--- doc/pub/Splines/html/._Splines-bs031.html | 212 ++++--- doc/pub/Splines/html/._Splines-bs032.html | 222 +++---- doc/pub/Splines/html/._Splines-bs033.html | 220 +++---- doc/pub/Splines/html/._Splines-bs034.html | 230 +++++--- doc/pub/Splines/html/._Splines-bs035.html | 219 ++++--- doc/pub/Splines/html/._Splines-bs036.html | 256 +++++---- doc/pub/Splines/html/Splines-bs.html | 176 +++--- doc/pub/Splines/html/Splines-reveal.html | 441 ++++++++++++-- doc/pub/Splines/html/Splines-solarized.html | 502 +++++++++++++--- doc/pub/Splines/html/Splines.html | 502 +++++++++++++--- doc/pub/Splines/ipynb/Splines.ipynb | 540 ++++++++++++++++-- .../Splines/ipynb/ipynb-Splines-src.tar.gz | Bin 210 -> 208 bytes doc/pub/Splines/pdf/Splines-minted.pdf | Bin 363461 -> 400749 bytes doc/src/Splines/Splines.do.txt | 310 ++++++++++ 45 files changed, 6767 insertions(+), 3633 deletions(-) diff --git a/doc/pub/Splines/html/._Splines-bs000.html b/doc/pub/Splines/html/._Splines-bs000.html index e3f254239..f8494c29a 100644 --- a/doc/pub/Splines/html/._Splines-bs000.html +++ b/doc/pub/Splines/html/._Splines-bs000.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -193,7 +225,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Sep 21, 2018

+

Sep 27, 2018


@@ -217,7 +249,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs001.html b/doc/pub/Splines/html/._Splines-bs001.html index fa2e9e8ee..ebd5e0310 100644 --- a/doc/pub/Splines/html/._Splines-bs001.html +++ b/doc/pub/Splines/html/._Splines-bs001.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -203,7 +235,7 @@ some approximative/numerical method to compute the minimum.
  • 10
  • 11
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs002.html b/doc/pub/Splines/html/._Splines-bs002.html index 034502d3a..a47b11984 100644 --- a/doc/pub/Splines/html/._Splines-bs002.html +++ b/doc/pub/Splines/html/._Splines-bs002.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,26 +206,24 @@ MathJax.Hub.Config({ -

    Steepest descent

    +

    Revisiting our Logistic Regression case

    -The method of steepest descent The basic idea of gradient descent is -that a function \( F(\mathbf{x}) \), -\( \mathbf{x} \equiv (x_1,\cdots,x_n) \), decreases fastest if one goes from \( \bf {x} \) in the -direction of the negative gradient \( -\nabla F(\mathbf{x}) \). +In our discussion on Logistic Regression we defined we studied first the +case of +two classes, with \( y_i \) either +\( 0 \) or \( 1 \). Furthermore we assumed also that we have only two +parameters \( \beta \) in our fitting of the Sigmoid function, that is we +defined probabilities -

    -It can be shown that if $$ -\mathbf{x}_{k+1} = \mathbf{x}_k - \gamma_k \nabla F(\mathbf{x}_k), +\begin{align*} +p(y_i=1|x_i,\hat{\beta}) &= \frac{\exp{(\beta_0+\beta_1x_i)}}{1+\exp{(\beta_0+\beta_1x_i)}},\nonumber\\ +p(y_i=0|x_i,\hat{\beta}) &= 1 - p(y_i=1|x_i,\hat{\beta}), +\end{align*} $$ -with \( \gamma_k > 0 \). - -

    -For \( \gamma_k \) small enough, then \( F(\mathbf{x}_{k+1}) \leq -F(\mathbf{x}_k) \). This means that for a sufficiently small \( \gamma_k \) -we are always moving towards smaller function values, i.e a minimum. +where \( \hat{\beta} \) are the weights we wish to extract from data, in our case \( \beta_0 \) and \( \beta_1 \).

    @@ -213,7 +243,7 @@ we are always moving towards smaller function values, i.e a minimum.

  • 11
  • 12
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs003.html b/doc/pub/Splines/html/._Splines-bs003.html index 1537aadc8..2ac5adc95 100644 --- a/doc/pub/Splines/html/._Splines-bs003.html +++ b/doc/pub/Splines/html/._Splines-bs003.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,23 +204,30 @@ MathJax.Hub.Config({

     

     

     

    - + -

    More on Steepest descent

    +

    The equations to solve

    -The previous observation is the basis of the method of steepest -descent, which is also referred to as just gradient descent (GD). One -starts with an initial guess \( \mathbf{x}_0 \) for a minimum of \( F \) and -computes new approximations according to +Our compact equations used a definition of a vector \( \hat{y} \) with \( n \) +elements \( y_i \), an \( n\times p \) matrix \( \hat{X} \) which contains the +\( x_i \) values and a vector \( \hat{p} \) of fitted probabilities +\( p(y_i\vert x_i,\hat{\beta}) \). We rewrote in a more compact form +the first derivative of the cost function as $$ -\mathbf{x}_{k+1} = \mathbf{x}_k - \gamma_k \nabla F(\mathbf{x}_k), \ \ k \geq 0. +\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}} = -\hat{X}^T\left(\hat{y}-\hat{p}\right). $$

    -The parameter \( \gamma_k \) is often referred to as the step length or -the learning rate within the context of Machine Learning. +If we in addition define a diagonal matrix \( \hat{W} \) with elements +\( p(y_i\vert x_i,\hat{\beta})(1-p(y_i\vert x_i,\hat{\beta}) \), we can obtain a compact expression of the second derivative as + +$$ +\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T} = \hat{X}^T\hat{W}\hat{X}. +$$ + +This defines what we call the Hessian.

    @@ -209,7 +248,7 @@ the learning rate within the context of Machine Learning.

  • 12
  • 13
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs004.html b/doc/pub/Splines/html/._Splines-bs004.html index 47ec80c33..2401ae554 100644 --- a/doc/pub/Splines/html/._Splines-bs004.html +++ b/doc/pub/Splines/html/._Splines-bs004.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,30 +204,30 @@ MathJax.Hub.Config({

     

     

     

    - + -

    The ideal

    +

    Solving using Newton-Raphson's method

    -Ideally the sequence \( \{\mathbf{x}_k \}_{k=0} \) converges to a global -minimum of the function \( F \). In general we do not know if we are in a -global or local minimum. In the special case when \( F \) is a convex -function, all local minima are also global minima, so in this case -gradient descent can converge to the global solution. The advantage of -this scheme is that it is conceptually simple and straightforward to -implement. However the method in this form has some severe -limitations: +If we can set up these equations, Newton-Raphson's iterative method is the nomrally the method of choice. It requires however that we setting the matrices that define the first and second derivatives.

    -In machine learing we are often faced with non-convex high dimensional -cost functions with many local minima. Since GD is deterministic we -will get stuck in a local minimum, if the method converges, unless we -have a very good intial guess. This also implies that the scheme is -sensitive to the chosen initial condition. +Our iterative scheme is then given by + +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T}\right)^{-1}\times \left(\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}}\right)_{\hat{\beta}^{\mathrm{old}}}, +$$ + +or in matrix form as + +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\hat{X}^T\hat{W}\hat{X} \right)^{-1}\times \left(-\hat{X}^T(\hat{y}-\hat{p}) \right)_{\hat{\beta}^{\mathrm{old}}}. +$$ + +The right-hand side is computed with the old values of \( \beta \).

    -Note that the gradient is a function of \( \mathbf{x} = -(x_1,\cdots,x_n) \) which makes it expensive to compute numerically. +If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement.

    @@ -217,7 +249,7 @@ Note that the gradient is a function of \( \mathbf{x} =

  • 13
  • 14
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs005.html b/doc/pub/Splines/html/._Splines-bs005.html index a4e58bab5..ad022b42b 100644 --- a/doc/pub/Splines/html/._Splines-bs005.html +++ b/doc/pub/Splines/html/._Splines-bs005.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,23 +204,23 @@ MathJax.Hub.Config({

     

     

     

    - + -

    The sensitiveness of the gradient descent

    +

    Brief reminder on Newton-Raphson's method

    -The gradient descent method -is sensitive to the choice of learning rate \( \gamma_k \). This is due -to the fact that we are only guaranteed that \( F(\mathbf{x}_{k+1}) \leq -F(\mathbf{x}_k) \) for sufficiently small \( \gamma_k \). The problem is to -determine an optimal learning rate. If the learning rate is chosen too -small the method will take a long time to converge and if it is too -large we can experience erratic behavior. +Let us quicly remind ourselves how we derive the above method.

    -Many of these shortcomings can be alleviated by introducing -randomness. One such method is that of Stochastic Gradient Descent -(SGD), see below. +Perhaps the most celebrated of all one-dimensional root-finding +routines is Newton's method, also called the Newton-Raphson +method. This method is distinguished from the previously discussed +methods by the fact that it requires the evaluation of both the +function \( f \) and its derivative \( f' \) at arbitrary points. In this +sense, it is taylored to cases with e.g., transcendental equations. +If you can only calculate the derivative +numerically and/or your function is not of the smooth type, we +discourage the use of this method.

    @@ -211,7 +243,7 @@ randomness. One such method is that of Stochastic Gradient Descent

  • 14
  • 15
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs006.html b/doc/pub/Splines/html/._Splines-bs006.html index 1ba9ffe66..6f55896c7 100644 --- a/doc/pub/Splines/html/._Splines-bs006.html +++ b/doc/pub/Splines/html/._Splines-bs006.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,24 +204,40 @@ MathJax.Hub.Config({

     

     

     

    - + -

    Convex functions

    +

    The equations

    -Ideally we want our cost/loss function to be convex(concave). +The Newton-Raphson formula consists geometrically of extending the +tangent line at a current point until it crosses zero, then setting +the next guess to the abscissa of that zero-crossing. The mathematics +behind this method is rather simple. Employing a Taylor expansion for +\( x \) sufficiently close to the solution \( s \), we have + +$$ + f(s)=0=f(x)+(s-x)f'(x)+\frac{(s-x)^2}{2}f''(x) +\dots. + \tag{1} +$$

    -First we give the definition of a convex set: A set \( C \) in -\( \mathbb{R}^n \) is said to be convex if, for all \( x \) and \( y \) in \( C \) and -all \( t \in (0,1) \) , the point \( (1 − t)x + ty \) also belongs to -C. Geometrically this means that every point on the line segment -connecting \( x \) and \( y \) is in \( C \) as discussed below. +For small enough values of the function and for well-behaved +functions, the terms beyond linear are unimportant, hence we obtain + +$$ + f(x)+(s-x)f'(x)\approx 0, +$$ + +yielding +$$ + s\approx x-\frac{f(x)}{f'(x)}. +$$

    -The convex subsets of \( \mathbb{R} \) are the intervals of -\( \mathbb{R} \). Examples of convex sets of \( \mathbb{R}^2 \) are the -regular polygons (triangles, rectangles, pentagons, etc...). +Having in mind an iterative procedure, it is natural to start iterating with +$$ + x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}. +$$

    @@ -213,7 +261,7 @@ regular polygons (triangles, rectangles, pentagons, etc...).

  • 15
  • 16
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs007.html b/doc/pub/Splines/html/._Splines-bs007.html index 57c477e77..fb48f2408 100644 --- a/doc/pub/Splines/html/._Splines-bs007.html +++ b/doc/pub/Splines/html/._Splines-bs007.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,10 +206,20 @@ MathJax.Hub.Config({ -

    Convex function

    +

    Simple geometric interpretation

    -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. +The above is Newton-Raphson's method. It has a simple geometric +interpretation, namely \( x_{n+1} \) is the point where the tangent from +\( (x_n,f(x_n)) \) crosses the $x-$axis. Close to the solution, +Newton-Raphson converges fast to the desired result. However, if we +are far from a root, where the higher-order terms in the series are +important, the Newton-Raphson formula can give grossly inaccurate +results. For instance, the initial guess for the root might be so far +from the true root as to let the search interval include a local +maximum or minimum of the function. If an iteration places a trial +guess near such a local extremum, so that the first derivative nearly +vanishes, then Newton-Raphson may fail totally

    @@ -202,7 +244,7 @@ MathJax.Hub.Config({

  • 16
  • 17
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs008.html b/doc/pub/Splines/html/._Splines-bs008.html index f0565b9ad..c035217c7 100644 --- a/doc/pub/Splines/html/._Splines-bs008.html +++ b/doc/pub/Splines/html/._Splines-bs008.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,46 +206,57 @@ MathJax.Hub.Config({ -

    Conditions on convex functions

    +

    Extending to more than one variable

    -In the following we state first and second-order conditions which -ensures convexity of a function \( f \). We write \( D_f \) to denote the -domain of \( f \), i.e the subset of \( R^n \) where \( f \) is defined. For more -details and proofs we refer to: S. Boyd and L. Vandenberghe. Convex Optimization. Cambridge University Press. +Newton's method can be generalized to systems of several non-linear equations +and variables. Consider the case with two equations +$$ + \begin{array}{cc} f_1(x_1,x_2) &=0\\ + f_2(x_1,x_2) &=0\end{array}, +$$ + +which we Taylor expand to obtain + +$$ + \begin{array}{cc} 0=f_1(x_1+h_1,x_2+h_2)=&f_1(x_1,x_2)+h_1 + \partial f_1/\partial x_1+h_2 + \partial f_1/\partial x_2+\dots\\ + 0=f_2(x_1+h_1,x_2+h_2)=&f_2(x_1,x_2)+h_1 + \partial f_2/\partial x_1+h_2 + \partial f_2/\partial x_2+\dots + \end{array}. +$$ + +Defining the Jacobian matrix \( {\bf \hat{J}} \) we have +$$ + {\bf \hat{J}}=\left( \begin{array}{cc} + \partial f_1/\partial x_1 & \partial f_1/\partial x_2 \\ + \partial f_2/\partial x_1 &\partial f_2/\partial x_2 + \end{array} \right), +$$ + +we can rephrase Newton's method as +$$ +\left(\begin{array}{c} x_1^{n+1} \\ x_2^{n+1} \end{array} \right)= +\left(\begin{array}{c} x_1^{n} \\ x_2^{n} \end{array} \right)+ +\left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right), +$$ + +where we have defined +$$ + \left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right)= + -{\bf \hat{J}}^{-1} + \left(\begin{array}{c} f_1(x_1^{n},x_2^{n}) \\ f_2(x_1^{n},x_2^{n}) \end{array} \right). +$$ + +We need thus to compute the inverse of the Jacobian matrix and it +is to understand that difficulties may +arise in case \( {\bf \hat{J}} \) is nearly singular.

    -

    -
    -

    -Suppose \( f \) is differentiable (i.e \( \nabla f(x) \) is well defined for -all \( x \) in the domain of \( f \)). Then \( f \) is convex if and only if \( D_f \) -is a convex set and $$f(y) \geq f(x) + \nabla f(x)^T (y-x) $$ holds -for all \( x,y \in D_f \). This condition means that for a convex function -the first order Taylor expansion (right hand side above) at any point -a global under estimator of the function. To convince yourself you can -make a drawing of \( f(x) = x^2+1 \) and draw the tangent line to \( f(x) \) and -note that it is always below the graph. -

    -
    - - -

    -

    -
    -

    -Assume that \( f \) is twice -differentiable, i.e the Hessian matrix exists at each point in -\( D_f \). Then \( f \) is convex if and only if \( D_f \) is a convex set and its -Hessian is positive semi-definite for all \( x\in D_f \). For a -single-variable function this reduces to \( f''(x) \geq 0 \). Geometrically this means that \( f \) has nonnegative curvature -everywhere. -

    -
    - - -

    -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. +It is rather straightforward to extend the above scheme to systems of +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.

    @@ -239,7 +282,7 @@ This condition is particularly useful since it gives us an procedure for determi

  • 17
  • 18
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs009.html b/doc/pub/Splines/html/._Splines-bs009.html index 15e45e732..264ce754a 100644 --- a/doc/pub/Splines/html/._Splines-bs009.html +++ b/doc/pub/Splines/html/._Splines-bs009.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,33 +206,26 @@ MathJax.Hub.Config({ -

    More on convex functions

    +

    Steepest descent

    -The next result is of great importance to us and the reason why we are -going on about convex functions. In machine learning we frequently -have to minimize a loss/cost function in order to find the best -parameters for the model we are considering. +The method of steepest descent The basic idea of gradient descent is +that a function \( F(\mathbf{x}) \), +\( \mathbf{x} \equiv (x_1,\cdots,x_n) \), decreases fastest if one goes from \( \bf {x} \) in the +direction of the negative gradient \( -\nabla F(\mathbf{x}) \).

    -Ideally we want the -global minimum (for high-dimensional models it is hard to know -if we have local or global minimum). However, if the cost/loss function -is convex the following result provides invaluable information: +It can be shown that if +$$ +\mathbf{x}_{k+1} = \mathbf{x}_k - \gamma_k \nabla F(\mathbf{x}_k), +$$ + +with \( \gamma_k > 0 \).

    -

    -
    -

    -Consider the problem of finding \( x \in \mathbb{R}^n \) such that \( f(x) \) -is minimal, where \( f \) is convex and differentiable. Then, any point -\( x^* \) that satisfies \( \nabla f(x^*) = 0 \) is a global minimum. -

    -
    - - -

    -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. +For \( \gamma_k \) small enough, then \( F(\mathbf{x}_{k+1}) \leq +F(\mathbf{x}_k) \). This means that for a sufficiently small \( \gamma_k \) +we are always moving towards smaller function values, i.e a minimum.

    @@ -227,7 +252,7 @@ This result means that if we know that the cost/loss function is convex and we a

  • 18
  • 19
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs010.html b/doc/pub/Splines/html/._Splines-bs010.html index 91bd8be2f..18fbf8251 100644 --- a/doc/pub/Splines/html/._Splines-bs010.html +++ b/doc/pub/Splines/html/._Splines-bs010.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,31 +204,23 @@ MathJax.Hub.Config({

     

     

     

    - + -

    Some simple problems

    +

    More on Steepest descent

    -
      -
    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$.
    2. -
    3. Using the second order condition show that the following functions are convex on the specified domain.
    4. +

      +The previous observation is the basis of the method of steepest +descent, which is also referred to as just gradient descent (GD). One +starts with an initial guess \( \mathbf{x}_0 \) for a minimum of \( F \) and +computes new approximations according to -

      +$$ +\mathbf{x}_{k+1} = \mathbf{x}_k - \gamma_k \nabla F(\mathbf{x}_k), \ \ k \geq 0. +$$ -
    5. 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.
    6. -
    7. A norm is any function that satisfy the following properties
    8. - - - -
    - -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). +

    +The parameter \( \gamma_k \) is often referred to as the step length or +the learning rate within the context of Machine Learning.

    @@ -224,7 +248,7 @@ Using the definition of convexity, try to show that a function satisfying the pr

  • 19
  • 20
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs011.html b/doc/pub/Splines/html/._Splines-bs011.html index fc3bba3df..c96d82bbe 100644 --- a/doc/pub/Splines/html/._Splines-bs011.html +++ b/doc/pub/Splines/html/._Splines-bs011.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,35 +206,28 @@ MathJax.Hub.Config({ -

    Revisiting our first homework

    +

    The ideal

    -We will use linear regression as a case study for the gradient descent -methods. Linear regression is a great test case for the gradient -descent methods discussed in the lectures since it has several -desirable properties such as: +Ideally the sequence \( \{\mathbf{x}_k \}_{k=0} \) converges to a global +minimum of the function \( F \). In general we do not know if we are in a +global or local minimum. In the special case when \( F \) is a convex +function, all local minima are also global minima, so in this case +gradient descent can converge to the global solution. The advantage of +this scheme is that it is conceptually simple and straightforward to +implement. However the method in this form has some severe +limitations: -

      -
    1. An analytical solution (recall homework set 1).
    2. -
    3. The gradient can be computed analytically.
    4. -
    5. The cost function is convex which guarantees that gradient descent converges for small enough learning rates
    6. -
    +

    +In machine learing we are often faced with non-convex high dimensional +cost functions with many local minima. Since GD is deterministic we +will get stuck in a local minimum, if the method converges, unless we +have a very good intial guess. This also implies that the scheme is +sensitive to the chosen initial condition. -We revisit the example from homework set 1 where we had -$$ -y_i = 5x_i^2 + 0.1\xi_i, \ i=1,\cdots,100 -$$ - -with \( x_i \in [0,1] \) chosen randomly with a uniform distribution. Additionally \( \xi_i \) represents stochastic noise chosen according to a normal distribution \( \cal {N}(0,1) \). -The linear regression model is given by -$$ -h_\beta(x) = \hat{y} = \beta_0 + \beta_1 x, -$$ - -such that -$$ -\hat{y}_i = \beta_0 + \beta_1 x_i. -$$ +

    +Note that the gradient is a function of \( \mathbf{x} = +(x_1,\cdots,x_n) \) which makes it expensive to compute numerically.

    @@ -230,7 +255,7 @@ $$

  • 20
  • 21
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs012.html b/doc/pub/Splines/html/._Splines-bs012.html index 27137f59b..0b9edbd30 100644 --- a/doc/pub/Splines/html/._Splines-bs012.html +++ b/doc/pub/Splines/html/._Splines-bs012.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,27 +206,21 @@ MathJax.Hub.Config({ -

    Gradient descent example

    +

    The sensitiveness of the gradient descent

    -Let \( \mathbf{y} = (y_1,\cdots,y_n)^T \), \( \mathbf{\hat{y}} = (\hat{y}_1,\cdots,\hat{y}_n)^T \) and \( \beta = (\beta_0, \beta_1)^T \) +The gradient descent method +is sensitive to the choice of learning rate \( \gamma_k \). This is due +to the fact that we are only guaranteed that \( F(\mathbf{x}_{k+1}) \leq +F(\mathbf{x}_k) \) for sufficiently small \( \gamma_k \). The problem is to +determine an optimal learning rate. If the learning rate is chosen too +small the method will take a long time to converge and if it is too +large we can experience erratic behavior.

    -It is convenient to write \( \mathbf{\hat{y}} = X\beta \) where \( X \in \mathbb{R}^{100 \times 2} \) is the design matrix given by -$$ -X \equiv \begin{bmatrix} -1 & x_1 \\ -\vdots & \vdots \\ -1 & x_{100} & \\ -\end{bmatrix}. -$$ - -The loss function is given by -$$ -C(\beta) = ||X\beta-\mathbf{y}||^2 = ||X\beta||^2 - 2 \mathbf{y}^T X\beta + ||\mathbf{y}||^2 = \sum_{i=1}^{100} (\beta_0 + \beta_1 x_i)^2 - 2 y_i (\beta_0 + \beta_1 x_i) + y_i^2 -$$ - -and we want to find \( \beta \) such that \( C(\beta) \) is minimized. +Many of these shortcomings can be alleviated by introducing +randomness. One such method is that of Stochastic Gradient Descent +(SGD), see below.

    @@ -222,7 +248,7 @@ and we want to find \( \beta \) such that \( C(\beta) \) is minimized.

  • 21
  • 22
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs013.html b/doc/pub/Splines/html/._Splines-bs013.html index 372867cf3..b211a4e22 100644 --- a/doc/pub/Splines/html/._Splines-bs013.html +++ b/doc/pub/Splines/html/._Splines-bs013.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,19 +204,24 @@ MathJax.Hub.Config({

     

     

     

    - + -

    The derivative of the cost/loss function

    +

    Convex functions

    -Computing \( \partial C(\beta) / \partial \beta_0 \) and \( \partial C(\beta) / \partial \beta_1 \) we can show that the gradient can be written as -$$ -\nabla_{\beta} C(\beta) = (\partial C(\beta) / \partial \beta_0, \partial C(\beta) / \partial \beta_1)^T = 2\begin{bmatrix} \sum_{i=1}^{100} \left(\beta_0+\beta_1x_i-y_i\right) \\ -\sum_{i=1}^{100}\left( x_i (\beta_0+\beta_1x_i)-y_ix_i\right) \\ -\end{bmatrix} = 2X^T(X\beta - \mathbf{y}), -$$ +Ideally we want our cost/loss function to be convex(concave). -where \( X \) is the design matrix defined above. +

    +First we give the definition of a convex set: A set \( C \) in +\( \mathbb{R}^n \) is said to be convex if, for all \( x \) and \( y \) in \( C \) and +all \( t \in (0,1) \) , the point \( (1 − t)x + ty \) also belongs to +C. Geometrically this means that every point on the line segment +connecting \( x \) and \( y \) is in \( C \) as discussed below. + +

    +The convex subsets of \( \mathbb{R} \) are the intervals of +\( \mathbb{R} \). Examples of convex sets of \( \mathbb{R}^2 \) are the +regular polygons (triangles, rectangles, pentagons, etc...).

    @@ -212,7 +249,7 @@ where \( X \) is the design matrix defined above.

  • 22
  • 23
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs014.html b/doc/pub/Splines/html/._Splines-bs014.html index 9374c1ab0..bca2a9dfa 100644 --- a/doc/pub/Splines/html/._Splines-bs014.html +++ b/doc/pub/Splines/html/._Splines-bs014.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,16 +206,10 @@ MathJax.Hub.Config({ -

    The Hessian matrix

    -The Hessian matrix of \( C(\beta) \) is given by -$$ -\hat{H} \equiv \begin{bmatrix} -\frac{\partial^2 C(\beta)}{\partial \beta_0^2} & \frac{\partial^2 C(\beta)}{\partial \beta_0 \partial \beta_1} \\ -\frac{\partial^2 C(\beta)}{\partial \beta_0 \partial \beta_1} & \frac{\partial^2 C(\beta)}{\partial \beta_1^2} & \\ -\end{bmatrix} = 2X^T X. -$$ +

    Convex function

    -This result implies that \( C(\beta) \) is a convex function since the matrix \( X^T X \) always is positive semi-definite. +

    +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.

    @@ -211,7 +237,7 @@ This result implies that \( C(\beta) \) is a convex function since the matrix \(

  • 23
  • 24
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs015.html b/doc/pub/Splines/html/._Splines-bs015.html index 36d1bdfcf..e7589548b 100644 --- a/doc/pub/Splines/html/._Splines-bs015.html +++ b/doc/pub/Splines/html/._Splines-bs015.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,44 +206,47 @@ MathJax.Hub.Config({ -

    Simple program

    +

    Conditions on convex functions

    -We can now write a program that minimizes \( C(\beta) \) using the gradient descent method with a constant learning rate \( \gamma \) according to -$$ -\beta_{k+1} = \beta_k - \gamma \nabla_\beta C(\beta_k), \ k=0,1,\cdots -$$ +In the following we state first and second-order conditions which +ensures convexity of a function \( f \). We write \( D_f \) to denote the +domain of \( f \), i.e the subset of \( R^n \) where \( f \) is defined. For more +details and proofs we refer to: S. Boyd and L. Vandenberghe. Convex Optimization. Cambridge University Press.

    -We can use the expression we computed for the gradient and let use a -\( \beta_0 \) be chosen randomly and let \( \gamma = 0.001 \). Stop iterating -when \( ||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8} \). +

    +
    +

    +Suppose \( f \) is differentiable (i.e \( \nabla f(x) \) is well defined for +all \( x \) in the domain of \( f \)). Then \( f \) is convex if and only if \( D_f \) +is a convex set and $$f(y) \geq f(x) + \nabla f(x)^T (y-x) $$ holds +for all \( x,y \in D_f \). This condition means that for a convex function +the first order Taylor expansion (right hand side above) at any point +a global under estimator of the function. To convince yourself you can +make a drawing of \( f(x) = x^2+1 \) and draw the tangent line to \( f(x) \) and +note that it is always below the graph. +

    +
    +

    -And finally we can compare our solution for \( \beta \) with the analytic result given by -\( \beta= (X^TX)^{-1} X^T \mathbf{y} \). +

    +
    +

    +Assume that \( f \) is twice +differentiable, i.e the Hessian matrix exists at each point in +\( D_f \). Then \( f \) is convex if and only if \( D_f \) is a convex set and its +Hessian is positive semi-definite for all \( x\in D_f \). For a +single-variable function this reduces to \( f''(x) \geq 0 \). Geometrically this means that \( f \) has nonnegative curvature +everywhere. +

    +
    + +

    +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. - -

    import numpy as np
    -
    -"""
    -The following setup is just a suggestion, feel free to write it the way you like.
    -"""
    -
    -#Setup problem described in the exercise
    -N  = 100 #Nr of datapoints
    -M  = 2 #Nr of features
    -x  = np.random.rand(N) #Uniformly generated x-values in [0,1]
    -y  = 5*x**2 + 0.1*np.random.randn(N)
    -X  = np.c_[np.ones(N),x] #Construct design matrix
    -
    -#Compute beta according to normal equations to compare with GD solution
    -Xt_X_inv = np.linalg.inv(np.dot(X.T,X))
    -Xt_y     = np.dot(X.transpose(),y)
    -beta_NE = np.dot(Xt_X_inv,Xt_y)
    -print(beta_NE)
    -

    @@ -238,7 +273,7 @@ beta_NE = np.24

  • 25
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs016.html b/doc/pub/Splines/html/._Splines-bs016.html index 8f6c8a419..f68c92deb 100644 --- a/doc/pub/Splines/html/._Splines-bs016.html +++ b/doc/pub/Splines/html/._Splines-bs016.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,52 +206,34 @@ MathJax.Hub.Config({ -

    Gradient Descent Example

    +

    More on convex functions

    -Another simple example is here +The next result is of great importance to us and the reason why we are +going on about convex functions. In machine learning we frequently +have to minimize a loss/cost function in order to find the best +parameters for the model we are considering. +

    +Ideally we want the +global minimum (for high-dimensional models it is hard to know +if we have local or global minimum). However, if the cost/loss function +is convex the following result provides invaluable information: - -

    # Importing various packages
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -from mpl_toolkits.mplot3d import Axes3D
    -from matplotlib import cm
    -from matplotlib.ticker import LinearLocator, FormatStrFormatter
    -import sys
    +

    +

    +
    +

    +Consider the problem of finding \( x \in \mathbb{R}^n \) such that \( f(x) \) +is minimal, where \( f \) is convex and differentiable. Then, any point +\( x^* \) that satisfies \( \nabla f(x^*) = 0 \) is a global minimum. +

    +
    -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) -xb = np.c_[np.ones((100,1)), x] -beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) -print(beta_linreg) -beta = np.random.randn(2,1) +

    +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. -eta = 0.1 -Niterations = 1000 -m = 100 - -for iter in range(Niterations): - gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y) - beta -= eta*gradients - -print(beta) -xnew = np.array([[0],[2]]) -xbnew = np.c_[np.ones((2,1)), xnew] -ypredict = xbnew.dot(beta) -ypredict2 = xbnew.dot(beta_linreg) -plt.plot(xnew, ypredict, "r-") -plt.plot(xnew, ypredict2, "b-") -plt.plot(x, y ,'ro') -plt.axis([0,2.0,0, 15.0]) -plt.xlabel(r'$x$') -plt.ylabel(r'$y$') -plt.title(r'Gradient descent example') -plt.show() -

    @@ -246,7 +260,7 @@ plt.show()

  • 25
  • 26
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs017.html b/doc/pub/Splines/html/._Splines-bs017.html index b6e338b6b..0497c1c2e 100644 --- a/doc/pub/Splines/html/._Splines-bs017.html +++ b/doc/pub/Splines/html/._Splines-bs017.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,27 +206,30 @@ MathJax.Hub.Config({ -

    And a corresponding example using scikit-learn

    +

    Some simple problems

    -

    +

      +
    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$.
    2. +
    3. Using the second order condition show that the following functions are convex on the specified domain.
    4. - -
      # Importing various packages
      -from random import random, seed
      -import numpy as np
      -import matplotlib.pyplot as plt
      -from sklearn.linear_model import SGDRegressor
      +
        +
      • \( f(x) = e^x \) is convex for \( x \in \mathbb{R} \).
      • +
      • \( g(x) = -\ln(x) \) is convex for \( x \in (0,\infty) \).
      • +
      -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +
    5. 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.
    6. +
    7. A norm is any function that satisfy the following properties
    8. + +
        +
      • \( f(\alpha x) = |\alpha| f(x) \) for all \( \alpha \in \mathbb{R} \).
      • +
      • \( f(x+y) \leq f(x) + f(y) \)
      • +
      • \( f(x) \leq 0 \) for all \( x \in \mathbb{R}^n \) with equality if and only if \( x = 0 \)
      • +
      + +
    + +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). -xb = np.c_[np.ones((100,1)), x] -beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) -print(beta_linreg) -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1) -sgdreg.fit(x,y.ravel()) -print(sgdreg.intercept_, sgdreg.coef_) -

    @@ -221,7 +256,7 @@ sgdreg.fit(x,y.

  • 26
  • 27
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs018.html b/doc/pub/Splines/html/._Splines-bs018.html index 507b4a0f3..cefc870b1 100644 --- a/doc/pub/Splines/html/._Splines-bs018.html +++ b/doc/pub/Splines/html/._Splines-bs018.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,62 +204,39 @@ MathJax.Hub.Config({

     

     

     

    - + -

    Gradient descent and Ridge

    +

    Standard steepest descent

    -We have also discussed Ridge regression where the loss function contains a regularized given by the \( L_2 \) norm of \( \beta \), +Before we proceed, we would like to mention the approach called the standard Steepest descent, which again leads to us having to be able to compute a matrix. + +

    +The success of the CG method +for finding solutions of non-linear problems is based on the theory +of conjugate gradients for linear systems of equations. It belongs to +the class of iterative methods for solving problems from linear +algebra of the type $$ -C_{\text{ridge}}(\beta) = ||X\beta -\mathbf{y}||^2 + \lambda ||\beta||^2, \ \lambda \geq 0. +\begin{equation*} +\hat{A}\hat{x} = \hat{b}. +\end{equation*} $$

    -In order to minimize \( C_{\text{ridge}}(\beta) \) using GD we only have adjust the gradient as follows +In the iterative process we end up with a problem like + $$ -\nabla_\beta C_{\text{ridge}}(\beta) = 2\begin{bmatrix} \sum_{i=1}^{100} \left(\beta_0+\beta_1x_i-y_i\right) \\ -\sum_{i=1}^{100}\left( x_i (\beta_0+\beta_1x_i)-y_ix_i\right) \\ -\end{bmatrix} + 2\lambda\begin{bmatrix} \beta_0 \\ \beta_1\end{bmatrix} = 2 (X^T(X\beta - \mathbf{y})+\lambda \beta). +\begin{equation*} + \hat{r}= \hat{b}-\hat{A}\hat{x}, +\end{equation*} $$ +where \( \hat{r} \) is the so-called residual or error in the iterative process. +

    -We can now extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by -$$ -\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}, -$$ +When we have found the exact solution, \( \hat{r}=0 \). -for \( \lambda = {0,1,10,50,100} \) (\( \lambda = 0 \) corresponds to ordinary least squares). -We can then compute \( ||\beta_{\text{ridge}}|| \) for each \( \lambda \). - -

    - - -

    import numpy as np
    -
    -"""
    -The following setup is just a suggestion, feel free to write it the way you like.
    -"""
    -
    -#Setup problem described in the exercise
    -N  = 100 #Nr of datapoints
    -M  = 2   #Nr of features
    -x  = np.random.rand(N)
    -y  = 5*x**2 + 0.1*np.random.randn(N)
    -
    -
    -#Compute analytic beta for Ridge regression 
    -X    = np.c_[np.ones(N),x]
    -XT_X = np.dot(X.T,X)
    -
    -l  = 0.1 #Ridge parameter lambda
    -Id = np.eye(XT_X.shape[0])
    -
    -Z = np.linalg.inv(XT_X+l*Id)
    -beta_ridge = np.dot(Z,np.dot(X.T,y))
    -
    -print(beta_ridge)
    -print(np.linalg.norm(beta_ridge)) #||beta||
    -

    @@ -254,7 +263,7 @@ beta_ridge = np

  • 27
  • 28
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs019.html b/doc/pub/Splines/html/._Splines-bs019.html index dda06818b..47978e50c 100644 --- a/doc/pub/Splines/html/._Splines-bs019.html +++ b/doc/pub/Splines/html/._Splines-bs019.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,20 +206,25 @@ MathJax.Hub.Config({ -

    Stochastic Gradient Descent

    +

    Conjugate gradient method

    -Stochastic gradient descent (SGD) and variants thereof address some of -the shortcomings of the Gradient descent method discussed above. +The residual is zero when we reach the minimum of the quadratic equation +$$ +\begin{equation*} + P(\hat{x})=\frac{1}{2}\hat{x}^T\hat{A}\hat{x} - \hat{x}^T\hat{b}, +\end{equation*} +$$

    -The underlying idea of SGD comes from the observation that the cost -function, which we want to minimize, can almost always be written as a -sum over \( n \) data points \( \{\mathbf{x}_i\}_{i=1}^n \), -$$ -C(\mathbf{\beta}) = \sum_{i=1}^n c_i(\mathbf{x}_i, -\mathbf{\beta}). -$$ +with the constraint that the matrix \( \hat{A} \) is positive definite and +symmetric. If we search for a minimum of the quantum mechanical +variance, then the matrix \( \hat{A} \), which is called the Hessian, is +given by the second-derivative of the function we want to minimize. +This quantity is always positive definite. + +

    +More details will be added here soon.

    @@ -215,7 +252,7 @@ $$

  • 28
  • 29
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs020.html b/doc/pub/Splines/html/._Splines-bs020.html index 2b13ebb75..8226361b5 100644 --- a/doc/pub/Splines/html/._Splines-bs020.html +++ b/doc/pub/Splines/html/._Splines-bs020.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,22 +206,47 @@ MathJax.Hub.Config({ -

    Computation of gradients

    - +

    Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come

    +
    +
    +

    -This in turn means that the gradient can be -computed as a sum over \( i \)-gradients -$$ -\nabla_\beta C(\mathbf{\beta}) = \sum_i^n \nabla_\beta c_i(\mathbf{x}_i, -\mathbf{\beta}). -$$ + +

    #include <cmath>
    +#include <iostream>
    +#include <fstream>
    +#include <iomanip>
    +#include "vectormatrixclass.h"
    +using namespace  std;
    +//   Main function begins here
    +int main(int  argc, char * argv[]){
    +  int dim = 2;
    +  Vector x(dim),xsd(dim), b(dim),x0(dim);
    +  Matrix A(dim,dim);
    +
    +  // Set our initial guess
    +  x0(0) = x0(1) = 0;
    +  // Set the matrix
    +  A(0,0) =  3;    A(1,0) =  2;   A(0,1) =  2;   A(1,1) =  6;
    +  b(0) = 2; b(1) = -8;
    +  cout << "The Matrix A that we are using: " << endl;
    +  A.Print();
    +  cout << endl;
    +  x = ConjugateGradient(A,b,x0);
    +  xsd = SteepestDescent(A,b,x0);
    +  cout << "The approximate solution using Conjugate Gradient is: " << endl;
    +  x.Print();
    +  cout << endl;
    +  cout << "The approximate solution using Steepest Descent is: " << endl;
    +  xsd.Print();
    +  cout << endl;
    +}
    +

    -Stochasticity/randomness is introduced by only taking the -gradient on a subset of the data called minibatches. If there are \( n \) -data points and the size of each minibatch is \( M \), there will be \( n/M \) -minibatches. We denote these minibatches by \( B_k \) where -\( k=1,\cdots,n/M \). +

    +
    +

    @@ -217,7 +274,7 @@ minibatches. We denote these minibatches by \( B_k \) where

  • 29
  • 30
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs021.html b/doc/pub/Splines/html/._Splines-bs021.html index 6525dab00..18036c43b 100644 --- a/doc/pub/Splines/html/._Splines-bs021.html +++ b/doc/pub/Splines/html/._Splines-bs021.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,26 +206,39 @@ MathJax.Hub.Config({ -

    SGD example

    -As an example, suppose we have \( 10 \) data points \( (\mathbf{x}_1,\cdots, \mathbf{x}_{10}) \) -and we choose to have \( M=5 \) minibathces, -then each minibatch contains two data points. In particular we have -\( B_1 = (\mathbf{x}_1,\mathbf{x}_2), \cdots, B_5 = -(\mathbf{x}_9,\mathbf{x}_{10}) \). Note that if you choose \( M=1 \) you -have only a single batch with all data points and on the other extreme, -you may choose \( M=n \) resulting in a minibatch for each datapoint, i.e -\( B_k = \mathbf{x}_k \). - +

    The routine for the steepest descent method

    +
    +
    +

    -The idea is now to approximate the gradient by replacing the sum over -all data points with a sum over the data points in one the minibatches -picked at random in each gradient descent step -$$ -\nabla_{\beta} -C(\mathbf{\beta}) = \sum_{i=1}^n \nabla_\beta c_i(\mathbf{x}_i, -\mathbf{\beta}) \rightarrow \sum_{i \in B_k}^n \nabla_\beta -c_i(\mathbf{x}_i, \mathbf{\beta}). -$$ + + +

    Vector SteepestDescent(Matrix A, Vector b, Vector x0){
    +  int IterMax, i;
    +  int dim = x0.Dimension();
    +  const double tolerance = 1.0e-14;
    +  Vector x(dim),f(dim),z(dim);
    +  double c,alpha,d;
    +  IterMax = 30;
    +  x = x0;
    +  f = A*x-b;
    +  i = 0;
    +  while (i <= IterMax){
    +    z = A*f;
    +    c = dot(f,f);
    +    alpha = c/dot(f,z);
    +    x = x - alpha*f;
    +    f =  A*x-b;
    +    if(sqrt(dot(f,f)) < tolerance) break;
    +    i++;
    +  }
    +  return x;
    +}
    +
    +

    +

    +
    +

    @@ -221,7 +266,7 @@ $$

  • 30
  • 31
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs022.html b/doc/pub/Splines/html/._Splines-bs022.html index c7901fea0..768900c4b 100644 --- a/doc/pub/Splines/html/._Splines-bs022.html +++ b/doc/pub/Splines/html/._Splines-bs022.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,23 +204,37 @@ MathJax.Hub.Config({

     

     

     

    - + -

    The gradient step

    +

    Revisiting our first homework

    -Thus a gradient descent step now looks like +We will use linear regression as a case study for the gradient descent +methods. Linear regression is a great test case for the gradient +descent methods discussed in the lectures since it has several +desirable properties such as: + +

      +
    1. An analytical solution (recall homework set 1).
    2. +
    3. The gradient can be computed analytically.
    4. +
    5. The cost function is convex which guarantees that gradient descent converges for small enough learning rates
    6. +
    + +We revisit the example from homework set 1 where we had $$ -\beta_{j+1} = \beta_j - \gamma_j \sum_{i \in B_k}^n \nabla_\beta c_i(\mathbf{x}_i, -\mathbf{\beta}) +y_i = 5x_i^2 + 0.1\xi_i, \ i=1,\cdots,100 $$ -

    -where \( k \) is picked at random with equal -probability from \( [1,n/M] \). An iteration over the number of -minibathces (n/M) is commonly referred to as an epoch. Thus it is -typical to choose a number of epochs and for each epoch iterate over -the number of minibatches, as exemplified in the code below. +with \( x_i \in [0,1] \) chosen randomly with a uniform distribution. Additionally \( \xi_i \) represents stochastic noise chosen according to a normal distribution \( \cal {N}(0,1) \). +The linear regression model is given by +$$ +h_\beta(x) = \hat{y} = \beta_0 + \beta_1 x, +$$ + +such that +$$ +\hat{y}_i = \beta_0 + \beta_1 x_i. +$$

    @@ -216,7 +262,7 @@ the number of minibatches, as exemplified in the code below.

  • 31
  • 32
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs023.html b/doc/pub/Splines/html/._Splines-bs023.html index ccc0d0fab..05ed134f0 100644 --- a/doc/pub/Splines/html/._Splines-bs023.html +++ b/doc/pub/Splines/html/._Splines-bs023.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,36 +204,29 @@ MathJax.Hub.Config({

     

     

     

    - + -

    Simple example code

    +

    Gradient descent example

    +Let \( \mathbf{y} = (y_1,\cdots,y_n)^T \), \( \mathbf{\hat{y}} = (\hat{y}_1,\cdots,\hat{y}_n)^T \) and \( \beta = (\beta_0, \beta_1)^T \) - -

    import numpy as np 
    -
    -n = 100 #100 datapoints 
    -M = 5   #size of each minibatch
    -m = int(n/M) #number of minibatches
    -n_epochs = 10 #number of epochs
    -
    -j = 0
    -for epoch in range(1,n_epochs+1):
    -    for i in range(m):
    -        k = np.random.randint(m) #Pick the k-th minibatch at random
    -        #Compute the gradient using the data in minibatch Bk
    -        #Compute new suggestion for 
    -        j += 1
    -

    -Taking the gradient only on a subset of the data has two important -benefits. First, it introduces randomness which decreases the chance -that our opmization scheme gets stuck in a local minima. Second, if -the size of the minibatches are small relative to the number of -datapoints (\( M < n \)), the computation of the gradient is much -cheaper since we sum over the datapoints in the \( k-th \) minibatch and not -all \( n \) datapoints. +It is convenient to write \( \mathbf{\hat{y}} = X\beta \) where \( X \in \mathbb{R}^{100 \times 2} \) is the design matrix given by +$$ +X \equiv \begin{bmatrix} +1 & x_1 \\ +\vdots & \vdots \\ +1 & x_{100} & \\ +\end{bmatrix}. +$$ + +The loss function is given by +$$ +C(\beta) = ||X\beta-\mathbf{y}||^2 = ||X\beta||^2 - 2 \mathbf{y}^T X\beta + ||\mathbf{y}||^2 = \sum_{i=1}^{100} (\beta_0 + \beta_1 x_i)^2 - 2 y_i (\beta_0 + \beta_1 x_i) + y_i^2 +$$ + +and we want to find \( \beta \) such that \( C(\beta) \) is minimized.

    @@ -229,7 +254,7 @@ all \( n \) datapoints.

  • 32
  • 33
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs024.html b/doc/pub/Splines/html/._Splines-bs024.html index 084a9a24f..f44e7b0cf 100644 --- a/doc/pub/Splines/html/._Splines-bs024.html +++ b/doc/pub/Splines/html/._Splines-bs024.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,19 +206,17 @@ MathJax.Hub.Config({ -

    When do we stop?

    +

    The derivative of the cost/loss function

    -A natural question is when do we stop the search for a new minimum? -One possibility is to compute the full gradient after a given number -of epochs and check if the norm of the gradient is smaller than some -threshold and stop if true. However, the condition that the gradient -is zero is valid also for local minima, so this would only tell us -that we are close to a local/global minimum. However, we could also -evaluate the cost function at this point, store the result and -continue the search. If the test kicks in at a later stage we can -compare the values of the cost function and keep the \( \beta \) that -gave the lowest value. +Computing \( \partial C(\beta) / \partial \beta_0 \) and \( \partial C(\beta) / \partial \beta_1 \) we can show that the gradient can be written as +$$ +\nabla_{\beta} C(\beta) = (\partial C(\beta) / \partial \beta_0, \partial C(\beta) / \partial \beta_1)^T = 2\begin{bmatrix} \sum_{i=1}^{100} \left(\beta_0+\beta_1x_i-y_i\right) \\ +\sum_{i=1}^{100}\left( x_i (\beta_0+\beta_1x_i)-y_ix_i\right) \\ +\end{bmatrix} = 2X^T(X\beta - \mathbf{y}), +$$ + +where \( X \) is the design matrix defined above.

    @@ -214,7 +244,7 @@ gave the lowest value.

  • 33
  • 34
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs025.html b/doc/pub/Splines/html/._Splines-bs025.html index 2568a5049..4ef788afe 100644 --- a/doc/pub/Splines/html/._Splines-bs025.html +++ b/doc/pub/Splines/html/._Splines-bs025.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,51 +206,17 @@ MathJax.Hub.Config({ -

    Slightly different approach

    +

    The Hessian matrix

    +The Hessian matrix of \( C(\beta) \) is given by +$$ +\hat{H} \equiv \begin{bmatrix} +\frac{\partial^2 C(\beta)}{\partial \beta_0^2} & \frac{\partial^2 C(\beta)}{\partial \beta_0 \partial \beta_1} \\ +\frac{\partial^2 C(\beta)}{\partial \beta_0 \partial \beta_1} & \frac{\partial^2 C(\beta)}{\partial \beta_1^2} & \\ +\end{bmatrix} = 2X^T X. +$$ -

    -Another approach is to let the step length \( \gamma_j \) depend on the -number of epochs in such a way that it becomes very small after a -reasonable time such that we do not move at all. +This result implies that \( C(\beta) \) is a convex function since the matrix \( X^T X \) always is positive semi-definite. -

    -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 \). - -

    -In this way we can fix the number of epochs, compute \( \beta \) and -evaluate the cost function at the end. Repeating the computation will -give a different result since the scheme is random by design. Then we -pick the final \( \beta \) that gives the lowest value of the cost -function. - -

    - - -

    import numpy as np 
    -
    -def step_length(t,t0,t1):
    -    return t0/(t+t1)
    -
    -n = 100 #100 datapoints 
    -M = 5   #size of each minibatch
    -m = int(n/M) #number of minibatches
    -n_epochs = 500 #number of epochs
    -t0 = 1.0
    -t1 = 10
    -
    -gamma_j = t0/t1
    -j = 0
    -for epoch in range(1,n_epochs+1):
    -    for i in range(m):
    -        k = np.random.randint(m) #Pick the k-th minibatch at random
    -        #Compute the gradient using the data in minibatch Bk
    -        #Compute new suggestion for beta
    -        t = epoch*m+i
    -        gamma_j = step_length(t,t0,t1)
    -        j += 1
    -
    -print("gamma_j after %d epochs: %g" % (n_epochs,gamma_j))
    -

    @@ -245,7 +243,7 @@ j = 0

  • 34
  • 35
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs026.html b/doc/pub/Splines/html/._Splines-bs026.html index 069443c14..cdd5ad290 100644 --- a/doc/pub/Splines/html/._Splines-bs026.html +++ b/doc/pub/Splines/html/._Splines-bs026.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,35 +206,44 @@ MathJax.Hub.Config({ -

    Conjugate gradient (CG) method

    -
    -
    -

    -The success of the CG method for finding solutions of non-linear problems is based -on the theory of conjugate gradients for linear systems of equations. It belongs -to the class of iterative methods for solving problems from linear algebra of the type -$$ -\begin{equation*} - \hat{A}\hat{x} = \hat{b}. -\end{equation*} -$$ - -In the iterative process we end up with a problem like - -$$ -\begin{equation*} - \hat{r}= \hat{b}-\hat{A}\hat{x}, -\end{equation*} -$$ - -where \( \hat{r} \) is the so-called residual or error in the iterative process. +

    Simple program

    -When we have found the exact solution, \( \hat{r}=0 \). -

    -
    +We can now write a program that minimizes \( C(\beta) \) using the gradient descent method with a constant learning rate \( \gamma \) according to +$$ +\beta_{k+1} = \beta_k - \gamma \nabla_\beta C(\beta_k), \ k=0,1,\cdots +$$ +

    +We can use the expression we computed for the gradient and let use a +\( \beta_0 \) be chosen randomly and let \( \gamma = 0.001 \). Stop iterating +when \( ||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8} \). +

    +And finally we can compare our solution for \( \beta \) with the analytic result given by +\( \beta= (X^TX)^{-1} X^T \mathbf{y} \). +

    + + +

    import numpy as np
    +
    +"""
    +The following setup is just a suggestion, feel free to write it the way you like.
    +"""
    +
    +#Setup problem described in the exercise
    +N  = 100 #Nr of datapoints
    +M  = 2 #Nr of features
    +x  = np.random.rand(N) #Uniformly generated x-values in [0,1]
    +y  = 5*x**2 + 0.1*np.random.randn(N)
    +X  = np.c_[np.ones(N),x] #Construct design matrix
    +
    +#Compute beta according to normal equations to compare with GD solution
    +Xt_X_inv = np.linalg.inv(np.dot(X.T,X))
    +Xt_y     = np.dot(X.transpose(),y)
    +beta_NE = np.dot(Xt_X_inv,Xt_y)
    +print(beta_NE)
    +

    @@ -229,7 +270,7 @@ When we have found the exact solution, \( \hat{r}=0 \).

  • 35
  • 36
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs027.html b/doc/pub/Splines/html/._Splines-bs027.html index faf2c87d5..aa168e923 100644 --- a/doc/pub/Splines/html/._Splines-bs027.html +++ b/doc/pub/Splines/html/._Splines-bs027.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,26 +206,52 @@ MathJax.Hub.Config({ -

    Conjugate gradient method

    -
    -
    -

    +

    Gradient Descent Example

    -The residual is zero when we reach the minimum of the quadratic equation -$$ -\begin{equation*} - P(\hat{x})=\frac{1}{2}\hat{x}^T\hat{A}\hat{x} - \hat{x}^T\hat{b}, -\end{equation*} -$$ +Another simple example is here +

    -with the constraint that the matrix \( \hat{A} \) is positive definite and symmetric. -If we search for a minimum of the quantum mechanical variance, then the matrix -\( \hat{A} \), which is called the Hessian, is given by the second-derivative of the function we want to minimize. This quantity is always positive definite. In our case this corresponds normally to the second derivative of the energy. -

    -
    + +
    # Importing various packages
    +from random import random, seed
    +import numpy as np
    +import matplotlib.pyplot as plt
    +from mpl_toolkits.mplot3d import Axes3D
    +from matplotlib import cm
    +from matplotlib.ticker import LinearLocator, FormatStrFormatter
    +import sys
     
    +x = 2*np.random.rand(100,1)
    +y = 4+3*x+np.random.randn(100,1)
     
    +xb = np.c_[np.ones((100,1)), x]
    +beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    +print(beta_linreg)
    +beta = np.random.randn(2,1)
    +
    +eta = 0.1
    +Niterations = 1000
    +m = 100
    +
    +for iter in range(Niterations):
    +    gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y)
    +    beta -= eta*gradients
    +
    +print(beta)
    +xnew = np.array([[0],[2]])
    +xbnew = np.c_[np.ones((2,1)), xnew]
    +ypredict = xbnew.dot(beta)
    +ypredict2 = xbnew.dot(beta_linreg)
    +plt.plot(xnew, ypredict, "r-")
    +plt.plot(xnew, ypredict2, "b-")
    +plt.plot(x, y ,'ro')
    +plt.axis([0,2.0,0, 15.0])
    +plt.xlabel(r'$x$')
    +plt.ylabel(r'$y$')
    +plt.title(r'Gradient descent example')
    +plt.show()
    +

    @@ -219,6 +277,8 @@ If we search for a minimum of the quantum mechanical variance, then the matrix

  • 35
  • 36
  • 37
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs028.html b/doc/pub/Splines/html/._Splines-bs028.html index b6e89d1b7..841560ab0 100644 --- a/doc/pub/Splines/html/._Splines-bs028.html +++ b/doc/pub/Splines/html/._Splines-bs028.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,29 +206,27 @@ MathJax.Hub.Config({ -

    Conjugate gradient method, Newton's method first

    -
    -
    -

    -We seek the minimum of the energy or the variance as function of various variational parameters. -In our case we have thus a function \( f \) whose minimum we are seeking. -In Newton's method we set \( \nabla f = 0 \) and we can thus compute the next iteration point -$$ -\begin{equation*} -\hat{x}-\hat{x}_i=\hat{A}^{-1}\nabla f(\hat{x}_i). -\end{equation*} -$$ +

    And a corresponding example using scikit-learn

    -Subtracting this equation from that of \( \hat{x}_{i+1} \) we have -$$ -\begin{equation*} -\hat{x}_{i+1}-\hat{x}_i=\hat{A}^{-1}(\nabla f(\hat{x}_{i+1})-\nabla f(\hat{x}_i)). -\end{equation*} -$$ -
    -
    +

    + +

    # Importing various packages
    +from random import random, seed
    +import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import SGDRegressor
     
    +x = 2*np.random.rand(100,1)
    +y = 4+3*x+np.random.randn(100,1)
    +
    +xb = np.c_[np.ones((100,1)), x]
    +beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    +print(beta_linreg)
    +sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)
    +sgdreg.fit(x,y.ravel())
    +print(sgdreg.intercept_, sgdreg.coef_)
    +

    @@ -221,6 +251,9 @@ $$

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs029.html b/doc/pub/Splines/html/._Splines-bs029.html index 7ea3b65e7..b7c1a94cf 100644 --- a/doc/pub/Splines/html/._Splines-bs029.html +++ b/doc/pub/Splines/html/._Splines-bs029.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -172,36 +204,62 @@ MathJax.Hub.Config({

     

     

     

    - + -

    Conjugate gradient method

    -
    -
    -

    -In the CG method we define so-called conjugate directions and two vectors -\( \hat{s} \) and \( \hat{t} \) -are said to be -conjugate if +

    Gradient descent and Ridge

    + +

    +We have also discussed Ridge regression where the loss function contains a regularized given by the \( L_2 \) norm of \( \beta \), $$ -\begin{equation*} -\hat{s}^T\hat{A}\hat{t}= 0. -\end{equation*} +C_{\text{ridge}}(\beta) = ||X\beta -\mathbf{y}||^2 + \lambda ||\beta||^2, \ \lambda \geq 0. $$ -The philosophy of the CG method is to perform searches in various conjugate directions -of our vectors \( \hat{x}_i \) obeying the above criterion, namely +

    +In order to minimize \( C_{\text{ridge}}(\beta) \) using GD we only have adjust the gradient as follows $$ -\begin{equation*} -\hat{x}_i^T\hat{A}\hat{x}_j= 0. -\end{equation*} +\nabla_\beta C_{\text{ridge}}(\beta) = 2\begin{bmatrix} \sum_{i=1}^{100} \left(\beta_0+\beta_1x_i-y_i\right) \\ +\sum_{i=1}^{100}\left( x_i (\beta_0+\beta_1x_i)-y_ix_i\right) \\ +\end{bmatrix} + 2\lambda\begin{bmatrix} \beta_0 \\ \beta_1\end{bmatrix} = 2 (X^T(X\beta - \mathbf{y})+\lambda \beta). $$ -Two vectors are conjugate if they are orthogonal with respect to -this inner product. Being conjugate is a symmetric relation: if \( \hat{s} \) is conjugate to \( \hat{t} \), then \( \hat{t} \) is conjugate to \( \hat{s} \). -

    -
    +

    +We can now extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by +$$ +\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}, +$$ + +for \( \lambda = {0,1,10,50,100} \) (\( \lambda = 0 \) corresponds to ordinary least squares). +We can then compute \( ||\beta_{\text{ridge}}|| \) for each \( \lambda \). + +

    + + +

    import numpy as np
    +
    +"""
    +The following setup is just a suggestion, feel free to write it the way you like.
    +"""
    +
    +#Setup problem described in the exercise
    +N  = 100 #Nr of datapoints
    +M  = 2   #Nr of features
    +x  = np.random.rand(N)
    +y  = 5*x**2 + 0.1*np.random.randn(N)
     
     
    +#Compute analytic beta for Ridge regression 
    +X    = np.c_[np.ones(N),x]
    +XT_X = np.dot(X.T,X)
    +
    +l  = 0.1 #Ridge parameter lambda
    +Id = np.eye(XT_X.shape[0])
    +
    +Z = np.linalg.inv(XT_X+l*Id)
    +beta_ridge = np.dot(Z,np.dot(X.T,y))
    +
    +print(beta_ridge)
    +print(np.linalg.norm(beta_ridge)) #||beta||
    +

    @@ -225,6 +283,10 @@ this inner product. Being conjugate is a symmetric relation: if \( \hat{s} \) is

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • 39
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs030.html b/doc/pub/Splines/html/._Splines-bs030.html index 03448fbfc..9273bfbd6 100644 --- a/doc/pub/Splines/html/._Splines-bs030.html +++ b/doc/pub/Splines/html/._Splines-bs030.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,21 +206,20 @@ MathJax.Hub.Config({ -

    Conjugate gradient method

    -
    -
    -

    -An example is given by the eigenvectors of the matrix -$$ -\begin{equation*} -\hat{v}_i^T\hat{A}\hat{v}_j= \lambda\hat{v}_i^T\hat{v}_j, -\end{equation*} -$$ +

    Stochastic Gradient Descent

    -which is zero unless \( i=j \). -
    -
    +

    +Stochastic gradient descent (SGD) and variants thereof address some of +the shortcomings of the Gradient descent method discussed above. +

    +The underlying idea of SGD comes from the observation that the cost +function, which we want to minimize, can almost always be written as a +sum over \( n \) data points \( \{\mathbf{x}_i\}_{i=1}^n \), +$$ +C(\mathbf{\beta}) = \sum_{i=1}^n c_i(\mathbf{x}_i, +\mathbf{\beta}). +$$

    @@ -212,6 +243,11 @@ which is zero unless \( i=j \).

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs031.html b/doc/pub/Splines/html/._Splines-bs031.html index 0237a96c7..66828afea 100644 --- a/doc/pub/Splines/html/._Splines-bs031.html +++ b/doc/pub/Splines/html/._Splines-bs031.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,30 +206,22 @@ MathJax.Hub.Config({ -

    Conjugate gradient method

    -
    -
    -

    -Assume now that we have a symmetric positive-definite matrix \( \hat{A} \) of size -\( n\times n \). At each iteration \( i+1 \) we obtain the conjugate direction of a vector +

    Computation of gradients

    + +

    +This in turn means that the gradient can be +computed as a sum over \( i \)-gradients $$ -\begin{equation*} -\hat{x}_{i+1}=\hat{x}_{i}+\alpha_i\hat{p}_{i}. -\end{equation*} +\nabla_\beta C(\mathbf{\beta}) = \sum_i^n \nabla_\beta c_i(\mathbf{x}_i, +\mathbf{\beta}). $$ -We assume that \( \hat{p}_{i} \) is a sequence of \( n \) mutually conjugate directions. -Then the \( \hat{p}_{i} \) form a basis of \( R^n \) and we can expand the solution -$ \hat{A}\hat{x} = \hat{b}$ in this basis, namely - -$$ -\begin{equation*} - \hat{x} = \sum^{n}_{i=1} \alpha_i \hat{p}_i. -\end{equation*} -$$ -

    -
    - +

    +Stochasticity/randomness is introduced by only taking the +gradient on a subset of the data called minibatches. If there are \( n \) +data points and the size of each minibatch is \( M \), there will be \( n/M \) +minibatches. We denote these minibatches by \( B_k \) where +\( k=1,\cdots,n/M \).

    @@ -220,6 +244,12 @@ $$

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs032.html b/doc/pub/Splines/html/._Splines-bs032.html index 0c101dce5..e93b4f710 100644 --- a/doc/pub/Splines/html/._Splines-bs032.html +++ b/doc/pub/Splines/html/._Splines-bs032.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,36 +206,27 @@ MathJax.Hub.Config({ -

    Conjugate gradient method

    -
    -
    -

    -The coefficients are given by -$$ -\begin{equation*} - \mathbf{A}\mathbf{x} = \sum^{n}_{i=1} \alpha_i \mathbf{A} \mathbf{p}_i = \mathbf{b}. -\end{equation*} -$$ - -Multiplying with \( \hat{p}_k^T \) from the left gives +

    SGD example

    +As an example, suppose we have \( 10 \) data points \( (\mathbf{x}_1,\cdots, \mathbf{x}_{10}) \) +and we choose to have \( M=5 \) minibathces, +then each minibatch contains two data points. In particular we have +\( B_1 = (\mathbf{x}_1,\mathbf{x}_2), \cdots, B_5 = +(\mathbf{x}_9,\mathbf{x}_{10}) \). Note that if you choose \( M=1 \) you +have only a single batch with all data points and on the other extreme, +you may choose \( M=n \) resulting in a minibatch for each datapoint, i.e +\( B_k = \mathbf{x}_k \). +

    +The idea is now to approximate the gradient by replacing the sum over +all data points with a sum over the data points in one the minibatches +picked at random in each gradient descent step $$ -\begin{equation*} - \hat{p}_k^T \hat{A}\hat{x} = \sum^{n}_{i=1} \alpha_i\hat{p}_k^T \hat{A}\hat{p}_i= \hat{p}_k^T \hat{b}, -\end{equation*} +\nabla_{\beta} +C(\mathbf{\beta}) = \sum_{i=1}^n \nabla_\beta c_i(\mathbf{x}_i, +\mathbf{\beta}) \rightarrow \sum_{i \in B_k}^n \nabla_\beta +c_i(\mathbf{x}_i, \mathbf{\beta}). $$ -and we can define the coefficients \( \alpha_k \) as - -$$ -\begin{equation*} - \alpha_k = \frac{\hat{p}_k^T \hat{b}}{\hat{p}_k^T \hat{A} \hat{p}_k} -\end{equation*} -$$ -

    -
    - -

    @@ -224,6 +247,13 @@ $$

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs033.html b/doc/pub/Splines/html/._Splines-bs033.html index ea7e4344b..88c682dbd 100644 --- a/doc/pub/Splines/html/._Splines-bs033.html +++ b/doc/pub/Splines/html/._Splines-bs033.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,39 +206,21 @@ MathJax.Hub.Config({ -

    Conjugate gradient method and iterations

    -
    -
    -

    +

    The gradient step

    -If we choose the conjugate vectors \( \hat{p}_k \) carefully, -then we may not need all of them to obtain a good approximation to the solution -\( \hat{x} \). -We want to regard the conjugate gradient method as an iterative method. -This will us to solve systems where \( n \) is so large that the direct -method would take too much time. +Thus a gradient descent step now looks like +$$ +\beta_{j+1} = \beta_j - \gamma_j \sum_{i \in B_k}^n \nabla_\beta c_i(\mathbf{x}_i, +\mathbf{\beta}) +$$

    -We denote the initial guess for \( \hat{x} \) as \( \hat{x}_0 \). -We can assume without loss of generality that -$$ -\begin{equation*} -\hat{x}_0=0, -\end{equation*} -$$ - -or consider the system -$$ -\begin{equation*} -\hat{A}\hat{z} = \hat{b}-\hat{A}\hat{x}_0, -\end{equation*} -$$ - -instead. -

    -
    - +where \( k \) is picked at random with equal +probability from \( [1,n/M] \). An iteration over the number of +minibathces (n/M) is commonly referred to as an epoch. Thus it is +typical to choose a number of epochs and for each epoch iterate over +the number of minibatches, as exemplified in the code below.

    @@ -227,6 +241,14 @@ instead.

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs034.html b/doc/pub/Splines/html/._Splines-bs034.html index f96293d33..9ea34b39c 100644 --- a/doc/pub/Splines/html/._Splines-bs034.html +++ b/doc/pub/Splines/html/._Splines-bs034.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,33 +206,34 @@ MathJax.Hub.Config({ -

    Conjugate gradient method

    -
    -
    -

    -One can show that the solution \( \hat{x} \) is also the unique minimizer of the quadratic form -$$ -\begin{equation*} - f(\hat{x}) = \frac{1}{2}\hat{x}^T\hat{A}\hat{x} - \hat{x}^T \hat{x} , \quad \hat{x}\in\mathbf{R}^n. -\end{equation*} -$$ +

    Simple example code

    -This suggests taking the first basis vector \( \hat{p}_1 \) -to be the gradient of \( f \) at \( \hat{x}=\hat{x}_0 \), -which equals -$$ -\begin{equation*} -\hat{A}\hat{x}_0-\hat{b}, -\end{equation*} -$$ +

    -and -\( \hat{x}_0=0 \) it is equal \( -\hat{b} \). -The other vectors in the basis will be conjugate to the gradient, -hence the name conjugate gradient method. -

    -
    + +
    import numpy as np 
     
    +n = 100 #100 datapoints 
    +M = 5   #size of each minibatch
    +m = int(n/M) #number of minibatches
    +n_epochs = 10 #number of epochs
    +
    +j = 0
    +for epoch in range(1,n_epochs+1):
    +    for i in range(m):
    +        k = np.random.randint(m) #Pick the k-th minibatch at random
    +        #Compute the gradient using the data in minibatch Bk
    +        #Compute new suggestion for 
    +        j += 1
    +
    +

    +Taking the gradient only on a subset of the data has two important +benefits. First, it introduces randomness which decreases the chance +that our opmization scheme gets stuck in a local minima. Second, if +the size of the minibatches are small relative to the number of +datapoints (\( M < n \)), the computation of the gradient is much +cheaper since we sum over the datapoints in the \( k-th \) minibatch and not +all \( n \) datapoints.

    @@ -220,6 +253,15 @@ hence the name conjugate gradient method.

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs035.html b/doc/pub/Splines/html/._Splines-bs035.html index 63617ce8f..3728b6100 100644 --- a/doc/pub/Splines/html/._Splines-bs035.html +++ b/doc/pub/Splines/html/._Splines-bs035.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,32 +206,19 @@ MathJax.Hub.Config({ -

    Conjugate gradient method

    -
    -
    -

    -Let \( \hat{r}_k \) be the residual at the \( k \)-th step: -$$ -\begin{equation*} -\hat{r}_k=\hat{b}-\hat{A}\hat{x}_k. -\end{equation*} -$$ - -Note that \( \hat{r}_k \) is the negative gradient of \( f \) at -\( \hat{x}=\hat{x}_k \), -so the gradient descent method would be to move in the direction \( \hat{r}_k \). -Here, we insist that the directions \( \hat{p}_k \) are conjugate to each other, -so we take the direction closest to the gradient \( \hat{r}_k \) -under the conjugacy constraint. -This gives the following expression -$$ -\begin{equation*} -\hat{p}_{k+1}=\hat{r}_k-\frac{\hat{p}_k^T \hat{A}\hat{r}_k}{\hat{p}_k^T\hat{A}\hat{p}_k} \hat{p}_k. -\end{equation*} -$$ -

    -
    +

    When do we stop?

    +

    +A natural question is when do we stop the search for a new minimum? +One possibility is to compute the full gradient after a given number +of epochs and check if the norm of the gradient is smaller than some +threshold and stop if true. However, the condition that the gradient +is zero is valid also for local minima, so this would only tell us +that we are close to a local/global minimum. However, we could also +evaluate the cost function at this point, store the result and +continue the search. If the test kicks in at a later stage we can +compare the values of the cost function and keep the \( \beta \) that +gave the lowest value.

    @@ -218,6 +237,16 @@ $$

  • 35
  • 36
  • 37
  • +
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • 45
  • +
  • ...
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs036.html b/doc/pub/Splines/html/._Splines-bs036.html index 93e47979b..1b3b69564 100644 --- a/doc/pub/Splines/html/._Splines-bs036.html +++ b/doc/pub/Splines/html/._Splines-bs036.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -174,44 +206,52 @@ MathJax.Hub.Config({ -

    Conjugate gradient method

    -
    -
    -

    -We can also compute the residual iteratively as -$$ -\begin{equation*} -\hat{r}_{k+1}=\hat{b}-\hat{A}\hat{x}_{k+1}, - \end{equation*} -$$ +

    Slightly different approach

    -which equals -$$ -\begin{equation*} -\hat{b}-\hat{A}(\hat{x}_k+\alpha_k\hat{p}_k), - \end{equation*} -$$ +

    +Another approach is to let the step length \( \gamma_j \) depend on the +number of epochs in such a way that it becomes very small after a +reasonable time such that we do not move at all. -or -$$ -\begin{equation*} -(\hat{b}-\hat{A}\hat{x}_k)-\alpha_k\hat{A}\hat{p}_k, - \end{equation*} -$$ - -which gives - -$$ -\begin{equation*} -\hat{r}_{k+1}=\hat{r}_k-\hat{A}\hat{p}_{k}, - \end{equation*} -$$ -

    -
    +

    +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 \). +

    +In this way we can fix the number of epochs, compute \( \beta \) and +evaluate the cost function at the end. Repeating the computation will +give a different result since the scheme is random by design. Then we +pick the final \( \beta \) that gives the lowest value of the cost +function.

    + +

    import numpy as np 
    +
    +def step_length(t,t0,t1):
    +    return t0/(t+t1)
    +
    +n = 100 #100 datapoints 
    +M = 5   #size of each minibatch
    +m = int(n/M) #number of minibatches
    +n_epochs = 500 #number of epochs
    +t0 = 1.0
    +t1 = 10
    +
    +gamma_j = t0/t1
    +j = 0
    +for epoch in range(1,n_epochs+1):
    +    for i in range(m):
    +        k = np.random.randint(m) #Pick the k-th minibatch at random
    +        #Compute the gradient using the data in minibatch Bk
    +        #Compute new suggestion for beta
    +        t = epoch*m+i
    +        gamma_j = step_length(t,t0,t1)
    +        j += 1
    +
    +print("gamma_j after %d epochs: %g" % (n_epochs,gamma_j))
    +
    +

    diff --git a/doc/pub/Splines/html/Splines-bs.html b/doc/pub/Splines/html/Splines-bs.html index e3f254239..f8494c29a 100644 --- a/doc/pub/Splines/html/Splines-bs.html +++ b/doc/pub/Splines/html/Splines-bs.html @@ -45,47 +45,68 @@ Automatically generated HTML file from DocOnce source 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -124,41 +145,52 @@ MathJax.Hub.Config({ Contents @@ -193,7 +225,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 21, 2018

    +

    Sep 27, 2018


    @@ -217,7 +249,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 37
  • +
  • 48
  • »
  • diff --git a/doc/pub/Splines/html/Splines-reveal.html b/doc/pub/Splines/html/Splines-reveal.html index 53afa7c72..b63f29483 100644 --- a/doc/pub/Splines/html/Splines-reveal.html +++ b/doc/pub/Splines/html/Splines-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    Sep 21, 2018

    +

    Sep 27, 2018


    @@ -174,7 +174,237 @@ some approximative/numerical method to compute the minimum.

    -

    Steepest descent

    +

    Revisiting our Logistic Regression case

    + +

    +In our discussion on Logistic Regression we defined we studied first the +case of +two classes, with \( y_i \) either +\( 0 \) or \( 1 \). Furthermore we assumed also that we have only two +parameters \( \beta \) in our fitting of the Sigmoid function, that is we +defined probabilities + +

     
    +$$ +\begin{align*} +p(y_i=1|x_i,\hat{\beta}) &= \frac{\exp{(\beta_0+\beta_1x_i)}}{1+\exp{(\beta_0+\beta_1x_i)}},\nonumber\\ +p(y_i=0|x_i,\hat{\beta}) &= 1 - p(y_i=1|x_i,\hat{\beta}), +\end{align*} +$$ +

     
    + +where \( \hat{\beta} \) are the weights we wish to extract from data, in our case \( \beta_0 \) and \( \beta_1 \). +

    + + +
    +

    The equations to solve

    + +

    +Our compact equations used a definition of a vector \( \hat{y} \) with \( n \) +elements \( y_i \), an \( n\times p \) matrix \( \hat{X} \) which contains the +\( x_i \) values and a vector \( \hat{p} \) of fitted probabilities +\( p(y_i\vert x_i,\hat{\beta}) \). We rewrote in a more compact form +the first derivative of the cost function as + +

     
    +$$ +\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}} = -\hat{X}^T\left(\hat{y}-\hat{p}\right). +$$ +

     
    + +

    +If we in addition define a diagonal matrix \( \hat{W} \) with elements +\( p(y_i\vert x_i,\hat{\beta})(1-p(y_i\vert x_i,\hat{\beta}) \), we can obtain a compact expression of the second derivative as + +

     
    +$$ +\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T} = \hat{X}^T\hat{W}\hat{X}. +$$ +

     
    + +This defines what we call the Hessian. +

    + + +
    +

    Solving using Newton-Raphson's method

    + +

    +If we can set up these equations, Newton-Raphson's iterative method is the nomrally the method of choice. It requires however that we setting the matrices that define the first and second derivatives. + +

    +Our iterative scheme is then given by + +

     
    +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T}\right)^{-1}\times \left(\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}}\right)_{\hat{\beta}^{\mathrm{old}}}, +$$ +

     
    + +or in matrix form as + +

     
    +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\hat{X}^T\hat{W}\hat{X} \right)^{-1}\times \left(-\hat{X}^T(\hat{y}-\hat{p}) \right)_{\hat{\beta}^{\mathrm{old}}}. +$$ +

     
    + +The right-hand side is computed with the old values of \( \beta \). + +

    +If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement. +

    + + +
    +

    Brief reminder on Newton-Raphson's method

    + +

    +Let us quicly remind ourselves how we derive the above method. + +

    +Perhaps the most celebrated of all one-dimensional root-finding +routines is Newton's method, also called the Newton-Raphson +method. This method is distinguished from the previously discussed +methods by the fact that it requires the evaluation of both the +function \( f \) and its derivative \( f' \) at arbitrary points. In this +sense, it is taylored to cases with e.g., transcendental equations. +If you can only calculate the derivative +numerically and/or your function is not of the smooth type, we +discourage the use of this method. +

    + + +
    +

    The equations

    + +

    +The Newton-Raphson formula consists geometrically of extending the +tangent line at a current point until it crosses zero, then setting +the next guess to the abscissa of that zero-crossing. The mathematics +behind this method is rather simple. Employing a Taylor expansion for +\( x \) sufficiently close to the solution \( s \), we have + +

     
    +$$ + f(s)=0=f(x)+(s-x)f'(x)+\frac{(s-x)^2}{2}f''(x) +\dots. + \tag{1} +$$ +

     
    + +

    +For small enough values of the function and for well-behaved +functions, the terms beyond linear are unimportant, hence we obtain + +

     
    +$$ + f(x)+(s-x)f'(x)\approx 0, +$$ +

     
    + +yielding +

     
    +$$ + s\approx x-\frac{f(x)}{f'(x)}. +$$ +

     
    + +

    +Having in mind an iterative procedure, it is natural to start iterating with +

     
    +$$ + x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}. +$$ +

     
    +

    + + +
    +

    Simple geometric interpretation

    + +

    +The above is Newton-Raphson's method. It has a simple geometric +interpretation, namely \( x_{n+1} \) is the point where the tangent from +\( (x_n,f(x_n)) \) crosses the $x-$axis. Close to the solution, +Newton-Raphson converges fast to the desired result. However, if we +are far from a root, where the higher-order terms in the series are +important, the Newton-Raphson formula can give grossly inaccurate +results. For instance, the initial guess for the root might be so far +from the true root as to let the search interval include a local +maximum or minimum of the function. If an iteration places a trial +guess near such a local extremum, so that the first derivative nearly +vanishes, then Newton-Raphson may fail totally +

    + + +
    +

    Extending to more than one variable

    + +

    +Newton's method can be generalized to systems of several non-linear equations +and variables. Consider the case with two equations +

     
    +$$ + \begin{array}{cc} f_1(x_1,x_2) &=0\\ + f_2(x_1,x_2) &=0\end{array}, +$$ +

     
    + +which we Taylor expand to obtain + +

     
    +$$ + \begin{array}{cc} 0=f_1(x_1+h_1,x_2+h_2)=&f_1(x_1,x_2)+h_1 + \partial f_1/\partial x_1+h_2 + \partial f_1/\partial x_2+\dots\\ + 0=f_2(x_1+h_1,x_2+h_2)=&f_2(x_1,x_2)+h_1 + \partial f_2/\partial x_1+h_2 + \partial f_2/\partial x_2+\dots + \end{array}. +$$ +

     
    + +Defining the Jacobian matrix \( {\bf \hat{J}} \) we have +

     
    +$$ + {\bf \hat{J}}=\left( \begin{array}{cc} + \partial f_1/\partial x_1 & \partial f_1/\partial x_2 \\ + \partial f_2/\partial x_1 &\partial f_2/\partial x_2 + \end{array} \right), +$$ +

     
    + +we can rephrase Newton's method as +

     
    +$$ +\left(\begin{array}{c} x_1^{n+1} \\ x_2^{n+1} \end{array} \right)= +\left(\begin{array}{c} x_1^{n} \\ x_2^{n} \end{array} \right)+ +\left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right), +$$ +

     
    + +where we have defined +

     
    +$$ + \left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right)= + -{\bf \hat{J}}^{-1} + \left(\begin{array}{c} f_1(x_1^{n},x_2^{n}) \\ f_2(x_1^{n},x_2^{n}) \end{array} \right). +$$ +

     
    + +We need thus to compute the inverse of the Jacobian matrix and it +is to understand that difficulties may +arise in case \( {\bf \hat{J}} \) is nearly singular. + +

    +It is rather straightforward to extend the above scheme to systems of +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. +

    + + +
    +

    Steepest descent

    The method of steepest descent The basic idea of gradient descent is @@ -200,7 +430,7 @@ we are always moving towards smaller function values, i.e a minimum.

    -

    More on Steepest descent

    +

    More on Steepest descent

    The previous observation is the basis of the method of steepest @@ -221,7 +451,7 @@ the learning rate within the context of Machine Learning.

    -

    The ideal

    +

    The ideal

    Ideally the sequence \( \{\mathbf{x}_k \}_{k=0} \) converges to a global @@ -247,7 +477,7 @@ Note that the gradient is a function of \( \mathbf{x} =

    -

    The sensitiveness of the gradient descent

    +

    The sensitiveness of the gradient descent

    The gradient descent method @@ -266,7 +496,7 @@ randomness. One such method is that of Stochastic Gradient Descent

    -

    Convex functions

    +

    Convex functions

    Ideally we want our cost/loss function to be convex(concave). @@ -286,7 +516,7 @@ regular polygons (triangles, rectangles, pentagons, etc...).

    -

    Convex function

    +

    Convex function

    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

     
    @@ -296,7 +526,7 @@ $$f(tx_1 + (1-t)x_2) \leq tf(x_1) + (1-t)f(x_2) $$

    -

    Conditions on convex functions

    +

    Conditions on convex functions

    In the following we state first and second-order conditions which @@ -338,7 +568,7 @@ This condition is particularly useful since it gives us an procedure for determi

    -

    More on convex functions

    +

    More on convex functions

    The next result is of great importance to us and the reason why we are @@ -367,7 +597,7 @@ This result means that if we know that the cost/loss function is convex and we a

    -

    Some simple problems

    +

    Some simple problems

    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$.
    2. @@ -394,7 +624,146 @@ Using the definition of convexity, try to show that a function satisfying the pr
      -

      Revisiting our first homework

      +

      Standard steepest descent

      + +

      +Before we proceed, we would like to mention the approach called the standard Steepest descent, which again leads to us having to be able to compute a matrix. + +

      +The success of the CG method +for finding solutions of non-linear problems is based on the theory +of conjugate gradients for linear systems of equations. It belongs to +the class of iterative methods for solving problems from linear +algebra of the type +

       
      +$$ +\begin{equation*} +\hat{A}\hat{x} = \hat{b}. +\end{equation*} +$$ +

       
      + +

      +In the iterative process we end up with a problem like + +

       
      +$$ +\begin{equation*} + \hat{r}= \hat{b}-\hat{A}\hat{x}, +\end{equation*} +$$ +

       
      + +where \( \hat{r} \) is the so-called residual or error in the iterative process. + +

      +When we have found the exact solution, \( \hat{r}=0 \). +

      + + +
      +

      Conjugate gradient method

      + +

      +The residual is zero when we reach the minimum of the quadratic equation +

       
      +$$ +\begin{equation*} + P(\hat{x})=\frac{1}{2}\hat{x}^T\hat{A}\hat{x} - \hat{x}^T\hat{b}, +\end{equation*} +$$ +

       
      + +

      +with the constraint that the matrix \( \hat{A} \) is positive definite and +symmetric. If we search for a minimum of the quantum mechanical +variance, then the matrix \( \hat{A} \), which is called the Hessian, is +given by the second-derivative of the function we want to minimize. +This quantity is always positive definite. + +

      +More details will be added here soon. +

      + + +
      +

      Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come

      +
      + +

      + + +

      #include <cmath>
      +#include <iostream>
      +#include <fstream>
      +#include <iomanip>
      +#include "vectormatrixclass.h"
      +using namespace  std;
      +//   Main function begins here
      +int main(int  argc, char * argv[]){
      +  int dim = 2;
      +  Vector x(dim),xsd(dim), b(dim),x0(dim);
      +  Matrix A(dim,dim);
      +
      +  // Set our initial guess
      +  x0(0) = x0(1) = 0;
      +  // Set the matrix
      +  A(0,0) =  3;    A(1,0) =  2;   A(0,1) =  2;   A(1,1) =  6;
      +  b(0) = 2; b(1) = -8;
      +  cout << "The Matrix A that we are using: " << endl;
      +  A.Print();
      +  cout << endl;
      +  x = ConjugateGradient(A,b,x0);
      +  xsd = SteepestDescent(A,b,x0);
      +  cout << "The approximate solution using Conjugate Gradient is: " << endl;
      +  x.Print();
      +  cout << endl;
      +  cout << "The approximate solution using Steepest Descent is: " << endl;
      +  xsd.Print();
      +  cout << endl;
      +}
      +
      + +
      +
      + + +
      +

      The routine for the steepest descent method

      +
      + +

      + + +

      Vector SteepestDescent(Matrix A, Vector b, Vector x0){
      +  int IterMax, i;
      +  int dim = x0.Dimension();
      +  const double tolerance = 1.0e-14;
      +  Vector x(dim),f(dim),z(dim);
      +  double c,alpha,d;
      +  IterMax = 30;
      +  x = x0;
      +  f = A*x-b;
      +  i = 0;
      +  while (i <= IterMax){
      +    z = A*f;
      +    c = dot(f,f);
      +    alpha = c/dot(f,z);
      +    x = x - alpha*f;
      +    f =  A*x-b;
      +    if(sqrt(dot(f,f)) < tolerance) break;
      +    i++;
      +  }
      +  return x;
      +}
      +
      + +
      +
      + + +
      +

      Revisiting our first homework

      We will use linear regression as a case study for the gradient descent @@ -434,7 +803,7 @@ $$

      -

      Gradient descent example

      +

      Gradient descent example

      Let \( \mathbf{y} = (y_1,\cdots,y_n)^T \), \( \mathbf{\hat{y}} = (\hat{y}_1,\cdots,\hat{y}_n)^T \) and \( \beta = (\beta_0, \beta_1)^T \) @@ -463,7 +832,7 @@ and we want to find \( \beta \) such that \( C(\beta) \) is minimized.

      -

      The derivative of the cost/loss function

      +

      The derivative of the cost/loss function

      Computing \( \partial C(\beta) / \partial \beta_0 \) and \( \partial C(\beta) / \partial \beta_1 \) we can show that the gradient can be written as @@ -480,7 +849,7 @@ where \( X \) is the design matrix defined above.

      -

      The Hessian matrix

      +

      The Hessian matrix

      The Hessian matrix of \( C(\beta) \) is given by

       
      $$ @@ -496,7 +865,7 @@ This result implies that \( C(\beta) \) is a convex function since the matrix \(

      -

      Simple program

      +

      Simple program

      We can now write a program that minimizes \( C(\beta) \) using the gradient descent method with a constant learning rate \( \gamma \) according to @@ -540,7 +909,7 @@ beta_NE = np.dot(Xt_X_inv,Xt_y)

      -

      Gradient Descent Example

      +

      Gradient Descent Example

      Another simple example is here @@ -590,7 +959,7 @@ plt.show()

      -

      And a corresponding example using scikit-learn

      +

      And a corresponding example using scikit-learn

      @@ -615,7 +984,7 @@ sgdreg.fit(x,y.ravel())

      -

      Gradient descent and Ridge

      +

      Gradient descent and Ridge

      We have also discussed Ridge regression where the loss function contains a regularized given by the \( L_2 \) norm of \( \beta \), @@ -679,7 +1048,7 @@ beta_ridge = np.dot(Z,np.dot(X.T,y))

      -

      Stochastic Gradient Descent

      +

      Stochastic Gradient Descent

      Stochastic gradient descent (SGD) and variants thereof address some of @@ -699,7 +1068,7 @@ $$

      -

      Computation of gradients

      +

      Computation of gradients

      This in turn means that the gradient can be @@ -721,7 +1090,7 @@ minibatches. We denote these minibatches by \( B_k \) where

      -

      SGD example

      +

      SGD example

      As an example, suppose we have \( 10 \) data points \( (\mathbf{x}_1,\cdots, \mathbf{x}_{10}) \) and we choose to have \( M=5 \) minibathces, then each minibatch contains two data points. In particular we have @@ -747,7 +1116,7 @@ $$
      -

      The gradient step

      +

      The gradient step

      Thus a gradient descent step now looks like @@ -768,7 +1137,7 @@ the number of minibatches, as exemplified in the code below.

      -

      Simple example code

      +

      Simple example code

      @@ -800,7 +1169,7 @@ all \( n \) datapoints.

      -

      When do we stop?

      +

      When do we stop?

      A natural question is when do we stop the search for a new minimum? @@ -817,7 +1186,7 @@ gave the lowest value.

      -

      Slightly different approach

      +

      Slightly different approach

      Another approach is to let the step length \( \gamma_j \) depend on the @@ -868,7 +1237,7 @@ j = 0

      -

      Conjugate gradient (CG) method

      +

      Conjugate gradient (CG) method

      @@ -902,7 +1271,7 @@ When we have found the exact solution, \( \hat{r}=0 \).

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      @@ -923,7 +1292,7 @@ If we search for a minimum of the quantum mechanical variance, then the matrix

      -

      Conjugate gradient method, Newton's method first

      +

      Conjugate gradient method, Newton's method first

      @@ -951,7 +1320,7 @@ $$

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      @@ -984,7 +1353,7 @@ this inner product. Being conjugate is a symmetric relation: if \( \hat{s} \) is

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      @@ -1003,7 +1372,7 @@ which is zero unless \( i=j \).

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      @@ -1033,7 +1402,7 @@ $$

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      @@ -1070,7 +1439,7 @@ $$

      -

      Conjugate gradient method and iterations

      +

      Conjugate gradient method and iterations

      @@ -1107,7 +1476,7 @@ instead.

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      @@ -1140,7 +1509,7 @@ hence the name conjugate gradient method.

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      @@ -1172,7 +1541,7 @@ $$

      -

      Conjugate gradient method

      +

      Conjugate gradient method

      diff --git a/doc/pub/Splines/html/Splines-solarized.html b/doc/pub/Splines/html/Splines-solarized.html index 752bc03f2..b342a25ff 100644 --- a/doc/pub/Splines/html/Splines-solarized.html +++ b/doc/pub/Splines/html/Splines-solarized.html @@ -65,47 +65,68 @@ div { text-align: justify; text-justify: inter-word; } 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -147,7 +168,7 @@ MathJax.Hub.Config({

      [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

      -

      Sep 21, 2018

      +

      Sep 27, 2018












      @@ -167,7 +188,209 @@ some approximative/numerical method to compute the minimum.











      -

      Steepest descent

      +

      Revisiting our Logistic Regression case

      + +

      +In our discussion on Logistic Regression we defined we studied first the +case of +two classes, with \( y_i \) either +\( 0 \) or \( 1 \). Furthermore we assumed also that we have only two +parameters \( \beta \) in our fitting of the Sigmoid function, that is we +defined probabilities + +$$ +\begin{align*} +p(y_i=1|x_i,\hat{\beta}) &= \frac{\exp{(\beta_0+\beta_1x_i)}}{1+\exp{(\beta_0+\beta_1x_i)}},\nonumber\\ +p(y_i=0|x_i,\hat{\beta}) &= 1 - p(y_i=1|x_i,\hat{\beta}), +\end{align*} +$$ + +where \( \hat{\beta} \) are the weights we wish to extract from data, in our case \( \beta_0 \) and \( \beta_1 \). + +

      +









      + +

      The equations to solve

      + +

      +Our compact equations used a definition of a vector \( \hat{y} \) with \( n \) +elements \( y_i \), an \( n\times p \) matrix \( \hat{X} \) which contains the +\( x_i \) values and a vector \( \hat{p} \) of fitted probabilities +\( p(y_i\vert x_i,\hat{\beta}) \). We rewrote in a more compact form +the first derivative of the cost function as + +$$ +\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}} = -\hat{X}^T\left(\hat{y}-\hat{p}\right). +$$ + +

      +If we in addition define a diagonal matrix \( \hat{W} \) with elements +\( p(y_i\vert x_i,\hat{\beta})(1-p(y_i\vert x_i,\hat{\beta}) \), we can obtain a compact expression of the second derivative as + +$$ +\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T} = \hat{X}^T\hat{W}\hat{X}. +$$ + +This defines what we call the Hessian. + +

      +









      + +

      Solving using Newton-Raphson's method

      + +

      +If we can set up these equations, Newton-Raphson's iterative method is the nomrally the method of choice. It requires however that we setting the matrices that define the first and second derivatives. + +

      +Our iterative scheme is then given by + +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T}\right)^{-1}\times \left(\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}}\right)_{\hat{\beta}^{\mathrm{old}}}, +$$ + +or in matrix form as + +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\hat{X}^T\hat{W}\hat{X} \right)^{-1}\times \left(-\hat{X}^T(\hat{y}-\hat{p}) \right)_{\hat{\beta}^{\mathrm{old}}}. +$$ + +The right-hand side is computed with the old values of \( \beta \). + +

      +If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement. + +

      +









      + +

      Brief reminder on Newton-Raphson's method

      + +

      +Let us quicly remind ourselves how we derive the above method. + +

      +Perhaps the most celebrated of all one-dimensional root-finding +routines is Newton's method, also called the Newton-Raphson +method. This method is distinguished from the previously discussed +methods by the fact that it requires the evaluation of both the +function \( f \) and its derivative \( f' \) at arbitrary points. In this +sense, it is taylored to cases with e.g., transcendental equations. +If you can only calculate the derivative +numerically and/or your function is not of the smooth type, we +discourage the use of this method. + +

      +









      + +

      The equations

      + +

      +The Newton-Raphson formula consists geometrically of extending the +tangent line at a current point until it crosses zero, then setting +the next guess to the abscissa of that zero-crossing. The mathematics +behind this method is rather simple. Employing a Taylor expansion for +\( x \) sufficiently close to the solution \( s \), we have + +$$ + f(s)=0=f(x)+(s-x)f'(x)+\frac{(s-x)^2}{2}f''(x) +\dots. + \label{eq:taylornr} +$$ + +

      +For small enough values of the function and for well-behaved +functions, the terms beyond linear are unimportant, hence we obtain + +$$ + f(x)+(s-x)f'(x)\approx 0, +$$ + +yielding +$$ + s\approx x-\frac{f(x)}{f'(x)}. +$$ + +

      +Having in mind an iterative procedure, it is natural to start iterating with +$$ + x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}. +$$ + +

      +









      + +

      Simple geometric interpretation

      + +

      +The above is Newton-Raphson's method. It has a simple geometric +interpretation, namely \( x_{n+1} \) is the point where the tangent from +\( (x_n,f(x_n)) \) crosses the $x-$axis. Close to the solution, +Newton-Raphson converges fast to the desired result. However, if we +are far from a root, where the higher-order terms in the series are +important, the Newton-Raphson formula can give grossly inaccurate +results. For instance, the initial guess for the root might be so far +from the true root as to let the search interval include a local +maximum or minimum of the function. If an iteration places a trial +guess near such a local extremum, so that the first derivative nearly +vanishes, then Newton-Raphson may fail totally + +

      +









      + +

      Extending to more than one variable

      + +

      +Newton's method can be generalized to systems of several non-linear equations +and variables. Consider the case with two equations +$$ + \begin{array}{cc} f_1(x_1,x_2) &=0\\ + f_2(x_1,x_2) &=0\end{array}, +$$ + +which we Taylor expand to obtain + +$$ + \begin{array}{cc} 0=f_1(x_1+h_1,x_2+h_2)=&f_1(x_1,x_2)+h_1 + \partial f_1/\partial x_1+h_2 + \partial f_1/\partial x_2+\dots\\ + 0=f_2(x_1+h_1,x_2+h_2)=&f_2(x_1,x_2)+h_1 + \partial f_2/\partial x_1+h_2 + \partial f_2/\partial x_2+\dots + \end{array}. +$$ + +Defining the Jacobian matrix \( {\bf \hat{J}} \) we have +$$ + {\bf \hat{J}}=\left( \begin{array}{cc} + \partial f_1/\partial x_1 & \partial f_1/\partial x_2 \\ + \partial f_2/\partial x_1 &\partial f_2/\partial x_2 + \end{array} \right), +$$ + +we can rephrase Newton's method as +$$ +\left(\begin{array}{c} x_1^{n+1} \\ x_2^{n+1} \end{array} \right)= +\left(\begin{array}{c} x_1^{n} \\ x_2^{n} \end{array} \right)+ +\left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right), +$$ + +where we have defined +$$ + \left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right)= + -{\bf \hat{J}}^{-1} + \left(\begin{array}{c} f_1(x_1^{n},x_2^{n}) \\ f_2(x_1^{n},x_2^{n}) \end{array} \right). +$$ + +We need thus to compute the inverse of the Jacobian matrix and it +is to understand that difficulties may +arise in case \( {\bf \hat{J}} \) is nearly singular. + +

      +It is rather straightforward to extend the above scheme to systems of +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. + +

      +









      + +

      Steepest descent

      The method of steepest descent The basic idea of gradient descent is @@ -191,7 +414,7 @@ we are always moving towards smaller function values, i.e a minimum.

      -

      More on Steepest descent

      +

      More on Steepest descent

      The previous observation is the basis of the method of steepest @@ -210,7 +433,7 @@ the learning rate within the context of Machine Learning.

      -

      The ideal

      +

      The ideal

      Ideally the sequence \( \{\mathbf{x}_k \}_{k=0} \) converges to a global @@ -236,7 +459,7 @@ Note that the gradient is a function of \( \mathbf{x} =

      -

      The sensitiveness of the gradient descent

      +

      The sensitiveness of the gradient descent

      The gradient descent method @@ -255,7 +478,7 @@ randomness. One such method is that of Stochastic Gradient Descent

      -

      Convex functions

      +

      Convex functions

      Ideally we want our cost/loss function to be convex(concave). @@ -275,7 +498,7 @@ regular polygons (triangles, rectangles, pentagons, etc...).











      -

      Convex function

      +

      Convex function

      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. @@ -283,7 +506,7 @@ regular polygons (triangles, rectangles, pentagons, etc...).











      -

      Conditions on convex functions

      +

      Conditions on convex functions

      In the following we state first and second-order conditions which @@ -325,7 +548,7 @@ This condition is particularly useful since it gives us an procedure for determi











      -

      More on convex functions

      +

      More on convex functions

      The next result is of great importance to us and the reason why we are @@ -355,7 +578,7 @@ This result means that if we know that the cost/loss function is convex and we a











      -

      Some simple problems

      +

      Some simple problems

      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$.
      2. @@ -379,10 +602,147 @@ This result means that if we know that the cost/loss function is convex and we a 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). +

        +









        + +

        Standard steepest descent

        + +

        +Before we proceed, we would like to mention the approach called the standard Steepest descent, which again leads to us having to be able to compute a matrix. + +

        +The success of the CG method +for finding solutions of non-linear problems is based on the theory +of conjugate gradients for linear systems of equations. It belongs to +the class of iterative methods for solving problems from linear +algebra of the type +$$ +\begin{equation*} +\hat{A}\hat{x} = \hat{b}. +\end{equation*} +$$ + +

        +In the iterative process we end up with a problem like + +$$ +\begin{equation*} + \hat{r}= \hat{b}-\hat{A}\hat{x}, +\end{equation*} +$$ + +where \( \hat{r} \) is the so-called residual or error in the iterative process. + +

        +When we have found the exact solution, \( \hat{r}=0 \). + +

        +









        + +

        Conjugate gradient method

        + +

        +The residual is zero when we reach the minimum of the quadratic equation +$$ +\begin{equation*} + P(\hat{x})=\frac{1}{2}\hat{x}^T\hat{A}\hat{x} - \hat{x}^T\hat{b}, +\end{equation*} +$$ + +

        +with the constraint that the matrix \( \hat{A} \) is positive definite and +symmetric. If we search for a minimum of the quantum mechanical +variance, then the matrix \( \hat{A} \), which is called the Hessian, is +given by the second-derivative of the function we want to minimize. +This quantity is always positive definite. + +

        +More details will be added here soon. + +

        +









        + +

        Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come

        +
        + +

        +

        + + +

        #include <cmath>
        +#include <iostream>
        +#include <fstream>
        +#include <iomanip>
        +#include "vectormatrixclass.h"
        +using namespace  std;
        +//   Main function begins here
        +int main(int  argc, char * argv[]){
        +  int dim = 2;
        +  Vector x(dim),xsd(dim), b(dim),x0(dim);
        +  Matrix A(dim,dim);
        +
        +  // Set our initial guess
        +  x0(0) = x0(1) = 0;
        +  // Set the matrix
        +  A(0,0) =  3;    A(1,0) =  2;   A(0,1) =  2;   A(1,1) =  6;
        +  b(0) = 2; b(1) = -8;
        +  cout << "The Matrix A that we are using: " << endl;
        +  A.Print();
        +  cout << endl;
        +  x = ConjugateGradient(A,b,x0);
        +  xsd = SteepestDescent(A,b,x0);
        +  cout << "The approximate solution using Conjugate Gradient is: " << endl;
        +  x.Print();
        +  cout << endl;
        +  cout << "The approximate solution using Steepest Descent is: " << endl;
        +  xsd.Print();
        +  cout << endl;
        +}
        +
        + +
        + + +

        +









        + +

        The routine for the steepest descent method

        +
        + +

        +

        + + +

        Vector SteepestDescent(Matrix A, Vector b, Vector x0){
        +  int IterMax, i;
        +  int dim = x0.Dimension();
        +  const double tolerance = 1.0e-14;
        +  Vector x(dim),f(dim),z(dim);
        +  double c,alpha,d;
        +  IterMax = 30;
        +  x = x0;
        +  f = A*x-b;
        +  i = 0;
        +  while (i <= IterMax){
        +    z = A*f;
        +    c = dot(f,f);
        +    alpha = c/dot(f,z);
        +    x = x - alpha*f;
        +    f =  A*x-b;
        +    if(sqrt(dot(f,f)) < tolerance) break;
        +    i++;
        +  }
        +  return x;
        +}
        +
        + +
        + +

        -

        Revisiting our first homework

        +

        Revisiting our first homework

        We will use linear regression as a case study for the gradient descent @@ -415,7 +775,7 @@ $$

        -

        Gradient descent example

        +

        Gradient descent example

        Let \( \mathbf{y} = (y_1,\cdots,y_n)^T \), \( \mathbf{\hat{y}} = (\hat{y}_1,\cdots,\hat{y}_n)^T \) and \( \beta = (\beta_0, \beta_1)^T \) @@ -440,7 +800,7 @@ and we want to find \( \beta \) such that \( C(\beta) \) is minimized.











        -

        The derivative of the cost/loss function

        +

        The derivative of the cost/loss function

        Computing \( \partial C(\beta) / \partial \beta_0 \) and \( \partial C(\beta) / \partial \beta_1 \) we can show that the gradient can be written as @@ -455,7 +815,7 @@ where \( X \) is the design matrix defined above.











        -

        The Hessian matrix

        +

        The Hessian matrix

        The Hessian matrix of \( C(\beta) \) is given by $$ \hat{H} \equiv \begin{bmatrix} @@ -469,7 +829,7 @@ This result implies that \( C(\beta) \) is a convex function since the matrix \(











        -

        Simple program

        +

        Simple program

        We can now write a program that minimizes \( C(\beta) \) using the gradient descent method with a constant learning rate \( \gamma \) according to @@ -510,7 +870,7 @@ beta_NE = np.dot(Xt_X_inv,Xt_y)











        -

        Gradient Descent Example

        +

        Gradient Descent Example

        Another simple example is here @@ -559,7 +919,7 @@ plt.show()











        -

        And a corresponding example using scikit-learn

        +

        And a corresponding example using scikit-learn

        @@ -583,7 +943,7 @@ sgdreg.fit(x,y.ravel())

        -

        Gradient descent and Ridge

        +

        Gradient descent and Ridge

        We have also discussed Ridge regression where the loss function contains a regularized given by the \( L_2 \) norm of \( \beta \), @@ -640,7 +1000,7 @@ beta_ridge = np.dot(Z,np.dot(X.T,y))











        -

        Stochastic Gradient Descent

        +

        Stochastic Gradient Descent

        Stochastic gradient descent (SGD) and variants thereof address some of @@ -658,7 +1018,7 @@ $$











        -

        Computation of gradients

        +

        Computation of gradients

        This in turn means that the gradient can be @@ -678,7 +1038,7 @@ minibatches. We denote these minibatches by \( B_k \) where











        -

        SGD example

        +

        SGD example

        As an example, suppose we have \( 10 \) data points \( (\mathbf{x}_1,\cdots, \mathbf{x}_{10}) \) and we choose to have \( M=5 \) minibathces, then each minibatch contains two data points. In particular we have @@ -702,7 +1062,7 @@ $$











        -

        The gradient step

        +

        The gradient step

        Thus a gradient descent step now looks like @@ -721,7 +1081,7 @@ the number of minibatches, as exemplified in the code below.











        -

        Simple example code

        +

        Simple example code

        @@ -753,7 +1113,7 @@ all \( n \) datapoints.











        -

        When do we stop?

        +

        When do we stop?

        A natural question is when do we stop the search for a new minimum? @@ -770,7 +1130,7 @@ gave the lowest value.











        -

        Slightly different approach

        +

        Slightly different approach

        Another approach is to let the step length \( \gamma_j \) depend on the @@ -818,7 +1178,7 @@ j = 0











        -

        Conjugate gradient (CG) method

        +

        Conjugate gradient (CG) method

        @@ -849,7 +1209,7 @@ When we have found the exact solution, \( \hat{r}=0 \).











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        @@ -871,7 +1231,7 @@ If we search for a minimum of the quantum mechanical variance, then the matrix











        -

        Conjugate gradient method, Newton's method first

        +

        Conjugate gradient method, Newton's method first

        @@ -896,7 +1256,7 @@ $$











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        @@ -926,7 +1286,7 @@ this inner product. Being conjugate is a symmetric relation: if \( \hat{s} \) is











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        @@ -944,7 +1304,7 @@ which is zero unless \( i=j \).











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        @@ -971,7 +1331,7 @@ $$











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        @@ -1003,7 +1363,7 @@ $$











        -

        Conjugate gradient method and iterations

        +

        Conjugate gradient method and iterations

        @@ -1039,7 +1399,7 @@ instead.











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        @@ -1069,7 +1429,7 @@ hence the name conjugate gradient method.











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        @@ -1098,7 +1458,7 @@ $$











        -

        Conjugate gradient method

        +

        Conjugate gradient method

        diff --git a/doc/pub/Splines/html/Splines.html b/doc/pub/Splines/html/Splines.html index eec927569..6feb11062 100644 --- a/doc/pub/Splines/html/Splines.html +++ b/doc/pub/Splines/html/Splines.html @@ -70,47 +70,68 @@ div { text-align: justify; text-justify: inter-word; } 2, None, '___sec0'), - ('Steepest descent', 2, None, '___sec1'), - ('More on Steepest descent', 2, None, '___sec2'), - ('The ideal', 2, None, '___sec3'), - ('The sensitiveness of the gradient descent', 2, None, '___sec4'), - ('Convex functions', 2, None, '___sec5'), - ('Convex function', 2, None, '___sec6'), - ('Conditions on convex functions', 2, None, '___sec7'), - ('More on convex functions', 2, None, '___sec8'), - ('Some simple problems', 2, None, '___sec9'), - ('Revisiting our first homework', 2, None, '___sec10'), - ('Gradient descent example', 2, None, '___sec11'), - ('The derivative of the cost/loss function', 2, None, '___sec12'), - ('The Hessian matrix', 2, None, '___sec13'), - ('Simple program', 2, None, '___sec14'), - ('Gradient Descent Example', 2, None, '___sec15'), + ('Revisiting our Logistic Regression case', 2, None, '___sec1'), + ('The equations to solve', 2, None, '___sec2'), + ("Solving using Newton-Raphson's method", 2, None, '___sec3'), + ("Brief reminder on Newton-Raphson's method", 2, None, '___sec4'), + ('The equations', 2, None, '___sec5'), + ('Simple geometric interpretation', 2, None, '___sec6'), + ('Extending to more than one variable', 2, None, '___sec7'), + ('Steepest descent', 2, None, '___sec8'), + ('More on Steepest descent', 2, None, '___sec9'), + ('The ideal', 2, None, '___sec10'), + ('The sensitiveness of the gradient descent', + 2, + None, + '___sec11'), + ('Convex functions', 2, None, '___sec12'), + ('Convex function', 2, None, '___sec13'), + ('Conditions on convex functions', 2, None, '___sec14'), + ('More on convex functions', 2, None, '___sec15'), + ('Some simple problems', 2, None, '___sec16'), + ('Standard steepest descent', 2, None, '___sec17'), + ('Conjugate gradient method', 2, None, '___sec18'), + ('Simple codes for steepest descent and conjugate gradient ' + 'using a $2\\times 2$ matrix, in c++, Python code to come', + 2, + None, + '___sec19'), + ('The routine for the steepest descent method', + 2, + None, + '___sec20'), + ('Revisiting our first homework', 2, None, '___sec21'), + ('Gradient descent example', 2, None, '___sec22'), + ('The derivative of the cost/loss function', 2, None, '___sec23'), + ('The Hessian matrix', 2, None, '___sec24'), + ('Simple program', 2, None, '___sec25'), + ('Gradient Descent Example', 2, None, '___sec26'), ('And a corresponding example using _scikit-learn_', 2, None, - '___sec16'), - ('Gradient descent and Ridge', 2, None, '___sec17'), - ('Stochastic Gradient Descent', 2, None, '___sec18'), - ('Computation of gradients', 2, None, '___sec19'), - ('SGD example', 2, None, '___sec20'), - ('The gradient step', 2, None, '___sec21'), - ('Simple example code', 2, None, '___sec22'), - ('When do we stop?', 2, None, '___sec23'), - ('Slightly different approach', 2, None, '___sec24'), - ('Conjugate gradient (CG) method', 2, None, '___sec25'), - ('Conjugate gradient method', 2, None, '___sec26'), + '___sec27'), + ('Gradient descent and Ridge', 2, None, '___sec28'), + ('Stochastic Gradient Descent', 2, None, '___sec29'), + ('Computation of gradients', 2, None, '___sec30'), + ('SGD example', 2, None, '___sec31'), + ('The gradient step', 2, None, '___sec32'), + ('Simple example code', 2, None, '___sec33'), + ('When do we stop?', 2, None, '___sec34'), + ('Slightly different approach', 2, None, '___sec35'), + ('Conjugate gradient (CG) method', 2, None, '___sec36'), + ('Conjugate gradient method', 2, None, '___sec37'), ("Conjugate gradient method, Newton's method first", 2, None, - '___sec27'), - ('Conjugate gradient method', 2, None, '___sec28'), - ('Conjugate gradient method', 2, None, '___sec29'), - ('Conjugate gradient method', 2, None, '___sec30'), - ('Conjugate gradient method', 2, None, '___sec31'), - ('Conjugate gradient method and iterations', 2, None, '___sec32'), - ('Conjugate gradient method', 2, None, '___sec33'), - ('Conjugate gradient method', 2, None, '___sec34'), - ('Conjugate gradient method', 2, None, '___sec35')]} + '___sec38'), + ('Conjugate gradient method', 2, None, '___sec39'), + ('Conjugate gradient method', 2, None, '___sec40'), + ('Conjugate gradient method', 2, None, '___sec41'), + ('Conjugate gradient method', 2, None, '___sec42'), + ('Conjugate gradient method and iterations', 2, None, '___sec43'), + ('Conjugate gradient method', 2, None, '___sec44'), + ('Conjugate gradient method', 2, None, '___sec45'), + ('Conjugate gradient method', 2, None, '___sec46')]} end of tocinfo --> @@ -152,7 +173,7 @@ MathJax.Hub.Config({

        [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

        -

        Sep 21, 2018

        +

        Sep 27, 2018












        @@ -172,7 +193,209 @@ some approximative/numerical method to compute the minimum.











        -

        Steepest descent

        +

        Revisiting our Logistic Regression case

        + +

        +In our discussion on Logistic Regression we defined we studied first the +case of +two classes, with \( y_i \) either +\( 0 \) or \( 1 \). Furthermore we assumed also that we have only two +parameters \( \beta \) in our fitting of the Sigmoid function, that is we +defined probabilities + +$$ +\begin{align*} +p(y_i=1|x_i,\hat{\beta}) &= \frac{\exp{(\beta_0+\beta_1x_i)}}{1+\exp{(\beta_0+\beta_1x_i)}},\nonumber\\ +p(y_i=0|x_i,\hat{\beta}) &= 1 - p(y_i=1|x_i,\hat{\beta}), +\end{align*} +$$ + +where \( \hat{\beta} \) are the weights we wish to extract from data, in our case \( \beta_0 \) and \( \beta_1 \). + +

        +









        + +

        The equations to solve

        + +

        +Our compact equations used a definition of a vector \( \hat{y} \) with \( n \) +elements \( y_i \), an \( n\times p \) matrix \( \hat{X} \) which contains the +\( x_i \) values and a vector \( \hat{p} \) of fitted probabilities +\( p(y_i\vert x_i,\hat{\beta}) \). We rewrote in a more compact form +the first derivative of the cost function as + +$$ +\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}} = -\hat{X}^T\left(\hat{y}-\hat{p}\right). +$$ + +

        +If we in addition define a diagonal matrix \( \hat{W} \) with elements +\( p(y_i\vert x_i,\hat{\beta})(1-p(y_i\vert x_i,\hat{\beta}) \), we can obtain a compact expression of the second derivative as + +$$ +\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T} = \hat{X}^T\hat{W}\hat{X}. +$$ + +This defines what we call the Hessian. + +

        +









        + +

        Solving using Newton-Raphson's method

        + +

        +If we can set up these equations, Newton-Raphson's iterative method is the nomrally the method of choice. It requires however that we setting the matrices that define the first and second derivatives. + +

        +Our iterative scheme is then given by + +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\frac{\partial^2 \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}\partial \hat{\beta}^T}\right)^{-1}\times \left(\frac{\partial \mathcal{C}(\hat{\beta})}{\partial \hat{\beta}}\right)_{\hat{\beta}^{\mathrm{old}}}, +$$ + +or in matrix form as + +$$ +\hat{\beta}^{\mathrm{new}} = \hat{\beta}^{\mathrm{old}}-\left(\hat{X}^T\hat{W}\hat{X} \right)^{-1}\times \left(-\hat{X}^T(\hat{y}-\hat{p}) \right)_{\hat{\beta}^{\mathrm{old}}}. +$$ + +The right-hand side is computed with the old values of \( \beta \). + +

        +If we can compute these matrices, in particular the Hessian, the above is often the easiest method to implement. + +

        +









        + +

        Brief reminder on Newton-Raphson's method

        + +

        +Let us quicly remind ourselves how we derive the above method. + +

        +Perhaps the most celebrated of all one-dimensional root-finding +routines is Newton's method, also called the Newton-Raphson +method. This method is distinguished from the previously discussed +methods by the fact that it requires the evaluation of both the +function \( f \) and its derivative \( f' \) at arbitrary points. In this +sense, it is taylored to cases with e.g., transcendental equations. +If you can only calculate the derivative +numerically and/or your function is not of the smooth type, we +discourage the use of this method. + +

        +









        + +

        The equations

        + +

        +The Newton-Raphson formula consists geometrically of extending the +tangent line at a current point until it crosses zero, then setting +the next guess to the abscissa of that zero-crossing. The mathematics +behind this method is rather simple. Employing a Taylor expansion for +\( x \) sufficiently close to the solution \( s \), we have + +$$ + f(s)=0=f(x)+(s-x)f'(x)+\frac{(s-x)^2}{2}f''(x) +\dots. + \label{eq:taylornr} +$$ + +

        +For small enough values of the function and for well-behaved +functions, the terms beyond linear are unimportant, hence we obtain + +$$ + f(x)+(s-x)f'(x)\approx 0, +$$ + +yielding +$$ + s\approx x-\frac{f(x)}{f'(x)}. +$$ + +

        +Having in mind an iterative procedure, it is natural to start iterating with +$$ + x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}. +$$ + +

        +









        + +

        Simple geometric interpretation

        + +

        +The above is Newton-Raphson's method. It has a simple geometric +interpretation, namely \( x_{n+1} \) is the point where the tangent from +\( (x_n,f(x_n)) \) crosses the $x-$axis. Close to the solution, +Newton-Raphson converges fast to the desired result. However, if we +are far from a root, where the higher-order terms in the series are +important, the Newton-Raphson formula can give grossly inaccurate +results. For instance, the initial guess for the root might be so far +from the true root as to let the search interval include a local +maximum or minimum of the function. If an iteration places a trial +guess near such a local extremum, so that the first derivative nearly +vanishes, then Newton-Raphson may fail totally + +

        +









        + +

        Extending to more than one variable

        + +

        +Newton's method can be generalized to systems of several non-linear equations +and variables. Consider the case with two equations +$$ + \begin{array}{cc} f_1(x_1,x_2) &=0\\ + f_2(x_1,x_2) &=0\end{array}, +$$ + +which we Taylor expand to obtain + +$$ + \begin{array}{cc} 0=f_1(x_1+h_1,x_2+h_2)=&f_1(x_1,x_2)+h_1 + \partial f_1/\partial x_1+h_2 + \partial f_1/\partial x_2+\dots\\ + 0=f_2(x_1+h_1,x_2+h_2)=&f_2(x_1,x_2)+h_1 + \partial f_2/\partial x_1+h_2 + \partial f_2/\partial x_2+\dots + \end{array}. +$$ + +Defining the Jacobian matrix \( {\bf \hat{J}} \) we have +$$ + {\bf \hat{J}}=\left( \begin{array}{cc} + \partial f_1/\partial x_1 & \partial f_1/\partial x_2 \\ + \partial f_2/\partial x_1 &\partial f_2/\partial x_2 + \end{array} \right), +$$ + +we can rephrase Newton's method as +$$ +\left(\begin{array}{c} x_1^{n+1} \\ x_2^{n+1} \end{array} \right)= +\left(\begin{array}{c} x_1^{n} \\ x_2^{n} \end{array} \right)+ +\left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right), +$$ + +where we have defined +$$ + \left(\begin{array}{c} h_1^{n} \\ h_2^{n} \end{array} \right)= + -{\bf \hat{J}}^{-1} + \left(\begin{array}{c} f_1(x_1^{n},x_2^{n}) \\ f_2(x_1^{n},x_2^{n}) \end{array} \right). +$$ + +We need thus to compute the inverse of the Jacobian matrix and it +is to understand that difficulties may +arise in case \( {\bf \hat{J}} \) is nearly singular. + +

        +It is rather straightforward to extend the above scheme to systems of +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. + +

        +









        + +

        Steepest descent

        The method of steepest descent The basic idea of gradient descent is @@ -196,7 +419,7 @@ we are always moving towards smaller function values, i.e a minimum.

        -

        More on Steepest descent

        +

        More on Steepest descent

        The previous observation is the basis of the method of steepest @@ -215,7 +438,7 @@ the learning rate within the context of Machine Learning.

        -

        The ideal

        +

        The ideal

        Ideally the sequence \( \{\mathbf{x}_k \}_{k=0} \) converges to a global @@ -241,7 +464,7 @@ Note that the gradient is a function of \( \mathbf{x} =

        -

        The sensitiveness of the gradient descent

        +

        The sensitiveness of the gradient descent

        The gradient descent method @@ -260,7 +483,7 @@ randomness. One such method is that of Stochastic Gradient Descent

        -

        Convex functions

        +

        Convex functions

        Ideally we want our cost/loss function to be convex(concave). @@ -280,7 +503,7 @@ regular polygons (triangles, rectangles, pentagons, etc...).











        -

        Convex function

        +

        Convex function

        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. @@ -288,7 +511,7 @@ regular polygons (triangles, rectangles, pentagons, etc...).











        -

        Conditions on convex functions

        +

        Conditions on convex functions

        In the following we state first and second-order conditions which @@ -330,7 +553,7 @@ This condition is particularly useful since it gives us an procedure for determi











        -

        More on convex functions

        +

        More on convex functions

        The next result is of great importance to us and the reason why we are @@ -360,7 +583,7 @@ This result means that if we know that the cost/loss function is convex and we a











        -

        Some simple problems

        +

        Some simple problems

        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$.
        2. @@ -384,10 +607,147 @@ This result means that if we know that the cost/loss function is convex and we a 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). +

          +









          + +

          Standard steepest descent

          + +

          +Before we proceed, we would like to mention the approach called the standard Steepest descent, which again leads to us having to be able to compute a matrix. + +

          +The success of the CG method +for finding solutions of non-linear problems is based on the theory +of conjugate gradients for linear systems of equations. It belongs to +the class of iterative methods for solving problems from linear +algebra of the type +$$ +\begin{equation*} +\hat{A}\hat{x} = \hat{b}. +\end{equation*} +$$ + +

          +In the iterative process we end up with a problem like + +$$ +\begin{equation*} + \hat{r}= \hat{b}-\hat{A}\hat{x}, +\end{equation*} +$$ + +where \( \hat{r} \) is the so-called residual or error in the iterative process. + +

          +When we have found the exact solution, \( \hat{r}=0 \). + +

          +









          + +

          Conjugate gradient method

          + +

          +The residual is zero when we reach the minimum of the quadratic equation +$$ +\begin{equation*} + P(\hat{x})=\frac{1}{2}\hat{x}^T\hat{A}\hat{x} - \hat{x}^T\hat{b}, +\end{equation*} +$$ + +

          +with the constraint that the matrix \( \hat{A} \) is positive definite and +symmetric. If we search for a minimum of the quantum mechanical +variance, then the matrix \( \hat{A} \), which is called the Hessian, is +given by the second-derivative of the function we want to minimize. +This quantity is always positive definite. + +

          +More details will be added here soon. + +

          +









          + +

          Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come

          +
          + +

          +

          + + +

          #include <cmath>
          +#include <iostream>
          +#include <fstream>
          +#include <iomanip>
          +#include "vectormatrixclass.h"
          +using namespace  std;
          +//   Main function begins here
          +int main(int  argc, char * argv[]){
          +  int dim = 2;
          +  Vector x(dim),xsd(dim), b(dim),x0(dim);
          +  Matrix A(dim,dim);
          +
          +  // Set our initial guess
          +  x0(0) = x0(1) = 0;
          +  // Set the matrix
          +  A(0,0) =  3;    A(1,0) =  2;   A(0,1) =  2;   A(1,1) =  6;
          +  b(0) = 2; b(1) = -8;
          +  cout << "The Matrix A that we are using: " << endl;
          +  A.Print();
          +  cout << endl;
          +  x = ConjugateGradient(A,b,x0);
          +  xsd = SteepestDescent(A,b,x0);
          +  cout << "The approximate solution using Conjugate Gradient is: " << endl;
          +  x.Print();
          +  cout << endl;
          +  cout << "The approximate solution using Steepest Descent is: " << endl;
          +  xsd.Print();
          +  cout << endl;
          +}
          +
          + +
          + + +

          +









          + +

          The routine for the steepest descent method

          +
          + +

          +

          + + +

          Vector SteepestDescent(Matrix A, Vector b, Vector x0){
          +  int IterMax, i;
          +  int dim = x0.Dimension();
          +  const double tolerance = 1.0e-14;
          +  Vector x(dim),f(dim),z(dim);
          +  double c,alpha,d;
          +  IterMax = 30;
          +  x = x0;
          +  f = A*x-b;
          +  i = 0;
          +  while (i <= IterMax){
          +    z = A*f;
          +    c = dot(f,f);
          +    alpha = c/dot(f,z);
          +    x = x - alpha*f;
          +    f =  A*x-b;
          +    if(sqrt(dot(f,f)) < tolerance) break;
          +    i++;
          +  }
          +  return x;
          +}
          +
          + +
          + +

          -

          Revisiting our first homework

          +

          Revisiting our first homework

          We will use linear regression as a case study for the gradient descent @@ -420,7 +780,7 @@ $$

          -

          Gradient descent example

          +

          Gradient descent example

          Let \( \mathbf{y} = (y_1,\cdots,y_n)^T \), \( \mathbf{\hat{y}} = (\hat{y}_1,\cdots,\hat{y}_n)^T \) and \( \beta = (\beta_0, \beta_1)^T \) @@ -445,7 +805,7 @@ and we want to find \( \beta \) such that \( C(\beta) \) is minimized.











          -

          The derivative of the cost/loss function

          +

          The derivative of the cost/loss function

          Computing \( \partial C(\beta) / \partial \beta_0 \) and \( \partial C(\beta) / \partial \beta_1 \) we can show that the gradient can be written as @@ -460,7 +820,7 @@ where \( X \) is the design matrix defined above.











          -

          The Hessian matrix

          +

          The Hessian matrix

          The Hessian matrix of \( C(\beta) \) is given by $$ \hat{H} \equiv \begin{bmatrix} @@ -474,7 +834,7 @@ This result implies that \( C(\beta) \) is a convex function since the matrix \(











          -

          Simple program

          +

          Simple program

          We can now write a program that minimizes \( C(\beta) \) using the gradient descent method with a constant learning rate \( \gamma \) according to @@ -515,7 +875,7 @@ beta_NE = np.









          -

          Gradient Descent Example

          +

          Gradient Descent Example

          Another simple example is here @@ -564,7 +924,7 @@ plt.show()











          -

          And a corresponding example using scikit-learn

          +

          And a corresponding example using scikit-learn

          @@ -588,7 +948,7 @@ sgdreg.fit(x,y.

          -

          Gradient descent and Ridge

          +

          Gradient descent and Ridge

          We have also discussed Ridge regression where the loss function contains a regularized given by the \( L_2 \) norm of \( \beta \), @@ -645,7 +1005,7 @@ beta_ridge = np











          -

          Stochastic Gradient Descent

          +

          Stochastic Gradient Descent

          Stochastic gradient descent (SGD) and variants thereof address some of @@ -663,7 +1023,7 @@ $$











          -

          Computation of gradients

          +

          Computation of gradients

          This in turn means that the gradient can be @@ -683,7 +1043,7 @@ minibatches. We denote these minibatches by \( B_k \) where











          -

          SGD example

          +

          SGD example

          As an example, suppose we have \( 10 \) data points \( (\mathbf{x}_1,\cdots, \mathbf{x}_{10}) \) and we choose to have \( M=5 \) minibathces, then each minibatch contains two data points. In particular we have @@ -707,7 +1067,7 @@ $$











          -

          The gradient step

          +

          The gradient step

          Thus a gradient descent step now looks like @@ -726,7 +1086,7 @@ the number of minibatches, as exemplified in the code below.











          -

          Simple example code

          +

          Simple example code

          @@ -758,7 +1118,7 @@ all \( n \) datapoints.











          -

          When do we stop?

          +

          When do we stop?

          A natural question is when do we stop the search for a new minimum? @@ -775,7 +1135,7 @@ gave the lowest value.











          -

          Slightly different approach

          +

          Slightly different approach

          Another approach is to let the step length \( \gamma_j \) depend on the @@ -823,7 +1183,7 @@ j = 0











          -

          Conjugate gradient (CG) method

          +

          Conjugate gradient (CG) method

          @@ -854,7 +1214,7 @@ When we have found the exact solution, \( \hat{r}=0 \).











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          @@ -876,7 +1236,7 @@ If we search for a minimum of the quantum mechanical variance, then the matrix











          -

          Conjugate gradient method, Newton's method first

          +

          Conjugate gradient method, Newton's method first

          @@ -901,7 +1261,7 @@ $$











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          @@ -931,7 +1291,7 @@ this inner product. Being conjugate is a symmetric relation: if \( \hat{s} \) is











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          @@ -949,7 +1309,7 @@ which is zero unless \( i=j \).











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          @@ -976,7 +1336,7 @@ $$











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          @@ -1008,7 +1368,7 @@ $$











          -

          Conjugate gradient method and iterations

          +

          Conjugate gradient method and iterations

          @@ -1044,7 +1404,7 @@ instead.











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          @@ -1074,7 +1434,7 @@ hence the name conjugate gradient method.











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          @@ -1103,7 +1463,7 @@ $$











          -

          Conjugate gradient method

          +

          Conjugate gradient method

          diff --git a/doc/pub/Splines/ipynb/Splines.ipynb b/doc/pub/Splines/ipynb/Splines.ipynb index 688508aaa..a46ac7740 100644 --- a/doc/pub/Splines/ipynb/Splines.ipynb +++ b/doc/pub/Splines/ipynb/Splines.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Sep 21, 2018**\n", + "Date: **Sep 27, 2018**\n", "\n", "Copyright 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -28,6 +28,327 @@ "analytically, however this is not possible in general and we must use\n", "some approximative/numerical method to compute the minimum.\n", "\n", + "\n", + "## Revisiting our Logistic Regression case\n", + "\n", + "In our discussion on Logistic Regression we defined we studied first 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 of the Sigmoid function, that is we\n", + "defined probabilities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "p(y_i=1|x_i,\\hat{\\beta}) &= \\frac{\\exp{(\\beta_0+\\beta_1x_i)}}{1+\\exp{(\\beta_0+\\beta_1x_i)}},\\nonumber\\\\\n", + "p(y_i=0|x_i,\\hat{\\beta}) &= 1 - p(y_i=1|x_i,\\hat{\\beta}),\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{\\beta}$ are the weights we wish to extract from data, in our case $\\beta_0$ and $\\beta_1$. \n", + "\n", + "## The equations to solve\n", + "\n", + "Our compact equations used a definition of a vector $\\hat{y}$ with $n$\n", + "elements $y_i$, an $n\\times p$ matrix $\\hat{X}$ which contains the\n", + "$x_i$ values and a vector $\\hat{p}$ of fitted probabilities\n", + "$p(y_i\\vert x_i,\\hat{\\beta})$. We rewrote in a more compact form\n", + "the first derivative of the cost function as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial \\mathcal{C}(\\hat{\\beta})}{\\partial \\hat{\\beta}} = -\\hat{X}^T\\left(\\hat{y}-\\hat{p}\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we in addition define a diagonal matrix $\\hat{W}$ with elements \n", + "$p(y_i\\vert x_i,\\hat{\\beta})(1-p(y_i\\vert x_i,\\hat{\\beta})$, we can obtain a compact expression of the second derivative as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 \\mathcal{C}(\\hat{\\beta})}{\\partial \\hat{\\beta}\\partial \\hat{\\beta}^T} = \\hat{X}^T\\hat{W}\\hat{X}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This defines what we call the Hessian.\n", + "\n", + "## Solving using Newton-Raphson's method\n", + "\n", + "If we can set up these equations, Newton-Raphson's iterative method is the nomrally the method of choice. It requires however that we setting the matrices that define the first and second derivatives. \n", + "\n", + "Our iterative scheme is then given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{\\beta}^{\\mathrm{new}} = \\hat{\\beta}^{\\mathrm{old}}-\\left(\\frac{\\partial^2 \\mathcal{C}(\\hat{\\beta})}{\\partial \\hat{\\beta}\\partial \\hat{\\beta}^T}\\right)^{-1}\\times \\left(\\frac{\\partial \\mathcal{C}(\\hat{\\beta})}{\\partial \\hat{\\beta}}\\right)_{\\hat{\\beta}^{\\mathrm{old}}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or in matrix form as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{\\beta}^{\\mathrm{new}} = \\hat{\\beta}^{\\mathrm{old}}-\\left(\\hat{X}^T\\hat{W}\\hat{X} \\right)^{-1}\\times \\left(-\\hat{X}^T(\\hat{y}-\\hat{p}) \\right)_{\\hat{\\beta}^{\\mathrm{old}}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "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", + "\n", + "## Brief reminder on Newton-Raphson's method\n", + "\n", + "Let us quicly 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 is distinguished from the previously discussed\n", + "methods by the fact that it requires the evaluation of both the\n", + "function $f$ and its derivative $f'$ at arbitrary points. In this\n", + "sense, it is taylored to cases with e.g., transcendental equations.\n", + "If you can only calculate the derivative\n", + "numerically and/or your function is not of the smooth type, we\n", + "discourage the use of this method.\n", + "\n", + "## The equations\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", + "metadata": {}, + "source": [ + "\n", + "

          \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", + "metadata": {}, + "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", + "metadata": {}, + "source": [ + "$$\n", + "f(x)+(s-x)f'(x)\\approx 0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "yielding" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "s\\approx x-\\frac{f(x)}{f'(x)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Having in mind an iterative procedure, it is natural to start iterating with" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x_{n+1}=x_n-\\frac{f(x_n)}{f'(x_n)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simple geometric interpretation\n", + "\n", + "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", + "\n", + "## Extending to more than one variable\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", + "metadata": {}, + "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", + "metadata": {}, + "source": [ + "which we Taylor expand to obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "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", + "metadata": {}, + "source": [ + "Defining the Jacobian matrix ${\\bf \\hat{J}}$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "{\\bf \\hat{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", + "metadata": {}, + "source": [ + "we can rephrase Newton's method as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "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", + "metadata": {}, + "source": [ + "where we have defined" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\left(\\begin{array}{c} h_1^{n} \\\\ h_2^{n} \\end{array} \\right)=\n", + " -{\\bf \\hat{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", + "metadata": {}, + "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 ${\\bf \\hat{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. \n", + "\n", + "\n", + "\n", "## Steepest descent\n", "\n", "The method of steepest descent The basic idea of gradient descent is\n", @@ -218,6 +539,154 @@ "\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).\n", "\n", + "\n", + "## Standard steepest descent\n", + "\n", + "\n", + "Before we proceed, we would like to mention the approach called the **standard Steepest descent**, which again leads to us having to be able to compute a matrix.\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", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{A}\\hat{x} = \\hat{b}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the iterative process we end up with a problem like" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{r}= \\hat{b}-\\hat{A}\\hat{x},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{r}$ is the so-called residual or error in the iterative process.\n", + "\n", + "When we have found the exact solution, $\\hat{r}=0$.\n", + "\n", + "## Conjugate gradient method\n", + "\n", + "The residual is zero when we reach the minimum of the quadratic equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "P(\\hat{x})=\\frac{1}{2}\\hat{x}^T\\hat{A}\\hat{x} - \\hat{x}^T\\hat{b},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the constraint that the matrix $\\hat{A}$ is positive definite and\n", + "symmetric. If we search for a minimum of the quantum mechanical\n", + "variance, then the matrix $\\hat{A}$, which is called the Hessian, is\n", + "given by the second-derivative of the function we want to minimize.\n", + "This quantity is always positive definite. \n", + "\n", + "More details will be added here soon.\n", + "\n", + "## Simple codes for steepest descent and conjugate gradient using a $2\\times 2$ matrix, in c++, Python code to come" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " #include \n", + " #include \n", + " #include \n", + " #include \n", + " #include \"vectormatrixclass.h\"\n", + " using namespace std;\n", + " // Main function begins here\n", + " int main(int argc, char * argv[]){\n", + " int dim = 2;\n", + " Vector x(dim),xsd(dim), b(dim),x0(dim);\n", + " Matrix A(dim,dim);\n", + " \n", + " // Set our initial guess\n", + " x0(0) = x0(1) = 0;\n", + " // Set the matrix\n", + " A(0,0) = 3; A(1,0) = 2; A(0,1) = 2; A(1,1) = 6;\n", + " b(0) = 2; b(1) = -8;\n", + " cout << \"The Matrix A that we are using: \" << endl;\n", + " A.Print();\n", + " cout << endl;\n", + " x = ConjugateGradient(A,b,x0);\n", + " xsd = SteepestDescent(A,b,x0);\n", + " cout << \"The approximate solution using Conjugate Gradient is: \" << endl;\n", + " x.Print();\n", + " cout << endl;\n", + " cout << \"The approximate solution using Steepest Descent is: \" << endl;\n", + " xsd.Print();\n", + " cout << endl;\n", + " }\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The routine for the steepest descent method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Vector SteepestDescent(Matrix A, Vector b, Vector x0){\n", + " int IterMax, i;\n", + " int dim = x0.Dimension();\n", + " const double tolerance = 1.0e-14;\n", + " Vector x(dim),f(dim),z(dim);\n", + " double c,alpha,d;\n", + " IterMax = 30;\n", + " x = x0;\n", + " f = A*x-b;\n", + " i = 0;\n", + " while (i <= IterMax){\n", + " z = A*f;\n", + " c = dot(f,f);\n", + " alpha = c/dot(f,z);\n", + " x = x - alpha*f;\n", + " f = A*x-b;\n", + " if(sqrt(dot(f,f)) < tolerance) break;\n", + " i++;\n", + " }\n", + " return x;\n", + " }\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", "## Revisiting our first homework\n", "\n", @@ -397,7 +866,9 @@ { "cell_type": "code", "execution_count": 1, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "import numpy as np\n", @@ -431,30 +902,11 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[4.11631855]\n", - " [2.78555876]]\n", - "[[4.11631855]\n", - " [2.78555876]]\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
          " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "%matplotlib inline\n", "\n", @@ -509,7 +961,9 @@ { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "# Importing various packages\n", @@ -593,7 +1047,9 @@ { "cell_type": "code", "execution_count": 4, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "import numpy as np\n", @@ -739,7 +1195,9 @@ { "cell_type": "code", "execution_count": 5, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "import numpy as np \n", @@ -801,7 +1259,9 @@ { "cell_type": "code", "execution_count": 6, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "import numpy as np \n", @@ -1279,25 +1739,7 @@ ] } ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.0" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } diff --git a/doc/pub/Splines/ipynb/ipynb-Splines-src.tar.gz b/doc/pub/Splines/ipynb/ipynb-Splines-src.tar.gz index 34845ba2e0a79a2b86a8a7dac542f2c372d4c502..9e4fe066b44b4b4a8c8fcd6074c4716096d78fc1 100644 GIT binary patch literal 208 zcmb2|=3tobxF(u``R)0GU55+=juoD_J8I+Txqa(AR@(}JX|eGNmogq_UGi1Bu{~US z$MUagO8@Go_b0X`KFcE@thxT@)?l9gW5R^7vzeR I7&I6d0Gv!{UjP6A literal 210 zcmb2|=3rP*uq2v+`R#efyh8>8t%=v>B>4$gsA3rmjg zl;M1& diff --git a/doc/pub/Splines/pdf/Splines-minted.pdf b/doc/pub/Splines/pdf/Splines-minted.pdf index b63252b15c08903249e5f9d05ea78d04bfb1990c..b40638855e29a3df4c8ff8333e877c67b3ecf900 100644 GIT binary patch delta 278268 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

          mdM*O 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 z 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�UIijUJ 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 TpXdzC3T9 +#include +#include +#include +#include "vectormatrixclass.h" +using namespace std; +// Main function begins here +int main(int argc, char * argv[]){ + int dim = 2; + Vector x(dim),xsd(dim), b(dim),x0(dim); + Matrix A(dim,dim); + + // Set our initial guess + x0(0) = x0(1) = 0; + // Set the matrix + A(0,0) = 3; A(1,0) = 2; A(0,1) = 2; A(1,1) = 6; + b(0) = 2; b(1) = -8; + cout << "The Matrix A that we are using: " << endl; + A.Print(); + cout << endl; + x = ConjugateGradient(A,b,x0); + xsd = SteepestDescent(A,b,x0); + cout << "The approximate solution using Conjugate Gradient is: " << endl; + x.Print(); + cout << endl; + cout << "The approximate solution using Steepest Descent is: " << endl; + xsd.Print(); + cout << endl; +} +!ec +!eblock + +!split +===== The routine for the steepest descent method ===== +!bblock +!bc cppcod +Vector SteepestDescent(Matrix A, Vector b, Vector x0){ + int IterMax, i; + int dim = x0.Dimension(); + const double tolerance = 1.0e-14; + Vector x(dim),f(dim),z(dim); + double c,alpha,d; + IterMax = 30; + x = x0; + f = A*x-b; + i = 0; + while (i <= IterMax){ + z = A*f; + c = dot(f,f); + alpha = c/dot(f,z); + x = x - alpha*f; + f = A*x-b; + if(sqrt(dot(f,f)) < tolerance) break; + i++; + } + return x; +} +!ec +!eblock + + !split ===== Revisiting our first homework ===== @@ -839,3 +1148,4 @@ which gives +