{
"cells": [
{
"cell_type": "markdown",
"id": "e5a89f53-5f63-43e9-bd66-a6790d1fe87a",
"metadata": {},
"source": [
"# 2025-10-31 Differentiation\n",
"\n",
"* Computing derivatives in maintainable code\n",
"\n",
"* Forward and reverse\n",
"\n",
"* Algorithmic (automatic) differentiation"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "f00d4064-320e-4992-a27b-c5d729ed4c8a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"grad_descent (generic function with 1 method)"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using LinearAlgebra\n",
"using Plots\n",
"using Polynomials\n",
"default(lw=4, ms=5, legendfontsize=12, xtickfontsize=12, ytickfontsize=12)\n",
"\n",
"# Here's our Vandermonde matrix again\n",
"function vander(x, k=nothing)\n",
" if isnothing(k)\n",
" k = length(x)\n",
" end\n",
" m = length(x)\n",
" V = ones(m, k)\n",
" for j in 2:k\n",
" V[:, j] = V[:, j-1] .* x\n",
" end\n",
" V\n",
"end\n",
"\n",
"# With Chebyshev polynomials\n",
"function vander_chebyshev(x, n=nothing)\n",
" if isnothing(n)\n",
" n = length(x) # Square by default\n",
" end\n",
" m = length(x)\n",
" T = ones(m, n)\n",
" if n > 1\n",
" T[:, 2] = x\n",
" end\n",
" for k in 3:n\n",
" #T[:, k] = x .* T[:, k-1]\n",
" T[:, k] = 2 * x .* T[:,k-1] - T[:, k-2]\n",
" end\n",
" T\n",
"end\n",
"\n",
"# A utility for evaluating our regression\n",
"function chebyshev_regress_eval(x, xx, n)\n",
" V = vander_chebyshev(x, n)\n",
" vander_chebyshev(xx, n) / V\n",
"end\n",
"\n",
"# And our \"bad\" function\n",
"runge(x) = 1 / (1 + 10*x^2)\n",
"runge_noisy(x, sigma) = runge.(x) + randn(size(x)) * sigma\n",
"\n",
"# And our gradient descent algorithm\n",
"function grad_descent(loss, grad, c0; gamma=1e-3, tol=1e-5)\n",
" \"\"\"Minimize loss(c) via gradient descent with initial guess c0\n",
" using learning rate gamma. Declares convergence when gradient\n",
" is less than tol or after 500 steps.\n",
" \"\"\"\n",
" c = copy(c0)\n",
" chist = [copy(c)]\n",
" lhist = [loss(c)]\n",
" for it in 1:500\n",
" g = grad(c)\n",
" c -= gamma * g\n",
" push!(chist, copy(c))\n",
" push!(lhist, loss(c))\n",
" if norm(g) < tol\n",
" break\n",
" end\n",
" end\n",
" (c, hcat(chist...), lhist)\n",
"end"
]
},
{
"cell_type": "markdown",
"id": "2b8543fb-6c37-48cd-8a5d-09e1184d4684",
"metadata": {},
"source": [
"## Nonlinear models\n",
"\n",
"Instead of the linear model\n",
"\n",
"$$ f \\left( x, c \\right) = V \\left( x \\right) c = c_0 + c_1 T_1 \\left( x \\right) + c_2 T_2 \\left( x \\right) + \\cdots $$\n",
"\n",
"let's consider a rational model with only three parameters\n",
"\n",
"$$ f \\left( x, c \\right) = \\frac{1}{c_1 + c_2 x + c_3 x^2} = \\left( c_1 + c_2 x + c_3 x^2 \\right)^{-1} $$\n",
"\n",
"We'll use the same loss function\n",
"\n",
"$$ L \\left( c; x, y \\right) = \\frac{1}{2} \\left\\lvert \\left\\lvert f \\left( x, c \\right) - y \\right\\rvert \\right\\rvert^2 $$\n",
"\n",
"We will also need the gradient\n",
"\n",
"$$ \\nabla_c L \\left( c; x, y \\right) = \\left( f \\left( x, c \\right) - y \\right)^T \\nabla_c f \\left( x, c \\right) $$\n",
"\n",
"where\n",
"\n",
"$$ \\frac{\\partial f \\left( x, c \\right)}{\\partial c_1} = - \\left( c_1 + c_2 x + c_3 x^2 \\right)^{-2} = - f \\left( x, c \\right)^2 $$\n",
"$$ \\frac{\\partial f \\left( x, c \\right)}{\\partial c_1} = - \\left( c_1 + c_2 x + c_3 x^2 \\right)^{-2} x = - f \\left( x, c \\right)^2 x $$\n",
"$$ \\frac{\\partial f \\left( x, c \\right)}{\\partial c_1} = - \\left( c_1 + c_2 x + c_3 x^2 \\right)^{-2} x^2 = - f \\left( x, c \\right)^2 x^2 $$"
]
},