wap网站如何做,品牌取名,网站建设论文文献,苏州互联网公司工资继续是机器学习课程的笔记#xff0c;本节内容主要是介绍大规模机器学习的内容。
大型数据集的学习
对于一个过拟合的模型#xff0c;增加数据集的规模可以帮助避免过拟合#xff0c;并获得一个更好的结果。
但是对于一个大规模的数据#xff0c;比如有100万个数据量的训…继续是机器学习课程的笔记本节内容主要是介绍大规模机器学习的内容。
大型数据集的学习
对于一个过拟合的模型增加数据集的规模可以帮助避免过拟合并获得一个更好的结果。
但是对于一个大规模的数据比如有100万个数据量的训练集其计算量是非常大的。以线性回归模型为例每一次梯度下降迭代我们都需要计算训练集的误差的平方和对于训练集有上百万的数据量如果学习算法需要有20次迭代这就已经是一个非常大的计算代价。
因此首先需要确定是否需要有这么大规模的训练集也许只用1000个训练集就能获得比较好的结果这一步可以通过绘制学习曲线来帮助判断如下所示 随机梯度下降法(Stochastic Gradient Descent)
如果一定需要一个大规模的训练集我们可以尝试使用随机梯度下降法来代替批量梯度下降法。
批量梯度下降算法在每次迭代的时候需要计算整个训练集的和其公式如下
θj:θj−α1m∑i1m(hθ(x(i))−y(i))x(i)j\theta_j := \theta_j-\alpha \frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}如上公式可以知道如果训练集的数量m非常大那么计算量就非常大。而在随机梯度下降法中我们定义代价函数为一个单一训练实例的代价
cost(θ,(x(i),y(i)))12(hθ(x(i))−y(i))2Jtrain(θ)1m∑i1mcost(θ,(x(i),y(i)))cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2} (h_\theta(x^{(i)})-y^{(i)})^2 \\
J_{train}(\theta) = \frac{1}{m}\sum_{i=1}^mcost(\theta,(x^{(i)},y^{(i)}))所以随机梯度下降算法是
首先对训练集随机“洗牌”即打乱顺序然后重复下列步骤 Repeat(一般迭代1-10次整个训练集根据训练集大小选择训练集越大迭代次数越小){ for i1:m{ θj:θj−α(hθ(x(i))−y(i))x(i)j\theta_j := \theta_j - \alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} (for j 0:n) } } 随机梯度下降算法在每一次计算之后便更新参数θ\theta,而不需要首先将所有的训练集求和在批量梯度下降算法还没有完成一次迭代时随机梯度下降算法便已经走出了很远。但缺点是不是每一步都是朝着“正确”的方向迈出的因此算法虽然会逐步走向全局最小值的位置但是可能无法站到那个最小值的那一点而是在最小值点附近徘徊。如下图所示 微型批量梯度下降Mini-Batch Gradient Descent)
接下来介绍第三种梯度下降算法--微型批量梯度下降算法它是介于批量梯度下降算法和随机梯度下降算法之间的算法每次迭代使用b个训练实例更新一次参数$\theta$其更新公式如下所示Repeat{ for i1:m{ θj:θj−α1b∑ib−1ki(hθ(x(k))−y(k))x(ikj\theta_j := \theta_j - \alpha \frac{1}{b} \sum_{k=i}^{i+b-1}(h_\theta(x^{(k)})-y^{(k)})x_j^{(ik} (for j 0:n) i10; } } 也就是如果令b10m1000有 Repeat{ for i1,11,21,31,…,991{ θj:θj−α110∑i9ki(hθ(x(k))−y(k))x(ikj\theta_j := \theta_j - \alpha \frac{1}{10} \sum_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(ik} (for j 0:n) } } 通常会令b在2~100之间。这样做的好处是我们可以用向量化的方式来循环b个训练实例如果我们用的线性代数函数库比较好能够支持平行处理那么算法的总体表现将不受影响与随机梯度下降算法相同。有时甚至可以比随机梯度下降算法更快。
随机梯度下降收敛
接下来介绍随机梯度下降算法的调试以及学习率α\alpha的选取。
在批量梯度下降中我们可以令代价函数J为迭代次数的函数绘制图表根据图表来判断梯度下降是否收敛但是在大规模的训练集的情况下这是不现实的因为计算代价太大了。
在随机梯度下降算法中我们在每一次更新θ\theta之前都计算一次代价然后每X次迭代后求出这X次对训练实例计算代价的平均值然后绘制这些平均值与X次迭代的次数之间的函数图片。比如令X1000,即每1000次迭代就计算一次代价的平均值然后绘制图表。如下图所示 当我们绘制这样的图表时可能会得到一个颠婆不平但是不会明显减少的函数图象如上图中左下图蓝线所示。我们可以增加X如令X5000,来使得函数更平缓也许便能看出下降的趋势如上图中左下图的红线所示但可能函数图表仍然是颠婆不平且不下降的还是左下图的洋红色曲线即上面那条这可能就是模型本身存在一些错误。
而如果得到的曲线是如上图中右下图所示不断地上升那么可能需要选择一个较小的学习率α\alpha。
我们可以令学习率随着迭代次数的增加而减少如下所示
αconst1iterationNumberconst2\alpha = \frac{const1}{iterationNumber + const2}随着不断地靠近全局最小值通过减小学习率我们迫使算法收敛而非在最小值附加徘徊如下图所示。
但是通常我们不需要这样做便能有非常好的效果了对α\alpha进行调整所耗费的计算通常不值得毕竟这种调整学习率方法需要确定常数const1和const2的值。 在线学习
接下来介绍一种新的大规模机器学习机制–在线学习机制。在线学习算法指的是对数据流而非离线的静态数据集的学习。许多在线网站都有持续不断的用户流对于每一个用户网站希望能在不将数据存储到数据库中便顺利地进行算法学习。
假设我们正在经营一家物流公司每当一个用户询问从地点A至地点B的快递费用时我们给用户一个报价该用户可能选择接受y1或者不接受y0。
现在我们希望构建一个模型来预测用户接受报价使用我们的物流服务的可能性。因此报价是一个特征其他特征为距离起始地点目标地点以及特定的用户数据。而模型的输出是py1。
在线学习的算法与随机梯度下降算法有些类似我们对单一的实例进行学习而非对一个提前定义的训练集进行循环。 Repeat forever (as long as the website is running){ 对当前用户获取对应的(x,y) θj:θj−α(hθ(x)−y)xj\theta_j := \theta_j- \alpha(h_\theta(x) - y)x_j (for j 0:n) } 一旦对一个数据的学习完成了我们便可以丢弃该数据不需要再存储它了。这种方式的好处是我们的算法可以很好的适应用户的倾向性算法可以针对用户的当前行为不断地更新模型以适应该用户。
其他在线学习的例子有如搜索比如搜索拥有1080p像素相机的安卓手机等。
映射化简和数据并行
映射化简和数据并行对于大规模机器学习问题而言是非常重要的概念。
之前提到如果我们用批量梯度下降算法来求解大规模数据集的最优解我们需要对整个训练集进行循环计算偏导数和代价再求和计算代价非常大。如果我们能够将我们的数据集分配给多态计算机让每一台计算机处理数据集的一个子集然后我们将计算的结果汇总再求和这样的方法叫做映射简化。
具体而言如果任何学习算法能够表达为对训练集的函数的求和那么便能将这个任务分配给多台计算机或者同一台计算机的不同CPU以达到加速处理的目的。
例如我们有400个训练实例我们可以将批量梯度下降的求和任务分配给4台计算机进行处理 很多高级的线性代数函数库已经能够利用多核CPU的多核来平行地处理矩阵运算这也是算法的向量化实现如此重要的缘故这比使用循环更快。
小结
本节课内容介绍了如此使用大规模数据集来进行训练机器学习算法介绍了两种新的梯度下降算法–随机梯度下降和微型批量梯度下降以及新的大规模机器学习算法机制–在线学习机制最后介绍了映射化简和数据并行也就是使用多台计算机或者是同一台计算机的多个CPU分别计算训练集的一个子集最后再将结果汇总求和的方法。