

However, once you have selected a model, I'm sure you can get performance advantages by coding it in a low level and eliminating inefficiencies.

This is good for the rapid iteration that ML research demands. Having all your weights in one object is also awfully convenient you can write something like `weights -= error * deriv * learning_rate` instead of iterating over each individual weight (and a large model contains many different sets of weights, not just a single NxMxPxQ matrix) You could explicitly tell the computer how to compute the output and its derivative, or you could tell the computer how to compute the output, and let it also compute the derivative by itself. Writing them in a more abstract languages has advantages - like automatic differentiation.

But they are still tricky code, because if you get them wrong you will find that you spent 500 GPU-years turning random numbers that cause the model to output gibberish into other random numbers that cause the model to output different yet semantically identical gibberish. ML algorithms are, at their core, not particularly complicated code. The question is whether anyone finds it worth doing.
