本文主要是介绍Coordiante ascent VS Gradient descent,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Coordiante ascent 坐标上升算法
详细解释可参考:http://cs229.stanford.edu/notes/cs229-notes3.pdf“>stanford ML
算法demo
Gradient descent 梯度下降算法
详细参考:参考Andrew NG讲义
blog demo
现在谈谈两个算法的异同:
1.坐标上升法:坐标上升与坐标下降可以看做是一对,坐标上升是用来求解max最优化问题,坐标下降用于求min最优化问题,但是两者的执行步骤类似,执行原理相同。
例如要求接一个max_f(x1,x2,…,xn)的问题,其中各个xi是自变量,如果应用坐标上升法求解,其执行步骤就是:
1.首先给定一个初始点,如 X_0=(x1,x2,…,xn);
2.for dim=1:n
固定xi;(其中i是除dim以外的其他维度)
以x_dim为自变量求取使得f取得最大值的x_dim;
end
3.循环执行步骤2,直到f的值不再变化或变化很小。
总结:其关键点就是每次只变换一个维度xi,而其他维度都用当前值进行固定,如此循环迭代,最后得到最优解。
2.坐标下降法与上述过程类似,不过在第2步求取最优x_dim的值时,变为使得f最小的x_dim;
3.梯度下降法又称为最速下降法,他也是下降法,不过和坐标下降法的主要区别就是多了一个下降方向的选取,在坐标下降中下降方向是沿着每一维的坐标轴方向进行的,也就是方向是类似于(0,0,1,0,0)、(0,0,0,1,0)(假设是5维)这种形式的,而梯度下降法中,下降方向变换为函数在当前点的梯度方向,当维度很高时,梯度下降的优势就要比坐标下降明显很多。
梯度下降法的一个出发点是: f沿着f的梯度反方向下降最快。 这一点用文字而言,比较好理解,就是沿着f的梯度反方向搜索前进直到最优就是了。如果用步骤来描述的话就是:
1.给定一个初始值,如 X_0=(x1,x2,…,xn);
2.求f在此点的梯度 f’(X_0);
3.确定下一点的位置: X_1 = X_0 - a·f’(X_0);(a>0且一般都比较小,相当于在f的梯度反方向走了较 小的一步)
4.求f(X_1),如果与f(X_0)的差在一定范围内,则停止,否则令X_0=X_1,循环2,3,4.
这篇关于Coordiante ascent VS Gradient descent的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!