coursera 机器学习---大规模机器学习 (未完待续)

  • Gradient descent with large data sets  (大数据集的梯度下降)

   视频地址

    现在的机器学习和以前比要方便很多 现在拥有了大数据拥有了可以用来 进行学习的数据  机器学习领域有一个说法是 通常不是最好的算法胜出 而是谁有最多的数据

   那么当我们用了大量的数据又该如何使用呢

  在我们计算一个损失函数的时候 通常会使用梯度下降算法 来求出theta 的最小值 是代价最小 当有大量的数据的时候发现梯度下降每次迭代都要计算 训练集的误差的平方和 一般训练集都非常大 此时计算量将大大增加 

我们上来不是无脑增加训练数量 此时我们先看下当前使用1000个训练集是否合适在进行下面的计算 此时我们画出学习曲线  看看训练集和交叉测试集在数据集增加情况下变化如何

coursera 机器学习---大规模机器学习 (未完待续)

显然左边的图随着数据集增加会有好的效果 而右边的当数据集增大之后没有明显的效果 这时我们就不需要增大训练集了看看是不是要增加特征 再继续进行训练

  • 随机梯度下降 

coursera 机器学习---大规模机器学习 (未完待续)

(以单变量线性回归为例)当我们的假设函数和代价函数 入上图所示时 我们使用梯度下降

coursera 机器学习---大规模机器学习 (未完待续)

不断更新theta 好处就是可以不断更新theta 不用跑整个数据集然后调整

coursera 机器学习---大规模机器学习 (未完待续)

最后会如此图一样找到 代价最小值 但数据集增大coursera 机器学习---大规模机器学习 (未完待续)此处计算量会变得很大 

下面引入随机梯度下降

coursera 机器学习---大规模机器学习 (未完待续)

我们定义参数θ 关于训练样本(x(i),y(i))的代价 如上图此时代价函数表现为 每一个样本的代价的总和的平均值

此时他的梯度下降为 想将m个训练样本打乱

coursera 机器学习---大规模机器学习 (未完待续)

然后对单个样本进行梯度下降 进行m次 此时不断的对下一个训练样本 进行拟合得更好

coursera 机器学习---大规模机器学习 (未完待续)

随机梯度下降不断朝着最小值附近移动但是最后会在最小值附近徘徊 (为什么不是一次就到了最低点 是因为数据量少可能达不到最优解?)对于这个疑问--

“在随机梯度下降中 我们有一个外层循环 它决定了内层循环的执行次数 所以 内层循环应该执行多少次呢 这取决于训练样本的大小 通常一次就够了 最多到10次 是比较典型的 所以我们可以循环执行内层1到10次 因此 如果我们有非常大量的数据 普查的人口数据 有13亿人口 所以每次你只需要考虑一个训练样本 这里的i就是从1到3亿了 所以可能你每次只需要考虑一个训练样本 你就能训练出非常好的假设 这时 由于m非常大 那么内循环只用做一次就够了 但通常来说 循环1到10次都是非常合理的 但这还是取决于你训练样本的大小 如果你跟批量梯度下降比较一下的话 批量梯度下降在一步梯度下降的过程中 就需要考虑全部的训练样本 所以批量梯度下降就是这样微小的一次次移动 这也是为什么随机梯度下降法要快得多 这就是随机梯度下降了 如果你应用它 应该就能在很多学习算法中应用大量数据了 并且会得到更好的算法表现”

  • 小批量梯度下降

随机梯度下降是一个个来 二小批量梯度下降则是b个b个来 b一般在2-100之间

那么公式为:

coursera 机器学习---大规模机器学习 (未完待续)

和批量梯度下降比 我们只看前b个就可以开始修改theta了 而且这么做好处是方便是矢量化

  • 随机梯度下降收敛

接下来说如何让其正常收敛和调整学习速率α的值

如何为收敛就是让代价函数在每一次迭代中都变小 小着小着就收敛了

我们此时画出随机梯度/小批量梯度算法每一步coursera 机器学习---大规模机器学习 (未完待续) 的值 因为不是批量梯度下降 这时就可以画出cost(损失函数)的值

结合下面图像说明下不同的情况改如何调整

coursera 机器学习---大规模机器学习 (未完待续)

 

左上角的图片红色的是 学习速率α 比较小的 和蓝的比较 最后损失函数值更小 而且抖动也更小 

右上角的图片蓝色的是在1000个数据为一组会出现较大波动 改成5000 波动减下但要5000个才打一个点