anchor.diff:  at a time and monitor the error but it has drawbacks:
   
   * it is an approximation
  -* you need to run the network (i.e. evaluate ) as many times as the number of weights just for one gradient descent iterration which is impratical.
  +* you need to run the network (i.e. evaluate ) as many times as the number of
  +weights just for one gradient descent iteration which is impractical.
   
   The solution is the backward propagation.
   
  
positive.code: * how neurons interconnect each other
  * ...
  
  Its behaviour is driven by the weights. The weights are the parameters you have to tune so that stem:[f()] does something interesting i.e. produces releavant ouput given the input and not just garbage.
  
  == What is training ?
  The goal of training is to find the value of the weights so that the network generates correct output.
  
  On supervised learning you present examples of input data and expected output. At the beginning the network will generate ouputs far different from the expected ones.
  
  The difference between ouput and expected output is used to update the weights so that the error decreased.
  
  After many example submission and weights optimisation cycle, you hope your network works correctly and can predict correctly new ouput with unseen data.
  
  So basically network training is a function fitting task.
  
  == How do you train ?
  Ok first we need to measure the error between an expected output and current ouput of the network.
  
  This is called a loss function and it is added at the end of the network like this:
  
  
negative.code: * A neural network must be trained by presenting some input and expected output to tune the weights
  so that it learns to generate correct output.
  * A neural network is trained by minimizing a loss function that compute the error between an output
  and the expected output.
  * The training use the gradient descent method to adjust the weights of the network
  * The gradient descent algorithm requires to evaluate the partial derivative of the network regarding the weight.
  * Back propagation is used to compute this partial derivative by recursively evaluating the gradient from the loss function
  to the first neurons of the network
  