From 08f5bf245bc3c4bfadca761d080aa507651f76d5 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 27 Sep 2018 05:42:32 +0200 Subject: [PATCH] Update on descent methods --- doc/pub/Splines/html/._Splines-bs000.html | 74 +- doc/pub/Splines/html/._Splines-bs001.html | 74 +- doc/pub/Splines/html/._Splines-bs002.html | 74 +- doc/pub/Splines/html/._Splines-bs003.html | 74 +- doc/pub/Splines/html/._Splines-bs004.html | 74 +- doc/pub/Splines/html/._Splines-bs005.html | 74 +- doc/pub/Splines/html/._Splines-bs006.html | 74 +- doc/pub/Splines/html/._Splines-bs007.html | 74 +- doc/pub/Splines/html/._Splines-bs008.html | 74 +- doc/pub/Splines/html/._Splines-bs009.html | 74 +- doc/pub/Splines/html/._Splines-bs010.html | 74 +- doc/pub/Splines/html/._Splines-bs011.html | 74 +- doc/pub/Splines/html/._Splines-bs012.html | 74 +- doc/pub/Splines/html/._Splines-bs013.html | 74 +- doc/pub/Splines/html/._Splines-bs014.html | 74 +- doc/pub/Splines/html/._Splines-bs015.html | 74 +- doc/pub/Splines/html/._Splines-bs016.html | 74 +- doc/pub/Splines/html/._Splines-bs017.html | 74 +- doc/pub/Splines/html/._Splines-bs018.html | 74 +- doc/pub/Splines/html/._Splines-bs019.html | 74 +- doc/pub/Splines/html/._Splines-bs020.html | 74 +- doc/pub/Splines/html/._Splines-bs021.html | 74 +- doc/pub/Splines/html/._Splines-bs022.html | 74 +- doc/pub/Splines/html/._Splines-bs023.html | 74 +- doc/pub/Splines/html/._Splines-bs024.html | 112 ++- doc/pub/Splines/html/._Splines-bs025.html | 120 +-- doc/pub/Splines/html/._Splines-bs026.html | 162 ++-- doc/pub/Splines/html/._Splines-bs027.html | 74 +- doc/pub/Splines/html/._Splines-bs028.html | 74 +- doc/pub/Splines/html/._Splines-bs029.html | 74 +- doc/pub/Splines/html/._Splines-bs030.html | 74 +- doc/pub/Splines/html/._Splines-bs031.html | 74 +- doc/pub/Splines/html/._Splines-bs032.html | 74 +- doc/pub/Splines/html/._Splines-bs033.html | 75 +- doc/pub/Splines/html/._Splines-bs034.html | 76 +- doc/pub/Splines/html/._Splines-bs035.html | 138 +++- doc/pub/Splines/html/._Splines-bs036.html | 117 ++- doc/pub/Splines/html/._Splines-bs037.html | 324 ++++++++ doc/pub/Splines/html/._Splines-bs038.html | 308 ++++++++ doc/pub/Splines/html/._Splines-bs039.html | 300 ++++++++ doc/pub/Splines/html/._Splines-bs040.html | 297 ++++++++ doc/pub/Splines/html/._Splines-bs041.html | 320 ++++++++ doc/pub/Splines/html/._Splines-bs042.html | 312 ++++++++ doc/pub/Splines/html/._Splines-bs043.html | 298 ++++++++ doc/pub/Splines/html/._Splines-bs044.html | 313 ++++++++ doc/pub/Splines/html/._Splines-bs045.html | 283 +++++++ doc/pub/Splines/html/._Splines-bs046.html | 287 +++++++ doc/pub/Splines/html/._Splines-bs047.html | 288 +++++++ doc/pub/Splines/html/._Splines-bs048.html | 291 +++++++ doc/pub/Splines/html/._Splines-bs049.html | 285 +++++++ doc/pub/Splines/html/._Splines-bs050.html | 297 ++++++++ doc/pub/Splines/html/._Splines-bs051.html | 281 +++++++ doc/pub/Splines/html/._Splines-bs052.html | 311 ++++++++ doc/pub/Splines/html/Splines-bs.html | 74 +- doc/pub/Splines/html/Splines-reveal.html | 490 +++++++++++- doc/pub/Splines/html/Splines-solarized.html | 519 ++++++++++++- doc/pub/Splines/html/Splines.html | 519 ++++++++++++- doc/pub/Splines/ipynb/Splines.ipynb | 721 +++++++++++++++++- .../Splines/ipynb/ipynb-Splines-src.tar.gz | Bin 210 -> 211 bytes doc/pub/Splines/pdf/Splines-minted.pdf | Bin 394146 -> 409530 bytes doc/src/Splines/Splines.do.txt | 401 +++++++++- ...s_allowed_functions-Copy1-checkpoint.ipynb | 680 +++++++++++++++++ doc/src/Splines/autodiff/example_plot.ipynb | 13 +- .../examples_allowed_functions-Copy1.ipynb | 680 +++++++++++++++++ .../autodiff/examples_allowed_functions.ipynb | 28 +- 65 files changed, 10948 insertions(+), 992 deletions(-) create mode 100644 doc/pub/Splines/html/._Splines-bs037.html create mode 100644 doc/pub/Splines/html/._Splines-bs038.html create mode 100644 doc/pub/Splines/html/._Splines-bs039.html create mode 100644 doc/pub/Splines/html/._Splines-bs040.html create mode 100644 doc/pub/Splines/html/._Splines-bs041.html create mode 100644 doc/pub/Splines/html/._Splines-bs042.html create mode 100644 doc/pub/Splines/html/._Splines-bs043.html create mode 100644 doc/pub/Splines/html/._Splines-bs044.html create mode 100644 doc/pub/Splines/html/._Splines-bs045.html create mode 100644 doc/pub/Splines/html/._Splines-bs046.html create mode 100644 doc/pub/Splines/html/._Splines-bs047.html create mode 100644 doc/pub/Splines/html/._Splines-bs048.html create mode 100644 doc/pub/Splines/html/._Splines-bs049.html create mode 100644 doc/pub/Splines/html/._Splines-bs050.html create mode 100644 doc/pub/Splines/html/._Splines-bs051.html create mode 100644 doc/pub/Splines/html/._Splines-bs052.html create mode 100644 doc/src/Splines/autodiff/.ipynb_checkpoints/examples_allowed_functions-Copy1-checkpoint.ipynb create mode 100644 doc/src/Splines/autodiff/examples_allowed_functions-Copy1.ipynb diff --git a/doc/pub/Splines/html/._Splines-bs000.html b/doc/pub/Splines/html/._Splines-bs000.html index c216dd1d9..eb965b485 100644 --- a/doc/pub/Splines/html/._Splines-bs000.html +++ b/doc/pub/Splines/html/._Splines-bs000.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -234,7 +266,7 @@ MathJax.Hub.Config({
  • 9
  • 10
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs001.html b/doc/pub/Splines/html/._Splines-bs001.html index e621c87b3..b2483d189 100644 --- a/doc/pub/Splines/html/._Splines-bs001.html +++ b/doc/pub/Splines/html/._Splines-bs001.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -220,7 +252,7 @@ some approximative/numerical method to compute the minimum.
  • 10
  • 11
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs002.html b/doc/pub/Splines/html/._Splines-bs002.html index 8c76c24e2..7aa52ca1a 100644 --- a/doc/pub/Splines/html/._Splines-bs002.html +++ b/doc/pub/Splines/html/._Splines-bs002.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -228,7 +260,7 @@ where \( \hat{\beta} \) are the weights we wish to extract from data, in our cas
  • 11
  • 12
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs003.html b/doc/pub/Splines/html/._Splines-bs003.html index c631ad132..85363b56e 100644 --- a/doc/pub/Splines/html/._Splines-bs003.html +++ b/doc/pub/Splines/html/._Splines-bs003.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -233,7 +265,7 @@ This defines what we call the Hessian.
  • 12
  • 13
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs004.html b/doc/pub/Splines/html/._Splines-bs004.html index df245e3c2..ddf626455 100644 --- a/doc/pub/Splines/html/._Splines-bs004.html +++ b/doc/pub/Splines/html/._Splines-bs004.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -234,7 +266,7 @@ If we can compute these matrices, in particular the Hessian, the above is often
  • 13
  • 14
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs005.html b/doc/pub/Splines/html/._Splines-bs005.html index 2c2088fdc..3cd5f3f8a 100644 --- a/doc/pub/Splines/html/._Splines-bs005.html +++ b/doc/pub/Splines/html/._Splines-bs005.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -228,7 +260,7 @@ discourage the use of this method.
  • 14
  • 15
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs006.html b/doc/pub/Splines/html/._Splines-bs006.html index 97c27747b..ee9b0ff05 100644 --- a/doc/pub/Splines/html/._Splines-bs006.html +++ b/doc/pub/Splines/html/._Splines-bs006.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -246,7 +278,7 @@ $$
  • 15
  • 16
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs007.html b/doc/pub/Splines/html/._Splines-bs007.html index 93c540229..7bdfd6ee1 100644 --- a/doc/pub/Splines/html/._Splines-bs007.html +++ b/doc/pub/Splines/html/._Splines-bs007.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -229,7 +261,7 @@ vanishes, then Newton-Raphson may fail totally
  • 16
  • 17
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs008.html b/doc/pub/Splines/html/._Splines-bs008.html index 3aab78db6..8ea01bac2 100644 --- a/doc/pub/Splines/html/._Splines-bs008.html +++ b/doc/pub/Splines/html/._Splines-bs008.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -267,7 +299,7 @@ more than two non-linear equations. In our case, the Jacobian matrix is given by
  • 17
  • 18
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs009.html b/doc/pub/Splines/html/._Splines-bs009.html index d5cf8f1fe..b222ff857 100644 --- a/doc/pub/Splines/html/._Splines-bs009.html +++ b/doc/pub/Splines/html/._Splines-bs009.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -237,7 +269,7 @@ we are always moving towards smaller function values, i.e a minimum.
  • 18
  • 19
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs010.html b/doc/pub/Splines/html/._Splines-bs010.html index a8d1d1e3f..f92deb50c 100644 --- a/doc/pub/Splines/html/._Splines-bs010.html +++ b/doc/pub/Splines/html/._Splines-bs010.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -233,7 +265,7 @@ the learning rate within the context of Machine Learning.
  • 19
  • 20
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs011.html b/doc/pub/Splines/html/._Splines-bs011.html index 4fab036d3..cf8ea973d 100644 --- a/doc/pub/Splines/html/._Splines-bs011.html +++ b/doc/pub/Splines/html/._Splines-bs011.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -240,7 +272,7 @@ Note that the gradient is a function of \( \mathbf{x} =
  • 20
  • 21
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs012.html b/doc/pub/Splines/html/._Splines-bs012.html index 77ef7c405..0101a3f47 100644 --- a/doc/pub/Splines/html/._Splines-bs012.html +++ b/doc/pub/Splines/html/._Splines-bs012.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -233,7 +265,7 @@ randomness. One such method is that of Stochastic Gradient Descent
  • 21
  • 22
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs013.html b/doc/pub/Splines/html/._Splines-bs013.html index 4396ca41d..1270578c7 100644 --- a/doc/pub/Splines/html/._Splines-bs013.html +++ b/doc/pub/Splines/html/._Splines-bs013.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -234,7 +266,7 @@ regular polygons (triangles, rectangles, pentagons, etc...).
  • 22
  • 23
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs014.html b/doc/pub/Splines/html/._Splines-bs014.html index 3bd25ac38..3ef745a29 100644 --- a/doc/pub/Splines/html/._Splines-bs014.html +++ b/doc/pub/Splines/html/._Splines-bs014.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -222,7 +254,7 @@ MathJax.Hub.Config({
  • 23
  • 24
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs015.html b/doc/pub/Splines/html/._Splines-bs015.html index 2d6c4040e..f96a3a59d 100644 --- a/doc/pub/Splines/html/._Splines-bs015.html +++ b/doc/pub/Splines/html/._Splines-bs015.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -258,7 +290,7 @@ This condition is particularly useful since it gives us an procedure for determi
  • 24
  • 25
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs016.html b/doc/pub/Splines/html/._Splines-bs016.html index c5244bd66..c495cb57f 100644 --- a/doc/pub/Splines/html/._Splines-bs016.html +++ b/doc/pub/Splines/html/._Splines-bs016.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -245,7 +277,7 @@ This result means that if we know that the cost/loss function is convex and we a
  • 25
  • 26
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs017.html b/doc/pub/Splines/html/._Splines-bs017.html index 12414cfc1..aadf5ae5f 100644 --- a/doc/pub/Splines/html/._Splines-bs017.html +++ b/doc/pub/Splines/html/._Splines-bs017.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -241,7 +273,7 @@ Using the definition of convexity, try to show that a function satisfying the pr
  • 26
  • 27
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs018.html b/doc/pub/Splines/html/._Splines-bs018.html index d9c239863..f71607f7f 100644 --- a/doc/pub/Splines/html/._Splines-bs018.html +++ b/doc/pub/Splines/html/._Splines-bs018.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -248,7 +280,7 @@ When we have found the exact solution, \( \hat{r}=0 \).
  • 27
  • 28
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs019.html b/doc/pub/Splines/html/._Splines-bs019.html index c55d6ae22..fdca46ebd 100644 --- a/doc/pub/Splines/html/._Splines-bs019.html +++ b/doc/pub/Splines/html/._Splines-bs019.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -234,7 +266,7 @@ This quantity is always positive definite.
  • 28
  • 29
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs020.html b/doc/pub/Splines/html/._Splines-bs020.html index 30fecb335..8ee9b869b 100644 --- a/doc/pub/Splines/html/._Splines-bs020.html +++ b/doc/pub/Splines/html/._Splines-bs020.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -237,7 +269,7 @@ instead.
  • 29
  • 30
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs021.html b/doc/pub/Splines/html/._Splines-bs021.html index 84576198a..317308e08 100644 --- a/doc/pub/Splines/html/._Splines-bs021.html +++ b/doc/pub/Splines/html/._Splines-bs021.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -245,7 +277,7 @@ and
  • 30
  • 31
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs022.html b/doc/pub/Splines/html/._Splines-bs022.html index e79c9ffd1..d09d08b38 100644 --- a/doc/pub/Splines/html/._Splines-bs022.html +++ b/doc/pub/Splines/html/._Splines-bs022.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -241,7 +273,7 @@ $$
  • 31
  • 32
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs023.html b/doc/pub/Splines/html/._Splines-bs023.html index 5fbfa7fb8..6d4ad5c74 100644 --- a/doc/pub/Splines/html/._Splines-bs023.html +++ b/doc/pub/Splines/html/._Splines-bs023.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -253,7 +285,7 @@ $$
  • 32
  • 33
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs024.html b/doc/pub/Splines/html/._Splines-bs024.html index e68f417f4..6f14752a5 100644 --- a/doc/pub/Splines/html/._Splines-bs024.html +++ b/doc/pub/Splines/html/._Splines-bs024.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -191,7 +223,43 @@ MathJax.Hub.Config({ -

    The Steepest descent algorithm

    +

    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;
    +  xsd = SteepestDescent(A,b,x0);
    +  cout << "The approximate solution using Steepest Descent is: " << endl;
    +  xsd.Print();
    +  cout << endl;
    +}
    +
    +

    +

    +
    +

    @@ -219,7 +287,7 @@ MathJax.Hub.Config({

  • 33
  • 34
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs025.html b/doc/pub/Splines/html/._Splines-bs025.html index e166ae0cf..1262485a7 100644 --- a/doc/pub/Splines/html/._Splines-bs025.html +++ b/doc/pub/Splines/html/._Splines-bs025.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -191,37 +223,33 @@ MathJax.Hub.Config({ -

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

    +

    The routine for the steepest descent method

    -

    #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;
    -  xsd = SteepestDescent(A,b,x0);
    -  cout << "The approximate solution using Steepest Descent is: " << endl;
    -  xsd.Print();
    -  cout << endl;
    +
    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;
     }
     

    @@ -255,7 +283,7 @@ MathJax.Hub.Config({

  • 34
  • 35
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs026.html b/doc/pub/Splines/html/._Splines-bs026.html index b0bd26ee6..6a4091784 100644 --- a/doc/pub/Splines/html/._Splines-bs026.html +++ b/doc/pub/Splines/html/._Splines-bs026.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -191,40 +223,72 @@ MathJax.Hub.Config({ -

    The routine for the steepest descent method

    -
    -
    -

    +

    Steepest descent example

    +

    - -

    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;
    -}
    +
    +
    import numpy as np
    +import numpy.linalg as la
    +
    +import scipy.optimize as sopt
    +
    +import matplotlib.pyplot as pt
    +from mpl_toolkits.mplot3d import axes3d
    +
    +def f(x):
    +    return 0.5*x[0]**2 + 2.5*x[1]**2
    +
    +def df(x):
    +    return np.array([x[0], 5*x[1]])
    +
    +fig = pt.figure()
    +ax = fig.gca(projection="3d")
    +
    +xmesh, ymesh = np.mgrid[-2:2:50j,-2:2:50j]
    +fmesh = f(np.array([xmesh, ymesh]))
    +ax.plot_surface(xmesh, ymesh, fmesh)
     

    -

    -
    +And then as countor plot +

    + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh)
    +guesses = [np.array([2, 2./5])]
    +
    +

    +Find guesses +

    + +

    x = guesses[-1]
    +s = -df(x)
    +
    +

    +Run it! +

    + + +

    def f1d(alpha):
    +    return f(x + alpha*s)
    +
    +alpha_opt = sopt.golden(f1d)
    +next_guess = x + alpha_opt * s
    +guesses.append(next_guess)
    +print(next_guess)
    +
    +

    +What happened? +

    + + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh, 50)
    +it_array = np.array(guesses)
    +pt.plot(it_array.T[0], it_array.T[1], "x-")
    +

    @@ -251,7 +315,7 @@ MathJax.Hub.Config({

  • 35
  • 36
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs027.html b/doc/pub/Splines/html/._Splines-bs027.html index ca1d578bc..fd7aad1de 100644 --- a/doc/pub/Splines/html/._Splines-bs027.html +++ b/doc/pub/Splines/html/._Splines-bs027.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -247,7 +279,7 @@ $$
  • 36
  • 37
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs028.html b/doc/pub/Splines/html/._Splines-bs028.html index 0221d826d..d7eb316cc 100644 --- a/doc/pub/Splines/html/._Splines-bs028.html +++ b/doc/pub/Splines/html/._Splines-bs028.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -239,7 +271,7 @@ and we want to find \( \beta \) such that \( C(\beta) \) is minimized.
  • 37
  • 38
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs029.html b/doc/pub/Splines/html/._Splines-bs029.html index 1f913575d..50fc19fac 100644 --- a/doc/pub/Splines/html/._Splines-bs029.html +++ b/doc/pub/Splines/html/._Splines-bs029.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -229,7 +261,7 @@ where \( X \) is the design matrix defined above.
  • 38
  • 39
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs030.html b/doc/pub/Splines/html/._Splines-bs030.html index cd86c0601..670f5b681 100644 --- a/doc/pub/Splines/html/._Splines-bs030.html +++ b/doc/pub/Splines/html/._Splines-bs030.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -228,7 +260,7 @@ This result implies that \( C(\beta) \) is a convex function since the matrix \(
  • 39
  • 40
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs031.html b/doc/pub/Splines/html/._Splines-bs031.html index ef3d3335f..08c341ca9 100644 --- a/doc/pub/Splines/html/._Splines-bs031.html +++ b/doc/pub/Splines/html/._Splines-bs031.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -255,7 +287,7 @@ beta_NE = np.40
  • 41
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs032.html b/doc/pub/Splines/html/._Splines-bs032.html index 42591f222..442c13c53 100644 --- a/doc/pub/Splines/html/._Splines-bs032.html +++ b/doc/pub/Splines/html/._Splines-bs032.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -262,6 +294,8 @@ plt.show()
  • 40
  • 41
  • 42
  • +
  • ...
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs033.html b/doc/pub/Splines/html/._Splines-bs033.html index 21dff141e..f84ec47ca 100644 --- a/doc/pub/Splines/html/._Splines-bs033.html +++ b/doc/pub/Splines/html/._Splines-bs033.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -236,6 +268,9 @@ sgdreg.fit(x,y.
  • 40
  • 41
  • 42
  • +
  • 43
  • +
  • ...
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs034.html b/doc/pub/Splines/html/._Splines-bs034.html index 28adb0597..476360c47 100644 --- a/doc/pub/Splines/html/._Splines-bs034.html +++ b/doc/pub/Splines/html/._Splines-bs034.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -268,6 +300,10 @@ beta_ridge = np
  • 40
  • 41
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • ...
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs035.html b/doc/pub/Splines/html/._Splines-bs035.html index 5ec6ed1ec..df7160e8f 100644 --- a/doc/pub/Splines/html/._Splines-bs035.html +++ b/doc/pub/Splines/html/._Splines-bs035.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -191,21 +223,58 @@ MathJax.Hub.Config({ -

    Stochastic Gradient Descent

    - -

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

    Automatic differentiation

    +Python has tools for so-called automatic differentiation. +Consider the following example $$ -C(\mathbf{\beta}) = \sum_{i=1}^n c_i(\mathbf{x}_i, -\mathbf{\beta}). +f(x) = \sin\left(2\pi x + x^2\right) $$ +which has the following derivative +$$ +f'(x) = \cos\left(2\pi x + x^2\right)\left(2\pi + 2x\right) +$$ + +Using autograd we have + +

    + + +

    import autograd.numpy as np
    +
    +# To do elementwise differentiation:
    +from autograd import elementwise_grad as egrad 
    +
    +# To plot:
    +import matplotlib.pyplot as plt 
    +
    +
    +def f(x):
    +    return np.sin(2*np.pi*x + x**2)
    +
    +def f_grad_analytic(x):
    +    return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)
    +
    +# Do the comparison:
    +x = np.linspace(0,1,1000)
    +
    +f_grad = egrad(f)
    +
    +computed = f_grad(x)
    +analytic = f_grad_analytic(x)
    +
    +plt.title('Derivative computed from Autograd compared with the analytical derivative')
    +plt.plot(x,computed,label='autograd')
    +plt.plot(x,analytic,label='analytic')
    +
    +plt.xlabel('x')
    +plt.ylabel('y')
    +plt.legend()
    +
    +plt.show()
    +
    +print("The max absolute difference is: %g"%(np.max(np.abs(computed - analytic))))
    +

    @@ -228,6 +297,11 @@ $$

  • 40
  • 41
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • 45
  • +
  • ...
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs036.html b/doc/pub/Splines/html/._Splines-bs036.html index a04c611a6..8a3ee3b05 100644 --- a/doc/pub/Splines/html/._Splines-bs036.html +++ b/doc/pub/Splines/html/._Splines-bs036.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -189,25 +221,38 @@ MathJax.Hub.Config({

     

     

     

    - + -

    Computation of gradients

    +

    Using autograd

    -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}). -$$ +Here we +experiment with what kind of functions Autograd is capable +of finding the gradient of. The following Python functions are just +meant to illustrate what Autograd can do, but please feel free to +experiment with other, possibly more complicated, functions as well.

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

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f1(x):
    +    return x**3 + 1
    +
    +f1_grad = grad(f1)
    +
    +# Remember to send in float as argument to the computed gradient from Autograd!
    +a = 1.0
    +
    +# See the evaluated gradient at a using autograd:
    +print("The gradient of f1 evaluated at a = %g using autograd is: %g"%(a,f1_grad(a)))
    +
    +# Compare with the analytical derivative, that is f1'(x) = 3*x**2 
    +grad_analytical = 3*a**2
    +print("The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g"%(a,grad_analytical))
    +

    @@ -229,6 +274,12 @@ minibatches. We denote these minibatches by \( B_k \) where

  • 40
  • 41
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • 45
  • +
  • 46
  • +
  • ...
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/._Splines-bs037.html b/doc/pub/Splines/html/._Splines-bs037.html new file mode 100644 index 000000000..cc5dac4df --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs037.html @@ -0,0 +1,324 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Autograd with more complicated functions

    + +

    +To differentiate with respect to two (or more) arguments of a Python +function, Autograd need to know at which variable the function if +being differentiated with respect to. + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f2(x1,x2):
    +    return 3*x1**3 + x2*(x1 - 5) + 1
    +
    +# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1
    +f2_grad_x1 = grad(f2,0)
    +
    +# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad
    +f2_grad_x2 = grad(f2,1)
    +
    +x1 = 1.0
    +x2 = 3.0 
    +
    +print("Evaluating at x1 = %g, x2 = %g"%(x1,x2))
    +print("-"*30)
    +
    +# Compare with the analytical derivatives:
    +
    +# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:
    +f2_grad_x1_analytical = 9*x1**2 + x2
    +
    +# Derivative of f2 w.r.t x2 is: x1 - 5:
    +f2_grad_x2_analytical = x1 - 5
    +
    +# See the evaluated derivations:
    +print("The derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +
    +print()
    +
    +print("The derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +
    +

    +Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs038.html b/doc/pub/Splines/html/._Splines-bs038.html new file mode 100644 index 000000000..07991fdf0 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs038.html @@ -0,0 +1,308 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    More complicated functions using the elements of their arguments directly

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f3(x): # Assumes x is an array of length 5 or higher
    +    return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2
    +
    +f3_grad = grad(f3)
    +
    +x = np.linspace(0,4,5)
    +
    +# Print the computed gradient:
    +print("The computed gradient of f3 is: ", f3_grad(x))
    +
    +# The analytical gradient is: (2, 3, 5, 7, 22*x[4])
    +f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f3 is: ", f3_grad_analytical)
    +
    +

    +Note that in this case, when sending an array as input argument, the +output from Autograd is another array. This is the true gradient of +the function, as opposed to the function in the previous example. By +using arrays to represent the variables, the output from Autograd +might be easier to work with, as the output is closer to what one +could expect form a gradient-evaluting function. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs039.html b/doc/pub/Splines/html/._Splines-bs039.html new file mode 100644 index 000000000..046ce035e --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs039.html @@ -0,0 +1,300 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Functions using mathematical functions from Numpy

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f4(x):
    +    return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)
    +
    +f4_grad = grad(f4)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f4 at x = %g is: %g"%(x,f4_grad(x)))
    +
    +# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi
    +f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f4 at x = %g is: %g"%(x,f4_grad_analytical))
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs040.html b/doc/pub/Splines/html/._Splines-bs040.html new file mode 100644 index 000000000..95c9e987c --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs040.html @@ -0,0 +1,297 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    More autograd

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f5(x):
    +    if x >= 0:
    +        return x**2
    +    else:
    +        return -3*x + 1
    +
    +f5_grad = grad(f5)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f5 at x = %g is: %g"%(x,f5_grad(x)))
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs041.html b/doc/pub/Splines/html/._Splines-bs041.html new file mode 100644 index 000000000..1e1c62f1a --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs041.html @@ -0,0 +1,320 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    And with loops

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f6_for(x):
    +    val = 0
    +    for i in range(10):
    +        val = val + x**i
    +    return val
    +
    +def f6_while(x):
    +    val = 0
    +    i = 0
    +    while i < 10:
    +        val = val + x**i
    +        i = i + 1
    +    return val
    +
    +f6_for_grad = grad(f6_for)
    +f6_while_grad = grad(f6_while)
    +
    +x = 0.5
    +
    +# Print the computed derivaties of f6_for and f6_while
    +print("The computed derivative of f6_for at x = %g is: %g"%(x,f6_for_grad(x)))
    +print("The computed derivative of f6_while at x = %g is: %g"%(x,f6_while_grad(x)))
    +
    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9
    +# The analytical derivative is: sum(i*x**(i-1)) 
    +f6_grad_analytical = 0
    +for i in range(10):
    +    f6_grad_analytical += i*x**(i-1)
    +
    +print("The analytical derivative of f6 at x = %g is: %g"%(x,f6_grad_analytical))
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs042.html b/doc/pub/Splines/html/._Splines-bs042.html new file mode 100644 index 000000000..ad3f9b5c0 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs042.html @@ -0,0 +1,312 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Using recursion

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f7(n): # Assume that n is an integer
    +    if n == 1 or n == 0:
    +        return 1
    +    else:
    +        return n*f7(n-1)
    +
    +f7_grad = grad(f7)
    +
    +n = 2.0
    +
    +print("The computed derivative of f7 at n = %d is: %g"%(n,f7_grad(n)))
    +
    +# The function f7 is an implementation of the factorial of n.
    +# By using the product rule, one can find that the derivative is:
    +
    +f7_grad_analytical = 0
    +for i in range(int(n)-1):
    +    tmp = 1
    +    for k in range(int(n)-1):
    +        if k != i:
    +            tmp *= (n - k)
    +    f7_grad_analytical += tmp
    +
    +print("The analytical derivative of f7 at n = %d is: %g"%(n,f7_grad_analytical))
    +
    +

    +Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs043.html b/doc/pub/Splines/html/._Splines-bs043.html new file mode 100644 index 000000000..5ed7ba8cc --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs043.html @@ -0,0 +1,298 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Unsupported functions

    +Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd. + +

    +Assigning a value to the variable being differentiated with respect to +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f8(x): # Assume x is an array
    +    x[2] = 3
    +    return x*2
    +
    +f8_grad = grad(f8)
    +
    +x = 8.4
    +
    +print("The derivative of f8 is:",f8_grad(x))
    +
    +

    +Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs044.html b/doc/pub/Splines/html/._Splines-bs044.html new file mode 100644 index 000000000..ef4880e16 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs044.html @@ -0,0 +1,313 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    The syntax a.dot(b) when finding the dot product

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9(a): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return a.dot(b)
    +
    +f9_grad = grad(f9)
    +
    +x = np.array([1.0,0.0])
    +
    +print("The derivative of f9 is:",f9_grad(x))
    +
    +

    +Here we are told that the 'dot' function does not belong to Autograd's +version of a Numpy array. To overcome this, an alternative syntax +which also computed the dot product can be used: + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9_alternative(x): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2
    +
    +f9_alternative_grad = grad(f9_alternative)
    +
    +x = np.array([3.0,0.0])
    +
    +print("The gradient of f9 is:",f9_alternative_grad(x))
    +
    +# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively
    +# w.r.t x is (b_1, b_2).
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs045.html b/doc/pub/Splines/html/._Splines-bs045.html new file mode 100644 index 000000000..2d0455a7f --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs045.html @@ -0,0 +1,283 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Recommended to avoid

    +The documentation recommends to avoid inplace operations such as +

    + + +

    a += b
    +a -= b
    +a*= b
    +a /=b
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs046.html b/doc/pub/Splines/html/._Splines-bs046.html new file mode 100644 index 000000000..b157aa647 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs046.html @@ -0,0 +1,287 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Stochastic Gradient Descent

    + +

    +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}). +$$ + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs047.html b/doc/pub/Splines/html/._Splines-bs047.html new file mode 100644 index 000000000..c844607a6 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs047.html @@ -0,0 +1,288 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Computation of gradients

    + +

    +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}). +$$ + +

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

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs048.html b/doc/pub/Splines/html/._Splines-bs048.html new file mode 100644 index 000000000..3f1b4ba5b --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs048.html @@ -0,0 +1,291 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

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

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs049.html b/doc/pub/Splines/html/._Splines-bs049.html new file mode 100644 index 000000000..01af73eb0 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs049.html @@ -0,0 +1,285 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    The gradient step

    + +

    +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}) +$$ + +

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

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs050.html b/doc/pub/Splines/html/._Splines-bs050.html new file mode 100644 index 000000000..550fe3e88 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs050.html @@ -0,0 +1,297 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Simple example code

    + +

    + + +

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

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs051.html b/doc/pub/Splines/html/._Splines-bs051.html new file mode 100644 index 000000000..301a7792b --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs051.html @@ -0,0 +1,281 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

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

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Splines/html/._Splines-bs052.html b/doc/pub/Splines/html/._Splines-bs052.html new file mode 100644 index 000000000..7c61f2b94 --- /dev/null +++ b/doc/pub/Splines/html/._Splines-bs052.html @@ -0,0 +1,311 @@ + + + + + + + +Data Analysis and Machine Learning Lectures: Optimization and Gradient Methods + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Slightly different approach

    + +

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

    +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 c216dd1d9..eb965b485 100644 --- a/doc/pub/Splines/html/Splines-bs.html +++ b/doc/pub/Splines/html/Splines-bs.html @@ -70,16 +70,16 @@ Automatically generated HTML file from DocOnce source ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -91,13 +91,34 @@ Automatically generated HTML file from DocOnce source None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -158,9 +179,9 @@ MathJax.Hub.Config({
  • Steepest descent method
  • Gradient descent method
  • Final expressions
  • -
  • The Steepest descent algorithm
  • -
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • -
  • The routine for the steepest descent method
  • +
  • Simple codes for steepest descent and conjugate gradient using a \( 2\times 2 \) matrix, in c++, Python code to come
  • +
  • The routine for the steepest descent method
  • +
  • Steepest descent example
  • Revisiting our first homework
  • Gradient descent example
  • The derivative of the cost/loss function
  • @@ -169,13 +190,24 @@ MathJax.Hub.Config({
  • Gradient Descent Example
  • And a corresponding example using scikit-learn
  • Gradient descent and Ridge
  • -
  • Stochastic Gradient Descent
  • -
  • Computation of gradients
  • -
  • SGD example
  • -
  • The gradient step
  • -
  • Simple example code
  • -
  • When do we stop?
  • -
  • Slightly different approach
  • +
  • Automatic differentiation
  • +
  • Using autograd
  • +
  • Autograd with more complicated functions
  • +
  • More complicated functions using the elements of their arguments directly
  • +
  • Functions using mathematical functions from Numpy
  • +
  • More autograd
  • +
  • And with loops
  • +
  • Using recursion
  • +
  • Unsupported functions
  • +
  • The syntax a.dot(b) when finding the dot product
  • +
  • Recommended to avoid
  • +
  • Stochastic Gradient Descent
  • +
  • Computation of gradients
  • +
  • SGD example
  • +
  • The gradient step
  • +
  • Simple example code
  • +
  • When do we stop?
  • +
  • Slightly different approach
  • @@ -234,7 +266,7 @@ MathJax.Hub.Config({
  • 9
  • 10
  • ...
  • -
  • 42
  • +
  • 53
  • »
  • diff --git a/doc/pub/Splines/html/Splines-reveal.html b/doc/pub/Splines/html/Splines-reveal.html index 37fcca28c..7e0d32494 100644 --- a/doc/pub/Splines/html/Splines-reveal.html +++ b/doc/pub/Splines/html/Splines-reveal.html @@ -818,12 +818,7 @@ $$
    -

    The Steepest descent algorithm

    -
    - - -
    -

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

    +

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

    @@ -861,7 +856,7 @@ $$

    -

    The routine for the steepest descent method

    +

    The routine for the steepest descent method

    @@ -894,6 +889,76 @@ $$

    +
    +

    Steepest descent example

    + +

    + + +

    import numpy as np
    +import numpy.linalg as la
    +
    +import scipy.optimize as sopt
    +
    +import matplotlib.pyplot as pt
    +from mpl_toolkits.mplot3d import axes3d
    +
    +def f(x):
    +    return 0.5*x[0]**2 + 2.5*x[1]**2
    +
    +def df(x):
    +    return np.array([x[0], 5*x[1]])
    +
    +fig = pt.figure()
    +ax = fig.gca(projection="3d")
    +
    +xmesh, ymesh = np.mgrid[-2:2:50j,-2:2:50j]
    +fmesh = f(np.array([xmesh, ymesh]))
    +ax.plot_surface(xmesh, ymesh, fmesh)
    +
    +

    +And then as countor plot +

    + + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh)
    +guesses = [np.array([2, 2./5])]
    +
    +

    +Find guesses +

    + + +

    x = guesses[-1]
    +s = -df(x)
    +
    +

    +Run it! +

    + + +

    def f1d(alpha):
    +    return f(x + alpha*s)
    +
    +alpha_opt = sopt.golden(f1d)
    +next_guess = x + alpha_opt * s
    +guesses.append(next_guess)
    +print(next_guess)
    +
    +

    +What happened? +

    + + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh, 50)
    +it_array = np.array(guesses)
    +pt.plot(it_array.T[0], it_array.T[1], "x-")
    +
    +
    + +

    Revisiting our first homework

    @@ -1180,7 +1245,404 @@ beta_ridge = np.dot(Z,np.dot(X.T,y))
    -

    Stochastic Gradient Descent

    +

    Automatic differentiation

    +Python has tools for so-called automatic differentiation. +Consider the following example +

     
    +$$ +f(x) = \sin\left(2\pi x + x^2\right) +$$ +

     
    + +which has the following derivative +

     
    +$$ +f'(x) = \cos\left(2\pi x + x^2\right)\left(2\pi + 2x\right) +$$ +

     
    + +Using autograd we have + +

    + + +

    import autograd.numpy as np
    +
    +# To do elementwise differentiation:
    +from autograd import elementwise_grad as egrad 
    +
    +# To plot:
    +import matplotlib.pyplot as plt 
    +
    +
    +def f(x):
    +    return np.sin(2*np.pi*x + x**2)
    +
    +def f_grad_analytic(x):
    +    return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)
    +
    +# Do the comparison:
    +x = np.linspace(0,1,1000)
    +
    +f_grad = egrad(f)
    +
    +computed = f_grad(x)
    +analytic = f_grad_analytic(x)
    +
    +plt.title('Derivative computed from Autograd compared with the analytical derivative')
    +plt.plot(x,computed,label='autograd')
    +plt.plot(x,analytic,label='analytic')
    +
    +plt.xlabel('x')
    +plt.ylabel('y')
    +plt.legend()
    +
    +plt.show()
    +
    +print("The max absolute difference is: %g"%(np.max(np.abs(computed - analytic))))
    +
    +
    + + +
    +

    Using autograd

    + +

    +Here we +experiment with what kind of functions Autograd is capable +of finding the gradient of. The following Python functions are just +meant to illustrate what Autograd can do, but please feel free to +experiment with other, possibly more complicated, functions as well. + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f1(x):
    +    return x**3 + 1
    +
    +f1_grad = grad(f1)
    +
    +# Remember to send in float as argument to the computed gradient from Autograd!
    +a = 1.0
    +
    +# See the evaluated gradient at a using autograd:
    +print("The gradient of f1 evaluated at a = %g using autograd is: %g"%(a,f1_grad(a)))
    +
    +# Compare with the analytical derivative, that is f1'(x) = 3*x**2 
    +grad_analytical = 3*a**2
    +print("The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g"%(a,grad_analytical))
    +
    +
    + + +
    +

    Autograd with more complicated functions

    + +

    +To differentiate with respect to two (or more) arguments of a Python +function, Autograd need to know at which variable the function if +being differentiated with respect to. + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f2(x1,x2):
    +    return 3*x1**3 + x2*(x1 - 5) + 1
    +
    +# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1
    +f2_grad_x1 = grad(f2,0)
    +
    +# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad
    +f2_grad_x2 = grad(f2,1)
    +
    +x1 = 1.0
    +x2 = 3.0 
    +
    +print("Evaluating at x1 = %g, x2 = %g"%(x1,x2))
    +print("-"*30)
    +
    +# Compare with the analytical derivatives:
    +
    +# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:
    +f2_grad_x1_analytical = 9*x1**2 + x2
    +
    +# Derivative of f2 w.r.t x2 is: x1 - 5:
    +f2_grad_x2_analytical = x1 - 5
    +
    +# See the evaluated derivations:
    +print("The derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +
    +print()
    +
    +print("The derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +
    +

    +Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. +

    + + +
    +

    More complicated functions using the elements of their arguments directly

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f3(x): # Assumes x is an array of length 5 or higher
    +    return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2
    +
    +f3_grad = grad(f3)
    +
    +x = np.linspace(0,4,5)
    +
    +# Print the computed gradient:
    +print("The computed gradient of f3 is: ", f3_grad(x))
    +
    +# The analytical gradient is: (2, 3, 5, 7, 22*x[4])
    +f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f3 is: ", f3_grad_analytical)
    +
    +

    +Note that in this case, when sending an array as input argument, the +output from Autograd is another array. This is the true gradient of +the function, as opposed to the function in the previous example. By +using arrays to represent the variables, the output from Autograd +might be easier to work with, as the output is closer to what one +could expect form a gradient-evaluting function. +

    + + +
    +

    Functions using mathematical functions from Numpy

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f4(x):
    +    return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)
    +
    +f4_grad = grad(f4)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f4 at x = %g is: %g"%(x,f4_grad(x)))
    +
    +# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi
    +f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f4 at x = %g is: %g"%(x,f4_grad_analytical))
    +
    +
    + + +
    +

    More autograd

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f5(x):
    +    if x >= 0:
    +        return x**2
    +    else:
    +        return -3*x + 1
    +
    +f5_grad = grad(f5)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f5 at x = %g is: %g"%(x,f5_grad(x)))
    +
    +
    + + +
    +

    And with loops

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f6_for(x):
    +    val = 0
    +    for i in range(10):
    +        val = val + x**i
    +    return val
    +
    +def f6_while(x):
    +    val = 0
    +    i = 0
    +    while i < 10:
    +        val = val + x**i
    +        i = i + 1
    +    return val
    +
    +f6_for_grad = grad(f6_for)
    +f6_while_grad = grad(f6_while)
    +
    +x = 0.5
    +
    +# Print the computed derivaties of f6_for and f6_while
    +print("The computed derivative of f6_for at x = %g is: %g"%(x,f6_for_grad(x)))
    +print("The computed derivative of f6_while at x = %g is: %g"%(x,f6_while_grad(x)))
    +
    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9
    +# The analytical derivative is: sum(i*x**(i-1)) 
    +f6_grad_analytical = 0
    +for i in range(10):
    +    f6_grad_analytical += i*x**(i-1)
    +
    +print("The analytical derivative of f6 at x = %g is: %g"%(x,f6_grad_analytical))
    +
    +
    + + +
    +

    Using recursion

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f7(n): # Assume that n is an integer
    +    if n == 1 or n == 0:
    +        return 1
    +    else:
    +        return n*f7(n-1)
    +
    +f7_grad = grad(f7)
    +
    +n = 2.0
    +
    +print("The computed derivative of f7 at n = %d is: %g"%(n,f7_grad(n)))
    +
    +# The function f7 is an implementation of the factorial of n.
    +# By using the product rule, one can find that the derivative is:
    +
    +f7_grad_analytical = 0
    +for i in range(int(n)-1):
    +    tmp = 1
    +    for k in range(int(n)-1):
    +        if k != i:
    +            tmp *= (n - k)
    +    f7_grad_analytical += tmp
    +
    +print("The analytical derivative of f7 at n = %d is: %g"%(n,f7_grad_analytical))
    +
    +

    +Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. +

    + + +
    +

    Unsupported functions

    +Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd. + +

    +Assigning a value to the variable being differentiated with respect to +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f8(x): # Assume x is an array
    +    x[2] = 3
    +    return x*2
    +
    +f8_grad = grad(f8)
    +
    +x = 8.4
    +
    +print("The derivative of f8 is:",f8_grad(x))
    +
    +

    +Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. +

    + + +
    +

    The syntax a.dot(b) when finding the dot product

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9(a): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return a.dot(b)
    +
    +f9_grad = grad(f9)
    +
    +x = np.array([1.0,0.0])
    +
    +print("The derivative of f9 is:",f9_grad(x))
    +
    +

    +Here we are told that the 'dot' function does not belong to Autograd's +version of a Numpy array. To overcome this, an alternative syntax +which also computed the dot product can be used: + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9_alternative(x): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2
    +
    +f9_alternative_grad = grad(f9_alternative)
    +
    +x = np.array([3.0,0.0])
    +
    +print("The gradient of f9 is:",f9_alternative_grad(x))
    +
    +# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively
    +# w.r.t x is (b_1, b_2).
    +
    +
    + + +
    +

    Recommended to avoid

    +The documentation recommends to avoid inplace operations such as +

    + + +

    a += b
    +a -= b
    +a*= b
    +a /=b
    +
    +
    + + +
    +

    Stochastic Gradient Descent

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

    -

    Computation of gradients

    +

    Computation of gradients

    This in turn means that the gradient can be @@ -1222,7 +1684,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 @@ -1248,7 +1710,7 @@ $$
    -

    The gradient step

    +

    The gradient step

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

    -

    Simple example code

    +

    Simple example code

    @@ -1301,7 +1763,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? @@ -1318,7 +1780,7 @@ gave the lowest value.

    -

    Slightly different approach

    +

    Slightly different approach

    Another approach is to let the step length \( \gamma_j \) depend on the diff --git a/doc/pub/Splines/html/Splines-solarized.html b/doc/pub/Splines/html/Splines-solarized.html index 663120f72..03500a8a5 100644 --- a/doc/pub/Splines/html/Splines-solarized.html +++ b/doc/pub/Splines/html/Splines-solarized.html @@ -90,16 +90,16 @@ div { text-align: justify; text-justify: inter-word; } ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -111,13 +111,34 @@ div { text-align: justify; text-justify: inter-word; } None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -767,12 +788,7 @@ $$











    -

    The Steepest descent algorithm

    - -

    -









    - -

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

    +

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

    @@ -812,7 +828,7 @@ $$











    -

    The routine for the steepest descent method

    +

    The routine for the steepest descent method

    @@ -845,6 +861,75 @@ $$

    +

    +









    + +

    Steepest descent example

    + +

    + + +

    import numpy as np
    +import numpy.linalg as la
    +
    +import scipy.optimize as sopt
    +
    +import matplotlib.pyplot as pt
    +from mpl_toolkits.mplot3d import axes3d
    +
    +def f(x):
    +    return 0.5*x[0]**2 + 2.5*x[1]**2
    +
    +def df(x):
    +    return np.array([x[0], 5*x[1]])
    +
    +fig = pt.figure()
    +ax = fig.gca(projection="3d")
    +
    +xmesh, ymesh = np.mgrid[-2:2:50j,-2:2:50j]
    +fmesh = f(np.array([xmesh, ymesh]))
    +ax.plot_surface(xmesh, ymesh, fmesh)
    +
    +

    +And then as countor plot +

    + + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh)
    +guesses = [np.array([2, 2./5])]
    +
    +

    +Find guesses +

    + + +

    x = guesses[-1]
    +s = -df(x)
    +
    +

    +Run it! +

    + + +

    def f1d(alpha):
    +    return f(x + alpha*s)
    +
    +alpha_opt = sopt.golden(f1d)
    +next_guess = x + alpha_opt * s
    +guesses.append(next_guess)
    +print(next_guess)
    +
    +

    +What happened? +

    + + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh, 50)
    +it_array = np.array(guesses)
    +pt.plot(it_array.T[0], it_array.T[1], "x-")
    +

    @@ -1106,7 +1191,393 @@ beta_ridge = np.dot(Z,np.dot(X.T,y))











    -

    Stochastic Gradient Descent

    +

    Automatic differentiation

    +Python has tools for so-called automatic differentiation. +Consider the following example +$$ +f(x) = \sin\left(2\pi x + x^2\right) +$$ + +which has the following derivative +$$ +f'(x) = \cos\left(2\pi x + x^2\right)\left(2\pi + 2x\right) +$$ + +Using autograd we have + +

    + + +

    import autograd.numpy as np
    +
    +# To do elementwise differentiation:
    +from autograd import elementwise_grad as egrad 
    +
    +# To plot:
    +import matplotlib.pyplot as plt 
    +
    +
    +def f(x):
    +    return np.sin(2*np.pi*x + x**2)
    +
    +def f_grad_analytic(x):
    +    return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)
    +
    +# Do the comparison:
    +x = np.linspace(0,1,1000)
    +
    +f_grad = egrad(f)
    +
    +computed = f_grad(x)
    +analytic = f_grad_analytic(x)
    +
    +plt.title('Derivative computed from Autograd compared with the analytical derivative')
    +plt.plot(x,computed,label='autograd')
    +plt.plot(x,analytic,label='analytic')
    +
    +plt.xlabel('x')
    +plt.ylabel('y')
    +plt.legend()
    +
    +plt.show()
    +
    +print("The max absolute difference is: %g"%(np.max(np.abs(computed - analytic))))
    +
    +

    + + +

    Using autograd

    + +

    +Here we +experiment with what kind of functions Autograd is capable +of finding the gradient of. The following Python functions are just +meant to illustrate what Autograd can do, but please feel free to +experiment with other, possibly more complicated, functions as well. + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f1(x):
    +    return x**3 + 1
    +
    +f1_grad = grad(f1)
    +
    +# Remember to send in float as argument to the computed gradient from Autograd!
    +a = 1.0
    +
    +# See the evaluated gradient at a using autograd:
    +print("The gradient of f1 evaluated at a = %g using autograd is: %g"%(a,f1_grad(a)))
    +
    +# Compare with the analytical derivative, that is f1'(x) = 3*x**2 
    +grad_analytical = 3*a**2
    +print("The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g"%(a,grad_analytical))
    +
    +

    +









    + +

    Autograd with more complicated functions

    + +

    +To differentiate with respect to two (or more) arguments of a Python +function, Autograd need to know at which variable the function if +being differentiated with respect to. + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f2(x1,x2):
    +    return 3*x1**3 + x2*(x1 - 5) + 1
    +
    +# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1
    +f2_grad_x1 = grad(f2,0)
    +
    +# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad
    +f2_grad_x2 = grad(f2,1)
    +
    +x1 = 1.0
    +x2 = 3.0 
    +
    +print("Evaluating at x1 = %g, x2 = %g"%(x1,x2))
    +print("-"*30)
    +
    +# Compare with the analytical derivatives:
    +
    +# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:
    +f2_grad_x1_analytical = 9*x1**2 + x2
    +
    +# Derivative of f2 w.r.t x2 is: x1 - 5:
    +f2_grad_x2_analytical = x1 - 5
    +
    +# See the evaluated derivations:
    +print("The derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +
    +print()
    +
    +print("The derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +
    +

    +Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. + +

    +









    + +

    More complicated functions using the elements of their arguments directly

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f3(x): # Assumes x is an array of length 5 or higher
    +    return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2
    +
    +f3_grad = grad(f3)
    +
    +x = np.linspace(0,4,5)
    +
    +# Print the computed gradient:
    +print("The computed gradient of f3 is: ", f3_grad(x))
    +
    +# The analytical gradient is: (2, 3, 5, 7, 22*x[4])
    +f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f3 is: ", f3_grad_analytical)
    +
    +

    +Note that in this case, when sending an array as input argument, the +output from Autograd is another array. This is the true gradient of +the function, as opposed to the function in the previous example. By +using arrays to represent the variables, the output from Autograd +might be easier to work with, as the output is closer to what one +could expect form a gradient-evaluting function. + +

    + + +

    Functions using mathematical functions from Numpy

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f4(x):
    +    return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)
    +
    +f4_grad = grad(f4)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f4 at x = %g is: %g"%(x,f4_grad(x)))
    +
    +# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi
    +f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f4 at x = %g is: %g"%(x,f4_grad_analytical))
    +
    +

    +









    + +

    More autograd

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f5(x):
    +    if x >= 0:
    +        return x**2
    +    else:
    +        return -3*x + 1
    +
    +f5_grad = grad(f5)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f5 at x = %g is: %g"%(x,f5_grad(x)))
    +
    +

    +









    + +

    And with loops

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f6_for(x):
    +    val = 0
    +    for i in range(10):
    +        val = val + x**i
    +    return val
    +
    +def f6_while(x):
    +    val = 0
    +    i = 0
    +    while i < 10:
    +        val = val + x**i
    +        i = i + 1
    +    return val
    +
    +f6_for_grad = grad(f6_for)
    +f6_while_grad = grad(f6_while)
    +
    +x = 0.5
    +
    +# Print the computed derivaties of f6_for and f6_while
    +print("The computed derivative of f6_for at x = %g is: %g"%(x,f6_for_grad(x)))
    +print("The computed derivative of f6_while at x = %g is: %g"%(x,f6_while_grad(x)))
    +
    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9
    +# The analytical derivative is: sum(i*x**(i-1)) 
    +f6_grad_analytical = 0
    +for i in range(10):
    +    f6_grad_analytical += i*x**(i-1)
    +
    +print("The analytical derivative of f6 at x = %g is: %g"%(x,f6_grad_analytical))
    +
    +

    +









    + +

    Using recursion

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f7(n): # Assume that n is an integer
    +    if n == 1 or n == 0:
    +        return 1
    +    else:
    +        return n*f7(n-1)
    +
    +f7_grad = grad(f7)
    +
    +n = 2.0
    +
    +print("The computed derivative of f7 at n = %d is: %g"%(n,f7_grad(n)))
    +
    +# The function f7 is an implementation of the factorial of n.
    +# By using the product rule, one can find that the derivative is:
    +
    +f7_grad_analytical = 0
    +for i in range(int(n)-1):
    +    tmp = 1
    +    for k in range(int(n)-1):
    +        if k != i:
    +            tmp *= (n - k)
    +    f7_grad_analytical += tmp
    +
    +print("The analytical derivative of f7 at n = %d is: %g"%(n,f7_grad_analytical))
    +
    +

    +Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. + +

    +









    + +

    Unsupported functions

    +Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd. + +

    +Assigning a value to the variable being differentiated with respect to +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f8(x): # Assume x is an array
    +    x[2] = 3
    +    return x*2
    +
    +f8_grad = grad(f8)
    +
    +x = 8.4
    +
    +print("The derivative of f8 is:",f8_grad(x))
    +
    +

    +Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. + +

    +









    + +

    The syntax a.dot(b) when finding the dot product

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9(a): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return a.dot(b)
    +
    +f9_grad = grad(f9)
    +
    +x = np.array([1.0,0.0])
    +
    +print("The derivative of f9 is:",f9_grad(x))
    +
    +

    +Here we are told that the 'dot' function does not belong to Autograd's +version of a Numpy array. To overcome this, an alternative syntax +which also computed the dot product can be used: + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9_alternative(x): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2
    +
    +f9_alternative_grad = grad(f9_alternative)
    +
    +x = np.array([3.0,0.0])
    +
    +print("The gradient of f9 is:",f9_alternative_grad(x))
    +
    +# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively
    +# w.r.t x is (b_1, b_2).
    +
    +

    +









    + +

    Recommended to avoid

    +The documentation recommends to avoid inplace operations such as +

    + + +

    a += b
    +a -= b
    +a*= b
    +a /=b
    +
    +

    +









    + +

    Stochastic Gradient Descent

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











    -

    Computation of gradients

    +

    Computation of gradients

    This in turn means that the gradient can be @@ -1144,7 +1615,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 @@ -1168,7 +1639,7 @@ $$











    -

    The gradient step

    +

    The gradient step

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











    -

    Simple example code

    +

    Simple example code

    @@ -1219,7 +1690,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? @@ -1236,7 +1707,7 @@ gave the lowest value.











    -

    Slightly different approach

    +

    Slightly different approach

    Another approach is to let the step length \( \gamma_j \) depend on the diff --git a/doc/pub/Splines/html/Splines.html b/doc/pub/Splines/html/Splines.html index 30682d1e4..732af37d2 100644 --- a/doc/pub/Splines/html/Splines.html +++ b/doc/pub/Splines/html/Splines.html @@ -95,16 +95,16 @@ div { text-align: justify; text-justify: inter-word; } ('Steepest descent method', 2, None, '___sec20'), ('Gradient descent method', 2, None, '___sec21'), ('Final expressions', 2, None, '___sec22'), - ('The Steepest descent algorithm', 2, None, '___sec23'), ('Simple codes for steepest descent and conjugate gradient ' 'using a $2\\times 2$ matrix, in c++, Python code to come', 2, None, - '___sec24'), + '___sec23'), ('The routine for the steepest descent method', 2, None, - '___sec25'), + '___sec24'), + ('Steepest descent example', 2, None, '___sec25'), ('Revisiting our first homework', 2, None, '___sec26'), ('Gradient descent example', 2, None, '___sec27'), ('The derivative of the cost/loss function', 2, None, '___sec28'), @@ -116,13 +116,34 @@ div { text-align: justify; text-justify: inter-word; } None, '___sec32'), ('Gradient descent and Ridge', 2, None, '___sec33'), - ('Stochastic Gradient Descent', 2, None, '___sec34'), - ('Computation of gradients', 2, None, '___sec35'), - ('SGD example', 2, None, '___sec36'), - ('The gradient step', 2, None, '___sec37'), - ('Simple example code', 2, None, '___sec38'), - ('When do we stop?', 2, None, '___sec39'), - ('Slightly different approach', 2, None, '___sec40')]} + ('Automatic differentiation', 2, None, '___sec34'), + ('Using autograd', 2, None, '___sec35'), + ('Autograd with more complicated functions', 2, None, '___sec36'), + ('More complicated functions using the elements of their ' + 'arguments directly', + 2, + None, + '___sec37'), + ('Functions using mathematical functions from Numpy', + 2, + None, + '___sec38'), + ('More autograd', 2, None, '___sec39'), + ('And with loops', 2, None, '___sec40'), + ('Using recursion', 2, None, '___sec41'), + ('Unsupported functions', 2, None, '___sec42'), + ('The syntax a.dot(b) when finding the dot product', + 2, + None, + '___sec43'), + ('Recommended to avoid', 2, None, '___sec44'), + ('Stochastic Gradient Descent', 2, None, '___sec45'), + ('Computation of gradients', 2, None, '___sec46'), + ('SGD example', 2, None, '___sec47'), + ('The gradient step', 2, None, '___sec48'), + ('Simple example code', 2, None, '___sec49'), + ('When do we stop?', 2, None, '___sec50'), + ('Slightly different approach', 2, None, '___sec51')]} end of tocinfo --> @@ -772,12 +793,7 @@ $$











    -

    The Steepest descent algorithm

    - -

    -









    - -

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

    +

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

    @@ -817,7 +833,7 @@ $$











    -

    The routine for the steepest descent method

    +

    The routine for the steepest descent method

    @@ -850,6 +866,75 @@ $$

    +

    +









    + +

    Steepest descent example

    + +

    + + +

    import numpy as np
    +import numpy.linalg as la
    +
    +import scipy.optimize as sopt
    +
    +import matplotlib.pyplot as pt
    +from mpl_toolkits.mplot3d import axes3d
    +
    +def f(x):
    +    return 0.5*x[0]**2 + 2.5*x[1]**2
    +
    +def df(x):
    +    return np.array([x[0], 5*x[1]])
    +
    +fig = pt.figure()
    +ax = fig.gca(projection="3d")
    +
    +xmesh, ymesh = np.mgrid[-2:2:50j,-2:2:50j]
    +fmesh = f(np.array([xmesh, ymesh]))
    +ax.plot_surface(xmesh, ymesh, fmesh)
    +
    +

    +And then as countor plot +

    + + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh)
    +guesses = [np.array([2, 2./5])]
    +
    +

    +Find guesses +

    + + +

    x = guesses[-1]
    +s = -df(x)
    +
    +

    +Run it! +

    + + +

    def f1d(alpha):
    +    return f(x + alpha*s)
    +
    +alpha_opt = sopt.golden(f1d)
    +next_guess = x + alpha_opt * s
    +guesses.append(next_guess)
    +print(next_guess)
    +
    +

    +What happened? +

    + + +

    pt.axis("equal")
    +pt.contour(xmesh, ymesh, fmesh, 50)
    +it_array = np.array(guesses)
    +pt.plot(it_array.T[0], it_array.T[1], "x-")
    +

    @@ -1111,7 +1196,393 @@ beta_ridge = np











    -

    Stochastic Gradient Descent

    +

    Automatic differentiation

    +Python has tools for so-called automatic differentiation. +Consider the following example +$$ +f(x) = \sin\left(2\pi x + x^2\right) +$$ + +which has the following derivative +$$ +f'(x) = \cos\left(2\pi x + x^2\right)\left(2\pi + 2x\right) +$$ + +Using autograd we have + +

    + + +

    import autograd.numpy as np
    +
    +# To do elementwise differentiation:
    +from autograd import elementwise_grad as egrad 
    +
    +# To plot:
    +import matplotlib.pyplot as plt 
    +
    +
    +def f(x):
    +    return np.sin(2*np.pi*x + x**2)
    +
    +def f_grad_analytic(x):
    +    return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)
    +
    +# Do the comparison:
    +x = np.linspace(0,1,1000)
    +
    +f_grad = egrad(f)
    +
    +computed = f_grad(x)
    +analytic = f_grad_analytic(x)
    +
    +plt.title('Derivative computed from Autograd compared with the analytical derivative')
    +plt.plot(x,computed,label='autograd')
    +plt.plot(x,analytic,label='analytic')
    +
    +plt.xlabel('x')
    +plt.ylabel('y')
    +plt.legend()
    +
    +plt.show()
    +
    +print("The max absolute difference is: %g"%(np.max(np.abs(computed - analytic))))
    +
    +

    + + +

    Using autograd

    + +

    +Here we +experiment with what kind of functions Autograd is capable +of finding the gradient of. The following Python functions are just +meant to illustrate what Autograd can do, but please feel free to +experiment with other, possibly more complicated, functions as well. + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f1(x):
    +    return x**3 + 1
    +
    +f1_grad = grad(f1)
    +
    +# Remember to send in float as argument to the computed gradient from Autograd!
    +a = 1.0
    +
    +# See the evaluated gradient at a using autograd:
    +print("The gradient of f1 evaluated at a = %g using autograd is: %g"%(a,f1_grad(a)))
    +
    +# Compare with the analytical derivative, that is f1'(x) = 3*x**2 
    +grad_analytical = 3*a**2
    +print("The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g"%(a,grad_analytical))
    +
    +

    +









    + +

    Autograd with more complicated functions

    + +

    +To differentiate with respect to two (or more) arguments of a Python +function, Autograd need to know at which variable the function if +being differentiated with respect to. + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f2(x1,x2):
    +    return 3*x1**3 + x2*(x1 - 5) + 1
    +
    +# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1
    +f2_grad_x1 = grad(f2,0)
    +
    +# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad
    +f2_grad_x2 = grad(f2,1)
    +
    +x1 = 1.0
    +x2 = 3.0 
    +
    +print("Evaluating at x1 = %g, x2 = %g"%(x1,x2))
    +print("-"*30)
    +
    +# Compare with the analytical derivatives:
    +
    +# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:
    +f2_grad_x1_analytical = 9*x1**2 + x2
    +
    +# Derivative of f2 w.r.t x2 is: x1 - 5:
    +f2_grad_x2_analytical = x1 - 5
    +
    +# See the evaluated derivations:
    +print("The derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) ))
    +
    +print()
    +
    +print("The derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +print("The analytical derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) ))
    +
    +

    +Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. + +

    +









    + +

    More complicated functions using the elements of their arguments directly

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f3(x): # Assumes x is an array of length 5 or higher
    +    return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2
    +
    +f3_grad = grad(f3)
    +
    +x = np.linspace(0,4,5)
    +
    +# Print the computed gradient:
    +print("The computed gradient of f3 is: ", f3_grad(x))
    +
    +# The analytical gradient is: (2, 3, 5, 7, 22*x[4])
    +f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f3 is: ", f3_grad_analytical)
    +
    +

    +Note that in this case, when sending an array as input argument, the +output from Autograd is another array. This is the true gradient of +the function, as opposed to the function in the previous example. By +using arrays to represent the variables, the output from Autograd +might be easier to work with, as the output is closer to what one +could expect form a gradient-evaluting function. + +

    + + +

    Functions using mathematical functions from Numpy

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f4(x):
    +    return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)
    +
    +f4_grad = grad(f4)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f4 at x = %g is: %g"%(x,f4_grad(x)))
    +
    +# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi
    +f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi
    +
    +# Print the analytical gradient:
    +print("The analytical gradient of f4 at x = %g is: %g"%(x,f4_grad_analytical))
    +
    +

    +









    + +

    More autograd

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f5(x):
    +    if x >= 0:
    +        return x**2
    +    else:
    +        return -3*x + 1
    +
    +f5_grad = grad(f5)
    +
    +x = 2.7
    +
    +# Print the computed derivative:
    +print("The computed derivative of f5 at x = %g is: %g"%(x,f5_grad(x)))
    +
    +

    +









    + +

    And with loops

    + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f6_for(x):
    +    val = 0
    +    for i in range(10):
    +        val = val + x**i
    +    return val
    +
    +def f6_while(x):
    +    val = 0
    +    i = 0
    +    while i < 10:
    +        val = val + x**i
    +        i = i + 1
    +    return val
    +
    +f6_for_grad = grad(f6_for)
    +f6_while_grad = grad(f6_while)
    +
    +x = 0.5
    +
    +# Print the computed derivaties of f6_for and f6_while
    +print("The computed derivative of f6_for at x = %g is: %g"%(x,f6_for_grad(x)))
    +print("The computed derivative of f6_while at x = %g is: %g"%(x,f6_while_grad(x)))
    +
    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9
    +# The analytical derivative is: sum(i*x**(i-1)) 
    +f6_grad_analytical = 0
    +for i in range(10):
    +    f6_grad_analytical += i*x**(i-1)
    +
    +print("The analytical derivative of f6 at x = %g is: %g"%(x,f6_grad_analytical))
    +
    +

    +









    + +

    Using recursion

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +
    +def f7(n): # Assume that n is an integer
    +    if n == 1 or n == 0:
    +        return 1
    +    else:
    +        return n*f7(n-1)
    +
    +f7_grad = grad(f7)
    +
    +n = 2.0
    +
    +print("The computed derivative of f7 at n = %d is: %g"%(n,f7_grad(n)))
    +
    +# The function f7 is an implementation of the factorial of n.
    +# By using the product rule, one can find that the derivative is:
    +
    +f7_grad_analytical = 0
    +for i in range(int(n)-1):
    +    tmp = 1
    +    for k in range(int(n)-1):
    +        if k != i:
    +            tmp *= (n - k)
    +    f7_grad_analytical += tmp
    +
    +print("The analytical derivative of f7 at n = %d is: %g"%(n,f7_grad_analytical))
    +
    +

    +Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. + +

    +









    + +

    Unsupported functions

    +Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd. + +

    +Assigning a value to the variable being differentiated with respect to +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f8(x): # Assume x is an array
    +    x[2] = 3
    +    return x*2
    +
    +f8_grad = grad(f8)
    +
    +x = 8.4
    +
    +print("The derivative of f8 is:",f8_grad(x))
    +
    +

    +Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. + +

    +









    + +

    The syntax a.dot(b) when finding the dot product

    +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9(a): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return a.dot(b)
    +
    +f9_grad = grad(f9)
    +
    +x = np.array([1.0,0.0])
    +
    +print("The derivative of f9 is:",f9_grad(x))
    +
    +

    +Here we are told that the 'dot' function does not belong to Autograd's +version of a Numpy array. To overcome this, an alternative syntax +which also computed the dot product can be used: + +

    + + +

    import autograd.numpy as np
    +from autograd import grad
    +def f9_alternative(x): # Assume a is an array with 2 elements
    +    b = np.array([1.0,2.0])
    +    return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2
    +
    +f9_alternative_grad = grad(f9_alternative)
    +
    +x = np.array([3.0,0.0])
    +
    +print("The gradient of f9 is:",f9_alternative_grad(x))
    +
    +# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively
    +# w.r.t x is (b_1, b_2).
    +
    +

    +









    + +

    Recommended to avoid

    +The documentation recommends to avoid inplace operations such as +

    + + +

    a += b
    +a -= b
    +a*= b
    +a /=b
    +
    +

    +









    + +

    Stochastic Gradient Descent

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











    -

    Computation of gradients

    +

    Computation of gradients

    This in turn means that the gradient can be @@ -1149,7 +1620,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 @@ -1173,7 +1644,7 @@ $$











    -

    The gradient step

    +

    The gradient step

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











    -

    Simple example code

    +

    Simple example code

    @@ -1224,7 +1695,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? @@ -1241,7 +1712,7 @@ gave the lowest value.











    -

    Slightly different approach

    +

    Slightly different approach

    Another approach is to let the step length \( \gamma_j \) depend on the diff --git a/doc/pub/Splines/ipynb/Splines.ipynb b/doc/pub/Splines/ipynb/Splines.ipynb index b6216c22c..add625871 100644 --- a/doc/pub/Splines/ipynb/Splines.ipynb +++ b/doc/pub/Splines/ipynb/Splines.ipynb @@ -790,9 +790,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## The Steepest descent algorithm\n", - "\n", - "\n", "## Simple codes for steepest descent and conjugate gradient using a $2\\times 2$ matrix, in c++, Python code to come" ] }, @@ -861,6 +858,181 @@ " }\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Steepest descent example" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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09HRwfDw8IyHupows26fz8eKFSsmvWqQZdmarrJlyxaKior41a9+RSQSYevWrbz77rsHLSAnc/4899xz3HLLLZx00kmoqspxxx2HEILbbrvNOubuu++2qIw0jtKAHIuf/exnXHTRRWNuT7YCfKwhPz+f73//+9bvdrudVatWsWrVKq666iqEEHi9XrZt28bmzZu54447LI45VnoX2wQR6/g2uhNOkiRcLhculyuhYqKrq4uGhoa4UVlmoSvW32Pfvn10dXUdFE107ATvWKlcrPa4ra0tjpKZqmOb2aBSUlJCVVVV0ln31q1b+da3vsVFF13EG2+8YRVSD/ZopWTOn9hjFEUhNzeXgYGBT5JH8ScOR2xAPv300+nu7h5z+5133sk///M/W/9XFMXylJgKfve733HLLbdQX19PXV3duEL00tJSK4NTFIWtW7dO+bmOJJgeGZ/97Gf57Gc/CxgBq7Oz0zL4/+lPf0pfX5819mnr1q2WmD+ZDDKRYiI2+LW2tlqjslwuFx6Ph4KCAmpqalIu4TLNehwOxxipnM1mY9asWXH1iVhXud7e3oSucrGt06qq0tjYSDAYnJI/RygU4q677qK2tpZf/vKXLFmyJHUvOo3DhiM2IL/66qsT3v/UU0/x4osv8tprryXMNoqLi9m/f7/1e3t7O8XFxdbvy5cv5w9/+APr16+fdC2vv/76Mb3rS5JEcXExF1xwARdccAFgFGsuvfRSOjs7Wbt2Ld/4xjfQNG2MwX+yAXR08FNVlYaGBoaGhigoKCAYDLJlyxZcLldKRmXFNnhMZYLHeK5yJh9tusq53W4URWFwcJDS0lIWL16cdFZsDvC9+OKLef311w+ajngiTHb+xB5TUlJi+T+nehLK0YYjNiBPhFdeeYUf/OAHvPnmm+PycGvXrqWxsZGWlhaKi4t55pln+PWvf23dn844Zga3282NN94Y54YXCATYvn07dXV1PPDAA1YTRSzVkcwklL6+Ppqampg/fz5LliwZY01qaqZbWlqmNSrL5LpHN3hMF06nk8LCQssUKRKJUF9fj8/no6CggO7ubjo6OiZdZzAY5I477mD79u386le/OqzFr8nOH4DzzjuPn//855x00kk8++yznHbaaZ+kCR6fSByVKouKigrC4bC1G69bt45HH32Uzs5OrrjiCjZt2gQYkwi++c1vomkal19+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\n", + "text/plain": [ + "

    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "import numpy as np\n", + "import numpy.linalg as la\n", + "\n", + "import scipy.optimize as sopt\n", + "\n", + "import matplotlib.pyplot as pt\n", + "from mpl_toolkits.mplot3d import axes3d\n", + "\n", + "def f(x):\n", + " return 0.5*x[0]**2 + 2.5*x[1]**2\n", + "\n", + "def df(x):\n", + " return np.array([x[0], 5*x[1]])\n", + "\n", + "fig = pt.figure()\n", + "ax = fig.gca(projection=\"3d\")\n", + "\n", + "xmesh, ymesh = np.mgrid[-2:2:50j,-2:2:50j]\n", + "fmesh = f(np.array([xmesh, ymesh]))\n", + "ax.plot_surface(xmesh, ymesh, fmesh)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And then as countor plot" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pt.axis(\"equal\")\n", + "pt.contour(xmesh, ymesh, fmesh)\n", + "guesses = [np.array([2, 2./5])]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find guesses" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "guesses = [np.array([2.0, 2./5])]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run it!" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1.33333333 -0.26666667]\n" + ] + } + ], + "source": [ + "x = guesses[-1]\n", + "s = -df(x)\n", + "def f1d(alpha):\n", + " return f(x + alpha*s)\n", + "\n", + "alpha_opt = sopt.golden(f1d)\n", + "next_guess = x + alpha_opt * s\n", + "guesses.append(next_guess)\n", + "print(next_guess)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What happened?" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pt.axis(\"equal\")\n", + "pt.contour(xmesh, ymesh, fmesh, 50)\n", + "it_array = np.array(guesses)\n", + "pt.plot(it_array.T[0], it_array.T[1], \"x-\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1043,10 +1215,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1080,14 +1250,10 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [], "source": [ - "%matplotlib inline\n", - "\n", "\n", "# Importing various packages\n", "from random import random, seed\n", @@ -1138,10 +1304,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [], "source": [ "# Importing various packages\n", @@ -1224,10 +1388,8 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1257,6 +1419,491 @@ "print(np.linalg.norm(beta_ridge)) #||beta||" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Automatic differentiation\n", + "Python has tools for so-called **automatic differentiation**.\n", + "Consider the following example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(x) = \\sin\\left(2\\pi x + x^2\\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which has the following derivative" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using **autograd** we have" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "\n", + "# To do elementwise differentiation:\n", + "from autograd import elementwise_grad as egrad \n", + "\n", + "# To plot:\n", + "import matplotlib.pyplot as plt \n", + "\n", + "\n", + "def f(x):\n", + " return np.sin(2*np.pi*x + x**2)\n", + "\n", + "def f_grad_analytic(x):\n", + " return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)\n", + "\n", + "# Do the comparison:\n", + "x = np.linspace(0,1,1000)\n", + "\n", + "f_grad = egrad(f)\n", + "\n", + "computed = f_grad(x)\n", + "analytic = f_grad_analytic(x)\n", + "\n", + "plt.title('Derivative computed from Autograd compared with the analytical derivative')\n", + "plt.plot(x,computed,label='autograd')\n", + "plt.plot(x,analytic,label='analytic')\n", + "\n", + "plt.xlabel('x')\n", + "plt.ylabel('y')\n", + "plt.legend()\n", + "\n", + "plt.show()\n", + "\n", + "print(\"The max absolute difference is: %g\"%(np.max(np.abs(computed - analytic))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Using autograd\n", + "\n", + "Here we\n", + "experiment with what kind of functions Autograd is capable\n", + "of finding the gradient of. The following Python functions are just\n", + "meant to illustrate what Autograd can do, but please feel free to\n", + "experiment with other, possibly more complicated, functions as well." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "\n", + "def f1(x):\n", + " return x**3 + 1\n", + "\n", + "f1_grad = grad(f1)\n", + "\n", + "# Remember to send in float as argument to the computed gradient from Autograd!\n", + "a = 1.0\n", + "\n", + "# See the evaluated gradient at a using autograd:\n", + "print(\"The gradient of f1 evaluated at a = %g using autograd is: %g\"%(a,f1_grad(a)))\n", + "\n", + "# Compare with the analytical derivative, that is f1'(x) = 3*x**2 \n", + "grad_analytical = 3*a**2\n", + "print(\"The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g\"%(a,grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Autograd with more complicated functions\n", + "\n", + "To differentiate with respect to two (or more) arguments of a Python\n", + "function, Autograd need to know at which variable the function if\n", + "being differentiated with respect to." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f2(x1,x2):\n", + " return 3*x1**3 + x2*(x1 - 5) + 1\n", + "\n", + "# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1\n", + "f2_grad_x1 = grad(f2,0)\n", + "\n", + "# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad\n", + "f2_grad_x2 = grad(f2,1)\n", + "\n", + "x1 = 1.0\n", + "x2 = 3.0 \n", + "\n", + "print(\"Evaluating at x1 = %g, x2 = %g\"%(x1,x2))\n", + "print(\"-\"*30)\n", + "\n", + "# Compare with the analytical derivatives:\n", + "\n", + "# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:\n", + "f2_grad_x1_analytical = 9*x1**2 + x2\n", + "\n", + "# Derivative of f2 w.r.t x2 is: x1 - 5:\n", + "f2_grad_x2_analytical = x1 - 5\n", + "\n", + "# See the evaluated derivations:\n", + "print(\"The derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "\n", + "print()\n", + "\n", + "print(\"The derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable.\n", + "\n", + "\n", + "## More complicated functions using the elements of their arguments directly" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f3(x): # Assumes x is an array of length 5 or higher\n", + " return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2\n", + "\n", + "f3_grad = grad(f3)\n", + "\n", + "x = np.linspace(0,4,5)\n", + "\n", + "# Print the computed gradient:\n", + "print(\"The computed gradient of f3 is: \", f3_grad(x))\n", + "\n", + "# The analytical gradient is: (2, 3, 5, 7, 22*x[4])\n", + "f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f3 is: \", f3_grad_analytical)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that in this case, when sending an array as input argument, the\n", + "output from Autograd is another array. This is the true gradient of\n", + "the function, as opposed to the function in the previous example. By\n", + "using arrays to represent the variables, the output from Autograd\n", + "might be easier to work with, as the output is closer to what one\n", + "could expect form a gradient-evaluting function.\n", + "\n", + "\n", + "## Functions using mathematical functions from Numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f4(x):\n", + " return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)\n", + "\n", + "f4_grad = grad(f4)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f4 at x = %g is: %g\"%(x,f4_grad(x)))\n", + "\n", + "# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi\n", + "f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f4 at x = %g is: %g\"%(x,f4_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More autograd" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f5(x):\n", + " if x >= 0:\n", + " return x**2\n", + " else:\n", + " return -3*x + 1\n", + "\n", + "f5_grad = grad(f5)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f5 at x = %g is: %g\"%(x,f5_grad(x)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## And with loops" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1\n", + "7\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9\n", + "# The analytical derivative is: sum(i*x**(i-1)) \n", + "f6_grad_analytical = 0\n", + "for i in range(10):\n", + " f6_grad_analytical += i*x**(i-1)\n", + "\n", + "print(\"The analytical derivative of f6 at x = %g is: %g\"%(x,f6_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using recursion" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "\n", + "def f7(n): # Assume that n is an integer\n", + " if n == 1 or n == 0:\n", + " return 1\n", + " else:\n", + " return n*f7(n-1)\n", + "\n", + "f7_grad = grad(f7)\n", + "\n", + "n = 2.0\n", + "\n", + "print(\"The computed derivative of f7 at n = %d is: %g\"%(n,f7_grad(n)))\n", + "\n", + "# The function f7 is an implementation of the factorial of n.\n", + "# By using the product rule, one can find that the derivative is:\n", + "\n", + "f7_grad_analytical = 0\n", + "for i in range(int(n)-1):\n", + " tmp = 1\n", + " for k in range(int(n)-1):\n", + " if k != i:\n", + " tmp *= (n - k)\n", + " f7_grad_analytical += tmp\n", + "\n", + "print(\"The analytical derivative of f7 at n = %d is: %g\"%(n,f7_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input.\n", + "\n", + "## Unsupported functions\n", + "Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd.\n", + "\n", + "Assigning a value to the variable being differentiated with respect to" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f8(x): # Assume x is an array\n", + " x[2] = 3\n", + " return x*2\n", + "\n", + "f8_grad = grad(f8)\n", + "\n", + "x = 8.4\n", + "\n", + "print(\"The derivative of f8 is:\",f8_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible.\n", + "\n", + "## The syntax a.dot(b) when finding the dot product" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f9(a): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return a.dot(b)\n", + "\n", + "f9_grad = grad(f9)\n", + "\n", + "x = np.array([1.0,0.0])\n", + "\n", + "print(\"The derivative of f9 is:\",f9_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we are told that the 'dot' function does not belong to Autograd's\n", + "version of a Numpy array. To overcome this, an alternative syntax\n", + "which also computed the dot product can be used:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad\n", + "def f9_alternative(x): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2\n", + "\n", + "f9_alternative_grad = grad(f9_alternative)\n", + "\n", + "x = np.array([3.0,0.0])\n", + "\n", + "print(\"The gradient of f9 is:\",f9_alternative_grad(x))\n", + "\n", + "# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively\n", + "# w.r.t x is (b_1, b_2)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recommended to avoid\n", + "The documentation recommends to avoid inplace operations such as" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "a += b\n", + "a -= b\n", + "a*= b\n", + "a /=b" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1372,10 +2019,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [], "source": [ "import numpy as np \n", @@ -1436,10 +2081,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [], "source": [ "import numpy as np \n", @@ -1469,7 +2112,25 @@ ] } ], - "metadata": {}, + "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" + } + }, "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 b478c41faf410fd05d8ffac11e53f4782ae3bb18..ebf5276283aeddded49f3deefc6fd352171ee2fa 100644 GIT binary patch literal 211 zcmb2|=3w~bzb2Z2`R#e%yh8>8ZHd?BB>4$gs#v`CNa{zUW`^8edA7Ta$B-SGThSIsl|kGFQJoc=mt_k*MDIolOw zo-DPu$`5|{>tOy;UbEP0p|?LDEfRgqZkYRe6Zbut<+VKd7v}^S{(YOzfD9h||G{9o LNpls01_J{C3=U^K literal 210 zcmb2|=3rRnvL>2=`R)1hS%(}1ju)P{J8I*2SP!oVb;$A7n zN?Vp!O%D3?H>Qrqn8$ec)ytpLrY`L_sg_t85*uptY*U=i%C2bJlb@qLZHk$)N~>#? zn5o!LpDU03ewB54w!hZAJG=1W4*BQnlG_i@wcQ^6MEifo^mA^J`R!LK)z7J4uK2I_ z`(MV~&Y5r7uY0`qm8ljw^E0Vg@GaZL-0aC;{p6q5epv4~KgsO>+k6IO@ZkRsmdu{; JISd*M3;+*EW^@1m diff --git a/doc/pub/Splines/pdf/Splines-minted.pdf b/doc/pub/Splines/pdf/Splines-minted.pdf index c836051598822d8393f1dfecc064d04913122bef..5f32f6be063b2c306e30fc3ef95e5d3233b80d72 100644 GIT binary patch delta 217786 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

    dq&96x3IUjx9;U)D5a<_1Tv_#Fz#0k0qJH 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�^vz3A0Eo zYJfK_5FI0G_l1`;+<;{u!v0uyja!xQ5E0!#<$HaV-cZ-8jxCZ{c5MNAsou*0TM|iI zqk{HNvDsw_OdF^K;X9`Q3Yiho&?O*mClwu-@;VTS8AY1X z&#IB|9J{rWXvsa!&@J?WC3*l>(kR*DkQhB5`q_RLh6v_LAjbU_Zp@vF8D%rQ0W3Ta z&%aSAGD-p4RXQtnSb^BMj{-Uz#YeMjGn_ToCL~DlWw>~CrB#6uzcakLmb~}8(uz?S zM}O?2H?fQ)lkv)LQzSu%VyTiE#fkc_T!2gK47pQ^C zl%px_Hc zw~z>3p8*sg@7pu>g2Vq9=RSYuSRZqFpMS4b?1$fx_H=kN<|-LKJ@Pfj-J*{eyw0yG z(wu^30s}KASekwZMRDyyQTv)89I;3~r;o+RdPN7Np>3rcZhH(;FzMcIDZsf4#tUai zZ8lfAPf>On3>$mmp{OM-4u7_C*J@K5@-}4_gn-xr`ouz46PKnh_Huf|x)JD-_kTbv zj?d(o;K29s(8xZvXczoPsN$f~`aNHlIKX!LK*&+L@AD9n?7JS;1%hKRX%6xtwWsjo zVMpPv0k23$GSJyFsv4IBJdqJ(6`ozYu;sZbJeF+z1Pojl-9b5BbOcNDgGai}+E=%i z@DO}i*H;O4rI8X~H|}Ss;Af_pS%3WgF?!jY8tvLTS9^E(8?Bh2j#1_-3xh#d8UvAf zr^wh>8!FbZ99R)!7hRS2feR@;F_GeJTkX9QZLN;m!+*Qr6eQzLPr^0-OI^TOfEVOy z;^JN3%4pwyXowzAVxnJ(3~_0oBgGEGKs`_C3bUNh zr<6`h^%3J<6<`cgqonFD>+UNxsnw4|p@tb_egzP*z*#$2tsft*g zobGku>Um=Lh5En?wSPUpKnF1V-u|R@uEafAU4^}|efka)GK|ntWevnciraY9IHnR( z$nGmUD-b!Hp?h&$ifyC`o#vCKV5qorr!$@IXA0DIo1S(*Y4!C!#r=g{tnF_{1)T1? zxrpggtRfK(GiJM&n?9Z2Q$M%WlH!U)G2z1sQa#H_sm3=kLw_$_OuR7+%mlWdP-1SY zs_8#bS&R0t(XlZMb*zOCw8ldEHxRT`jDwRl_N!wvCK#L*UOjJj5FAW+>l)>>wkW;!N6ju-tI|JJ>ksq#mhs=IJWvT))>?2@P?4690WjAbbQp>Ue-l5I8Mt?@ys8mBQ;l{Uk`*-{MO^Nz> zaA>QFrU;6aE9YSLMPT&{6mG!tv;VRA*Rxp@j)t>DD2U0Y#v^Iwd#=2HLq>Y;hswKd zZd@MQAYvkyPYrYz&FMG%Qss0YTMn_bO}hsJzW&>v{B}J=VdsavhXTiX1ywSVvP1iQ zxuMbV-Io1WwgJRcr>W!$?3agT0*UVV5al^4i5#%DGZ&Fk z^4kjRo+p4}A|_U91G_ue_xiot6-UOi^3PW(VwX2}aPs<#-+qOEWeG?UTH3TgNI=OY zSxB1Ru~=OUL(J8O39IcKl;V6sb%U3~5#Soa#((Qi1Ji_-8S71i{_qpUw7-nX7ts7% zZF-E|fO|aP48UJ(q1bvHgHsKUjRx!7`D&8~zdx?^ab=aDgI4fxId&6hTwa))7o(>l zNTE2R%7!9zoYzPaHm2ECe3(OVC(hr(!Tiwws#XrP?$XRkJp-(=d{gAJoND?3$Plxu zPJdGAkR6GMUu+R3KKU6;rCv1h{>mN|SBzlbY6bUN$fPoqEwx7t7YwJ}LB#a*lpwfh z@#`?GgWqjVQ~8m8NSS&nhVzWg@m9BsLft^0=u3$lL`c_eN+=TNWj6UQvUt3NR{p^LFBj&;XMc->BH5`O&?}4I9mQ{(0f>2zfTCnWWwFw&jZt97>GoFHKC%?y z`ULPC73L|$;5Kendc2`lRKEkWk7OB1n{NqAN_mb%VqFD9V5Q+JuNLExpMNR%-s2*G z+vV8fgvvZmP874r$6W$*NT6tx!4x-RoQD8d$eBuN;T3GeGFi1`7})d#G0uZ(j%-Ed zYS;+lyeKMI09Zh$zY+Bv_QyH8Iq2J`FMA;gV;u$7aaeQS=0zc_JHg(qZ^IOtWO+m8 zvGHH_m97+|&sb@}Z*>nxh_(qGrMP}AJ?_F3H| z_K*1uJndin0cUU8<|7dgv>%F*=E>@*DI_SlHiCrh&F8j~Z>VlaVj4%y{_lXSrkJ}T zJ7!2UZL2LvcYC2=GvN}W@%oC#EfWEnN(_60i}JiPcTiI6&ov>B4rtK-$;^Mn-RjOf zr=|s5WZBO|Hoh>;gHwrj{uG1`?9fXi+T7}8GbFYNnaBAdSkn4?^A3mAE#O*vjp&AQ zYfv`G!gy5ELB{dNaK^s7L1-Tt$kipzD$!Y>30Vyj(fYK)LxD>B5?;Zh*~ET(es$d3 zih3#ExCLrSdl%ChlSAZ#aVmeV!tm<@oa99R+1%z50!!q+(!tB2^}zdQY% zWx#KQqLIt$xPY;3edjeR^yqaLigO1kd-AY~fQL-**oi0~M`5tuSw_=YK@*a$kZ2WB z7pm^9(|wC7a%(jTx{AGSOv{};22BM%PiSrJfy`hJ78u1j%Bthpk!XLO;&Of$+5 ztzawo1Zz^uOXA0;qE12(>fJNkG&WjY zhpu|gE}3-o_kkpZP`~jjEN75NJ8Aop$hE?~R4YA25PxxG4Rb8F_}RF4`G6oBv2T@Y z1-cL+P5<1-L$5{>LiT^C2S>CE!hz-Ni@;eVaVH=tNz;&;nm@Wp>Z6Jo<$aYz$w3F& z8%l2Bc>Zy+2hfP_j_Rb*@3@I!sx@HziKa zhv=uL2*|$v2D&+bD;Gsfz{AvWYsEUW3(0@uoE6E4o^9z!!G7^nUhYMHp<}Ta#;7^T za7DFyFl|2UY)Fro>Ws>^?mEbDzq0TreIjG@xjjn?| zWUb^Ko{VZ3qw6o!>~5@rAA@oz%k5G6orI)~e~}QH3qRq9A;2<*-Z&1w zHr|+&$G^Ka;X>I#l;!*-WUSYdTy!9WxT~o3ZR9*&ntgvXtc)P8o!UY-`I$?UERfm! z0TtL=*SOu{aiGyKLfiVez8=@a>uRDUHU?0?y|%z}L~%L@aWs5F_VoPOeDig06M7?e zQ{K;OoERtkgvW8n7DbvkGIjK84i}V`61bCesT4(lh>D%qVf%k<%Tp%y1YQQOJ$$?$#F&q0F0qkIZH zm2Co1qj{ft$nP8hi2tyDGb~wXA-WJ^0C9S&vYOG-9dU5ta21ZG*^)nVqU1IW>aWl( z<+gtfr*39eH*g%TYl2G$L11@4fgvPs3?WCcJ#b6_XWo#tJ&|MHgW@}Qa==fBb`wrp zU0of4A1QSpwlKsGAo+fy>C$Wegf0km(2l9syh7fZ$5K@Rv`&Ci%bsKMEhWoVejjsW z2<7zK`met6>YTtj3gMR36LgrkIv%zAUNwI^Xe@-%E7SAF%e5|Dh0_M($X?$5q89j+W6B%dG5+?`*oHZP8E!I$86!Hs99v_h{TAy+D>@JSQQxbe-9c`;g`|JL zp(W44FI(}CiP#3S;gXl^%$E19RY`k~#8JH4NZdh6Q5lyD^ z@k78bf z+$n1?p+loUrDs%4Pp(sWrL<~sZv%h4^z#rnLQz3-ZkiQsSx@Q{Z!XZtQ}2PF3YV7O z!|g$WZGfWhjLP9wPc1*`tn4`(SDY5R&ulBrJz*MZm>saj)~rk>E1vp^@O1`ZsIs}# z7@5&z0xHK#7Lgp&&uu4IZY#|X5mc${4VAveh!Yorj~|xq2l%j^j2Zn4h&F$3lC9p1 z7!814=6s0S;3`I~u^_2h0xTV(mAG}z>`bOo`H2RNMeT>Q*SJ@4)02j5JUTyn;iJq{ zM@k#a#6-Nj9m-$}XzhHEtEIlPatlaF<U)_&|x~ z;H7$M)g`q1Mx9UJhwY7LRIPt?ihO(JoI9#1chC>syZwAf)|Sgknq~^_BVE@G6GMNy`x&^0*U@t06UNTGC1xJ3){> z)&=Gncf$DVfdzE;9Uklo{e!63flC$m?ZczAl=Fa_!VUxE+Be#NtI&T4&wFf0tp6A3 zcC+3)!CR#Q_VK(+MT{_azE@TxbmL(cTMmZ}WQ02c1dgAp#IFp*Vi7pqw#%6ux;57;WUQAuKtDY$Zv%`O>79VK*FpA9x6xQJj z`^FTglQ2z;p=#5#8BNPlBc^?syoF;_zq8dZzGGhv=kaO>7MQbBZ1(&MWLMCoTMlXQ zW=CE;0igp|c-h~3R`n16(U4C(Tn!ydPf-tWH5E}vIA=&*Qlue7#;R;gp z@9yc}!1*85EZ(R3`C$blKHo&N1u5@hCiJ5khB5FthWtXesO5bfkFOyw+T&M0XQdWm zHh42T4$9%%CQ{;w(A#u8D{i!@1JUuaeFqY$KVvsIyD-;Cz+VCP*YWUml!l z*D-RqcY11^iX>Oy>v~FC0IO9DMHCaFH-s&b$cV;T$iB%#M`%%j&C2sViS|;}#zIVO z42?fm{tav7Hz$dusxBpg5YaIg52Amzl{wM))*Cd6bF2=uPIA%@0+tu5CkVuz_>a8o>=}Lu*GMwejW=x z+%jM7)N|eizQJS^N0kzSAob@o>MiE@%|a#Xl+;6MCE3cG5Y;33OGGV01?g^pik8dC zqf37-0b=sikJJ_)1S4PTtW+62=6>;kf&URM4O8(`s>Ik*ZBe%_81&PCB2-wDv6PnC zB?I6P0rmTqR5Z04#mW94JX8C%1iZI|b>zAU&^JZbW35vfm2=EF?pY9YcS&($)>)4h z`pq*D8{@&Y)7lwhH?~WC8gSS;2EhTVH=KX8eQI)po^`1U80{v{O3P+k^Mr|iK2cW5 z!Uy!zM)*kR!TkdB_LmQ122O+4T^rFveOF-ObI_}Tf9c?E0W_E~0220I3_gCS%lxsf zFv2ME5nOif8qEU1P!%`!UszB@AHyI=NVA*1cGD>{zq1%zIdcEEMrY1D4&c(ITgq_Zv|9>pLt3Hee3nQ zuo&u!L<~Zc0QJWA3`sB;y=>`U15SU;h4+og-|RFlC#Pd(p7L#B2~q7xL|E*4M}=

    q*SRRs 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

    _xZ~0XQv%IZFNi+

    G%QVQAu6t6%9(HOK#=TRT5sarTu>X&9$)* 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 UKL#2NGdVLdH8lz)B}Gq03M=k4y8r+H diff --git a/doc/src/Splines/Splines.do.txt b/doc/src/Splines/Splines.do.txt index acf8e10b2..d3fba4f49 100644 --- a/doc/src/Splines/Splines.do.txt +++ b/doc/src/Splines/Splines.do.txt @@ -515,9 +515,6 @@ which gives -!split -===== The Steepest descent algorithm ===== - !split ===== Simple codes for steepest descent and conjugate gradient using a $2\times 2$ matrix, in c++, Python code to come ===== @@ -580,6 +577,60 @@ Vector SteepestDescent(Matrix A, Vector b, Vector x0){ !eblock +!split +===== Steepest descent example ===== + +!bc pycod +import numpy as np +import numpy.linalg as la + +import scipy.optimize as sopt + +import matplotlib.pyplot as pt +from mpl_toolkits.mplot3d import axes3d + +def f(x): + return 0.5*x[0]**2 + 2.5*x[1]**2 + +def df(x): + return np.array([x[0], 5*x[1]]) + +fig = pt.figure() +ax = fig.gca(projection="3d") + +xmesh, ymesh = np.mgrid[-2:2:50j,-2:2:50j] +fmesh = f(np.array([xmesh, ymesh])) +ax.plot_surface(xmesh, ymesh, fmesh) +!ec +And then as countor plot +!bc pycod +pt.axis("equal") +pt.contour(xmesh, ymesh, fmesh) +guesses = [np.array([2, 2./5])] +!ec +Find guesses +!bc pycod +x = guesses[-1] +s = -df(x) +!ec +Run it! +!bc pycod +def f1d(alpha): + return f(x + alpha*s) + +alpha_opt = sopt.golden(f1d) +next_guess = x + alpha_opt * s +guesses.append(next_guess) +print(next_guess) +!ec +What happened? +!bc pycod +pt.axis("equal") +pt.contour(xmesh, ymesh, fmesh, 50) +it_array = np.array(guesses) +pt.plot(it_array.T[0], it_array.T[1], "x-") +!ec + !split ===== Revisiting our first homework ===== @@ -825,8 +876,352 @@ print(beta_ridge) print(np.linalg.norm(beta_ridge)) #||beta|| !ec +!split +===== Automatic differentiation ===== +Python has tools for so-called _automatic differentiation_. +Consider the following example +!bt +\[ +f(x) = \sin\left(2\pi x + x^2\right) +\] +!et +which has the following derivative +!bt +\[ +f'(x) = \cos\left(2\pi x + x^2\right)\left(2\pi + 2x\right) +\] +!et +Using _autograd_ we have + +!bc pycod +import autograd.numpy as np + +# To do elementwise differentiation: +from autograd import elementwise_grad as egrad + +# To plot: +import matplotlib.pyplot as plt +def f(x): + return np.sin(2*np.pi*x + x**2) + +def f_grad_analytic(x): + return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x) + +# Do the comparison: +x = np.linspace(0,1,1000) + +f_grad = egrad(f) + +computed = f_grad(x) +analytic = f_grad_analytic(x) + +plt.title('Derivative computed from Autograd compared with the analytical derivative') +plt.plot(x,computed,label='autograd') +plt.plot(x,analytic,label='analytic') + +plt.xlabel('x') +plt.ylabel('y') +plt.legend() + +plt.show() + +print("The max absolute difference is: %g"%(np.max(np.abs(computed - analytic)))) +!ec + +!split +===== Using autograd ===== + +Here we +experiment with what kind of functions Autograd is capable +of finding the gradient of. The following Python functions are just +meant to illustrate what Autograd can do, but please feel free to +experiment with other, possibly more complicated, functions as well. + +!bc pycod +import autograd.numpy as np +from autograd import grad + +def f1(x): + return x**3 + 1 + +f1_grad = grad(f1) + +# Remember to send in float as argument to the computed gradient from Autograd! +a = 1.0 + +# See the evaluated gradient at a using autograd: +print("The gradient of f1 evaluated at a = %g using autograd is: %g"%(a,f1_grad(a))) + +# Compare with the analytical derivative, that is f1'(x) = 3*x**2 +grad_analytical = 3*a**2 +print("The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g"%(a,grad_analytical)) +!ec + + +!split +===== Autograd with more complicated functions ===== + +To differentiate with respect to two (or more) arguments of a Python +function, Autograd need to know at which variable the function if +being differentiated with respect to. + +!bc pycod +import autograd.numpy as np +from autograd import grad +def f2(x1,x2): + return 3*x1**3 + x2*(x1 - 5) + 1 + +# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1 +f2_grad_x1 = grad(f2,0) + +# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad +f2_grad_x2 = grad(f2,1) + +x1 = 1.0 +x2 = 3.0 + +print("Evaluating at x1 = %g, x2 = %g"%(x1,x2)) +print("-"*30) + +# Compare with the analytical derivatives: + +# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2: +f2_grad_x1_analytical = 9*x1**2 + x2 + +# Derivative of f2 w.r.t x2 is: x1 - 5: +f2_grad_x2_analytical = x1 - 5 + +# See the evaluated derivations: +print("The derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) )) +print("The analytical derivative of f2 w.r.t x1: %g"%( f2_grad_x1(x1,x2) )) + +print() + +print("The derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) )) +print("The analytical derivative of f2 w.r.t x2: %g"%( f2_grad_x2(x1,x2) )) +!ec + +Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. + + +!split +===== More complicated functions using the elements of their arguments directly ===== + +!bc pycod +import autograd.numpy as np +from autograd import grad +def f3(x): # Assumes x is an array of length 5 or higher + return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2 + +f3_grad = grad(f3) + +x = np.linspace(0,4,5) + +# Print the computed gradient: +print("The computed gradient of f3 is: ", f3_grad(x)) + +# The analytical gradient is: (2, 3, 5, 7, 22*x[4]) +f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]]) + +# Print the analytical gradient: +print("The analytical gradient of f3 is: ", f3_grad_analytical) +!ec + +Note that in this case, when sending an array as input argument, the +output from Autograd is another array. This is the true gradient of +the function, as opposed to the function in the previous example. By +using arrays to represent the variables, the output from Autograd +might be easier to work with, as the output is closer to what one +could expect form a gradient-evaluting function. + +!split +===== Functions using mathematical functions from Numpy ===== + +!bc pycod +import autograd.numpy as np +from autograd import grad +def f4(x): + return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x) + +f4_grad = grad(f4) + +x = 2.7 + +# Print the computed derivative: +print("The computed derivative of f4 at x = %g is: %g"%(x,f4_grad(x))) + +# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi +f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi + +# Print the analytical gradient: +print("The analytical gradient of f4 at x = %g is: %g"%(x,f4_grad_analytical)) +!ec + + +!split +===== More autograd ===== + +!bc pycod +import autograd.numpy as np +from autograd import grad +def f5(x): + if x >= 0: + return x**2 + else: + return -3*x + 1 + +f5_grad = grad(f5) + +x = 2.7 + +# Print the computed derivative: +print("The computed derivative of f5 at x = %g is: %g"%(x,f5_grad(x))) +!ec + + +!split +===== And with loops ===== + +!bc pycod +import autograd.numpy as np +from autograd import grad +def f6_for(x): + val = 0 + for i in range(10): + val = val + x**i + return val + +def f6_while(x): + val = 0 + i = 0 + while i < 10: + val = val + x**i + i = i + 1 + return val + +f6_for_grad = grad(f6_for) +f6_while_grad = grad(f6_while) + +x = 0.5 + +# Print the computed derivaties of f6_for and f6_while +print("The computed derivative of f6_for at x = %g is: %g"%(x,f6_for_grad(x))) +print("The computed derivative of f6_while at x = %g is: %g"%(x,f6_while_grad(x))) +!ec +!bc pycod +import autograd.numpy as np +from autograd import grad +# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9 +# The analytical derivative is: sum(i*x**(i-1)) +f6_grad_analytical = 0 +for i in range(10): + f6_grad_analytical += i*x**(i-1) + +print("The analytical derivative of f6 at x = %g is: %g"%(x,f6_grad_analytical)) +!ec + +!split +===== Using recursion ===== +!bc pycod +import autograd.numpy as np +from autograd import grad + +def f7(n): # Assume that n is an integer + if n == 1 or n == 0: + return 1 + else: + return n*f7(n-1) + +f7_grad = grad(f7) + +n = 2.0 + +print("The computed derivative of f7 at n = %d is: %g"%(n,f7_grad(n))) + +# The function f7 is an implementation of the factorial of n. +# By using the product rule, one can find that the derivative is: + +f7_grad_analytical = 0 +for i in range(int(n)-1): + tmp = 1 + for k in range(int(n)-1): + if k != i: + tmp *= (n - k) + f7_grad_analytical += tmp + +print("The analytical derivative of f7 at n = %d is: %g"%(n,f7_grad_analytical)) + +!ec +Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. + +!split +===== Unsupported functions ===== +Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd. + +Assigning a value to the variable being differentiated with respect to +!bc pycod +import autograd.numpy as np +from autograd import grad +def f8(x): # Assume x is an array + x[2] = 3 + return x*2 + +f8_grad = grad(f8) + +x = 8.4 + +print("The derivative of f8 is:",f8_grad(x)) +!ec +Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. + +!split +===== The syntax a.dot(b) when finding the dot product ===== +!bc pycod +import autograd.numpy as np +from autograd import grad +def f9(a): # Assume a is an array with 2 elements + b = np.array([1.0,2.0]) + return a.dot(b) + +f9_grad = grad(f9) + +x = np.array([1.0,0.0]) + +print("The derivative of f9 is:",f9_grad(x)) +!ec + +Here we are told that the 'dot' function does not belong to Autograd's +version of a Numpy array. To overcome this, an alternative syntax +which also computed the dot product can be used: + +!bc pycod +import autograd.numpy as np +from autograd import grad +def f9_alternative(x): # Assume a is an array with 2 elements + b = np.array([1.0,2.0]) + return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2 + +f9_alternative_grad = grad(f9_alternative) + +x = np.array([3.0,0.0]) + +print("The gradient of f9 is:",f9_alternative_grad(x)) + +# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively +# w.r.t x is (b_1, b_2). +!ec + +!split +===== Recommended to avoid ===== +The documentation recommends to avoid inplace operations such as +!bc pycod +a += b +a -= b +a*= b +a /=b +!ec !split ===== Stochastic Gradient Descent ===== diff --git a/doc/src/Splines/autodiff/.ipynb_checkpoints/examples_allowed_functions-Copy1-checkpoint.ipynb b/doc/src/Splines/autodiff/.ipynb_checkpoints/examples_allowed_functions-Copy1-checkpoint.ipynb new file mode 100644 index 000000000..c128b8714 --- /dev/null +++ b/doc/src/Splines/autodiff/.ipynb_checkpoints/examples_allowed_functions-Copy1-checkpoint.ipynb @@ -0,0 +1,680 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Examples of the supported features in Autograd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before using Autograd for more complicated calculations, it might be useful to experiment with what kind of functions Autograd is capable of finding the gradient of. The following Python functions are just meant to illustrate what Autograd can do, but please feel free to experiment with other, possibly more complicated, functions as well! " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Supported functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are some examples of supported function implementations that Autograd can differentiate. Keep in mind that this list over examples is not comprehensive, but rather explores which basic constructions one might often use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using simple arithmetics" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f1(x):\n", + " return x**3 + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The gradient of f1 evaluated at a = 1 using autograd is: 3\n", + "The gradient of f1 evaluated at a = 1 by finding the analytic expression is: 3\n" + ] + } + ], + "source": [ + "f1_grad = grad(f1)\n", + "\n", + "# Remember to send in float as argument to the computed gradient from Autograd!\n", + "a = 1.0\n", + "\n", + "# See the evaluated gradient at a using autograd:\n", + "print(\"The gradient of f1 evaluated at a = %g using autograd is: %g\"%(a,f1_grad(a)))\n", + "\n", + "# Compare with the analytical derivative, that is f1'(x) = 3*x**2 \n", + "grad_analytical = 3*a**2\n", + "print(\"The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g\"%(a,grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions with two (or more) arguments" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To differentiate with respect to two (or more) arguments of a Python function, Autograd need to know at which variable the function if being differentiated with respect to. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f2(x1,x2):\n", + " return 3*x1**3 + x2*(x1 - 5) + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Evaluating at x1 = 1, x2 = 3\n", + "------------------------------\n", + "The derivative of f2 w.r.t x1: 12\n", + "The analytical derivative of f2 w.r.t x1: 12\n", + "\n", + "The derivative of f2 w.r.t x2: -4\n", + "The analytical derivative of f2 w.r.t x2: -4\n" + ] + } + ], + "source": [ + "# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1\n", + "f2_grad_x1 = grad(f2,0)\n", + "\n", + "# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad\n", + "f2_grad_x2 = grad(f2,1)\n", + "\n", + "x1 = 1.0\n", + "x2 = 3.0 \n", + "\n", + "print(\"Evaluating at x1 = %g, x2 = %g\"%(x1,x2))\n", + "print(\"-\"*30)\n", + "\n", + "# Compare with the analytical derivatives:\n", + "\n", + "# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:\n", + "f2_grad_x1_analytical = 9*x1**2 + x2\n", + "\n", + "# Derivative of f2 w.r.t x2 is: x1 - 5:\n", + "f2_grad_x2_analytical = x1 - 5\n", + "\n", + "# See the evaluated derivations:\n", + "print(\"The derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "\n", + "print()\n", + "\n", + "print(\"The derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using the elements of its argument directly" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def f3(x): # Assumes x is an array of length 5 or higher\n", + " return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed gradient of f3 is: [ 2. 3. 5. 7. 88.]\n", + "The analytical gradient of f3 is: [ 2. 3. 5. 7. 88.]\n" + ] + } + ], + "source": [ + "f3_grad = grad(f3)\n", + "\n", + "x = np.linspace(0,4,5)\n", + "\n", + "# Print the computed gradient:\n", + "print(\"The computed gradient of f3 is: \", f3_grad(x))\n", + "\n", + "# The analytical gradient is: (2, 3, 5, 7, 22*x[4])\n", + "f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f3 is: \", f3_grad_analytical)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that in this case, when sending an array as input argument, the output from Autograd is another array. This is the true gradient of the function, as opposed to the function in the previous example. By using arrays to represent the variables, the output from Autograd might be easier to work with, as the output is closer to what one could expect form a gradient-evaluting function. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using mathematical functions from Numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f4(x):\n", + " return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f4 at x = 2.7 is: 13.8759\n", + "The analytical gradient of f4 is: 13.87586944687107\n" + ] + } + ], + "source": [ + "f4_grad = grad(f4)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f4 at x = %g is: %g\"%(x,f4_grad(x)))\n", + "\n", + "# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi\n", + "f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f4 at x = %g is: %g\"%(x,f4_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using if-else tests" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f5(x):\n", + " if x >= 0:\n", + " return x**2\n", + " else:\n", + " return -3*x + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f5 is: 5.4\n", + "The analytical derivative of f5 is: 5.4\n" + ] + } + ], + "source": [ + "f5_grad = grad(f5)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f5 at x = %g is: %g\"%(x,f5_grad(x)))\n", + "\n", + "# The analytical derivative is: \n", + "# if x >= 0, then 2*x\n", + "# else -3\n", + "\n", + "if x >= 0:\n", + " f5_grad_analytical = 2*x\n", + "else:\n", + " f5_grad_analytical = -3\n", + "\n", + "\n", + "# Print the analytical derivative:\n", + "print(\"The analytical derivative of f5 at x = %g is: %g\"%(x,f5_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using for- and while loops" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f6_for(x):\n", + " val = 0\n", + " for i in range(10):\n", + " val = val + x**i\n", + " return val\n", + "\n", + "def f6_while(x):\n", + " val = 0\n", + " i = 0\n", + " while i < 10:\n", + " val = val + x**i\n", + " i = i + 1\n", + " return val" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f6_for at x = 0.5 is: 3.95703\n", + "The computed derivative of f6_while at x = 0.5 is: 3.95703\n", + "The analytical derivative of f6 at x = 0.5 is: 3.95703\n" + ] + } + ], + "source": [ + "f6_for_grad = grad(f6_for)\n", + "f6_while_grad = grad(f6_while)\n", + "\n", + "x = 0.5\n", + "\n", + "# Print the computed derivaties of f6_for and f6_while\n", + "print(\"The computed derivative of f6_for at x = %g is: %g\"%(x,f6_for_grad(x)))\n", + "print(\"The computed derivative of f6_while at x = %g is: %g\"%(x,f6_while_grad(x)))\n", + "\n", + "# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9\n", + "# The analytical derivative is: sum(i*x**(i-1)) \n", + "f6_grad_analytical = 0\n", + "for i in range(10):\n", + " f6_grad_analytical += i*x**(i-1)\n", + "\n", + "print(\"The analytical derivative of f6 at x = %g is: %g\"%(x,f6_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using recursion" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f7(n): # Assume that n is an integer\n", + " if n == 1 or n == 0:\n", + " return 1\n", + " else:\n", + " return n*f7(n-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f7 at n = 2 is: 1\n", + "The analytical derivative of f7 at n = 2 is: 1\n" + ] + } + ], + "source": [ + "f7_grad = grad(f7)\n", + "\n", + "n = 2.0\n", + "\n", + "print(\"The computed derivative of f7 at n = %d is: %g\"%(n,f7_grad(n)))\n", + "\n", + "# The function f7 is an implementation of the factorial of n.\n", + "# By using the product rule, one can find that the derivative is:\n", + "\n", + "f7_grad_analytical = 0\n", + "for i in range(int(n)-1):\n", + " tmp = 1\n", + " for k in range(int(n)-1):\n", + " if k != i:\n", + " tmp *= (n - k)\n", + " f7_grad_analytical += tmp\n", + "\n", + "print(\"The analytical derivative of f7 at n = %d is: %g\"%(n,f7_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Unsupported functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Assigning a value to the variable being differentiated with respect to" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f8(x): # Assume x is an array\n", + " x[2] = 3\n", + " return x*2" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'ArrayBox' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8.4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The derivative of f8 is:\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mf8_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36mnary_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margnum\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0munary_operator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munary_f\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mnary_op_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mnary_op_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_operator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/differential_operators.py\u001b[0m in \u001b[0;36mgrad\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0marguments\u001b[0m \u001b[0;32mas\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbut\u001b[0m \u001b[0mreturns\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mgradient\u001b[0m \u001b[0minstead\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mThe\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m should be scalar-valued. The gradient has the same type as the argument.\"\"\"\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mvjp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mans\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_make_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mans\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m raise TypeError(\"Grad only applies to real scalar-output functions. \"\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/core.py\u001b[0m in \u001b[0;36mmake_vjp\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmake_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVJPNode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_root\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_node\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/tracer.py\u001b[0m in \u001b[0;36mtrace\u001b[0;34m(start_node, fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtrace_stack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_trace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_box\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_node\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_box\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mend_box\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mstart_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_node\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36munary_f\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msubargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubvals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msubargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mf8\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf8\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Assume x is an array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: 'ArrayBox' object does not support item assignment" + ] + } + ], + "source": [ + "f8_grad = grad(f8)\n", + "\n", + "x = 8.4\n", + "\n", + "print(\"The derivative of f8 is:\",f8_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The syntax a.dot(b) when finding the dot product" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f9(a): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return a.dot(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'ArrayBox' object has no attribute 'dot'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0.0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The derivative of f9 is:\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mf9_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36mnary_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margnum\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0munary_operator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munary_f\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mnary_op_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mnary_op_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_operator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/differential_operators.py\u001b[0m in \u001b[0;36mgrad\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0marguments\u001b[0m \u001b[0;32mas\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbut\u001b[0m \u001b[0mreturns\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mgradient\u001b[0m \u001b[0minstead\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mThe\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m should be scalar-valued. The gradient has the same type as the argument.\"\"\"\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mvjp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mans\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_make_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mans\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m raise TypeError(\"Grad only applies to real scalar-output functions. \"\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/core.py\u001b[0m in \u001b[0;36mmake_vjp\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmake_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVJPNode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_root\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_node\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/tracer.py\u001b[0m in \u001b[0;36mtrace\u001b[0;34m(start_node, fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtrace_stack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_trace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_box\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_node\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_box\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mend_box\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mstart_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_node\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36munary_f\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msubargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubvals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msubargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mf9\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf9\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Assume a is an array with 2 elements\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2.0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'ArrayBox' object has no attribute 'dot'" + ] + } + ], + "source": [ + "f9_grad = grad(f9)\n", + "\n", + "x = np.array([1.0,0.0])\n", + "\n", + "print(\"The derivative of f9 is:\",f9_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we are told that the 'dot' function does not belong to Autograd's version of a Numpy array. \n", + "To overcome this, an alternative syntax which also computed the dot product can be used:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f9_alternative(x): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The gradient of f9 is: [1. 2.]\n" + ] + } + ], + "source": [ + "f9_alternative_grad = grad(f9_alternative)\n", + "\n", + "x = np.array([3.0,0.0])\n", + "\n", + "print(\"The gradient of f9 is:\",f9_alternative_grad(x))\n", + "\n", + "# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively\n", + "# w.r.t x is (b_1, b_2)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Recommended to avoid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The [documentation](https://github.com/HIPS/autograd/blob/master/docs/tutorial.md) recommends to avoid inplace operations such as" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "a += b\n", + "a -= b\n", + "a*= b\n", + "a /=b" + ] + } + ], + "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" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/doc/src/Splines/autodiff/example_plot.ipynb b/doc/src/Splines/autodiff/example_plot.ipynb index c74b328cf..8c65512a2 100644 --- a/doc/src/Splines/autodiff/example_plot.ipynb +++ b/doc/src/Splines/autodiff/example_plot.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -54,12 +54,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\nAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "

    " ] @@ -111,6 +111,13 @@ "\n", "print(\"The max absolute difference is: %g\"%(np.max(np.abs(computed - analytic))))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/doc/src/Splines/autodiff/examples_allowed_functions-Copy1.ipynb b/doc/src/Splines/autodiff/examples_allowed_functions-Copy1.ipynb new file mode 100644 index 000000000..c128b8714 --- /dev/null +++ b/doc/src/Splines/autodiff/examples_allowed_functions-Copy1.ipynb @@ -0,0 +1,680 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Examples of the supported features in Autograd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before using Autograd for more complicated calculations, it might be useful to experiment with what kind of functions Autograd is capable of finding the gradient of. The following Python functions are just meant to illustrate what Autograd can do, but please feel free to experiment with other, possibly more complicated, functions as well! " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Supported functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are some examples of supported function implementations that Autograd can differentiate. Keep in mind that this list over examples is not comprehensive, but rather explores which basic constructions one might often use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using simple arithmetics" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f1(x):\n", + " return x**3 + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The gradient of f1 evaluated at a = 1 using autograd is: 3\n", + "The gradient of f1 evaluated at a = 1 by finding the analytic expression is: 3\n" + ] + } + ], + "source": [ + "f1_grad = grad(f1)\n", + "\n", + "# Remember to send in float as argument to the computed gradient from Autograd!\n", + "a = 1.0\n", + "\n", + "# See the evaluated gradient at a using autograd:\n", + "print(\"The gradient of f1 evaluated at a = %g using autograd is: %g\"%(a,f1_grad(a)))\n", + "\n", + "# Compare with the analytical derivative, that is f1'(x) = 3*x**2 \n", + "grad_analytical = 3*a**2\n", + "print(\"The gradient of f1 evaluated at a = %g by finding the analytic expression is: %g\"%(a,grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions with two (or more) arguments" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To differentiate with respect to two (or more) arguments of a Python function, Autograd need to know at which variable the function if being differentiated with respect to. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f2(x1,x2):\n", + " return 3*x1**3 + x2*(x1 - 5) + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Evaluating at x1 = 1, x2 = 3\n", + "------------------------------\n", + "The derivative of f2 w.r.t x1: 12\n", + "The analytical derivative of f2 w.r.t x1: 12\n", + "\n", + "The derivative of f2 w.r.t x2: -4\n", + "The analytical derivative of f2 w.r.t x2: -4\n" + ] + } + ], + "source": [ + "# By sending the argument 0, Autograd will compute the derivative w.r.t the first variable, in this case x1\n", + "f2_grad_x1 = grad(f2,0)\n", + "\n", + "# ... and differentiate w.r.t x2 by sending 1 as an additional arugment to grad\n", + "f2_grad_x2 = grad(f2,1)\n", + "\n", + "x1 = 1.0\n", + "x2 = 3.0 \n", + "\n", + "print(\"Evaluating at x1 = %g, x2 = %g\"%(x1,x2))\n", + "print(\"-\"*30)\n", + "\n", + "# Compare with the analytical derivatives:\n", + "\n", + "# Derivative of f2 w.r.t x1 is: 9*x1**2 + x2:\n", + "f2_grad_x1_analytical = 9*x1**2 + x2\n", + "\n", + "# Derivative of f2 w.r.t x2 is: x1 - 5:\n", + "f2_grad_x2_analytical = x1 - 5\n", + "\n", + "# See the evaluated derivations:\n", + "print(\"The derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x1: %g\"%( f2_grad_x1(x1,x2) ))\n", + "\n", + "print()\n", + "\n", + "print(\"The derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))\n", + "print(\"The analytical derivative of f2 w.r.t x2: %g\"%( f2_grad_x2(x1,x2) ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the grad function will not produce the true gradient of the function. The true gradient of a function with two or more variables will produce a vector, where each element is the function differentiated w.r.t a variable. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using the elements of its argument directly" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def f3(x): # Assumes x is an array of length 5 or higher\n", + " return 2*x[0] + 3*x[1] + 5*x[2] + 7*x[3] + 11*x[4]**2" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed gradient of f3 is: [ 2. 3. 5. 7. 88.]\n", + "The analytical gradient of f3 is: [ 2. 3. 5. 7. 88.]\n" + ] + } + ], + "source": [ + "f3_grad = grad(f3)\n", + "\n", + "x = np.linspace(0,4,5)\n", + "\n", + "# Print the computed gradient:\n", + "print(\"The computed gradient of f3 is: \", f3_grad(x))\n", + "\n", + "# The analytical gradient is: (2, 3, 5, 7, 22*x[4])\n", + "f3_grad_analytical = np.array([2, 3, 5, 7, 22*x[4]])\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f3 is: \", f3_grad_analytical)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that in this case, when sending an array as input argument, the output from Autograd is another array. This is the true gradient of the function, as opposed to the function in the previous example. By using arrays to represent the variables, the output from Autograd might be easier to work with, as the output is closer to what one could expect form a gradient-evaluting function. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using mathematical functions from Numpy" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f4(x):\n", + " return np.sqrt(1+x**2) + np.exp(x) + np.sin(2*np.pi*x)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f4 at x = 2.7 is: 13.8759\n", + "The analytical gradient of f4 is: 13.87586944687107\n" + ] + } + ], + "source": [ + "f4_grad = grad(f4)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f4 at x = %g is: %g\"%(x,f4_grad(x)))\n", + "\n", + "# The analytical derivative is: x/sqrt(1 + x**2) + exp(x) + cos(2*pi*x)*2*pi\n", + "f4_grad_analytical = x/np.sqrt(1 + x**2) + np.exp(x) + np.cos(2*np.pi*x)*2*np.pi\n", + "\n", + "# Print the analytical gradient:\n", + "print(\"The analytical gradient of f4 at x = %g is: %g\"%(x,f4_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using if-else tests" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f5(x):\n", + " if x >= 0:\n", + " return x**2\n", + " else:\n", + " return -3*x + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f5 is: 5.4\n", + "The analytical derivative of f5 is: 5.4\n" + ] + } + ], + "source": [ + "f5_grad = grad(f5)\n", + "\n", + "x = 2.7\n", + "\n", + "# Print the computed derivative:\n", + "print(\"The computed derivative of f5 at x = %g is: %g\"%(x,f5_grad(x)))\n", + "\n", + "# The analytical derivative is: \n", + "# if x >= 0, then 2*x\n", + "# else -3\n", + "\n", + "if x >= 0:\n", + " f5_grad_analytical = 2*x\n", + "else:\n", + " f5_grad_analytical = -3\n", + "\n", + "\n", + "# Print the analytical derivative:\n", + "print(\"The analytical derivative of f5 at x = %g is: %g\"%(x,f5_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using for- and while loops" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f6_for(x):\n", + " val = 0\n", + " for i in range(10):\n", + " val = val + x**i\n", + " return val\n", + "\n", + "def f6_while(x):\n", + " val = 0\n", + " i = 0\n", + " while i < 10:\n", + " val = val + x**i\n", + " i = i + 1\n", + " return val" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f6_for at x = 0.5 is: 3.95703\n", + "The computed derivative of f6_while at x = 0.5 is: 3.95703\n", + "The analytical derivative of f6 at x = 0.5 is: 3.95703\n" + ] + } + ], + "source": [ + "f6_for_grad = grad(f6_for)\n", + "f6_while_grad = grad(f6_while)\n", + "\n", + "x = 0.5\n", + "\n", + "# Print the computed derivaties of f6_for and f6_while\n", + "print(\"The computed derivative of f6_for at x = %g is: %g\"%(x,f6_for_grad(x)))\n", + "print(\"The computed derivative of f6_while at x = %g is: %g\"%(x,f6_while_grad(x)))\n", + "\n", + "# Both of the functions are implementation of the sum: sum(x**i) for i = 0, ..., 9\n", + "# The analytical derivative is: sum(i*x**(i-1)) \n", + "f6_grad_analytical = 0\n", + "for i in range(10):\n", + " f6_grad_analytical += i*x**(i-1)\n", + "\n", + "print(\"The analytical derivative of f6 at x = %g is: %g\"%(x,f6_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions using recursion" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f7(n): # Assume that n is an integer\n", + " if n == 1 or n == 0:\n", + " return 1\n", + " else:\n", + " return n*f7(n-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The computed derivative of f7 at n = 2 is: 1\n", + "The analytical derivative of f7 at n = 2 is: 1\n" + ] + } + ], + "source": [ + "f7_grad = grad(f7)\n", + "\n", + "n = 2.0\n", + "\n", + "print(\"The computed derivative of f7 at n = %d is: %g\"%(n,f7_grad(n)))\n", + "\n", + "# The function f7 is an implementation of the factorial of n.\n", + "# By using the product rule, one can find that the derivative is:\n", + "\n", + "f7_grad_analytical = 0\n", + "for i in range(int(n)-1):\n", + " tmp = 1\n", + " for k in range(int(n)-1):\n", + " if k != i:\n", + " tmp *= (n - k)\n", + " f7_grad_analytical += tmp\n", + "\n", + "print(\"The analytical derivative of f7 at n = %d is: %g\"%(n,f7_grad_analytical))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that if n is equal to zero or one, Autograd will give an error message. This message appears when the output is independent on input. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Unsupported functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Autograd supports many features. However, there are some functions that is not supported (yet) by Autograd." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Assigning a value to the variable being differentiated with respect to" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f8(x): # Assume x is an array\n", + " x[2] = 3\n", + " return x*2" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'ArrayBox' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8.4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The derivative of f8 is:\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mf8_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36mnary_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margnum\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0munary_operator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munary_f\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mnary_op_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mnary_op_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_operator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/differential_operators.py\u001b[0m in \u001b[0;36mgrad\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0marguments\u001b[0m \u001b[0;32mas\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbut\u001b[0m \u001b[0mreturns\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mgradient\u001b[0m \u001b[0minstead\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mThe\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m should be scalar-valued. The gradient has the same type as the argument.\"\"\"\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mvjp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mans\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_make_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mans\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m raise TypeError(\"Grad only applies to real scalar-output functions. \"\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/core.py\u001b[0m in \u001b[0;36mmake_vjp\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmake_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVJPNode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_root\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_node\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/tracer.py\u001b[0m in \u001b[0;36mtrace\u001b[0;34m(start_node, fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtrace_stack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_trace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_box\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_node\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_box\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mend_box\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mstart_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_node\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36munary_f\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msubargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubvals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msubargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mf8\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf8\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Assume x is an array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: 'ArrayBox' object does not support item assignment" + ] + } + ], + "source": [ + "f8_grad = grad(f8)\n", + "\n", + "x = 8.4\n", + "\n", + "print(\"The derivative of f8 is:\",f8_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, Autograd tells us that an 'ArrayBox' does not support item assignment. The item assignment is done when the program tries to assign x[2] to the value 3. However, Autograd has implemented the computation of the derivative such that this assignment is not possible. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The syntax a.dot(b) when finding the dot product" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f9(a): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return a.dot(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'ArrayBox' object has no attribute 'dot'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0.0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The derivative of f9 is:\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mf9_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36mnary_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margnum\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0munary_operator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munary_f\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mnary_op_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mnary_op_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnary_operator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/differential_operators.py\u001b[0m in \u001b[0;36mgrad\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0marguments\u001b[0m \u001b[0;32mas\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbut\u001b[0m \u001b[0mreturns\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mgradient\u001b[0m \u001b[0minstead\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mThe\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m should be scalar-valued. The gradient has the same type as the argument.\"\"\"\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mvjp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mans\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_make_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mans\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m raise TypeError(\"Grad only applies to real scalar-output functions. \"\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/core.py\u001b[0m in \u001b[0;36mmake_vjp\u001b[0;34m(fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmake_vjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVJPNode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_root\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_node\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mend_node\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvjp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/tracer.py\u001b[0m in \u001b[0;36mtrace\u001b[0;34m(start_node, fun, x)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtrace_stack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnew_trace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_box\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_node\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mend_box\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_box\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mend_box\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mstart_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_trace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_box\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_node\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/krisetine/anaconda3/lib/python3.6/site-packages/autograd/wrap_util.py\u001b[0m in \u001b[0;36munary_f\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msubargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubvals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msubargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0margnum\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mf9\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf9\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Assume a is an array with 2 elements\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2.0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'ArrayBox' object has no attribute 'dot'" + ] + } + ], + "source": [ + "f9_grad = grad(f9)\n", + "\n", + "x = np.array([1.0,0.0])\n", + "\n", + "print(\"The derivative of f9 is:\",f9_grad(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we are told that the 'dot' function does not belong to Autograd's version of a Numpy array. \n", + "To overcome this, an alternative syntax which also computed the dot product can be used:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f9_alternative(x): # Assume a is an array with 2 elements\n", + " b = np.array([1.0,2.0])\n", + " return np.dot(x,b) # The same as x_1*b_1 + x_2*b_2" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The gradient of f9 is: [1. 2.]\n" + ] + } + ], + "source": [ + "f9_alternative_grad = grad(f9_alternative)\n", + "\n", + "x = np.array([3.0,0.0])\n", + "\n", + "print(\"The gradient of f9 is:\",f9_alternative_grad(x))\n", + "\n", + "# The analytical gradient of the dot product of vectors x and b with two elements (x_1,x_2) and (b_1, b_2) respectively\n", + "# w.r.t x is (b_1, b_2)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Recommended to avoid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The [documentation](https://github.com/HIPS/autograd/blob/master/docs/tutorial.md) recommends to avoid inplace operations such as" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "a += b\n", + "a -= b\n", + "a*= b\n", + "a /=b" + ] + } + ], + "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" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/doc/src/Splines/autodiff/examples_allowed_functions.ipynb b/doc/src/Splines/autodiff/examples_allowed_functions.ipynb index ebd1d4dc3..e7c165de7 100644 --- a/doc/src/Splines/autodiff/examples_allowed_functions.ipynb +++ b/doc/src/Splines/autodiff/examples_allowed_functions.ipynb @@ -18,19 +18,7 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'autograd'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mautograd\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgrad\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'autograd'" - ] - } - ], + "outputs": [], "source": [ "import autograd.numpy as np\n", "from autograd import grad" @@ -59,10 +47,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": true - }, + "execution_count": 3, + "metadata": {}, "outputs": [], "source": [ "def f1(x):\n", @@ -71,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -554,10 +540,8 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ "def f9(a): # Assume a is an array with 2 elements\n",