#### owl-opt

Owl's Optimisation Module

Owl Opt is a gradient-based optimisation library that works well with Owl's automatic differentiation library. Using Owl Opt's ppx deriver, users can define their own record of optimization parameters without having to worry too much about book keeping. This greatly facilitates fast prototyping.

Owl Opt currently provides several popular optimization methods (e.g. Adam, Rmsprop, Lbfgs). With the exception of LBFGS (built on top of L-BFGS-ocaml), all methods now support both single and double precision.

Please see the documentation.

### Installation

``````\$ dune build @install
\$ dune install
``````

### Example usage

The following code fragement solves a standard linear regression problem: find paramters `a` and `b` that minimises the l2 loss `sqrt((y-(a*x+b))^2)`.
The optimisation is carried out using Adam with hyperparameters `beta1=0.99` and `beta2=0.999`.

``````module Prms = struct
type 'a t = {a: 'a; b: 'a} [@@deriving prms]
end

(* make an Adam optimisation module for the parameter definition Prms *)
module O = Owl_opt.D.Adam.Make (Prms)

(* define the objective function *)
let f prms = Owl.Algodiff.D.Maths.(l2norm' (y - ((prms.a *@ x) + prms.b)))

(* define initial parameters *)
let prms0 = {a = Owl.Algodiff.D.Mat.gaussian 5 5; b = Owl.Algodiff.D.gaussian 5 1}

(* define fixed learning rate *)
let lr = Owl_opt.Lr.(Fix 1E-4)

(* initialise an optimisation session *)
let s0 = O.init ~prms0 ~f ()

(* define stopping criteria: stop when function value is smaller than 1E-4 *)
let stop s = O.(fv s) < 1E-4

(* minimise objective function f *)
let s = O.min ~stop ~beta1:0.99 ~beta2:0.999 ~lr f

(* final objective function value *)
let c = O.fv s

(* final prms *)
let prms = O.prms s
``````
Install
Published
16 Nov 2019
Authors
Maintainers
Sources
v0.0.1.tar.gz
`md5=2c8d6a63757fc7f43217aa94d54909e8`
Dependencies
owl
`>= "0.6.0"`
dune
`>= "1.5.0"`
ocaml
`>= "4.06.0"`
Reverse Dependencies