In this lecture and the subsequent tutorial, we will focus on machine-learning (ML) approaches, based on normalizing flows, for sampling from high-dimensional Boltzmann distributions. After summarizing the problem and limitations of traditional techniques that we hope to address with ML, we will go in detail through the basic building blocks of coupling-layer based normalizing flows. We will discuss training objectives, evaluation metrics, and how to obtain unbiased estimates from a (biased) model. We will further cover some basic principles that allow us to design flows that respect known symmetries of the target distribution (energy) with particular focus on systems of identical particles, as a preparation for the tutorial session. Next, we'll show in detail how a flow model can be used as a targeted free energy estimator, both in the presence and the absence of data samples from the target distribution. Finally, we will discuss limitations of current models and briefly touch on recent approaches that combine flow models with traditional simulation techniques.