Vouivre Digital
Dependent type infrastructure for machine learning
Vouivre
Partial function application, compile time arity verification, automatic differentiation, and built to coexist with Scheme using the Guile compiler.
> (reduce + (map (flip expt 2) '(0 1 2 3)))
14
Partial application
The sum of squares of a list.
(definec (f x θ) (adot θ x 1))
(definec (mse x y) (mean (expt (- y x) 2)))
(definec loss (∘ (mse #0(1)) (f #(1/4 3/4))))
> (map loss '(#(4 4/3) #(1 0) #(2 2/3)))
(1 9/16 0)
Defining new functions
Loss over parameters `θ' of a model `f' evaluated at `x' = #(1/4 3/4) using the mean square error `mse' with respect to an expected output of 1.
> (map (rdiff loss) '(#(4 4/3) #(1 0) #(2 2/3)))
(#(1/2 3/2) #(-3/8 -9/8) #(0 0))
> (map (fdiff (flip expt 2)) '(0 1 2 3))
(0 2 4 6)
Automatic differentiation
The derivative of the loss at each input and the derivative 2x of x^2.
> (type-of 'not)
(0 . 0)
> (type-of '∘)
((6 . 7) . ((8 . 6) . (8 . 7)))
Types
Currently, cons cell are function types, 0 is the type of anything but functions, and numbers greater than 0 are type variables.
In development
Features we are currently working on.
(∷ concatenate-vectors
(Π (: a Set)
(Π (: m ℕ)
(Π (: n ℕ)
(→ (Vec a m)
(→ (Vec a n)
(Vec a (+_ℕ m n))))))))
(concatenate-vectors ℝ 1 2 #(-0.66) #(0.06 -0.34))
Dependent types
Prototypical, sugar-free example, expressing the type of a function that returns a vector the length of which is the sum of lengths of two input vectors, all vectors having elements of the same type.
More
- Single-precision floating-points.
- Parallelization.
- Higher order differentiation.
- Adam, convolutions, transformers, etc.
- Improved embedding of the type system in Scheme.
Acknowledgements
We acknowledge and are grateful for the support of the NGI Zero Core project from NLnet.
License
The code distributed by Vouivre Digital is freedom software released under the GNU General Public License
Copyright (C) 2023-2024 Vouivre Digital Corporation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>