smaller number of bits, and are ‘work-horses’ of classical machine learning [@Azoff94].

### Classical autoencoder {#classical-autoencoder .unnumbered}

Autoencoders are commonly achieved by a feedforward neural network with a bottleneck in the form of a layer with fewer neurons than the input layer. The network is trained to recreate the signal at a later layer, which necessitates reversibly compressing it (as well as possible) to a bit size equal to the number of neurons in the bottleneck layer [@Azoff94]. The bottleneck layer size can be varied as part of the training to find the smallest compression size possible, which depends on the data set in question. After the training is complete, the post-bottleneck part of the network can be discarded and the compressed output taken directly from after the bottleneck.

In FIG. \[fig:cl\_autoencoder\] a basic autoencoder designed to compress two bits into a single bit is shown. (Here the number of input bits, $j_{max}=2$.) The basic training procedure consists of creating a cost function: $$C = \sum_{j = 1}^{j_{max}} (in_{j}-out_{j})^{2},$$ with which the network is trained using the learning rule of Eq. \[eq:learningrule\]. If the outputs are identical to the inputs (to within numerical precision), the network is fully trained. The 