这里是斯坦福大学机器学习网络课程的学习笔记。课程地址是:https://class.coursera.org/ml-2012-002/lecture/index
本节内容对应第十周,Lecture17. 回到总目录
~~
实践证明,数据的重要性并不亚于算法本身,所以也有了这句话:
It's not who has the best algorithm that wins, It's who has the most data.
机器学习的算法对大数据是很适用的,那么,如何让算法在大数据上高效运行呢?
答案其实就是:并行计算。
梯度下降法的并行实现算法:
前面介绍的机器学习算法中,几乎都用到了梯度下降方法,我们来看下:
这个算法,每次迭代时需要计算求和项
对于海量数据而言,这个计算会变得很慢。
那么如何改善呢?答案之一就是把一个求和改成多个求和,让多个机器同时计算。
我们将上述每次迭代在全部训练集取sum的方法叫Batch Gradient Descent.
我们可以将BGD算法改成,每次迭代对一个训练样本计算,这个算法叫Stochatic Gradient Descent (SGD),公式如下
有时一个一个样本计算,迭代次数可能会很多,也可以考虑每次对数个样本进行迭代,这个方法叫做Mini-Batch Gradient Descent,公式如下:
我们改了算法,那么新的算法是否能收敛呢?
有时并不能收敛到精确的全局最优点,但会在全局最优点附近,也就是会有较小误差。
当然,也可以达到全局最优点,就是每次迭代时将alpha减小,则迭代步长越来越小,趋近于0,就能保证收敛到全局最优点。
下面再考虑下如何分析SGD:
1. 用小alpha的话,收敛可能放慢,但效果可能会更好。(红色为小alpha)
2. 当将b从1000增加到5000时,cost变化曲线会变得更加光滑。(红色为b较大情形)
3. 有时cost并不递减,
但增加b,又会降低,因为b太小,波动厉害
增加b,也可能cost仍然不降低,此时你的算法需要去review了
4. 有时cost会增加,用smaller alpha