Machine, Progress Report August 2017
It’s been almost 2 months since we released the preview video, and a lot of people are asking me “when can I try Machine?”. So I figured it’s about time to talk a bit about the state of Machine and the road ahead.
At the time of the preview we did have a pretty decent prototype (everything in the video and more was possible to do) but a big, and very important pieces of functionality was missing: Functions.
We did have something we called Templates, but they were clumsy and hard to work with. They didn’t report tensor shapes, and you weren’t able to inspect nodes inside of them. Even building a very standard GAN was hopelessly frustrating without proper functions. We realized we needed to take a step back and re-think the entire approach, and we ended up with something that was closer to a regular programming language, including a type system.
The good news is that this now exists. Here’s a debug screenshot of a function:

This function takes any tensor of shape (<A>, <B>) and produces a random normal tensor of the same shape. The nodes are, in order: the input argument x, “shape of” and random normal. The important thing to notice is that through the type system, it can correctly display the shape of the random normal tensor. The idea is that this makes it a lot easier to work with complicated models. It’s a bit more like lego, where if you can find a piece that fits, it might work.
Next up are two things. 1) Sampling and 2) Porting the backend to Rust.
Sampling is the idea that for each function, you can provide some fixed input values, that is then used when you inspect nodes inside of it. This makes it possible to peak into you components and understand what they are doing. Once this exists, I think working with functions will feel the same way as working in the “global” workspace (like we did in the preview video).
Porting the backend to Rust is more of an internal thing. We did have a pre-functions backend in Python, but packaging and distributing that solution proved challenging. Since we had to rewrite it to support the functions we decided to also switch to Rust, which would be easier to distribute.
“So when can I try it?”. If the two above things go well, and if indeed building networks such as GANs feels sufficiently natural, I think the next step is to start testing it with users. However, rather than releasing to all alpha testers at once, and then learning the same thing 2200 times (that’s how many that signed up so far!) we will release to smaller groups and iterate from there.
If you have any questions, feel free to tweet them at me or machine_ui.
(Link to alpha signup: https://goo.gl/forms/JG3Z8pAIbEkSWdlg2)
