极限
直观定义中的“无限趋近”是个含糊不清的概念,为了更精准地用数学语言表达这个概念,很多数学家都做了努力,包括法国数学家朗贝尔(D’Alembert),法国数学家柯西(Cauchy),但最终系统的引入 ϵ−δ 语言的是德国数学家魏尔斯得拉斯(Weierstrass)。
设 f(x) 定义在 x0 的某个去心领域 N(x0) ,若存在常数 A ,对于任意给定的 ϵ>0 ,存在 δ>0 ,使得对于任意的 x∈N(x0,δ) ,即当 0<∥x−x0∥<δ 时,恒有 ∥f(x)−A∥<ϵ ,则称 A 为 f(x) 当 x→x0 时的极限,记作 limx→x0f(x)=A 。
常数 e
有很多人写过关于这个常数的博客,都把这个常数跟银行利息挂钩了,其中比较有意思的一篇在 这里和 这里。
梯度下降法(Gradient Descent)
梯度下降法是一种迭代算法。选取适当的初值
x0
,不断迭代,更新
x
的值,直到收敛。由于梯度方向是函数值增长最快的方向,负梯度方向是函数值下降最快的方向,所以梯度下降法很自然地选择了负梯度方向为搜索方向。所以迭代公式变为:
其中, ∇f(xk) 为 f(x) 在 xk 的梯度,记为 gk
梯度下降法
1. 给定初值 x0 和精度阈值 ϵ ,并令 k:=0
2. 计算 f(xk)
3. 计算 gk ,如果 ∥gk∥<ϵ ,停止迭代,令 x∗=xk ,否则求步长 λk
4. 计算新的迭代点 xk+1=xk−λkgk ,计算 f(xk+1) ,如果 ∥f(xk+1)−f(xk)∥<ϵ ,或者 ∥xk+1−xk∥<ϵ ,停止迭代,令 x∗=xk
5. 否则,令 k:=k+1 ,转步骤3
牛顿法(Newton’s method)
将
f(x)
在
xk
附近做二阶泰勒展开:
其中 gk 是 f(x) 在 xk 处的梯度值, H(xk) 是海森矩阵在 xk 处的值。
对上式两边求导,得到
由多元函数极值的必要条件可知,如果函数在 x=xk+1 处取得极值,必有
将 x=xk+1 代入整理
所以
其中, −H−1kgk 称为 牛顿方向。
牛顿法
1. 给定初值 x0 和精度阈值 ϵ ,并令 k:=0
2. 计算 gk,Hk
3. 如果 ∥gk∥<ϵ ,停止迭代。否则,确定牛顿方向 dk=−H−1kgk ,计算步长 λk
4. 计算新的迭代点 xk+1=xk+λkdk
5. 否则,令 k:=k+1 ,转步骤2
Wikipedia上的一张图(绿色的线代表梯度下降法,红色的线代表牛顿法),很形象地说明了梯度下降法和牛顿法的区别,梯度下降法仅仅考虑了当前函数值在迭代点附近的变化,而牛顿法还考虑了函数值变化的趋势(会往等高线越来越密的方向靠),也就是二阶导数,梯度下降法相当于用一个平面不断逼近,而牛顿法师用一个曲面不断逼近,所以牛顿法收敛得更快。