Taylor, Jacobian, Hessian, Newton and all the else about gradient

本文的主要目的是对基于gradient的一些approximation知识点以及优化方法做一个简单的review。详细内容参考引用链接,这里只列出key points,主要是在遗忘的时候能够快速catch up…

Jacobian矩阵和Hessian矩阵

引用:

  1. Jacobian矩阵和Hessian矩阵
  2. 雅克比与海森
  • 雅可比矩阵(描述f:R^n\rightarrow R^m的一阶导数矩阵). J_{ij}=\partial f_i/\partial x_j. 把它理解为一阶gradient就好了。例如在Automatic Differenciation中,利用Chain Rule就可以将求导过程作为一系列Jacobian矩阵的乘积。
  • 海森矩阵(描述f:R^n\rightarrow R的二阶导数矩阵). H_{ij}=\frac{\partial^2 f}{\partial x_i\partial x_j}. 另y = f(x_1,x_2,...), 则此函数的雅克比矩阵为[\partial f/\partial x_1, \partial f/\partial x_2,...].求此雅克比矩阵(转置后作为向量函数)的雅克比矩阵,即得到海森矩阵。

Automatic Differenciation

引用:

  1. Auto Differenciation(Wikipedia)
  2. 关于AutoDiff的一些信息和Tools 例如基于python的ad
  3. 关于Dual Numbers
  • Symbolic differentiation can lead to inefficient code and faces the difficulty of converting a computer program into a single expression. 符号求导是先推导出\partial y/\partial x的符号公式,再代入x求解,比较复杂。
  • Numerical differentiation can introduce round-off errors in the discretization process and cancellation. 数值积分是在目标点邻域两端取点,并通过\frac{\Delta y}{\Delta x}的方式对gradient进行数值近似。容易遇到数值问题。
  • Auto Differenciation exploits the fact that every computer program, no matter how complicated, executes a sequence of elementary arithmetic operations (addition, subtraction, multiplication, division, etc.) and elementary functions (exp, log, sin, cos, etc.). By applying the chain rule repeatedly to these operations, derivatives of arbitrary order can be computed automatically, accurately to working precision, and using at most a small constant factor more arithmetic operations than the original program. 自动求导主要是对Chain Rule的应用。
  • 考虑f:R^n\rightarrow R^m我们最终想要的是一个m*n的雅克比矩阵。
  • Forward accumulation: \frac{\partial y}{\partial x_i} =\frac{\partial y}{\partial w_0}\frac{\partial w_0}{\partial x_i}=\frac{\partial y}{\partial w_1}(\frac{\partial w_1}{\partial w_0}\frac{\partial w_0}{\partial x_i})=...也就是沿着f箭头方向,从x向y展开chain. 注意括号的位置,对括号都对应了在computational graph中的一个节点。每次计算都是针对某个xi进行的,所以要得到最终的雅克比矩阵需要进行n次计算。当n<<m时,使用Forward方式理论上计算次数更少
  • Reverse accumulation:与forward相反\frac{\partial y}{\partial x_i} =\frac{\partial y}{\partial w_5}\frac{\partial w_5}{\partial x_i}=(\frac{\partial y}{\partial w_5}\frac{\partial w_5}{\partial w_4})\frac{\partial w_4}{\partial x_i}...逆着f箭头方向,从y向x展开chain。注意括号的位置,对括号都对应了在computational graph中的一个节点。每次计算都是针对某个yi进行的,所以要得到最终的雅克比矩阵需要进行m次计算。当n>>m时,使用Reverse方式理论上计算次数更少.但是要注意,由于是top-down递归求解,中间过程需要存储,导致memory使用会比较大
  • Forward/Reverse 只是两中极端方式,如何使用最少的步骤求得雅克比矩阵,是一个np难问题。
  • Dual Numbers: 这是一种计算Ad的方式。把标量全部用类似complex number的形式表现出来:x\rightarrow(a+b\epsilon )其中的\epsilon理解为无限趋近于零的无穷小(infinidestimal),并且\epsilon ^2=0. 现在f(x)=f(x+\epsilon )=f(x)+f'(x)\epsilon也就是说,将x用dual number表示后,只要按往常一样计算y,那么最终y的dual number表示中的第二个component就是gradient了。这里有点意思,举个栗子吧:f(x)=x^2=f(x+\epsilon )^2=x^2+2x\epsilon +\epsilon ^2=x^2+(2x)\epsilon所以2x就是f'(x)了!这里我觉得其实是完全符合gradient的定义的,即当x改变一丢丢时,y的变化量。可以把此处的\epsilon理解为dx

Back-propagation

神经网络中的back-propagation(BP)是对Ad的典型应用,对应了reverse accumulation的一种情况。

Newton and Quasi-Newton

引用:

  1. Taylor Series 全网没有找到一个比这个更好的解释。值得番羽墙去看,利剑
  2. Wiki 这里面介绍了一些坑

Taylor Series

可以理解成对连续可导函数f(x)在某一点的多项式近似g(x)。这个推导思路其实是,如果想保证这个近似在x_0是比较准确的,那么应该满足:f(x_0)=g(x_0),不过如果两个函数在这一点的变化趋势(gradient)也一样就更好了:f'(x_0)=g'(x_0), 如果变化趋势的变化趋势也一样的就更更好了:f''(x_0)=g''(x_0)...

在假定g(x)=a+bx+cx^2...的前提下,根据上面的等式我们可以求出abc,也就得到了taylor近似。这个结果有着强大的用处

牛顿法寻根

在一个起始点,对f(x)进行泰勒一阶展开g(x)可以轻易求出x0使g(x0)=0. 也就是一个近似根。这个根可能离f(x)的根比较远但是比起始点要近一些,那么只要继续不断迭代就好了。

牛顿法求最优值

同样的配方,只要有了Talor多项式近似就有办法!对f(x)进行泰勒二阶展开,两边求导从而找到f'(x)的近似,使其为0即可得到迭代公式:x_{n+1}=x_n-\frac{f'(x_n)}{f''(x_n)}

这里需要重点列一些可能出现的问题:

  1. Starting point。可能质量过差导致迭代方向偏离。可以首先使用bisection算法找到一个质量好的starting point再应用牛顿法
  2. Iteration point is stationary。迭代中遇到导数为0或接近0的点,导致无法求得下一个迭代点或者下一个点偏离过远
  3. Cycle。两个iteration point进入循环。
  4. Derivative not exist at root. Considerf(x)=x^{1/3}at 0
  5. Derivative not continuous near the root.
  6. 另外一些情况下导致non-quadratic convergence: root处导数为0;root的二阶导数不存在等

拟牛顿法

当涉及多变量时,牛顿法里的分母f'(x)需要改为乘以J^{-1}(x)也就是对应的Jacobian矩阵。而这一矩阵计算量可能过大,此时可以通过一些方法对其进行快速的近似,这也就是Quasi-Newton methods.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章