码迷,mamicode.com
首页 > 其他好文 > 详细

数值优化(七)

时间:2018-07-27 19:12:44      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:部署过程   inf   计算   war   函数   ima   优化   central   ror   

计算导数

计算导数的方法有:符号导数,有限差分,自动微分等。本文只介绍有限差分和自动微分

有限差分

有限差分就是用有限步长下函数变化率来近似代替导数。

one-side-difference

\[\frac{\partial f}{\partial x_i}(x) \approx \frac{f(x+\epsilon e_i)-f(x)}{\epsilon}\]
利用泰勒公式分析误差,可知误差\(|\delta_{\epsilon}|\leq (L/2)\epsilon\)其中L是\(|\nabla^2 f|\)的上界,这是截断误差,由于计算过程由计算机完成,还存在roundoff-errors,用\(u\)表示(在双精度计算中一般是\(10^{-16}\))假定在计算过程中,相对误差被\(u\)控制,则roundoff误差不超过\(2uL_f/\epsilon\),其中\(L_f\)是f取值上界。那么总误差就是截断误差和roundoff误差的和,可知需要取\(\epsilon=\sqrt{u}\)使误差最小。

central-difference

\[\frac{\partial f}{\partial x_i}(x) \approx \frac{f(x+\epsilon e_i)-f(x-\epsilon e_i)}{2\epsilon}\]截断误差为\(O(\epsilon^2)\),考虑到roundoff误差,\(epsilon\)应该取\(u^{2/3}\)

计算稀疏的jacobian

考虑需要计算导数的向量函数\(r:\mathbb{R}^n \rightarrow \mathbb{R}^m\),用有限差分的方法近似为\[J(x)p \approx \frac{r(x+\epsilon p)-r(x)}{\epsilon}\]如果让\(p=\epsilon e_i\),就有\[\frac{\partial r}{\partial x_i}(x)\approx \frac{r(x+\epsilon e_i)-r(x)}{\epsilon}\]要得出近似的jacobian需要计算n个这样的式子,要计算n+1次f的取值,如果jacobian是稀疏的(且我们知道它哪儿为0),进行这么多计算就很浪费。这时有一个技巧,将多个\(e_i\)组合起来,例如计算\(\frac{r(x+\epsilon (e_i+e_j))-r(x)}{\epsilon}\),如果\(\frac{\partial r_1}{\partial x_i}=0\)那就表示上式算出的第一个分量即为\(\frac{\partial r_1}{\partial x_j}\),这样减少了需要计算的点。这些方向的组合方式需要用图染色算法来确定(具体见p179)

自动微分

自动微分将初等函数分解成若干基本初等函数的复合与加减乘除,利用链式法则求出函数对各变量的导数,考虑如下函数
技术分享图片
技术分享图片
技术分享图片

Forward Mode

Forward Mode即从上图中左边开始计算,依次计算每个节点对\(x_1\)的导数,遍历图后得到函数值对\(x_1\)的导数,重复步骤继续得到对其它变量的导数,于是对于\(\mathbb{R}^n \rightarrow \mathbb{R}^m\),这样的步骤需要进行n次。

Reverse Mode

Reverse Mode即从上图右边开始计算,依次计算函数值对每个节点的导数,遍历图后得到函数值对各变量的导数,于是对于\(\mathbb{R}^n \rightarrow \mathbb{R}^m\),这样的步骤需要进行m次
至于计算Hessian什么的也都是差不多了。
具体实现的时候,可以像tensorflow那样,让计算部署过程都被计算图追踪。节点遍历顺序可以用拓扑排序解决。

数值优化(七)

标签:部署过程   inf   计算   war   函数   ima   优化   central   ror   

原文地址:https://www.cnblogs.com/mathematic-offering/p/9378988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!