A Differentiable Programming System to Bridge ML and Scientific Computing
1–10 of 75 posts
Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#2I’ve recently switched some Fortran simulations at work for a pure Julia implementation and it is great fun to write. DifferentialEquations is a phenomenal piece of work!
Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#3I’ve just given this a cursory read but wanted to say that this looks really exciting. Julia in general seems like such an exciting language. I’ve recently switched some Fortran simulations at work for a pure Julia implementation and it is great fun to write. DifferentialEquations is a phenomenal piece of work!
Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#4Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#5Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#6Is this somehow similar to the new Swift Automatic Differentiation feature? https://github.com/tensorflow/swift/blob/master/docs/Automat...
It seems to lack a nice way of doing vector and matrix operations.
Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#7Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#8I’ve just given this a cursory read but wanted to say that this looks really exciting. Julia in general seems like such an exciting language. I’ve recently switched some Fortran simulations at work for a pure Julia implementation and it is great fun to write. DifferentialEquations is a phenomenal piece of work!
Is the performance equivalent in your scenario?
Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#9Is this somehow similar to the new Swift Automatic Differentiation feature? https://github.com/tensorflow/swift/blob/master/docs/Automat...
Does Swift have an equivalent to Python‘s numpy? It seems to lack a nice way of doing vector and matrix operations.
Re: A Differentiable Programming System to Bridge ML and Scientific Computing
#10An alternative approach https://www.microsoft.com/en-us/research/video/the-simple-es... where you define the right functional structures that allow a very compact and efficient way of expressing automatic differentiation and then let the existing compiler do the heavy lifting.
For example, all the ML frameworks generally combine a high level tracer with a straight line AD transform, which then sometimes gets presented as a fundamental aspect of AD (which it isn't, you're just using the tracer to get an IR you can handle). As a result, this field has a lot of confused terminology, but all the results have been known since the 70s.
The name of the game for all the latest generation tools is to cleanly separate out the semantic AD transform from the rest of the system and then just use an unmodified compiler thereafter. We do it by transforming Julia IR, the Swift folks do it on SIL, and the Scala folks have an implementation using shift/reset and LMS. If you do this, a bunch of traditional AD techniques become just special cases of general purpose compiler transforms (DCE, CSE, etc). See this talk I gave recently for some more details: https://juliacomputing.com/blog/2019/02/19/growing-a-compile...
As an aside, a pet peeve of mine is people calling these algorithms "tape free". High storage requirements, due to the need to remember (or alternatively, recompute) intermediate values are a fundamental property of reverse mode AD and you can't get rid of it. The best you can do is hide it (e.g. in compiler managed stack or closure environments), with all the same fundamental challenges. This is probably a terminology clash, with people wanting to use "tape" as a term for a much more narrow kind of data structure generated from a tracing AD system, but the requirement to have some data structure like it, no matter how hidden is fundamental to the algorithm.