/[MITgcm]/manual/s_autodiff/text/doc_ad_2.tex
ViewVC logotype

Diff of /manual/s_autodiff/text/doc_ad_2.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.21 by heimbach, Thu Jan 17 22:32:06 2008 UTC revision 1.23 by jmc, Mon Aug 30 23:09:19 2010 UTC
# Line 2  Line 2 
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
# Line 65  model output variable $\vec{v}=(v_1,\ldo Line 66  model output variable $\vec{v}=(v_1,\ldo
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.
# Line 150  w.r.t. their corresponding inner product Line 151  w.r.t. their corresponding inner product
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
# Line 159  $\left\langle \,\, , \,\, \right\rangle Line 160  $\left\langle \,\, , \,\, \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  %  %
# Line 200  the gradient $ \nabla _{u}{\cal J} $ can Line 201  the gradient $ \nabla _{u}{\cal J} $ can
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  %  %
# Line 253  $ \langle \, \nabla _{v}{\cal J}^T \, , Line 254  $ \langle \, \nabla _{v}{\cal J}^T \, ,
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  %  %
# Line 267  whereas in reverse mode we have Line 268  whereas in reverse mode we have
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
# Line 276  M_{\Lambda}^T \cdot \nabla_v {\cal J}^T Line 277  M_{\Lambda}^T \cdot \nabla_v {\cal J}^T
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}
# Line 295  $ \vec{v}^{(\lambda)} $ at each intermed Line 296  $ \vec{v}^{(\lambda)} $ at each intermed
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  %  %
# Line 418  and the shorthand notation for the adjoi Line 419  and the shorthand notation for the adjoi
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 \\
# Line 465  for intermediate components, yielding Line 466  for intermediate components, yielding
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
# Line 537  operator which maps the model state spac Line 539  operator which maps the model state spac
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
# Line 663  $ n^{lev3}, \,\, n^{lev2}, \,\, n^{lev1} Line 665  $ n^{lev3}, \,\, n^{lev2}, \,\, n^{lev1}
665  %\psfrag{v_kn^lev2}{\mathinfigure{v_{k_{n}^{lev2}}}}  %\psfrag{v_kn^lev2}{\mathinfigure{v_{k_{n}^{lev2}}}}
666  %\psfrag{v_k1^lev1}{\mathinfigure{v_{k_{1}^{lev1}}}}  %\psfrag{v_k1^lev1}{\mathinfigure{v_{k_{1}^{lev1}}}}
667  %\psfrag{v_kn^lev1}{\mathinfigure{v_{k_{n}^{lev1}}}}  %\psfrag{v_kn^lev1}{\mathinfigure{v_{k_{n}^{lev1}}}}
668  %\mbox{\epsfig{file=part5/checkpointing.eps, width=0.8\textwidth}}  %\mbox{\epsfig{file=s_autodiff/figs/checkpointing.eps, width=0.8\textwidth}}
669  \resizebox{5.5in}{!}{\includegraphics{part5/checkpointing.eps}}  \resizebox{5.5in}{!}{\includegraphics{s_autodiff/figs/checkpointing.eps}}
670  %\psfull  %\psfull
671  \end{center}  \end{center}
672  \caption{  \caption{
# Line 695  the parts of the code that are relevant Line 697  the parts of the code that are relevant
697  differentiation using the software tool TAF.  differentiation using the software tool TAF.
698  Modifications to use OpenAD are described in \ref{sec_ad_openad}.  Modifications to use OpenAD are described in \ref{sec_ad_openad}.
699    
700  \input{part5/doc_ad_the_model}  \input{s_autodiff/text/doc_ad_the_model}
701    
702  The basic flow is depicted in \ref{fig:adthemodel}.  The basic flow is depicted in \ref{fig:adthemodel}.
703  If CPP option \texttt{ALLOW\_AUTODIFF\_TAMC} is defined,  If CPP option \texttt{ALLOW\_AUTODIFF\_TAMC} is defined,
# Line 730  If gradient checks are to be performed, Line 732  If gradient checks are to be performed,
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    
# Line 740  the gradient has been computed via the a Line 742  the gradient has been computed via the a
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 \\
# Line 784  the forward model. However, depending on Line 786  the forward model. However, depending on
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
# Line 1014  The aspects relevant to the treatment of Line 1016  The aspects relevant to the treatment of
1016  are controlled by the package {\it pkg/ctrl} and will be treated  are controlled by the package {\it pkg/ctrl} and will be treated
1017  in the next section.  in the next section.
1018    
1019  \input{part5/doc_cost_flow}  \input{s_autodiff/text/doc_cost_flow}
1020    
1021  \subsubsection{Enabling the package}  \subsubsection{Enabling the package}
1022    
# Line 1104  Within this 'driver' routine, S/R are ca Line 1106  Within this 'driver' routine, S/R are ca
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  %  %
# Line 1136  taf -output 'fc' ... Line 1138  taf -output 'fc' ...
1138    
1139  %%%% \end{document}  %%%% \end{document}
1140    
1141  \input{part5/doc_ad_the_main}  \input{s_autodiff/text/doc_ad_the_main}
1142    
1143  \subsection{The control variables (independent variables)  \subsection{The control variables (independent variables)
1144  \label{section_ctrl}}  \label{section_ctrl}}
# Line 1156  All aspects relevant to the treatment of Line 1158  All aspects relevant to the treatment of
1158  (parameter setting, initialization, perturbation)  (parameter setting, initialization, perturbation)
1159  are controlled by the package {\it pkg/ctrl}.  are controlled by the package {\it pkg/ctrl}.
1160    
1161  \input{part5/doc_ctrl_flow}  \input{s_autodiff/text/doc_ctrl_flow}
1162    
1163  \subsubsection{genmake and CPP options}  \subsubsection{genmake and CPP options}
1164  %  %
# Line 1267  temperature and salinity are initialised Line 1269  temperature and salinity are initialised
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
# Line 1499  u_{[k+1]} \, = \,  u_{[0]} \, + \, \Delt Line 1503  u_{[k+1]} \, = \,  u_{[0]} \, + \, \Delt
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}
# Line 1554  ad \, v_{[k]} (\delta {\cal J}) = Line 1558  ad \, v_{[k]} (\delta {\cal J}) =
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

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.23

  ViewVC Help
Powered by ViewVC 1.1.22