A forward-mode automatic differentiation library in Haskell using dual numbers. Below is a guide to running all the code. A nice looking TeX report and the slides used in the presentation are in tex/.
src/AutoDiff/Types.hs-Dual atype and typeclass instancessrc/AutoDiff/Forward.hs- Forward-mode AD operationssrc/AutoDiff.hs- Main module, re-exports everythingapp/LinearRegression.hs- Linear regression example using AD-computed gradientsapp/LogisticRegression.hs- Logistic regression example using AD-computed gradientsvisualization/- Data generation and plotting scripts for derivative and gradient field visualizationstex/- TeX report and presentation slides
cabal buildBoth examples use AD to compute gradients for gradient descent training.
Generates noisy samples from y = m*x + b and fits the parameters using MSE loss.
# With default parameters (slope=3, intercept=1)
cabal run linear-regression
# With custom parameters
cabal run linear-regression -- <slope> <intercept>
cabal run linear-regression -- 3.0 1.0Generates binary classification data from two Gaussians and fits a logistic model using cross-entropy loss. Reports the fitted weights, decision boundary, and classification accuracy.
# With default parameters (mu0=-2, mu1=2, sigma=1)
cabal run logistic-regression
# With custom parameters
cabal run logistic-regression -- <mu0> <mu1> <sigma>
cabal run logistic-regression -- -2.0 2.0 1.0Generate CSV data for four test functions (polynomial, sinusoidal, exponential, composite) showing f(x) and its first three derivatives, then plot them.
cabal run gen-data
python3 visualization/plot.pyOutput: one PNG per function in visualization/images/ (e.g., polynomial.png, sinusoidal.png).
Generate a gradient field for f(x, y) = sin(x) * cos(y) over a 50x50 grid, then plot a 3D surface and a contour plot with gradient vectors.
cabal run gen-gradient-data
python3 visualization/plot_gradient.pyOutput: visualization/images/gradient_field.png.
cabal build
cabal test
cabal run linear-regression
cabal run logistic-regression
cabal run gen-data
cabal run gen-gradient-data
python3 visualization/plot.py
python3 visualization/plot_gradient.py