# fksainetwork
-- Documentation --
This Neural Network is coded and created by Felix K.S
(used to be in C++, ported to Rust)
The current activation functions are as follows: (index) [function] [derivative function]
- Linear (0) [value] [1.0]
- Sigmoid (1) [value / (1 + e^(-value))] [f(value) * (1.0 - f(value))]
- ReLU (2) [max(0, value)] [if value <= 0.0 ? 0.0 : 1.0]
The current methods of learning are as follows:
- Mean Squared Error (MSE) using Back Propogation (BPG) ***learn_mse_bpg***
Equation of the output bias gradient (dE/db) is the error term of the output using the error function (E)
εk = Σ [ (ak - tk) * (gk'(zk)) ] where
tk = expected value of the output neuron;
ak = gk(zk) = Neuron::result;
gk = Activation::activate
gk` = Activation::activate_derivative;
zk = Neuron::value;
Equation of the output weight gradient is the error term multipled with
the previous neuron result associated with that weight (dE/dwj)
dE/dwj = εk * aj where
εk = the error term of the output neuron;
wj = the weight of which its gradient is to be calculated;
aj = the result of the previous neuron associated with wj;
------------------
Equation of the hidden layer bias is the utilization of a recursion where
all neurons that are connected with this hidden neuron are taken onto account
during the calculation of its gradient. (dE/dbj)
An error term of j is then created.
εj = [ gj'(zj) ][ Σ (εk * wjk) ] where
gj' = Activation::activate_derivative;
zj = Neuron::value;
εk = error term of the output neuron;
wjk = the weight of the next neuron associated with this hidden neuron;
Hence, the weight gradient can be calculated using the same way as above. (dE/dwij)
dE/dwij = εj * ai where
wij = the weight of which its gradient is to be calculated;
ai = the result of the previous neuron;
εj = the error term of this hidden layer;
------------------
For deeper neural networks, the error term is then plugged in by recursion.
εj = [ gj'(zj) ][ Σ (εk * wjk) ];
εi = [ gj'(zi) ][ Σ (εj * wij) ];
εh = [ gj'(zh) ][ Σ (εi * whi) ];
and so on.