SIFT高斯差分(DOG)函数泰勒展开求极值(矩阵求导,程序化)

对泰勒展开求导,为什么要令其为零?

答案是,用来求函数极值,或者说求函数最优解

比如说函数f=x^{2}+y^{2}极小值是多少?我们如何用编程的方法来求函数最优解

这就要用泰勒展开,并求泰勒展开导数=0

假定△x=x-x0;△y=y-y0;下面是函数的泰勒展开

f(x,y)=f(x0,y0)+f'x*△x+f'y*△y+1/2*f''xx*(\Delta x)^{2}+1/2*f''yy*(\Delta y)^{2}+f''xy*△x*△y

A:求泰勒展开针对X偏导数=0,上式中一,二阶导数都是一个确定的值,而非变量,所以

0=0+f'x+0+1/2*f''xx*2*△x+0+f''xy*△y=f'x+f''xx*△x+f''xy*△y

A:求泰勒展开针对Y偏导数=0,上式中一,二阶导数都是一个确定的值,而非变量,所以

0=0+0+f'y+0+1/2*f''yy*2*△y+f''xy*△x=f'y+f''yy*△y+f''xy*△x

我们想说什么呢?

我们已经可以函数求导程序化,那么泰勒展开仍然是一个函数,那么泰勒函数展开求导也可以程序化,这是第一层意思,第二,我们想说的是,我们的矩阵求导是否可以程序化呢?

我们前面只是会矩阵的一般运算,加减乘(左乘,右乘)除(求逆),关于矩阵求导仍然没有尝试过,仅仅是手工求导

我们分两步走,第一,求出矩阵中每一项的导数,第二,导数矩阵参与一般运算。

首先,我们引入梯度的概念,即就是一阶偏导,(f'x  f'y)

其次,\Delta X=\begin{bmatrix} \Delta x\\ \Delta y \end{bmatrix},X的梯度=\begin{bmatrix} f'x\\ f'y \end{bmatrix},A=\begin{bmatrix} f''xx &f''xy \\ f''xy &f''yy \end{bmatrix}

我们把上面的泰勒展开换一种写法,

f(x,y)=f(x0,y0)+\Delta X转置*X的梯度+(1/2)*\Delta X转置*A*\Delta X

f(X)=f(X^{0})+\Delta X转置*X的梯度(X^{0})+(1/2)*\Delta X转置*A(X^{0})*\Delta X

好,这个矩阵形式的泰勒展开,我们对他求导,并置零向量=\begin{bmatrix} \0\\ \0 \end{bmatrix}=X的梯度(X^{0})+*A(X^{0})*\Delta X=

\begin{bmatrix} f'x\\ f'y \end{bmatrix}+\begin{bmatrix} f''xx &f''xy \\ f''xy &f''yy \end{bmatrix}\begin{bmatrix} \Delta x\\ \Delta y \end{bmatrix}=\begin{bmatrix} \0\\ \0 \end{bmatrix}

即0=f'x+f''xx*△x+f''xy*△y

0=f'y+f''yy*△y+f''xy*△x

所以,f(X^{0})+\Delta X转置*X的梯度(X^{0})+(1/2)*\Delta X转置*A(X^{0})*\Delta X=f(X)矩阵求导就等于0向量,可以写成

\begin{bmatrix} \0\\ \0 \end{bmatrix}=X的梯度(X^{0})+*A(X^{0})*\Delta X=\begin{bmatrix} f'x\\ f'y \end{bmatrix}+\begin{bmatrix} f''xx &f''xy \\ f''xy &f''yy \end{bmatrix}\begin{bmatrix} \Delta x\\ \Delta y \end{bmatrix}=\begin{bmatrix} \0\\ \0 \end{bmatrix}

好,我们的两步走已经完成,只剩下编程序了,程序就留作业吧!

另外,sift算法中的三阶矩阵泰勒展开求导与上面相同:泰勒表达式不变,多了下列项f''xz,f''yz,f''zx,f''zy,f''zz,

所以,f(X^{0})+\Delta X转置*X的梯度(X^{0})+(1/2)*\Delta X转置*A(X^{0})*\Delta X=f(X)矩阵求导就等于0向量,可以写成

\begin{bmatrix} f'x\\ f'y\\ f'z \end{bmatrix}+\begin{bmatrix} f''xx & f''xy& f''xz\\ f''xy&f''yy &f''yz \\ f''zx& f''zy & f''zz \end{bmatrix}\begin{bmatrix} \Delta x\\ \Delta y\\\Delta z \end{bmatrix}=\begin{bmatrix} \0\\ \0\\\0 \end{bmatrix}=X的梯度(X^{0})+*A(X^{0})*\Delta X

这样,我们就可以用程序的方式来求最优解,再也不用手工稿纸上去验算求导了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值