
{
"cell_type": "markdown",
"id": "03467447-80d5-45bb-84e3-855b51b2026a",
"metadata": {},
"source": [
"## Fitting a rational function\n",
"\n",
"Now let's fit our rational function with gradient descent, as above."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ad366000-5ca6-4380-b4c0-d2cb36a23066",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"gradient (generic function with 1 method)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f(x, c) = 1 ./ (c[1] .+ c[2].*x + c[3].*x.^2)\n",
"\n",
"function gradf(x, c)\n",
" f2 = f(x, c).^2\n",
" [-f2 -f2.*x -f2.*x.^2]\n",
"end\n",
"\n",
"function loss(c)\n",
" r = f(x, c) - y\n",
" 0.5 * r' * r\n",
"end\n",
"\n",
"function gradient(c)\n",
" r = f(x, c) - y\n",
" vec(r' * gradf(x, c))\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "65dc18d1-ef9c-4703-a317-ad70c1dc0ac5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"c = [1.1380315133586891, 0.9808803838099355, 9.257852500955655]\n"
]
},
{
"data": {
"image/png": "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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"
"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Let's fit our Runge function with noise\n",
"x = LinRange(-1, 1, 200)\n",
"y = runge_noisy(x, .5)\n",
"c, _, lhist = grad_descent(loss, gradient, [1., 0, 10.], gamma=1e-2)\n",
"@show c\n",
"\n",
"plot(lhist, yscale=:log10, label=\"loss\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "abac8e2a-ac55-457f-b289-753ab21bc3f2",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"
"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scatter(x, y, label=\"data\")\n",
"V = vander_chebyshev(x, 12) # Will overfit for Chebyshev (fit to the noise!)\n",
"plot!(x -> runge(x), color=:black, label=\"True\")\n",
"plot!(x, V * (V \\ y), label=\"Chebyshev fit\")\n",
"plot!(x -> f(x, c), label=\"Rational fit\")"
]
},
{
"cell_type": "markdown",
"id": "7de6fd47-3ac9-4cf6-b0c1-05606eff9e7c",
"metadata": {},
"source": [
"## Computing derivatives\n",
"\n",
"How should we compute these derivatives as the model gets complicated?\n",
"\n",
"Recall the definition of the derivative:\n",
"\n",
"$$ \\lim_{h \\rightarrow 0} \\frac{f \\left( x + h \\right) - f \\left( x \\right)}{h} $$\n",
"\n",
"* How should we pick $h$?\n",
"\n",
"* Too big: discretization error dominates (think of truncating the Taylor series)\n",
"\n",
"* Too small: rounding error dominates"
]
},