前人栽树,后人乘凉,既然前人已经完成了的工作,我觉得没必要做重复的工作,“拿来主义”对于我个人的入门和学习是必要的。在此谢谢他们。内容来自:https://cloud.tencent.com/developer/article/1326787,如果有侵权,联系我删除。
梯度下降算法
先上个公式,镇一下:
Θ1=Θ0αJ(Θ)
其中J(Θ)就是梯度,称为梯度算子。此公式的意义是:J是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点!下面就这个公式的几个常见的疑问:
α是什么含义?
α在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过α来控制每一步走的距离,以保证不要步子跨的太大扯着蛋,哈哈,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!
为什么要梯度要乘以一个负号?
梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号
牛顿法
考虑无约束最优化问题minx∈Rnf(x)其中x为目标函数的极小点。
假设f(x)有二阶连续偏导数,若第k次迭代值为x(k),则可将f(x)在x(k)附近进行二阶泰勒展开:
f(x)=f(xk)+gkT(xx(k))+21(xx(k))TH(x(k))(xx(k))
这里gk=g(x(k))=f(x(k))是f(x)的梯度向量在点x(k)的值,H(x(k))是f(x)的海塞矩阵:H(x)=[xixj2f]n×n在点x(k)的值,函数f(x)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0.特别是H(x(k))当是正定矩阵时,函数f(x)的极值为极小值。
牛顿法利用极小点的必要条件f(x)=0每次迭代从x(k)开始,求目标函数的极小点,作为第k+1次迭代值x(k).具体地,假设x(k)满足f(x(k+1))=0,则有f(x)=gk+Hk(xx(k))
解释为:当x接近于x(k)时,f(x)=(x(k))+Hk(xx(k)),则gk+Hk(x(k+1)x(k))=0,可以得出x(k+1)=x(k)Hk1gk
牛顿法步骤如下:
输入:目标函数f(x),梯度g(x)=f(x),海塞矩阵H(x),精度要求ε
输出:f(x)的极小值点x
(1)取初始点x(0)置k=0
(2)计算gk=g(x(k))
(3)若‖gk‖<ε,则停止计算,得近似解x=x(k)
(4)计算Hk=H(x(k))并求: pk:Hkpk=gk
(5)置x(k+1)=x(k)+pk
(6)置k=k+1,转(2)
拟牛顿法
牛顿法计算海塞矩阵的逆矩阵开销太多,拟牛顿法用一个近似的矩阵代替海塞矩阵的逆矩阵。
Hk满足条件gk+1gk=Hk(x(k+1)x(k))记gk=gk+1gk,δk=x(k+1)x(k),则yk=Hkδk,或Hk1yk=δk拟牛顿法将Gk作为Hk1的近似.
DFP(Davidon-Fletcher-Powell)算法:
DFP选择Gk+1的方法是,假设每一步迭代中矩阵Gk+1是由Gk加上两个附加项构成的,即
Gk+1=Gk+Pk+Qk
,其中Pk和Qk和是待定矩阵,这时
Gk+1yk=Gkyk+Pkyk+Qkyk
为了使得Gk+