2 |
% $Name$ |
% $Name$ |
3 |
|
|
4 |
Author: Patrick Heimbach |
Author: Patrick Heimbach |
5 |
|
\label{ask_the_author:doc_ad_2} |
6 |
|
|
7 |
{\sf Automatic differentiation} (AD), also referred to as algorithmic |
{\sf Automatic differentiation} (AD), also referred to as algorithmic |
8 |
(or, more loosely, computational) differentiation, involves |
(or, more loosely, computational) differentiation, involves |
66 |
under consideration, |
under consideration, |
67 |
% |
% |
68 |
\begin{equation} |
\begin{equation} |
69 |
\begin{split} |
\begin{aligned} |
70 |
{\cal M} \, : & \, U \,\, \longrightarrow \, V \\ |
{\cal M} \, : & \, U \,\, \longrightarrow \, V \\ |
71 |
~ & \, \vec{u} \,\, \longmapsto \, \vec{v} \, = \, |
~ & \, \vec{u} \,\, \longmapsto \, \vec{v} \, = \, |
72 |
{\cal M}(\vec{u}) |
{\cal M}(\vec{u}) |
73 |
\label{fulloperator} |
\label{fulloperator} |
74 |
\end{split} |
\end{aligned} |
75 |
\end{equation} |
\end{equation} |
76 |
% |
% |
77 |
The vectors $ \vec{u} \in U $ and $ v \in V $ may be represented w.r.t. |
The vectors $ \vec{u} \in U $ and $ v \in V $ may be represented w.r.t. |
151 |
$\left\langle \,\, , \,\, \right\rangle $ |
$\left\langle \,\, , \,\, \right\rangle $ |
152 |
% |
% |
153 |
\begin{equation} |
\begin{equation} |
154 |
\begin{split} |
\begin{aligned} |
155 |
{\cal J} & = \, |
{\cal J} & = \, |
156 |
{\cal J} |_{\vec{u}^{(0)}} \, + \, |
{\cal J} |_{\vec{u}^{(0)}} \, + \, |
157 |
\left\langle \, \nabla _{u}{\cal J}^T |_{\vec{u}^{(0)}} \, , \, \delta \vec{u} \, \right\rangle |
\left\langle \, \nabla _{u}{\cal J}^T |_{\vec{u}^{(0)}} \, , \, \delta \vec{u} \, \right\rangle |
160 |
{\cal J} |_{\vec{v}^{(0)}} \, + \, |
{\cal J} |_{\vec{v}^{(0)}} \, + \, |
161 |
\left\langle \, \nabla _{v}{\cal J}^T |_{\vec{v}^{(0)}} \, , \, \delta \vec{v} \, \right\rangle |
\left\langle \, \nabla _{v}{\cal J}^T |_{\vec{v}^{(0)}} \, , \, \delta \vec{v} \, \right\rangle |
162 |
\, + \, O(\delta \vec{v}^2) |
\, + \, O(\delta \vec{v}^2) |
163 |
\end{split} |
\end{aligned} |
164 |
\label{deljidentity} |
\label{deljidentity} |
165 |
\end{equation} |
\end{equation} |
166 |
% |
% |
201 |
invoking the adjoint $ M^{\ast } $ of the tangent linear model $ M $ |
invoking the adjoint $ M^{\ast } $ of the tangent linear model $ M $ |
202 |
% |
% |
203 |
\begin{equation} |
\begin{equation} |
204 |
\begin{split} |
\begin{aligned} |
205 |
\nabla _{u}{\cal J}^T |_{\vec{u}} & |
\nabla _{u}{\cal J}^T |_{\vec{u}} & |
206 |
= \, M^T |_{\vec{u}} \cdot \nabla _{v}{\cal J}^T |_{\vec{v}} \\ |
= \, M^T |_{\vec{u}} \cdot \nabla _{v}{\cal J}^T |_{\vec{v}} \\ |
207 |
~ & = \, M^T |_{\vec{u}} \cdot \delta \vec{v}^{\ast} \\ |
~ & = \, M^T |_{\vec{u}} \cdot \delta \vec{v}^{\ast} \\ |
208 |
~ & = \, \delta \vec{u}^{\ast} |
~ & = \, \delta \vec{u}^{\ast} |
209 |
\end{split} |
\end{aligned} |
210 |
\label{adjoint} |
\label{adjoint} |
211 |
\end{equation} |
\end{equation} |
212 |
% |
% |
254 |
= \nabla_v {\cal J} \cdot \delta \vec{v} $ ) |
= \nabla_v {\cal J} \cdot \delta \vec{v} $ ) |
255 |
% |
% |
256 |
\begin{equation} |
\begin{equation} |
257 |
\begin{split} |
\begin{aligned} |
258 |
\nabla_v {\cal J} (M(\delta \vec{u})) & = \, |
\nabla_v {\cal J} (M(\delta \vec{u})) & = \, |
259 |
\nabla_v {\cal J} \cdot M_{\Lambda} |
\nabla_v {\cal J} \cdot M_{\Lambda} |
260 |
\cdot ...... \cdot M_{\lambda} \cdot ...... \cdot |
\cdot ...... \cdot M_{\lambda} \cdot ...... \cdot |
261 |
M_{1} \cdot M_{0} \cdot \delta \vec{u} \\ |
M_{1} \cdot M_{0} \cdot \delta \vec{u} \\ |
262 |
~ & = \, \nabla_v {\cal J} \cdot \delta \vec{v} \\ |
~ & = \, \nabla_v {\cal J} \cdot \delta \vec{v} \\ |
263 |
\end{split} |
\end{aligned} |
264 |
\label{forward} |
\label{forward} |
265 |
\end{equation} |
\end{equation} |
266 |
% |
% |
268 |
% |
% |
269 |
\begin{equation} |
\begin{equation} |
270 |
\boxed{ |
\boxed{ |
271 |
\begin{split} |
\begin{aligned} |
272 |
M^T ( \nabla_v {\cal J}^T) & = \, |
M^T ( \nabla_v {\cal J}^T) & = \, |
273 |
M_{0}^T \cdot M_{1}^T |
M_{0}^T \cdot M_{1}^T |
274 |
\cdot ...... \cdot M_{\lambda}^T \cdot ...... \cdot |
\cdot ...... \cdot M_{\lambda}^T \cdot ...... \cdot |
277 |
\cdot ...... \cdot |
\cdot ...... \cdot |
278 |
\nabla_{v^{(\lambda)}} {\cal J}^T \\ |
\nabla_{v^{(\lambda)}} {\cal J}^T \\ |
279 |
~ & = \, \nabla_u {\cal J}^T |
~ & = \, \nabla_u {\cal J}^T |
280 |
\end{split} |
\end{aligned} |
281 |
} |
} |
282 |
\label{reverse} |
\label{reverse} |
283 |
\end{equation} |
\end{equation} |
296 |
% |
% |
297 |
\begin{equation} |
\begin{equation} |
298 |
\boxed{ |
\boxed{ |
299 |
\begin{split} |
\begin{aligned} |
300 |
\nabla_{v^{(\lambda)}} {\cal J}^T |_{\vec{v}^{(\lambda)}} |
\nabla_{v^{(\lambda)}} {\cal J}^T |_{\vec{v}^{(\lambda)}} |
301 |
& = \, |
& = \, |
302 |
M_{\lambda}^T |_{\vec{v}^{(\lambda)}} \cdot ...... \cdot |
M_{\lambda}^T |_{\vec{v}^{(\lambda)}} \cdot ...... \cdot |
303 |
M_{\Lambda}^T |_{\vec{v}^{(\lambda)}} \cdot \delta \vec{v}^{\ast} \\ |
M_{\Lambda}^T |_{\vec{v}^{(\lambda)}} \cdot \delta \vec{v}^{\ast} \\ |
304 |
~ & = \, \delta \vec{v}^{(\lambda) \, \ast} |
~ & = \, \delta \vec{v}^{(\lambda) \, \ast} |
305 |
\end{split} |
\end{aligned} |
306 |
} |
} |
307 |
\end{equation} |
\end{equation} |
308 |
% |
% |
419 |
$ \delta v^{(\lambda) \, \ast}_{j} = \frac{\partial}{\partial v^{(\lambda)}_{j}} |
$ \delta v^{(\lambda) \, \ast}_{j} = \frac{\partial}{\partial v^{(\lambda)}_{j}} |
420 |
{\cal J}^T $, $ j = 1, \ldots , n_{\lambda} $, |
{\cal J}^T $, $ j = 1, \ldots , n_{\lambda} $, |
421 |
for intermediate components, yielding |
for intermediate components, yielding |
422 |
|
{\small |
423 |
\begin{equation} |
\begin{equation} |
424 |
\small |
\begin{aligned} |
|
\begin{split} |
|
425 |
\left( |
\left( |
426 |
\begin{array}{c} |
\begin{array}{c} |
427 |
\delta v^{(\lambda) \, \ast}_1 \\ |
\delta v^{(\lambda) \, \ast}_1 \\ |
466 |
\delta v^{\ast}_{n} \\ |
\delta v^{\ast}_{n} \\ |
467 |
\end{array} |
\end{array} |
468 |
\right) |
\right) |
469 |
\end{split} |
\end{aligned} |
470 |
\end{equation} |
\end{equation} |
471 |
|
} |
472 |
|
|
473 |
Eq. (\ref{forward}) and (\ref{reverse}) are perhaps clearest in |
Eq. (\ref{forward}) and (\ref{reverse}) are perhaps clearest in |
474 |
showing the advantage of the reverse over the forward mode |
showing the advantage of the reverse over the forward mode |
539 |
Then, $ \nabla_v {\cal J} $ takes the form |
Then, $ \nabla_v {\cal J} $ takes the form |
540 |
% |
% |
541 |
\begin{equation*} |
\begin{equation*} |
542 |
\begin{split} |
\begin{aligned} |
543 |
\nabla_v {\cal J}^T & = \, 2 \, \, H \cdot |
\nabla_v {\cal J}^T & = \, 2 \, \, H \cdot |
544 |
\left( \, {\cal H}(\vec{v}) - \vec{d} \, \right) \\ |
\left( \, {\cal H}(\vec{v}) - \vec{d} \, \right) \\ |
545 |
~ & = \, 2 \sum_{j} \left\{ \sum_k |
~ & = \, 2 \sum_{j} \left\{ \sum_k |
546 |
\frac{\partial {\cal H}_k}{\partial v_{j}} |
\frac{\partial {\cal H}_k}{\partial v_{j}} |
547 |
\left( {\cal H}_k (\vec{v}) - d_k \right) |
\left( {\cal H}_k (\vec{v}) - d_k \right) |
548 |
\right\} \, {\vec{f}_{j}} \\ |
\right\} \, {\vec{f}_{j}} \\ |
549 |
\end{split} |
\end{aligned} |
550 |
\end{equation*} |
\end{equation*} |
551 |
% |
% |
552 |
where $H_{kj} = \partial {\cal H}_k / \partial v_{j} $ is the |
where $H_{kj} = \partial {\cal H}_k / \partial v_{j} $ is the |
732 |
{\tt ALLOW\_GRADIENT\_CHECK} is defined. In this case |
{\tt ALLOW\_GRADIENT\_CHECK} is defined. In this case |
733 |
the driver routine {\it grdchk\_main} is called after |
the driver routine {\it grdchk\_main} is called after |
734 |
the gradient has been computed via the adjoint |
the gradient has been computed via the adjoint |
735 |
(cf. Section \ref{section_grdchk}). |
(cf. Section \ref{sec:ad_gradient_check}). |
736 |
|
|
737 |
%------------------------------------------------------------------ |
%------------------------------------------------------------------ |
738 |
|
|
742 |
In order to configure AD-related setups the following packages need |
In order to configure AD-related setups the following packages need |
743 |
to be enabled: |
to be enabled: |
744 |
{\it |
{\it |
745 |
\begin{table}[h!] |
\begin{table}[!ht] |
746 |
\begin{tabular}{l} |
\begin{tabular}{l} |
747 |
autodiff \\ |
autodiff \\ |
748 |
ctrl \\ |
ctrl \\ |
786 |
to generate, and on which AD tool is available (TAF or TAMC), |
to generate, and on which AD tool is available (TAF or TAMC), |
787 |
the following {\tt make} targets are available: |
the following {\tt make} targets are available: |
788 |
|
|
789 |
\begin{table}[h!] |
\begin{table}[!ht] |
790 |
{\footnotesize |
{\footnotesize |
791 |
\begin{tabular}{|ccll|} |
\begin{tabular}{|ccll|} |
792 |
\hline |
\hline |
1106 |
the chosen cost function contributions. |
the chosen cost function contributions. |
1107 |
In the present example ({\bf ALLOW\_COST\_TRACER}), |
In the present example ({\bf ALLOW\_COST\_TRACER}), |
1108 |
S/R {\it cost\_tracer} is called. |
S/R {\it cost\_tracer} is called. |
1109 |
It accumulates {\bf objf\_tracer} according to eqn. (\ref{???}). |
It accumulates {\bf objf\_tracer} according to eqn. (\ref{ask_the_author:doc_ad_2}). |
1110 |
% |
% |
1111 |
\subsubsection{Finalize all contributions} |
\subsubsection{Finalize all contributions} |
1112 |
% |
% |
1269 |
a perturbation anomaly is added to the field in S/R |
a perturbation anomaly is added to the field in S/R |
1270 |
{\it ctrl\_map\_ini} |
{\it ctrl\_map\_ini} |
1271 |
% |
% |
1272 |
|
%\begin{eqnarray} |
1273 |
\begin{equation} |
\begin{equation} |
1274 |
\begin{split} |
\begin{aligned} |
1275 |
u & = \, u_{[0]} \, + \, \Delta u \\ |
u & = \, u_{[0]} \, + \, \Delta u \\ |
1276 |
{\bf tr1}(...) & = \, {\bf tr1_{ini}}(...) \, + \, {\bf xx\_tr1}(...) |
{\bf tr1}(...) & = \, {\bf tr1_{ini}}(...) \, + \, {\bf xx\_tr1}(...) |
1277 |
\label{perturb} |
\label{perturb} |
1278 |
\end{split} |
\end{aligned} |
1279 |
\end{equation} |
\end{equation} |
1280 |
|
%\end{eqnarray} |
1281 |
% |
% |
1282 |
{\bf xx\_tr1} is a 3-dim. global array |
{\bf xx\_tr1} is a 3-dim. global array |
1283 |
holding the perturbation. In the case of a simple |
holding the perturbation. In the case of a simple |
1503 |
$ u_{[k+1]} $ then serves as input for a forward/adjoint run |
$ u_{[k+1]} $ then serves as input for a forward/adjoint run |
1504 |
to determine $ {\cal J} $ and $ \nabla _{u}{\cal J} $ at iteration step |
to determine $ {\cal J} $ and $ \nabla _{u}{\cal J} $ at iteration step |
1505 |
$ k+1 $. |
$ k+1 $. |
1506 |
Tab. \ref{???} sketches the flow between forward/adjoint model |
Tab. \ref{ask_the_author:doc_ad_2} sketches the flow between forward/adjoint model |
1507 |
and the minimization routine. |
and the minimization routine. |
1508 |
|
|
1509 |
|
{\scriptsize |
1510 |
\begin{eqnarray*} |
\begin{eqnarray*} |
|
\scriptsize |
|
1511 |
\begin{array}{ccccc} |
\begin{array}{ccccc} |
1512 |
u_{[0]} \,\, , \,\, \Delta u_{[k]} & ~ & ~ & ~ & ~ \\ |
u_{[0]} \,\, , \,\, \Delta u_{[k]} & ~ & ~ & ~ & ~ \\ |
1513 |
{\Big\downarrow} |
{\Big\downarrow} |
1558 |
~ & ~ & ~ & ~ & \Delta u_{[k+1]} \\ |
~ & ~ & ~ & ~ & \Delta u_{[k+1]} \\ |
1559 |
\end{array} |
\end{array} |
1560 |
\end{eqnarray*} |
\end{eqnarray*} |
1561 |
|
} |
1562 |
|
|
1563 |
The routines {\it ctrl\_unpack} and {\it ctrl\_pack} provide |
The routines {\it ctrl\_unpack} and {\it ctrl\_pack} provide |
1564 |
the link between the model and the minimization routine. |
the link between the model and the minimization routine. |
1565 |
As described in Section \ref{???} |
As described in Section \ref{ask_the_author:doc_ad_2} |
1566 |
the {\it unpack} and {\it pack} routines read and write |
the {\it unpack} and {\it pack} routines read and write |
1567 |
control and gradient {\it vectors} which are compressed |
control and gradient {\it vectors} which are compressed |
1568 |
to contain only wet points, in addition to the full |
to contain only wet points, in addition to the full |