You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Liang Wang edited this page Feb 10, 2017
·
35 revisions
Algorithmic differentiation is also known as automatic differentiation. It is a powerful tool in many fields, especially useful for fast prototyping in machine learning research. A couple of weeks ago, I started building a simple algorithmic differentiation module atop of Owl.
Currently I have implemented the prototype of forward mode. E.g., the following code first defines a function f0, then calculates from the first to the fourth derivative by calling Algodiff.Forward.derivative function.
openAlgodiff.Forwardletmat_to_t_arrayx=Dense.Real.to_array x |>Array.map (funa -> [|Float a|])
;;
lett_array_to_matx=let y =Array.map (functionFloata -> a) x inDense.Real.of_array y 1 (Array.length y)
;;
letf0x=Maths.(tanh x.(0));;
let f1 = derivative f0;;
let f2 = derivative f1;;
let f3 = derivative f2;;
let f4 = derivative f3;;
let x =Dense.Real.linspace (-4.) 4.200;;
let x0 = mat_to_t_array x;;
let y0 =Array.map f0 x0 |> t_array_to_mat;;
let y1 =Array.map f1 x0 |> t_array_to_mat;;
let y2 =Array.map f2 x0 |> t_array_to_mat;;
let y3 =Array.map f3 x0 |> t_array_to_mat;;
let y4 =Array.map f4 x0 |> t_array_to_mat;;
let h =Plot.create "plot_021.png"inPlot.set_foreground_color h 000;
Plot.set_background_color h 255255255;
Plot.plot ~h x y0;
Plot.plot ~h x y1;
Plot.plot ~h x y2;
Plot.plot ~h x y3;
Plot.plot ~h x y4;
Plot.output h;;
Start your utop, then load and open Owl library. Copy and past the code above, the generated figure will look like this.
In the following weeks, I will keep polishing the module and try to overload more useful mathematical operators.