Gradient-Based Sensitivity Analysis ¶ Spatial Field ¶ Consider an arbitrary spatial field
u = u ( s ) u : R D s → R s ∈ Ω ⊆ R D s \begin{aligned}
u &= \boldsymbol{u}(\mathbf{s}) && && u: \mathbb{R}^{D_s}\rightarrow\mathbb{R} && && \mathbf{s}\in\Omega\subseteq\mathbb{R}^{D_s}
\end{aligned} u = u ( s ) u : R D s → R s ∈ Ω ⊆ R D s We can take the gradient of that field
Gradient : J [ u , s ] = ∂ s u ∂ s u : R D s → R D s \begin{aligned}
\text{Gradient}: && &&
\boldsymbol{J}[\boldsymbol{u}, \mathbf{s}] &=
\partial_s \boldsymbol{u} && &&
\partial_s \boldsymbol{u}: \mathbb{R}^{D_s}\rightarrow\mathbb{R}^{D_s}
\end{aligned} Gradient : J [ u , s ] = ∂ s u ∂ s u : R D s → R D s Example ¶ An example would be a simple sine with an additive term
u ( s ) = s + sin ( s ) u : R → R \begin{aligned}
u(s) &= s + \sin(s) && &&
u: \mathbb{R}\rightarrow \mathbb{R}
\end{aligned} u ( s ) = s + sin ( s ) u : R → R # get data
x: Array["N"] = ...
# create a function
f = lambda x: x + sin(x)
y: Array["N"] = vmap(f)(x)
Now, we can take the gradient of that field.
∂ s u = cos ( s ) u : R → R \begin{aligned}
\partial_s u &= \cos(s) && &&
u: \mathbb{R}\rightarrow \mathbb{R}
\end{aligned} ∂ s u = cos ( s ) u : R → R # take the gradient
df = grad(f)
dx: Array["N"] = vmap(df)(x)
Parameterized Spatial Field ¶ Suppose we have some sample from the arbitrary spatial field with some parameters
u = u ( s , θ ) u : R D s × R D θ → R s ∈ Ω ⊆ R D s \begin{aligned}
u &= \boldsymbol{u}(\mathbf{s},\boldsymbol{\theta}) && &&
u: \mathbb{R}^{D_s}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R} && &&
\mathbf{s}\in\Omega\subseteq\mathbb{R}^{D_s}
\end{aligned} u = u ( s , θ ) u : R D s × R D θ → R s ∈ Ω ⊆ R D s Now, we have a few options.
We can take the gradient of
Gradient wrt Coords : J [ u , s ] = ∂ s u ∂ s u : R D s × R D θ → R D s Gradient wrt Parameters : J [ u , θ ] = ∂ θ u ∂ θ u : R D s × R D θ → R D θ \begin{aligned}
\text{Gradient wrt Coords}: && &&
\boldsymbol{J}[\boldsymbol{u}, \mathbf{s}] &=
\partial_s \boldsymbol{u} && &&
\partial_s \boldsymbol{u}: \mathbb{R}^{D_s}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R}^{D_s}\\
\text{Gradient wrt Parameters}: && &&
\boldsymbol{J}[\boldsymbol{u}, \mathbf{\theta}] &=
\partial_\theta \boldsymbol{u} && &&
\partial_\theta \boldsymbol{u}: \mathbb{R}^{D_s}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R}^{D_\theta}\\
\end{aligned} Gradient wrt Coords : Gradient wrt Parameters : J [ u , s ] J [ u , θ ] = ∂ s u = ∂ θ u ∂ s u : R D s × R D θ → R D s ∂ θ u : R D s × R D θ → R D θ Example ¶ An example would be a simple periodic sine function with some amplitude and frequency parameters
u ( s ; θ ) = a sin ( b s + c ) + d u : R × R D θ → R \begin{aligned}
u(s;\boldsymbol{\theta}) &= a\sin(bs + c) + d && &&
u: \mathbb{R}\times\mathbb{R}^{D_\theta}\rightarrow \mathbb{R}
\end{aligned} u ( s ; θ ) = a sin ( b s + c ) + d u : R × R D θ → R where a a a is the amplitude, b b b is the period, c c c is the phase shift and d d d is the vertical shift.
So the parameters of the field are θ = { a , b , c , d } \boldsymbol{\theta}= \{a,b,c,d\} θ = { a , b , c , d } .
See webpage for a visual demonstration.
# create a function
def f(x: Scalar, params: Dict) -> Scalar:
a, b, c, d = params["a"], params["b"], params["c"], params["d"]
return a sin(b * s + c) + d
# Define parameters
params = dict(a=0.1,b=0.01,c=1.0,d=10)
# get data
x: Array["N"] = np.linspace(-2*pi, 2*pi, 100)
# apply function
y: Array["N"] = vmap(f, axis=0)(x, params)
Now, we can take the gradient of that field.
First, the gradient wrt the coordinate, s s s .
Gradient wrt Coords : ∂ s u = a b cos ( b s + d ) ∂ s u : R × R D θ → R \begin{aligned}
\text{Gradient wrt Coords}: && &&
\partial_s \boldsymbol{u} &= ab\cos(bs+d) && &&
\partial_s \boldsymbol{u}: \mathbb{R}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R}
\end{aligned} Gradient wrt Coords : ∂ s u = ab cos ( b s + d ) ∂ s u : R × R D θ → R Now, we can take the gradient wrt each of the parameters
Gradient wrt a : ∂ a u = sin ( b s + c ) ∂ a u : R × R D θ → R Gradient wrt b : ∂ b u = a s cos ( b s + c ) ∂ b u : R × R D θ → R Gradient wrt c : ∂ c u = a cos ( b s + c ) ∂ c u : R × R D θ → R Gradient wrt d : ∂ d u = 1 ∂ d u : R × R D θ → R \begin{aligned}
\text{Gradient wrt }a: && &&
\partial_a \boldsymbol{u} &= \sin(bs + c) && &&
\partial_a \boldsymbol{u}: \mathbb{R}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R} \\
\text{Gradient wrt }b: && &&
\partial_b \boldsymbol{u} &= as\cos(bs+c) && &&
\partial_b \boldsymbol{u}: \mathbb{R}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R} \\
\text{Gradient wrt }c: && &&
\partial_c \boldsymbol{u} &= a\cos(bs+c) && &&
\partial_c \boldsymbol{u}: \mathbb{R}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R} \\
\text{Gradient wrt }d: && &&
\partial_d \boldsymbol{u} &= 1 && &&
\partial_d \boldsymbol{u}: \mathbb{R}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R} \\
\end{aligned} Gradient wrt a : Gradient wrt b : Gradient wrt c : Gradient wrt d : ∂ a u ∂ b u ∂ c u ∂ d u = sin ( b s + c ) = a s cos ( b s + c ) = a cos ( b s + c ) = 1 ∂ a u : R × R D θ → R ∂ b u : R × R D θ → R ∂ c u : R × R D θ → R ∂ d u : R × R D θ → R # take the gradient
dxf = grad(f, axis=0)
dx: Array["N"] = vmap(dxf, axis=0)(x)
# gradient wrt parameters
dpf = jacobian(f, axis=1)
dp: Array["N Ds"] = vmap(dpf, axis=1)(x)
Conditional Spatial Field ¶ Suppose we have some sample from the arbitrary spatial field with some parameters
u = u ( s , x , θ ) u : R D s × R D x × R D θ → R s ∈ Ω ⊆ R D s \begin{aligned}
u &= \boldsymbol{u}(\mathbf{s},\boldsymbol{x},\boldsymbol{\theta}) && &&
u: \mathbb{R}^{D_s}\times\mathbb{R}^{D_x}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R} && &&
\mathbf{s}\in\Omega\subseteq\mathbb{R}^{D_s}
\end{aligned} u = u ( s , x , θ ) u : R D s × R D x × R D θ → R s ∈ Ω ⊆ R D s Now, we have a few options.
We can take the gradient of
Gradient wrt Coords : J [ u , s ] = ∂ s u ∂ s u : R D s × R D θ → R D s Gradient wrt Parameters : J [ u , θ ] = ∂ θ u ∂ θ u : R D s × R D θ → R D θ Gradient wrt Covariate : J [ u , x ] = ∂ θ u ∂ θ u : R D s × R D θ → R D θ \begin{aligned}
\text{Gradient wrt Coords}: && &&
\boldsymbol{J}[\boldsymbol{u}, \mathbf{s}] &=
\partial_s \boldsymbol{u} && &&
\partial_s \boldsymbol{u}: \mathbb{R}^{D_s}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R}^{D_s}\\
\text{Gradient wrt Parameters}: && &&
\boldsymbol{J}[\boldsymbol{u}, \boldsymbol{\theta}] &=
\partial_\theta \boldsymbol{u} && &&
\partial_\theta \boldsymbol{u}: \mathbb{R}^{D_s}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R}^{D_\theta}\\
\text{Gradient wrt Covariate}: && &&
\boldsymbol{J}[\boldsymbol{u}, \boldsymbol{x}] &=
\partial_\theta \boldsymbol{u} && &&
\partial_\theta \boldsymbol{u}: \mathbb{R}^{D_s}\times\mathbb{R}^{D_\theta}\rightarrow\mathbb{R}^{D_\theta}\\
\end{aligned} Gradient wrt Coords : Gradient wrt Parameters : Gradient wrt Covariate : J [ u , s ] J [ u , θ ] J [ u , x ] = ∂ s u = ∂ θ u = ∂ θ u ∂ s u : R D s × R D θ → R D s ∂ θ u : R D s × R D θ → R D θ ∂ θ u : R D s × R D θ → R D θ Example (TODO) ¶ Toy Examples ¶ Temporal Signals
Linear : u ( t , θ ) = a t + b t ∈ R NonLinear : u ( t , θ ) = a sin ( b t + c ) + d t ∈ R \begin{aligned}
\text{Linear}: && &&
\boldsymbol{u}(t,\boldsymbol{\theta}) &= at + b && &&
t\in\mathbb{R}\\
\text{NonLinear}: && &&
\boldsymbol{u}(t,\boldsymbol{\theta}) &= a\sin(bt+c)+d && &&
t\in\mathbb{R}\\
\end{aligned} Linear : NonLinear : u ( t , θ ) u ( t , θ ) = a t + b = a sin ( b t + c ) + d t ∈ R t ∈ R Spatial Signals
2D Linear : u ( s , θ ) = a s 1 + b s 2 2D NonLinear : u ( s , θ ) = a s 1 cos ( b s 2 ) + d 3D NonLinear : u ( s , θ ) = a λ + b ϕ + c r \begin{aligned}
\text{2D Linear}: && &&
\boldsymbol{u}(\mathbf{s},\boldsymbol{\theta}) &= as_1 + bs_2\\
\text{2D NonLinear}: && &&
\boldsymbol{u}(\mathbf{s},\boldsymbol{\theta}) &= as_1\cos(bs_2)+d\\
\text{3D NonLinear}: && &&
\boldsymbol{u}(\mathbf{s},\boldsymbol{\theta}) &= a\lambda + b\phi + c r\\
\end{aligned} 2D Linear : 2D NonLinear : 3D NonLinear : u ( s , θ ) u ( s , θ ) u ( s , θ ) = a s 1 + b s 2 = a s 1 cos ( b s 2 ) + d = aλ + b ϕ + cr Spatiotemporal Signals
1D+T Linear : u ( s , t , θ ) = . . . 2D+T Linear : u ( s , t , θ ) = . . . 2D+T Non-Linear : u ( s , t , θ ) = . . . \begin{aligned}
\text{1D+T Linear}: && &&
\boldsymbol{u}(\mathbf{s},t,\boldsymbol{\theta}) &= ...\\
\text{2D+T Linear}: && &&
\boldsymbol{u}(\mathbf{s},t,\boldsymbol{\theta}) &= ... \\
\text{2D+T Non-Linear}: && &&
\boldsymbol{u}(\mathbf{s},t,\boldsymbol{\theta}) &= ...
\end{aligned} 1D+T Linear : 2D+T Linear : 2D+T Non-Linear : u ( s , t , θ ) u ( s , t , θ ) u ( s , t , θ ) = ... = ... = ...