Assignment 3: Restricted Boltzmann Machines

Discussion: May 11th

In this assignment, we will be implementing a Binary RBM. This requires some low-level programming rather than just sticking a bunch of layers together.

Start off by implementing algorithm 18.1 from the deep learning book.

Once you have the basic algorithm going, you might want to test it first. Since we are working with binary RBMs, MNIST seems like the best option here. You may “binarize” the data by rounding all values to 0 or 1, however since MNIST is already almost binary this will likely not make a large difference. Experiment with different numbers of hidden units and burn-in steps, and generate some samples of the trained models for subjective evaluation.

Next, you should improve on the basic procedure.

Test your algorithms once again and compare the results (as well as the speed at which you achieve them) to the basic algorithm.

Bonus

Feel free to try other training methods such as pseudolikelihood or score matching.