原文 http://www.cnblogs.com/dudi00/p/4056451.html
本文主要介绍学习机器学习过程中涉及到的一些微积分的基本概念,也包括部分数值分析,优化求解的概念。
直观定义
当函数 y=f(x) y=f(x) 在 x0 x0 的某个去心邻域内有定义,若当 x x “无限趋近于” x0 x0 时,其对应的函数值 f(x) f(x) “无限趋于” 一个确定的常数 A A ,则称 A A 是当 x x 趋于 x0 x0 时函数 y=f(x) y=f(x) 的极限,记作 limx→x0f(x)=A limx→x0f(x)=A。这里所说的“直观定义”主要指“无限趋于”,是一种直观的说法,并没有给出确切的数学定义。
精确定义
直观定义中的“无限趋近”是个含糊不清的概念,为了更精准的用数学语言表达这个概念,很多数学家都做了努力,包括法国数学家朗贝尔(D' Alembert),法国数学家柯西(Cauchy),但最终系统的引入 ε−δ ε−δ 语言的是德国数学家魏尔斯得拉斯(Weierstrass)。
设 f(x) f(x) 定义在 x0 x0 的某个去心领域 N∗(x0) N∗(x0) ,若存在常数 A A ,对于任意给定的 ε>0 ε>0 ,存在 δ>0 δ>0 ,使得对于任意的 x∈N∗(x0,δ) x∈N∗(x0,δ),即当 0<|x−x0|<δ 0<|x−x0|<δ 时,恒有 |f(x)−A|<ε |f(x)−A|<ε,则称 A A 为 f(x) f(x) 当 x→x0 x→x0 时的极限,记作 limx→x0f(x)=A limx→x0f(x)=A。
limx→0(1+x)1x=e limx→0(1+x)1x=e
有很多人写过关于这个常数的博客,都把这个常数跟银行利息挂钩了,其中比较有意思的一篇是 http://www.ruanyifeng.com/blog/2011/07/mathematical_constant_e.html
设函数 y=f(x) y=f(x) 在点 x0 x0 的某邻域内有定义,如果极限 limΔx→0f(x0+Δx)−f(x0)Δx limΔx→0f(x0+Δx)−f(x0)Δx 存在,则称函数 f(x) f(x) 在 x0 x0 可导,并且称这个极限值为函数 f(x) f(x) 在点 x0 x0 处的导数,记作 f′(x0) f′(x0) 或者 dfdx|x=x0 dfdx|x=x0。
设函数 y=f(x) y=f(x) 在点 x0 x0 的某邻域内有定义, Δx Δx 是自变量 x x 在 x0 x0 处的增量,如果存在一个与 Δx Δx 无关的常数 a a,使得 Δy=f(x0+Δx)−f(x0)=aΔx+o(Δx) Δy=f(x0+Δx)−f(x0)=aΔx+o(Δx),则称函数 f(x) f(x) 在点 x0 x0 出可微(differentiable),关于 Δx Δx 的线性部分 aΔx aΔx 是函数 f(x) f(x) 在点 x0 x0 处的微分。记作 df(x0) df(x0)。显然有 f′(x0)=a f′(x0)=a。
设函数 f(x) f(x), g(x) g(x),在 x x 处可导,则:
(f(x)+g(x))′=f′(x)+g′(x) (f(x)+g(x))′=f′(x)+g′(x)
(f(x)⋅g(x))′=f′(x)g(x)+f(x)g′(x) (f(x)⋅g(x))′=f′(x)g(x)+f(x)g′(x)
(f(x)g(x))′=f′(x)g(x)−f(x)g′(x)g2(x) (f(x)g(x))′=f′(x)g(x)−f(x)g′(x)g2(x)
设复合函数 y=f(g(x)) y=f(g(x)),函数 g(x) g(x) 在点 x x 可导,函数 f(u) f(u)在点 u=g(x) u=g(x)可导,则复合函数 y=f(g(x)) y=f(g(x))在点 x x 可导,并且:
dydx=dydududx dydx=dydududx。
设二元函数 f(x,y) f(x,y) 在点 P0=(x0,y0) P0=(x0,y0) 的某个邻域有定义,固定 y=y0 y=y0,将函数 f(x,y0) f(x,y0) 看作 x x的一元函数,并在 x0 x0求导, limΔx→0f(x0+Δx,y0)−f(x0,y0)Δx limΔx→0f(x0+Δx,y0)−f(x0,y0)Δx,如果这个导数存在,则称其为二元函数 f(x,y) f(x,y)在点 P0=(x0,y0) P0=(x0,y0)关于 x x的偏导数,记作 ∂f(x0,y0)∂x ∂f(x0,y0)∂x。同理可以定义 ∂f(x0,y0)∂y ∂f(x0,y0)∂y。可以将二元函数扩展到 n n 元函数。
多元函数 f(x1,x2,…,xd) f(x1,x2,…,xd) 在 x0=(x10,x20,…,xd0) x0=(x10,x20,…,xd0)的所有二阶偏导数构成的矩阵 :
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂2f∂x21∂2f∂x2∂x1⋮∂2f∂xd∂x1∂2f∂x1∂x2∂2f∂x22⋮∂2f∂xd∂x2………∂2f∂x1∂xd∂2f∂x2∂xd⋮∂2f∂x2d⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥ [∂2f∂x12∂2f∂x1∂x2…∂2f∂x1∂xd∂2f∂x2∂x1∂2f∂x22…∂2f∂x2∂xd⋮⋮⋮∂2f∂xd∂x1∂2f∂xd∂x2…∂2f∂xd2]
称为函数 f(x1,x2,…,xd) f(x1,x2,…,xd) 在 x=(x10,x20,…,xd0) x=(x10,x20,…,xd0) 的海森矩阵,记作 Hf(x0) Hf(x0)。
设二元函数 f(x,y) f(x,y) 在点 (x0,y0) (x0,y0) 可微,称向量 (∂f(x0,y0)∂x,∂f(x0,y0)∂y)T (∂f(x0,y0)∂x,∂f(x0,y0)∂y)T 为 f(x,y) f(x,y) 在点 (x0,y0) (x0,y0)的梯度。如果梯度是非零向量,则梯度方向是函数值增长最快的方向,负梯度是函数值下降最快的方向,这点在后面会经常用到。同样二元函数也可以很容易扩展到 n n元函数。
泰勒展开主要是为了用多项式函数来近似地表示一个函数,以研究一些比较复杂的函数性质,用途非常广泛。
一元函数 f(x) f(x) 在 x=x0 x=x0 处的展开式为:
f(x)=f(x0)+f′(x0)1!(x−x0)+f′′(x0)2!(x−x0)2+f3(x0)3!(x−x0)3+… f(x)=f(x0)+f′(x0)1!(x−x0)+f′′(x0)2!(x−x0)2+f3(x0)3!(x−x0)3+…
ex ex 在 x=0 x=0 处的展式为:
ex=∑∞n=0xnn!=1+x+x22!+x33!+… ex=∑n=0∞xnn!=1+x+x22!+x33!+…
常见的泰勒展开公式有两种,一种带佩亚诺(Piano)余项,一种带拉格朗日(lagrange)余项。
带佩亚诺余项的泰勒展开:
f(x)=∑nk=0fk(x0)k!(x−x0)k+o((x−x0)n) f(x)=∑k=0nfk(x0)k!(x−x0)k+o((x−x0)n)
最后一项称为佩亚诺余项。
带拉格朗日余项的泰勒展开:
f(x)=∑nk=0fk(x0)k!(x−x0)k+fn+1(ε)(n+1)!(x−x0)n+1 f(x)=∑k=0nfk(x0)k!(x−x0)k+fn+1(ε)(n+1)!(x−x0)n+1
其中 ε ε介于 x x 与 x0 x0之间,最后一项成为拉格朗日余项。
多元函数 f(x1,x2,…,xd) f(x1,x2,…,xd) 在 x=(x10,x20,…,xd0) x=(x10,x20,…,xd0) 处的展开式为:
f(x1,x2,…,xd)=f(x10,x20,…,xd0)+∑di=1∂f(x10,x20,…,xd0)∂xi(xi−xi0)+12!∑di=1∑j=1d∂f(x10,x20,…,xd0)∂xi∂xj(xi−xi0)(xj−xj0)+… f(x1,x2,…,xd)=f(x10,x20,…,xd0)+∑i=1d∂f(x10,x20,…,xd0)∂xi(xi−xi0)+12!∑i=1d∑j=1d∂f(x10,x20,…,xd0)∂xi∂xj(xi−xi0)(xj−xj0)+…
如果在区间 I 上存在一个可导函数F(x),使得 ∀x∈I ∀x∈I,恒有 F′(x)=f(x) F′(x)=f(x),则称F(x)为f(x)在 I 上的一个原函数。注意原函数有无穷多个,他们之间相差一个常数。
设f(x)在[a,b]上连续,F(x)是f(x)在[a,b]上的一个原函数,则:
∫baf(x)dx=F(x)|ba=F(b)−F(a) ∫abf(x)dx=F(x)|ab=F(b)−F(a)
必要条件
如果函数 y=f(x) y=f(x) 在点 x0 x0 处取得极值(极大值或极小值),且在该点可导,则导数 f′(x0)=0 f′(x0)=0。
充分条件
如果函数 y=f(x) y=f(x)在 x0 x0的某个邻域内有一阶导数,并且 f′(x0)=0 f′(x0)=0,又设 f′′(x0) f′′(x0) 存在,则有:
(1)如果 f′′(x0)>0 f′′(x0)>0,则 f(x) f(x)在 x0 x0取得极小值;
(2)如果如果 f′′(x0)<0 f′′(x0)<0,则 f(x) f(x)在 x0 x0取得极大值;
必要条件
设多元函数 f(x1,x2,…,xd) f(x1,x2,…,xd)在 x0=(x10,x20,…,xd0) x0=(x10,x20,…,xd0)取得极值,如果 f(x) f(x) 在点 x0 x0 处存在偏导数 ∂f∂xi ∂f∂xi,则有 ∂f∂xi=0 ∂f∂xi=0(i=1,2,3...d)。
充分条件
设多元函数 f(x1,x2,…,xd) f(x1,x2,…,xd) 在 x0=(x10,x20,…,xd0) x0=(x10,x20,…,xd0)及其附近有连续二阶偏导数,而且 gradf(x0)=0 gradf(x0)=0,则:
(1) Hf(x0) Hf(x0)正定时, x0 x0 是极小值点;
(2) Hf(x0) Hf(x0)负定时, x0 x0 是极大值点;
(3) Hf(x0) Hf(x0)不定时, x0 x0 不是极值点;
假设函数 f(x) f(x)是 Rn Rn上具有二阶连续偏导数的函数,考虑无约束优化问题:
minx∈Rnf(x) minx∈Rnf(x)
x∗ x∗表示目标函数 f(x) f(x)的极小点。解无约束优化问题一般常用迭代算法,常用的迭代算法有梯度下降法,牛顿法和拟牛顿法。迭代公式为:
xk+1=xk+λkdk xk+1=xk+λkdk
其中 dk dk称为搜索方向, λk λk称为步长, xk xk为第k次迭代后x的值。不同的迭代算法的区别主要在搜索方向的确定上,而如何确定步长是另一个问题,这里不打算介绍。
梯度下降法是一种迭代算法。选取适当的初值 x0 x0,不断迭代,更新 x x的值,直到收敛。由于梯度方向是函数值增长最快的方向,负梯度方向是函数值下降最快的方向,所以梯度下降法很自然的选择了负梯度方向为搜索方向。所以迭代公式变为:
xk+1=xk−λk▽f(xk) xk+1=xk−λk▽f(xk)
其中 ▽f(xk) ▽f(xk)为 f(x) f(x)在 xk xk的梯度,记为 gk gk。
算法:梯度下降法
1.给定初值 x0 x0和精度阈值 ε ε,并令k :=0
2.计算 f(xk) f(xk)
3.计算 gk gk,如果 ||gk||<ε ||gk||<ε,停止迭代,令 x∗=xk x∗=xk;否则求步长 λk λk
4.计算新的迭代点 xk+1=xk−λkgk xk+1=xk−λkgk,计算 f(xk+1) f(xk+1),如果 ||f(xk+1)−f(xk)||<ε ||f(xk+1)−f(xk)||<ε或者 ||xk+1−xk|| ||xk+1−xk||,停止迭代,令 x∗=xk+1 x∗=xk+1
5.否则,令k:=k+1,转步骤3
将函数 f(x) f(x)在 xk xk附近做二阶泰勒展开:
f(x)=f(xk)+gk(x−xk)+12(x−xk)TH(xk)(x−xk) f(x)=f(xk)+gk(x−xk)+12(x−xk)TH(xk)(x−xk)
其中 gk gk是 f(x) f(x)在 xk xk处的梯度值, H(xk) H(xk)为海森矩阵在 xk xk处的值。
对上面的二阶泰勒展开式两边求导得到:
▽f(x)=gk+Hk(x−xk) ▽f(x)=gk+Hk(x−xk)
由前面提到的多元函数极值的必要条件得知,如果函数在 x=xk+1 x=xk+1处取得极值,必有:
▽f(xk+1)=0 ▽f(xk+1)=0
将 x=xk+1 x=xk+1代入整理得到:
gk+Hk(xk+1−xk)=0 gk+Hk(xk+1−xk)=0
所以:
xk+1=