
{
"cell_type": "markdown",
"id": "b8b6b9e1-6ba2-41d9-a6d2-2471c587d237",
"metadata": {},
"source": [
"### Automatic step size selection\n",
"\n",
"Walker and Pernice, Dennis and Schnabel developed ways to automatically choose the step size when computing the derivative numerically."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8b338775-9137-4b23-aab6-a143320076a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"diff(sin, x) - cos(x) = -7.201219542896098e-8\n",
"diff_wp(sin, x) - cos(x) = 2.790787678730311e-8\n"
]
}
],
"source": [
"# Derivative via differancing\n",
"diff(f, x; h=1e-8) = (f(x+h) - f(x)) / h\n",
"\n",
"# And automatic selection of h\n",
"function diff_wp(f, x; h=1e-8)\n",
" \"\"\"Diff using Walker and Pernice (1998) choice of step\"\"\"\n",
" h *= (1 + abs(x))\n",
" (f(x+h) - f(x)) / h\n",
"end\n",
"\n",
"# Let's try it!\n",
"x = 10\n",
"@show diff(sin, x) - cos(x)\n",
"@show diff_wp(sin, x) - cos(x);"
]
},
{
"cell_type": "markdown",
"id": "0c1b1e03-1ca2-4e66-8ac3-58095e368235",
"metadata": {},
"source": [
"## Symbolic differentiation\n",
"\n",
"We can also use a package to symbolically differentiate like we would by hand."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e98f0c5a-5928-478a-b11b-64ae51834256",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.11/Project.toml`\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.11/Manifest.toml`\n"
]
},
{
"data": {
"text/latex": [
"$$ \\begin{equation}\n",
"\\frac{\\mathrm{d} \\sin\\left( x \\right)}{\\mathrm{d}x}\n",
"\\end{equation}\n",
" $$"
],
"text/plain": [
"Differential(x)(sin(x))"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Pkg\n",
"pkg\"add Symbolics\"\n",
"using Symbolics\n",
"\n",
"# Some setup\n",
"@variables x\n",
"Dx = Differential(x)\n",
"\n",
"# And an example\n",
"y = sin(x)\n",
"Dx(y)"
]
},
{
"cell_type": "markdown",
"id": "14c4c72d-3eb8-4f36-8782-c65b9e11f2e7",
"metadata": {},
"source": [
"### Product rule\n",
"\n",
"This package can follow the product rule!"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e41073c3-6082-4159-a54a-8fe44dc00331",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$$ \\begin{equation}\n",
"\\frac{\\left( \\frac{\\cos\\left( x^{\\pi} \\right)}{x} - 3.1416 x^{2.1416} \\log\\left( x \\right) \\sin\\left( x^{\\pi} \\right) \\right) \\cos\\left( \\cos^{3.1416}\\left( x^{\\pi} \\right) \\left( \\log\\left( x \\right) \\right)^{3.1416} \\right)}{\\log\\left( x \\right) \\cos\\left( x^{\\pi} \\right)} - \\left( \\frac{3.1416 \\cos^{3.1416}\\left( x^{\\pi} \\right) \\left( \\log\\left( x \\right) \\right)^{2.1416}}{x} - 9.8696 \\cos^{2.1416}\\left( x^{\\pi} \\right) \\left( \\log\\left( x \\right) \\right)^{3.1416} x^{2.1416} \\sin\\left( x^{\\pi} \\right) \\right) \\log\\left( \\log\\left( x \\right) \\cos\\left( x^{\\pi} \\right) \\right) \\sin\\left( \\cos^{3.1416}\\left( x^{\\pi} \\right) \\left( \\log\\left( x \\right) \\right)^{3.1416} \\right)\n",
"\\end{equation}\n",
" $$"
],
"text/plain": [
"((cos(x^π) / x - 3.141592653589793(x^2.141592653589793)*log(x)*sin(x^π))*cos((log(x)^3.141592653589793)*(cos(x^π)^3.141592653589793))) / (log(x)*cos(x^π)) - ((3.141592653589793(log(x)^2.141592653589793)*(cos(x^π)^3.141592653589793)) / x - 9.869604401089358(x^2.141592653589793)*(log(x)^3.141592653589793)*sin(x^π)*(cos(x^π)^2.141592653589793))*log(log(x)*cos(x^π))*sin((log(x)^3.141592653589793)*(cos(x^π)^3.141592653589793))"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = x\n",
"for _ in 1:2\n",
" y = cos(y^π) * log(y)\n",
"end\n",
"\n",
"# This will be... a lot\n",
"expand_derivatives(Dx(y))"
]
},