Frequently Asked Questions#
How will the class rely on the listed math prerequisites?
The main purpose of the math prerequisites for CS 345 is to ensure that students have had enough exposure to some math so that the new content we introduce is not overwhelming. We will not assume much specific knowledge is needed from the listed prerequisite classes.
Can I audit the class?
Unfortunately, given the amount of interest in the class, we cannot allow you to audit.
Can I take the class credit/non?
We strongly advise against it. This is because CS 345 is extremely cumulative—every concept you learn will be used repeatedly after it’s introduced. As an example, if you chose to only complete 80% of HW2, chances are you will not be able to complete HW3 (or complete very little of it), and so on. Without being motivated by grades, you may find yourself falling behind, making it difficult to catch up.
Should I take more than 4 classes in total when taking CS 345?
We strongly advise against it. CS 345 is a challenging and time-consuming class. We are confident you can be successful in it and enjoy it, so long as you have enough time dedicated to it. And by this, we mean enough time to (1) spend on preparing for lectures (reading the materials before coming to class), (2) completing the homework on time, (3) attending several office hours per week, and (4) being a full person outside of your classes, with enough time to sleep, see friends, pursue hobbies, etc. These are all key ingredients for success and happiness in the course.
Is this class better for students wishing to go to industry or graduate school?
The course will set students up to be able to develop and interrogate probabilistic ML models, which can be helpful in both contexts.
What’s the overlap with CS 244 and MIT 6.390?
There are several main differences between CS 345, and CS 244 and MIT 6.390. The first is that CS 244 and MIT 6.390 both take an optimization perspective on ML; that is, we propose an objective/loss function that, when minimized, will give us a model that (hopefully) fits the data. In contrast, CS 345 takes a probabilistic perspective, which uses statistics to specify the model, and uses principles of frequentist/Bayesian learning to fit the model to data. Thus, even though there’s a small number of topics that overlap, these topics will be presented from two different perspectives. Second, CS 244 and MIT 6.390 focus more on the inner workings of deep learning architectures (e.g. how convolutional vs. recurrent neural networks work), whereas in CS3 345 treats deep learning architectures abstractly as an expressive modeling tool. In CS 345, we will then use deep learning as building blocks, and work our way towards deep Bayesian regression/classification—model that can tell us how “unsure” they are about their predictions (e.g. Bayesian Neural Networks)—and deep generative models (e.g. Variational Autoencoders, Diffusion Models).
What does a typical day look like in CS 345? What will the workload look like?
A typical class will dedicate half the time to the lecture, and the other half to in-class activities that students will bring home to finish as homework. While the homework for the class may seem long, there’s lots of in-class time to work on them.
What language/coding environment will we use?
The class will be taught in Python. We will be using Deepnote for assignments—these are coding “notebooks” that allow you to write code, make visualizations, take notes, and write math all in the same place (they are really interactive and fun to use!). There are also two Python libraries we will especially rely on. The first is Jax, which enables very fast array operations (which is the basis for all ML), and the second is NumPyro, which will allow us to translate the math/stats that describe our ML model into code we can use to fit to data.
What’s the split between math and coding?
On the math side, the class will introduce the necessary math and stats needed to create fairly complicated probabilistic ML models—whether this will feel math-heavy is a little hard to tell a priori. On the coding side, unlike other coding-heavy classes, CS 345 will not require writing a lot of code (in terms of the number of lines), but the code we will write will be conceptually tricky and will require new skill sets to debug. In that sense, it’s a coding-heavy class.
How often will CS 345 be offered?
The current plan is: once a year!