zoukankan      html  css  js  c++  java
  • 泰勒展开及其应用

    泰勒展开[1]

    在实际应用中对于具有复杂形式的函数我们常常希望用较为简单的函数形式表示他,而多项式就是这种简单的形式。比如对于指数函数、三角函数,我们可以使用多项式来逼近。

    为了逼近(或者说是仿造)目标函数曲线f(x),首先选择一个切入点(x0,f(f0)),然后让此处的增减性相同,即一阶导数相同。再使其凹凸性相同(二阶导数相同)。然后让更高级的特性相同。。。
    因此,整体思路就是让仿造的函数g(x)与f(x)的初始点和从一阶到高阶的导数都相等。然而,在实际操作中并不能无限阶求导,只需要按需(或经验)选择阶数。
    假设我们只需要算到n阶,多项式函数为:
    (g(x)=a_0+a_1(x-x_0)+a_2(x-x_0)^2+……+a_n(x-x_0)^n)
    由初始点相等: (g(x_0)=f(x_0)),得(a_0=f(x_0))
    由n阶导数相等: (g^n(x_0)=a_n n!=f^n(x_0)),得(a_n={f^n(x_0)over n!})
    因此求得多项式:

    [g(x)approx f(x_0)+frac{f^1(x_0)}{1!}(x-x_0)+frac{f^2(x_0)}{2!}(x-x_0)^2+……+frac{f^n(x_0)}{n!}(x-x_0)^n ]

    求泰勒展开式需要求g(x)的各项系数,计算比较复杂,但是一旦求出展开式之后就可以很方便地使用多项式计算了, 相当于一劳永逸.

    误差项,即余项: R(x)=f(x)-g(x)=(frac{f^{(n+1)}(x_0)}{(n+1)!}(x-x_0)^{n+1}+frac{f^{(n+2)}(x_0)}{(n+2)!}(x-x_0)^{n+2}+cdots +frac{f^{(infty)}(x_0)}{infty!}(x-x_0)^{infty})
    利用柯西中值定理,可以求出(R(x)=frac{f^{(n+1)}(xi)}{(n+1)!}(x-x_0)^{n+1})

    应用举例

    优化算法之牛顿法

    牛顿法原理:

    (f(x))(x_n) 处二阶 taylor 展开, 有:

    [f(x)approx f(x_n)+f'(x_n)(x-x_n)+{1over 2}f''(x_n)(x-x_n)^2 \ f(x_n+Delta x)approx f(x_n)+f'(x_n)Delta x+{1over 2}f''(x_n)Delta x^2 ]

    我们的目的是选择合适的 (Delta x) 最小化目标函数 (f(x_n+Delta x)) . 求导令导数为0得到:

    [{d f(x_n+Delta x) over dDelta x}=f'(x_n)+f''(x_n)Delta x=0 \ Longrightarrow Delta x=-{f'(x_n)over f''(x_n)} \ x_{n+1}=x_n+Delta x=x_n-[f''(x_n)]^{-1}f'(x_n) ]

    其中的二阶项 (f''(x_n)) 就是 Hessian 矩阵.

    基尼指数

    用基尼指数代替概率分布的信息熵

    概率分布的信息熵等于 (H(p)=-sum_{k=1}^K p_klog p_k).
    将 log(p) 在 p=0.5 处泰勒展开, 得到(log(p)approx log(0.5)+log'(0.5)cdot (p-0.5)+O(p^2)approx 2(p-1))
    将 p=0.5 处泰勒展开式代入 H(p) 可得(H(p)approx 2cdot m{Gini}(p)).

    平方根 [2]

    求正数的平方根, (f(x)=sqrt x), 让f(x)在x=1处泰勒展开得到: (f(x)=sqrt x approx 1+{1over 2}(x-1)-{1over 4}{(x-1)^2over 2!}+{3over 8}{(x-1)^3over 3!}-cdots)
    这样我们可以进行在一定精度内的逼近, 但是这里存在收敛区间的问题。只有 0 < x <2 时这个泰勒级式才会收敛. 因此需要我们对待求平方根的数字做预处理, 如果大于2, 就要把它转化为[0,2)区间中去, 让x不断累除4(右移两位运算)直到x落在收敛区间. 通过泰勒级式计算逼近值后再做修正(假如预处理时右移了2t次,那么修正时左移t次).

    当然,实际应用中更常用牛顿迭代法求开方, 每次迭代时的预测值g与x/g取平均作为新预测值, 如果g与x/g当中的一个小于确切的平方根,那么另一个必然大于确切的平方根, 选择平均值可以进一步逼近。

    高斯核函数的推导证明[3]

    在 SVM 中常用的径向基核函数 (K(x,y)=exp(-{|x-y|^2over 2sigma^2})), 证明其可以作为核函数, 即可以写成 (K(x,y)=Phi^T(x)cdotPhi(y)) 的形式.
    证明:
    (|x-y|^2=x^Tx+y^Ty-2x^Ty)
    (K(x,y)=exp(-{|x-y|^2over 2sigma^2})=exp(-{x^Txover 2sigma^2})exp({x^Tyover sigma^2})exp(-{y^Tyover 2sigma^2}))

    (exp({x^Tyover sigma^2}))进行泰勒展开,在(x^Ty=0)处:

    [exp({x^Tyover sigma^2})=sum_{n=0}^{+infty}{1over n!}{(x^Ty)^nover sigma^{2n}}=sum_{n=0}^{+infty}{1over sqrt{n!}}{(x^T)^nover sigma^{n}}cdot {1over sqrt{n!}}{y^nover sigma^{n}} \ =phi^T(x)cdotphi(y) \ K(x,y)=exp(-{x^Txover 2sigma^2})exp({x^Tyover sigma^2})exp(-{y^Tyover 2sigma^2}) \ =exp(-{x^Txover 2sigma^2})phi^T(x)cdotphi(y) exp(-{y^Tyover 2sigma^2}) \ =Phi^T(x)cdotPhi(y) ]

    高斯核为什么会把原始维度映射到无穷多维?

    非线性核通常使用高斯核, 高斯核可以映射到无穷维,解释:
    指数项 (e^{x}) 可以通过泰勒展开映射到无穷多项

    [e^{x} approx 1 + x + frac{x^{2}}{2!} + frac{x^{3}}{3!} + ... + frac{x^{n}}{n!} ]

    相应的高斯核也是指数形式:

    [kappa left( x_{1} , x_{2} ight) = e^{left(- frac{left||x_{1} - x_{2} ight|| ^{2} }{2sigma ^{2} } ight) } \ = 1 + left(- frac{left||x_{1} - x_{2} ight|| ^{2} }{2sigma ^{2} } ight) + frac{(-frac{left||x_{1} - x_{2} ight|| ^{2} }{2sigma ^{2} })^{2} }{2!} + ... + frac{(-frac{left||x_{1} - x_{2} ight|| ^{2} }{2sigma ^{2} })^{3} }{3!} + ... + frac{(-frac{left||x_{1} - x_{2} ight|| ^{2} }{2sigma ^{2} })^{n} }{n!} ]

    将泰勒展开式带入高斯核,我们得到了一个无穷维度的映射。

    参考


    1. https://www.zhihu.com/question/25627482/answer/313088784 ↩︎

    2. https://www.cnblogs.com/xkfz007/archive/2012/05/15/2502348.html ↩︎

    3. https://blog.csdn.net/u010551462/article/details/41748807 ↩︎

  • 相关阅读:
    CentOS6.4 安装nmon
    CentOS6.4 访问域局网中Windows的共享
    将类似 12.56MB 36.89KB 转成 以K为单位的数字【备忘】
    ICE中间件相关
    HDFS介绍
    漫画描述HDFS工作原理
    离线安装Cloudera Manager 5和CDH5
    storm集群相关资料
    kafka相关资料
    jstatd
  • 原文地址:https://www.cnblogs.com/makefile/p/taylor-expand.html
Copyright © 2011-2022 走看看