linear algebra, calculus, C-programming, general Machine Learning/Data Analysis concepts
Neural Networks (NNs) are powerful and popular machine learning models used in natural and social sciences and various commercial frameworks. Their strengths come from the potentially-large flexibility and the possibility of training them through scalable methods, e.g. stochastic gradient descent. On the other hand, trained NNs have a huge memory footprint, as millions of real-valued weights need to be stored and multiplied together for predicting new events.
The recent literature contains examples of training procedures that produce low-complexity NNs, by either discretizing the model’s free parameters  or forcing the majority of them to be 0 . In many cases, however, the network is implemented and trained through standard tools, e.g. Pytorch or TensorFlow, which make all expected computational gains marginal. To speed up the inference stage, one would need to reimplement the trained model in a more hardware-like way.
In this project, you will explore how to implement simple NNs in C directly and through code-generation tools .
 Qin, Haotong, et al. “Binary neural networks: A survey.” Pattern Recognition 105 (2020): 107281.  Blalock, Davis, et al. “What is the state of neural network pruning?.” Proceedings of machine learning and systems 2 (2020): 129-146.  Urbann, Oliver, et al. “AC Code Generator for Fast Inference and Simple Deployment of Convolutional Neural Networks on Resource-Constrained Systems.” 2020 IEEE International IOT, Electronics and Mechatronics Conference (IEMTRONICS). IEEE, 2020.