大数据下的机器学习

现在机器学习算法,其实就是大量数据集下对数据集进行拟合。

当数据量很大的时候,算法的效率必然会降低,如何处理大量的数据,是现在要考虑的问题。

随机梯度下降

回顾线性回归的梯度下降。
hθ(x)=∑j=0nθjxj代价函数Cost(θ,(x(i),y(i)))=12(hθ(x(i))−y(i))2Jtrain(θ)=12m∑i−1m(hθ(x(i))−y(i))2=1m∑i−1mCost(θ,(x(i),y(i)))迭代运行梯度下降θj:=θj−α∂Jtrain(θ)∂θj对于每个j=0,1,...,n对于θ∈Rn:=θj−α1m∑i=1m∂Cost(θ,(x(i),y(i)))∂θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)这里的m就是我们的训练集样本数量. \begin{aligned} & h_\theta(x)=\sum_{j=0}^n\theta_jx_j\\ & 代价函数Cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2\\ & J_{train}(\theta)=\frac{1}{2m}\sum_{i-1}^m(h_\theta(x^{(i)})-y^{(i)})^2=\frac{1}{m}\sum_{i-1}^mCost(\theta,(x^{(i)},y^{(i)}))\\ & 迭代运行梯度下降\\ & \qquad \theta_j:=\theta_j-\alpha \frac{\partial J_{train}(\theta)}{\partial\theta_j}\qquad \qquad对于每个j=0,1,...,n对于\theta\in\mathbb{R}^n\\ & \qquad\quad :=\theta_j-\alpha \frac{1}{m}\sum_{i=1}^m\frac{\partial Cost(\theta,(x^{(i)},y^{(i)}))}{\partial\theta_j}\\ & \qquad\quad :=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\\ & \qquad这里的m就是我们的训练集样本数量. \\ \end{aligned} hθ(x)=j=0nθjxjCost(θ,(x(i),y(i)))=21(hθ(x(i))y(i))2Jtrain(θ)=2m1i1m(hθ(x(i))y(i))2=m1i1mCost(θ,(x(i),y(i)))θj:=θjαθjJtrain(θ)j=0,1,...,nθRn:=θjαm1i=1mθjCost(θ,(x(i),y(i))):=θjαm1i=1m(hθ(x(i))y(i))xj(i)m.
当m非常大的时候,例如千万,上亿等。可能就需要不少的时间,而且该算法还需要多次迭代,时间消耗不容小视。

接下来,我们不每次遍历所有的训练集来求θ,而是只从训练集中拿出一个(x,y)来进行单独的求θ。

随机梯度下降:
即: 我们不区分(x(i),y(i))了,统一使用(x,y)因为我们每次只用一个单独的样本进行训练,所以我们的梯度下降式子变为:θj:=θj−α(hθ(x)−y)xj \begin{aligned} 即:\ & 我们不区分(x^{(i)},y^{(i)})了,统一使用(x,y)\\ & 因为我们每次只用一个单独的样本进行训练,所以我们的梯度下降式子变为:\\ & \theta_j:=\theta_j-\alpha(h_\theta(x)-y)x_j \end{aligned} : (x(i),y(i))使(x,y)θj:=θjα(hθ(x)y)xj
此时,学习算法可能不会收敛到全局最优点,而是在最优点附近一个范围内游走,这是因为我们使用的是单独的样本。

如图:

在这里插入图片描述

经历曲折的路径,最后在一个范围内往复。

不过确定一个范围,也是一个不错的收获。

Mini-batch梯度下降

  • 经典梯度下降,需要遍历所有训练集,时间成本太大。
  • 随机梯度下降,只需要一次计算一个样本即可,时间花费少,但是最后精度不高。

我们使用折中的方法,将经典梯度下降随机梯度下降结合起来。每次读入b个样本,即不多也不少,可以使时间变少,也可以使精度变高。


比如,我们每次使用10个样本进行总样本数10000的梯度下降训练:b=10,m=10000for(b=1,11,21,...,9991)θj:=θj−α1b∑i=1b(hθ(x(i))−y(i))xj(i)对于每个j=0,1,...,n对于θ∈Rnb:=b+10 \begin{aligned} & 比如,我们每次使用10个样本进行总样本数10000的梯度下降训练:b=10,m=10000\\ & for(b=1,11,21,...,9991)\\ & \qquad\theta_j:=\theta_j-\alpha\frac{1}{b}\sum_{i=1}^b(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\qquad \qquad对于每个j=0,1,...,n对于\theta\in\mathbb{R}^n\\ & \qquad b:=b+10\\ \end{aligned} 使1010000b=10,m=10000for(b=1,11,21,...,9991)θj:=θjαb1i=1b(hθ(x(i))y(i))xj(i)j=0,1,...,nθRnb:=b+10

检查收敛

按照随机或者m-b梯度下降运行后,每隔k次可以取这k次的平均值,进行检测J(θ)是否收敛。

自适应α

在进行算法执行时,合适的参数α也会帮助学习算法更快,更精确的定位到最优点。

我们一般期望是,一开始时,α较大,快速收敛到合适的范围内,然后α变小,缓慢的逼近最优点。
例如α=const1迭代次数+const2,α随迭代次数的增加而减小 例如\alpha=\frac{const_1}{迭代次数+const_2},\alpha随迭代次数的增加而减小 α=+const2const1,α

在线学习

  • 离线学习:准备好数据,训练过程中不再增加新的数据,直到算法执行完。
  • 在线学习:算法执行的时候,随时会增加入新的训练样本,训练集在执行时是会变化的。

之前我们讨论的一直都是离线学习。

但在现在这样的网络环境中,随时随地产生的数据,让在线学习也也有了一席之地。

类似随机梯度下降,离线的随机梯度下降是从准备好的训练集中依次读入样本进行训练。

在线的可以是实时的获取样本。

在线学习可以更加快速的对样本的变化做出反应。

应用可以在 商品推荐,搜索推荐,价格歧视等方面发挥作用。

数据并行

当样本数量多的时候,可以采用并行计算的方式。

将一个大样本分成若干个小样本,在不同的计算机中并行计算,最后汇总起来做最终计算。

这样可以节省时间成本。

能够数据并行计算的算法,一般是能够用累加表达出来的,累加的算法可以先独立计算部分,最后合并计算整体。

也可以使用单机多线程来实现。

参考资料

B站吴恩达机器学习相关课程:https://www.bilibili.com/video/BV164411b7dx

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