
{
"cell_type": "markdown",
"id": "231305d3-dd15-4568-9019-04b87ef991e1",
"metadata": {},
"source": [
"The size of these expressions can grow **exponentially**!"
]
},
{
"cell_type": "markdown",
"id": "1468105e-6d13-440d-8799-e833968b492d",
"metadata": {},
"source": [
"## Hand-coded derivatives\n",
"\n",
"With (mild) algebra abuse, the expression\n",
"\n",
"$$ \\frac{df}{dx} = f' \\left( x \\right) $$\n",
"\n",
"is equivalent to\n",
"\n",
"$$ df = f' \\left( x \\right) dx $$"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "fb7caa5a-b9b2-4bbd-a6da-5e80b47da514",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-1.5346823414986814, -34.032439961925064)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function f(x)\n",
" y = x\n",
" for _ in 1:2\n",
" a = y^π\n",
" b = cos(a)\n",
" c = log(y)\n",
" y = b * c\n",
" end\n",
" y\n",
"end\n",
"\n",
"f(1.9), diff_wp(f, 1.9)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "fdd708aa-d70f-42e4-ab82-aa5c5c8947f1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-1.5346823414986814, -34.032419599140475)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function df(x, dx)\n",
" y = x\n",
" dy = dx\n",
" for _ in 1:2\n",
" a = y^π\n",
" da = π * y^(π - 1) * dy\n",
" b = cos(a)\n",
" db = -sin(a) * da\n",
" c = log(y)\n",
" dc = dy / y\n",
" y = b * c\n",
" dy = db * c + b * dc\n",
" end\n",
" y, dy\n",
"end\n",
"\n",
"df(1.9, 1)"
]
},
{
"cell_type": "markdown",
"id": "f04e9352-442a-406d-b10a-9f103bd152c9",
"metadata": {},
"source": [
"### Forward vs reverse mode\n",
"\n",
"We can differentiate a composition $h \\left( g \\left( f \\left( x \\right) \\right) \\right)$ as\n",
"\n",
"$$ \\begin{align}\n",
" \\operatorname{d} h &= h' \\operatorname{d} g \\\\\n",
" \\operatorname{d} g &= g' \\operatorname{d} f \\\\\n",
" \\operatorname{d} f &= f' \\operatorname{d} x\n",
"\\end{align}$$\n",
"\n",
"What we've done above is called \"forward mode\", and amounts to placing the parentheses in the chain rule like\n",
"\n",
"$$ \\operatorname{d} h = \\frac{dh}{dg} \\left( \\frac{dg}{df} \\left( \\frac{df}{dx} \\operatorname{d} x \\right) \\right) $$\n",
"\n",
"This expression means the same thing if we rearrange the parenthesis,\n",
"\n",
"$$ \\operatorname{d} h = \\left( \\left( \\left( \\frac{dh}{dg} \\right) \\frac{dg}{df} \\right) \\frac{df}{dx} \\right) \\operatorname{d} x $$"
]
},
{
"cell_type": "markdown",
"id": "89c8a57a-415c-47f1-9580-9cb002a05e1e",
"metadata": {},
"source": [
"## Reverse mode example\n",
"\n",
"Let's do an example to better understand.\n",
"\n",
"$$ \\underbrace{\\bar x}_{\\frac{dh}{dx}} = \\underbrace{\\bar g \\frac{dg}{df}}_{\\bar f} \\frac{df}{dx} $$"
]
},