首页 > 其他分享 >Adjoint State Method

Adjoint State Method

时间:2024-03-17 22:22:39浏览次数:26  
标签:方程 Adjoint nabla 泛函 State delta aligned Method lambda

Adjoint state method

伴随状态法【Adjoint state method】是用于求解优化问题的算法,可以快速得到目标泛函对自由函数的梯度,从而可以使用Newton法等迭代算法求解优化问题。

Date: 2024/03/17

考虑如下优化问题:

\[\begin{aligned} \min_v & \quad J(u, v) \\ \text{s.t.} & \quad B(u;v) = 0 \end{aligned} \tag{1} \]

其中 \(J\) 是目标泛函,\(B\) 是与参函数 \(v\) 相关的线性约束泛函,\(u,v\) 是自由函数。此类优化常用于反问题建模,或者正问题求解。例如正问题中,\(J\) 是PDE弱形式导出的泛函积分,\(B\) 是PDE边界条件,\(v\) 是方程的解,\(u\) 是方程的参函数。反问题中 \(u,v\) 的地位互换。设满足约束条件的 \(u=u_v\),代入目标函数即有 \(j(v) = J(u_v, v)\)。

如果采用迭代法求解上述优化问题,需要求出如下梯度:

\[d_vj(v;\delta_v) = \nabla_v J = \nabla_1J \cdot \nabla_v u + \nabla_2 J \tag{2} \]

一般来说,泛函 \(J\) 的形式是已知的,因此 \(\nabla_1 J,\nabla_2 J\) 均容易得到。但 \(\nabla_v u\) 的求解往往是困难的,因为 \(u\) 通过约束泛函 \(B\) 隐式地依赖于自由函数 \(v\)。为了获得 \((2)\) 中梯度,需要利用 Lagrange 乘子法和伴随状态法。

考虑如下带 Lagrange 乘子的优化问题:

\[\begin{aligned} \min_v & \quad L(u, v, \lambda) = J(u,v) + (B(u;v), \lambda) \\ \end{aligned} \tag{3} \]

目标函数极值点应满足如下方程 \(\forall \delta_u\in \mathcal{U}, \delta_v \in \mathcal{V}, \delta_\lambda \in \mathcal{U}\):

\[\begin{cases} d_u L(u, v, \lambda; \delta_u) = 0 \\ d_v L(u, v, \lambda; \delta_v) = 0 \\ d_\lambda L(u, v, \lambda; \delta_\lambda) = 0 \end{cases} \tag{4} \]

上式的泛函导数是 Gateaux derivative。在 \((4)\) 中,称第一个方程为伴随状态方程,下导出其表达:

\[\begin{aligned} d_u L(u, v, \lambda; \delta_u) &= d_u J(u,v; \delta_u) + (d_u B(u;v; \delta_u), \lambda) \\ &= d_u J(u,v; \delta_u) + \left( \lim_{\tau \to 0} \frac{B(u + \tau \delta_u;v)-B(u;v)}{\tau} , \lambda \right) \\ &= d_u J(u,v; \delta_u) + (B(\delta_u;v), \lambda) \\ &= d_u J(u,v; \delta_u) + (\delta_u, B^*(\lambda; v)) = 0 \end{aligned} \tag{5} \]

其中 \(B^*(\cdot;\lambda)\) 为 \(B(\cdot; \lambda)\) 的伴随。\((4)\) 中第二个方程是理解伴随状态法的关键,推导一下:

\[\begin{aligned} d_v L(u, v, \lambda; \delta_v) &= d_v J(u,v;\delta_v) + (d_v B(u;v;\delta_v), \lambda) = 0 \end{aligned}\tag{6} \]

而 \((4)\) 中的第三个方程即为约束条件。

现考虑有 \(u_v,\lambda_v\) 满足 \((4)\) 中的第一、第三两个方程,将它们代入 \((4)\) 的第二个方程中,得到仅和 \(v\) 相关的泛函 \(L(u_v,v,\lambda_v)\),泛函 \(L(u_v,v,\lambda_v) = J(u_v,v) = j(v)\)。

综合上面结果,为求 \(J(u,v)\) 在约束 \(B(u,v) = 0\) 下对 \(v\) 的导数,可以写出方程 \((6)\),得到:

\[\begin{aligned} d_v j(v; \delta_v) = d_v L(u, v, \lambda; \delta_v) |_{u=u_v,\lambda = \lambda_v} \end{aligned} \]

上式中 Lagrange 泛函对 \(v\) 求导时应当将 \(u,\lambda\) 看作常函数。\(u_v\) 从约束方程 \(B(u;v)=0\) 中解出,伴随状态 \(\lambda_v\) 从方程 \((5)\) 中解出。

