All computers contain millions of electronic switches known as transistors. Traditionally these transistors switch on and off to perform the operations required to run a program on the computer. Computers are good at performing lots of calculations very fast but without special hardware they do not have the capability to generate truly random numbers. The random number generation in most computers relies on pseudorandom (appears random but is not truly random) number generators which are computer programs that perform calculations which have a random output. This works fine for simulations where we don’t care about the unpredictability of the random numbers, just that they are random. If we know what is going on inside the random number generator program, we can predict the next “random” number and therefore the generator is not truly random. The only way to get a true random number generator is to use some real-world randomness source that is described by physics only in terms of probability.

Computers are good at generating pseudorandom numbers where each number is equally likely. They are much worse at generating random numbers where each number is not equally likely. Computers must randomly throw away samples from a uniform probability distribution so that some numbers are more likely to appear than others.

My PhD focuses on building a small low-power random number generator that can generate both types of random numbers that were mentioned in the previous paragraph. The random number generator could be built into a low-power edge artificial intelligence system. This would speed up many existing machine learning applications, enable new ones, and allow us to be a lot more honest about the uncertainty in the predictions of ones that already exist.

**NanoDTC Associate, a2020**