
{
"cell_type": "markdown",
"id": "d35d952f-75ad-40c9-abc6-0e910eb1a23d",
"metadata": {},
"source": [
"Let's consider the function\n",
"\n",
"$$ z = x \\cdot y + \\sin \\left( x \\right) $$\n",
"\n",
"We can represent this in pesudocode as\n",
"\n",
"```\n",
"x = ?\n",
"y = ?\n",
"a = x * y\n",
"b = sin(x)\n",
"z = a + b\n",
"```\n",
"\n",
"Evaluating the derivative in the forward mode gives\n",
"\n",
"```\n",
"dx = ?\n",
"dy = ?\n",
"da = y * dx + x * dy\n",
"db = cos(x) * dx\n",
"dz = da + db\n",
"```\n",
"\n",
"and evaluating in the reverse mode gives\n",
"\n",
"```\n",
"gz = ?\n",
"gb = gz\n",
"ga = gz\n",
"gy = x * ga\n",
"gx = y * ga + cos(x) * gb\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "7a179966-27b3-422c-a437-14364d719904",
"metadata": {},
"source": [
"## Automatic differentiation"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "7c6270a4-c48b-4a2f-86d4-d86a095508f4",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.11/Project.toml`\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/.julia/environments/v1.11/Manifest.toml`\n"
]
}
],
"source": [
"using Pkg\n",
"pkg\"add Zygote\"\n",
"import Zygote"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "f6480617-5257-4e20-a5d2-d01c1d52c583",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-34.03241959914049,)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Zygote.gradient(f, 1.9)"
]
},