package ppx-owl-opt

  1. Overview
  2. Docs
Ppx tool for owl-opt

Install

Dune Dependency

Authors

Maintainers

Sources

v0.0.1.tar.gz
sha256=2e35805a3479cb008133ebb768a8508cf9f46bc962a4c92a71dfdb11889b137e
md5=2c8d6a63757fc7f43217aa94d54909e8

Description

Published: 16 Nov 2019

README

Owl Opt

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

Dependencies (4)

  1. base
  2. ppxlib
  3. dune >= "1.7"
  4. ocaml >= "4.06.0"

Dev Dependencies

None

Conflicts

None

OCaml

Innovation. Community. Security.