梯度下降法
梯度下降法是求解无约束最优化问题的一种最常用方法,有实现简单的优点。它是一种迭代算法,每一步需要求解的目标函数的梯度向量。
假设 f(x) 是 Rn 上具有一阶连续偏导数的函数。要求解的无约束最优化问题是:
x∗ 表示目标函数 f(x) 的极小点。
由于负梯度方向是使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新 x 的值,从而达到减少函数值的目的。
梯度下降的相关概念
步长:步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
待求解的函数
待求解函数的导数
变量1:当前找到的变量,这个变量是“我们认为”当前找到的最好的变量,可以是函数达到最优值(这里是最小值)。
变量2:梯度,对于绝大多数的函数来说,这个就是函数的负导数。
比如如下的迭代公式:
特点
- 初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;
- 越接近最小值时,下降速度越慢;
如何取到一个正确的 α 值
- 随时观察,如果 cost function 变小了,则 OK,反之,再取一个更小的值
如何理解泰勒展开
在实际应用中对于具有复杂形式的函数我们常常希望用较为简单的函数形式表示他,那多项式就是这种简单的形式。
首先还是先回到函数的局部线性近似这个概念。
举个例子,例如函数
y=x3
,当自变量有变化时,即
Δx
,因变量
y
会变化
当 Δx→0 时,上式的后两项是 Δx 的高阶无穷小,舍去的话就变成了
也就是说当自变量
x
足够小的时候,也就是在某点很小的邻域内,
对于一般函数,当在某点很小领域内我们也可以写成类似上面的这种自变量和因变量之间线性关系,
变化一下形式,
Δy=f(x)−f(x0) , Δx=x−x0 代入上式有,
f(x)−f(x0)=f′(x0)∗(x−x0) $
移项有:
这个式子就很熟悉了,这个就是在 x0 点邻域内舍掉高阶无穷小以后得到的局部线性近似公式。为了提高近似的精确度,于是把上面的一次近似多项式修正为二次多项式(利用洛必达法则和二阶导数定义)再进一步,二次修正为三次,一直下去就得到了 n 阶泰勒多项式了。所谓更精确地近似也就有了更高的密切程度,这种程度是通过导数体现的。
例如只做了一次近似的话,
近似的多项式和原始式是通过同一个点 x0 的。若进行二次近似,
近似的多项式和原始函数既通过同一个点 x0 而且在同一点的导数也相同。,也就是多项式表达式的函数在 x0 点的切线也相同。
类似进行三次近似的话,不仅切线相同,弯曲程度也相同。一直下去。。。。。
最后,总结一下好了,泰勒展开就是用形式简单的多项式来近似在 x0 邻域内的函数,展开越多近似程度越高。
牛顿法
为简单起见,考虑 N=1 的简单情形,牛顿法的基本思想是:在现有极小点估计值附近对 f(x) 做泰勒展开,进而找到极小点的下一个估计值。设 xk 为当前极小点的估计值,则:
表示 f(x) 在 xk 附近的二阶泰勒展开式,由于求的是最值,由极值必要条件可知, φ(x) 应满足
即,
进而求得
于是,若给定初始值 x0 ,则可以构造如下的迭代格式
产生序列 {x_k} 来逼近 f(x) 的极小点,在一定条件下,{x_k} 可以收敛到 f(x) 的极小点。
对于 N>1 的情形,二阶泰勒展开可以做推广,此时
其中
∇f
为
f
的梯度向量,
注意,
∇f
和
∇2f
中的元素均为关于
X
的函数,以下分别将其简记为
同样的,由于是求极小点,极值必要条件要求它为 φ(x) 的驻点,即
亦即
进一步,若 Hk 非奇异,则可解得
于是给定初值 X0 ,则同样可以构造出迭代式
这就是原始的牛顿迭代法。其迭代公式的搜索方向 dk=−H−1k⋅gk 称为牛顿方向。