
{
"cell_type": "markdown",
"id": "dab90022-6472-4a04-a63c-292daf434e01",
"metadata": {},
"source": [
"## But how?\n",
"\n",
"It's cool that Zygote works, but how does it actually work?"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "c15e67c1-93a2-4575-9533-c96ac84be5d6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[90m; Function Signature: square(Float64)\u001b[39m\n",
"\u001b[90m; @ In[12]:1 within `square`\u001b[39m\n",
"\u001b[95mdefine\u001b[39m \u001b[36mdouble\u001b[39m \u001b[93m@julia_square_35825\u001b[39m\u001b[33m(\u001b[39m\u001b[36mdouble\u001b[39m \u001b[0m%\"x::Float64\"\u001b[33m)\u001b[39m \u001b[0m#0 \u001b[33m{\u001b[39m\n",
"\u001b[91mtop:\u001b[39m\n",
"\u001b[90m; ┌ @ intfuncs.jl:370 within `literal_pow`\u001b[39m\n",
"\u001b[90m; │┌ @ float.jl:493 within `*`\u001b[39m\n",
" \u001b[0m%0 \u001b[0m= \u001b[96m\u001b[1mfmul\u001b[22m\u001b[39m \u001b[36mdouble\u001b[39m \u001b[0m%\"x::Float64\"\u001b[0m, \u001b[0m%\"x::Float64\"\n",
" \u001b[96m\u001b[1mret\u001b[22m\u001b[39m \u001b[36mdouble\u001b[39m \u001b[0m%0\n",
"\u001b[90m; └└\u001b[39m\n",
"\u001b[33m}\u001b[39m\n"
]
}
],
"source": [
"square(x) = x^2\n",
"# Let's look at the LLVM bitcode here\n",
"@code_llvm square(1.5)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "65a3be3d-546d-4d1d-8f0e-8964091f7393",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[90m; Function Signature: gradient(typeof(Main.square), Float64)\u001b[39m\n",
"\u001b[90m; @ /home/jeremy/.julia/packages/Zygote/55SqB/src/compiler/interface.jl:152 within `gradient`\u001b[39m\n",
"\u001b[95mdefine\u001b[39m \u001b[33m[\u001b[39m\u001b[33m1\u001b[39m \u001b[0mx \u001b[36mdouble\u001b[39m\u001b[33m]\u001b[39m \u001b[93m@julia_gradient_36053\u001b[39m\u001b[33m(\u001b[39m\u001b[36mdouble\u001b[39m \u001b[0m%\"args\u001b[33m[\u001b[39m\u001b[33m1\u001b[39m\u001b[33m]\u001b[39m\u001b[0m::Float64\"\u001b[33m)\u001b[39m \u001b[0m#0 \u001b[33m{\u001b[39m\n",
"\u001b[91mtop:\u001b[39m\n",
"\u001b[90m; @ /home/jeremy/.julia/packages/Zygote/55SqB/src/compiler/interface.jl:154 within `gradient`\u001b[39m\n",
"\u001b[90m; ┌ @ /home/jeremy/.julia/packages/Zygote/55SqB/src/compiler/interface.jl:97 within `#88`\u001b[39m\n",
"\u001b[90m; │┌ @ In[12]:1 within `square`\u001b[39m\n",
"\u001b[90m; ││┌ @ /home/jeremy/.julia/packages/Zygote/55SqB/src/compiler/chainrules.jl:222 within `ZBack`\u001b[39m\n",
"\u001b[90m; │││┌ @ /home/jeremy/.julia/packages/Zygote/55SqB/src/lib/number.jl:12 within `literal_pow_pullback`\u001b[39m\n",
"\u001b[90m; ││││┌ @ promotion.jl:430 within `*` @ float.jl:493\u001b[39m\n",
" \u001b[0m%0 \u001b[0m= \u001b[96m\u001b[1mfmul\u001b[22m\u001b[39m \u001b[36mdouble\u001b[39m \u001b[0m%\"args\u001b[33m[\u001b[39m\u001b[33m1\u001b[39m\u001b[33m]\u001b[39m\u001b[0m::Float64\"\u001b[0m, \u001b[33m2.000000e+00\u001b[39m\n",
"\u001b[90m; └└└└└\u001b[39m\n",
"\u001b[90m; @ /home/jeremy/.julia/packages/Zygote/55SqB/src/compiler/interface.jl:155 within `gradient`\u001b[39m\n",
" \u001b[91m%\"new:\u001b[39m\u001b[0m:Tuple2.unbox.fca.0.insert\" \u001b[0m= \u001b[95minsertvalue\u001b[39m \u001b[33m[\u001b[39m\u001b[33m1\u001b[39m \u001b[0mx \u001b[36mdouble\u001b[39m\u001b[33m]\u001b[39m \u001b[95mzeroinitializer\u001b[39m\u001b[0m, \u001b[36mdouble\u001b[39m \u001b[0m%0\u001b[0m, \u001b[33m0\u001b[39m\n",
" \u001b[96m\u001b[1mret\u001b[22m\u001b[39m \u001b[33m[\u001b[39m\u001b[33m1\u001b[39m \u001b[0mx \u001b[36mdouble\u001b[39m\u001b[33m]\u001b[39m \u001b[0m%\"new::Tuple2.unbox.fca.0.insert\"\n",
"\u001b[33m}\u001b[39m\n"
]
}
],
"source": [
"# And here is the LLVM bitcode of Zygote's derivative\n",
"@code_llvm Zygote.gradient(square, 1.5)"
]
},
{
"cell_type": "markdown",
"id": "6313d9fb-e0e3-4145-8e9b-a5ed4376111d",
"metadata": {},
"source": [
"## Types of algorithmic differentiation\n",
"\n",
"* Source transformation: Fortran code in, Fortran code out\n",
"\n",
" * Duplicates compiler features, usually incomplete language coverage\n",
"\n",
" * Produces efficient code\n",
"\n",
"* Operator overloading: C++ types\n",
"\n",
" * Hard to vectorize\n",
"\n",
" * Loops are effectively unrolled/inefficient\n",
"\n",
"* Just-in-time compilation: tightly coupled with compiler\n",
"\n",
" * JIT lag\n",
"\n",
" * Needs dynamic language features (JAX) or tight integration with compiler (Zygote, Enzyme)\n",
"\n",
" * [Some sharp bits](https://jax.readthedocs.io/en/latest/notebooks/Common_Gotchas_in_JAX.html#control-flow)"
]
},