This book is about the harmonious synthesis of functional programming
and numerical computation. It shows how the expressiveness of OCaml
allows for fast and safe development of data science applications. Step
by step, the authors build up to use cases drawn from many areas of Data
Science, Machine Learning, and AI, and then delve into how to deploy at
scale, using parallel, distributed, and accelerated frameworks to gain
all the advantages of cloud computing environments.
To this end, the book is divided into three parts, each focusing on a
different area. Part I begins by introducing how basic numerical
techniques are performed in OCaml, including classical mathematical
topics (interpolation and quadrature), statistics, and linear algebra.
It moves on from using only scalar values to multi-dimensional arrays,
introducing the tensor and Ndarray, core data types in any numerical
computing system. It concludes with two more classical numerical
computing topics, the solution of Ordinary Differential Equations (ODEs)
and Signal Processing, as well as introducing the visualization module
we use throughout this book. Part II is dedicated to advanced
optimization techniques that are core to most current popular data
science fields. We do not focus only on applications but also on the
basic building blocks, starting with Algorithmic Differentiation, the
most crucial building block that in turn enables Deep Neural Networks.
We follow this with chapters on Optimization and Regression, also used
in building Deep Neural Networks. We then introduce Deep Neural Networks
as well as topic modelling in Natural Language Processing (NLP), two
advanced and currently very active fields in both industry and academia.
Part III collects a range of case studies demonstrating how you can
build a complete numerical application quickly from scratch using Owl.
The cases presented include computer vision and recommender systems.
This book aims at anyone with a basic knowledge of functional
programming and a desire to explore the world of scientific computing,
whether to generally explore the field in the round, to build
applications for particular topics, or to deep-dive into how numerical
systems are constructed. It does not assume strict ordering in reading -
readers can simply jump to the topic that interests them most.