参考资料:

  1. https://en.wikipedia.org/wiki/Adjoint_state_method
  2. https://en.wikipedia.org/wiki/Gateaux_derivative
  3. Plessix, R.-E. A review of the adjoint-state method for computing the gradient of a functional with geophysical applications. Geophysical Journal International 167, 495–503 (2006).

标签:方程,Adjoint,nabla,泛函,State,delta,aligned,Method,lambda
From: https://www.cnblogs.com/zhang-js/p/18079305

相关文章

  • react中setState是同步的还是异步的
    首先说一下setState是同步的还是异步的?1.解读setState工作流 接下来我们就沿着这个流程,逐个在源码中对号入座。首先是setState入口函数:ReactComponent.prototype.setState=function(partialState,callback){this.updater.enqueueSetState(this,partialSta......
  • 前端React篇之React setState 调用的原理、React setState 调用之后发生了什么?是同步
    目录ReactsetState调用的原理ReactsetState调用之后发生了什么?是同步还是异步?ReactsetState调用之后发生了什么?setState是同步还是异步的ReactsetState调用的原理在React中,setState方法是用于更新组件状态的重要方法。当setState被调用时,React会对组件进......
  • numpy中random.seed()与random.RandomState()的区别
    1.random.seed()用处:初始化随机数生成器。设置随机数生成器种子后,直接生成随机数即可,无需在随机数生成器条件下运行。2.random.RandomState()作用:获得随机数生成器 比较上面两图可以看出,获取随机数生成器之后,必须在此条件下运行,才可生成相同的随机数,若不在此条件下运行,随......
  • useImperativeHandle 可以用来暴露state属性吗?
    useImperativeHandle是ReactHooks中的一个API,它的主要作用是定制暴露给父组件的子组件实例的引用。通常与forwardRef配合使用,用于控制哪些属性或方法能够被父组件通过ref获取和操作。然而,useImperativeHandle并不能直接用来暴露state属性。它更多的是用来暴露可以被父组件调用......
  • 书籍推荐|低功耗设计必备手册!Low Power Methodology Manual For System-on-Chip Desig
    《LowPowerMethodologyManualForSystem-on-ChipDesign》是ic设计领域中关于低功耗设计的著名书籍,该书是由Synopsys和ARM中的专业人员联合编写,新思科技(Synopsys)是世界3大EDA巨头之一,是全球领先的芯片设计、验证和软件安全与质量解决方案提供商,ARM也是全球知名的cpu设计公司......
  • A visual method to detect meat adulteration by recombinase polymerase amplifica
    创新点:基于重组酶聚合酶扩增(RPA)和侧向流试纸(LFD)的视觉方法,用于鉴定牛肉(Bostaurus)、绵羊(Ovisaries)、猪肉(Susscrofa)、鸭肉(Anasplatyrhynchos)和鸡肉(Gallusgallus)的动物来源。传统的方法需要操作员具备相当的技能、昂贵的仪器,并且无法提供快速的移动式现场检测系统来检测肉制品的......
  • 论文精读:When Noisy Labels Meet Long Tail Dilemmas A Representation Calibration M
    Introduction作者考虑了数据集常见的两个问题:1、部分数据被错误得标注;2、数据呈长尾分布。之前涌现了很多工作分别针对这两个问题,但当两者同时存在,它们不能很好的工作。专门针对噪声标签的方法,总是依赖于一些假设,但这些假设在long-tailed上不一定成立。例如利用memorizationeff......
  • SimpleUI [12/Mar/2024 19:32:11] "GET /admin/logout/ HTTP/1.1" 405 0 Method Not
    Django使用SimpleUI后,登出报错[12/Mar/202419:32:11]"GET/admin/logout/HTTP/1.1"4050MethodNotAllowed(GET):/admin/logout/MethodNotAllowed:/admin/logout/[12/Mar/202419:36:20]"GET/admin/logout/HTTP/1.1"4050原因升级到5.0后不......
  • Attribute GetCustomAttribute via method info of type
    [AttributeUsage(AttributeTargets.Method)]publicsealedclassTestAttribute:Attribute{publicintRepetitions;publicstringFailureMessage;publicTestAttribute():this(1){}publicTestAttribute(intrepetitions){......
  • Memberinfo call generic method System.InvalidOperationException: 'Late bound op
    staticvoidMain(string[]args){GenericMethod();LogInfo();}staticvoidGenericMethod(){MethodInfomi=typeof(Program).GetMethod("Echo");Console.WriteLine(mi.IsGenericMethodDefinition);Console.WriteLine(mi.Invoke(......