
{
"cell_type": "markdown",
"id": "b9ec8ac2-2af7-49eb-ae34-85b8aa77af53",
"metadata": {},
"source": [
"## Forward or reverse mode\n",
"\n",
"Pick forward or reverse mode depending upon the 'shape' of your function.\n",
"\n",
"* One input, many outputs: use forward mode\n",
"\n",
" * \"One input\" can be looking in one direction\n",
"\n",
"* Many inputs, one output: use reverse mode\n",
"\n",
" * Will need to traverse execution backwards (\"tape\")\n",
" \n",
" * Hierarchical checkpointing\n",
" \n",
"* About square? Forward mode is usually a bit more efficient"
]
},
{
"cell_type": "markdown",
"id": "b5eff0db-b422-4eb5-ab09-f7f137460280",
"metadata": {},
"source": [
"## Ill-conditioned optimization\n",
"\n",
"$$ L \\left( c; x, y \\right) = \\frac 1 2 \\lVert \\underbrace{f \\left( x, c \\right) - y}_{r \\left( c \\right)} \\rVert_{C^{-1}}^2 $$\n",
"\n",
"Gradient of $L$ requires the Jacobian $J$ of the model $f$.\n",
"\n",
"$$ g \\left( c \\right) = \\nabla_c L = r^T \\underbrace{\\nabla_c f}_{J} $$\n",
"\n",
"We can solve $g \\left( c \\right) = 0$ using a Newton method\n",
"\n",
"$$ g \\left( c + \\delta c \\right) = g \\left( c \\right) + \\underbrace{\\nabla_c g}_{H} \\delta c + \\mathcal{O} \\left( \\left( \\delta c \\right)^2 \\right) $$\n",
"\n",
"The Hessian requires the second derivative of $f$, which can cause problems\n",
"\n",
"$$ H = J^T J + r^T \\left( \\nabla_c J \\right) $$"
]
},
{
"cell_type": "markdown",
"id": "21b8f927-a7a4-4628-a761-778186e6d260",
"metadata": {},
"source": [
"## Newton-like methods for optimization\n",
"\n",
"Solve\n",
"\n",
"$$ H \\delta c = - g \\left( c \\right) $$\n",
"\n",
"Update $c \\leftarrow c + \\gamma \\delta c$ using using a line search or trust region."
]
},
{
"cell_type": "markdown",
"id": "72061af6-e5bb-4015-892d-6aa61a4fc6a0",
"metadata": {},
"source": [
"## Outlook\n",
"\n",
"* The optimization problem can be solved using a Newton method.\n",
"It can be onerous to implement the needed derivatives.\n",
"\n",
"* The Gauss-Newton method (see activity) is often more practical than Newton while being faster than gradient descent, though it lacks robustness.\n",
"\n",
"* The Levenberg-Marquardt method provides a sort of middle-ground between Gauss-Newton and gradient descent.\n",
"\n",
"* Many globalization techniques are used for models that possess many local minima.\n",
"\n",
"* One pervasive approach is stochastic gradient descent, where small batches (e.g., 1 or 10 or 20) are selected randomly from the corpus of observations (500 in our current example), and a step of gradient descent is applied to that reduced set of observations.\n",
"This helps to escape saddle points and weak local minima.\n",
"\n",
"* Among expressive models $f \\left( x, c \\right)$, some may converge much more easily than others.\n",
"Having a good optimization algorithm is essential for nonlinear regression with complicated models, especially those with many parameters $c$.\n",
"\n",
"* Classification is a very similar problem to regression, but the observations $y$ are discrete, thus\n",
"\n",
" * models $f \\left( x, c \\right)$ must have discrete output\n",
"\n",
" * the least squares loss function is not appropriate\n",
"\n",
"* [Why momentum really works](https://distill.pub/2017/momentum/)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.11.6",
"language": "julia",
"name": "julia-1.11"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}