As previously described, NNs are a subset of ML techniques. These networks are not intended to be realistic models of the brain, but rather robust algorithms and data structures able to model difficult problems. NNs have units (neurons) organized in layers, with basically three layer categories: input layers, hidden (middle) layers and output layers. NNs can be divided into shallow (one hidden layer) and deep (several hidden layers) networks. The predictive capability of NNs comes from this hierarchical multilayered structure. Through proper training, the network can learn how to optimally represent inputs as features at different scales or resolutions and combine them into higher-order feature representations. It can then learn to relate these representations to output variables and therefore learn to predict. In fact, mathematically, NNs are capable of learning any mapping function (known as the universal approximation theorem [Cybenko 1989])