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 8, 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 y5 =Array.map f5 x0 |> t_array_to_mat;;
let y6 =Array.map f6 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;;
The generated figure looks like this.
In the following weeks, I will keep polishing the module and try to overload more useful mathematical operators.