one output, which depends on the inputs (bits in our case) and a set of weights (real numbers): if the weighted sum of inputs is above a set threshold, the output is 1, else it is 0.

![\[fig:classical\_neuron\]A classical neuron taking two inputs $in_{1}$ and $in_{2}$ and giving a corresponding output $out$ [@Nielsen15]. $a_j^{(l)}$ labels the output of the $j^{th}$ neuron in the $l^{th}$ layer of the network. ](classical_neuron1.png){height="2cm"}

We will use the following standard general notation. The $j^{th}$ neuron in the $l^{th}$ layer of a network takes a number of inputs, $a^{(l-1)}_{k}$, where $k$ labels the input. The inputs are each multiplied by a corresponding weight, $w^{(l)}_{jk}$, and an output, $a_{j}^{(l)}$, is fired as a function of the weighted input $z_{j}^{(l)}=\sum_{k=1}^{n} w^{(l)}_{jk} a^{(l-1)}_{k} $, where $n$ is the number of inputs to the neuron (FIG. \[fig:classical\_neuron\]). The function relating the output to the weighted input is called the activation function, which has most commonly been a Heaviside step function or a sigmoid  [@Nielsen15]. For example, the neuron in FIG. \[fig:classical\_neuron\] with a Heaviside activation function gives an output of the form: $$a_{j}^{(l)} = \left\{\begin{matrix}
1, ~$if$~ z_{j}^{(l)} > 0.5\\ 
\!\!\! 0, ~$otherwise.$\\ 
\end{matrix}\right.$$ This paper aims to generalise the 