大规模机器学习

百万级别的数据样本:指数级别的算法基本告别了 十亿级别的数据样本:开始考虑分布式存储 万亿级别的数据样本:无法得知数据全貌,采用Peer-to-peer(机器处理本地的数据无总控)

理解机器学习

从优化的角度看机器学习

\[ \arg max_{\vec{\theta}} \equiv \mathcal{L}(\{x_i,y_i\}_{i=1}^N;\vec{\theta})+ \Omega(\vec{\theta}) \]

其中\(\mathcal{L}\)是一个模型(经验风险),\(x_i,y_i\)代表的是数据,\(N\)是数据规模,\(\vec{\theta}\)代表参数(结构风险),有参数就是有偏估计,方差小,有更好的泛化能力。然后通过迭代求解: \[ \vec{\theta}^{t+1}=g(\vec{\theta}^t,\Delta_f \vec{theta}(\mathcal{D})) \] 其中后一项为模型参数的梯度计算,用于迭代与修正,梯度如果各项独立通常可以并行,即每台电脑可以算本地的,然后多台机器合并,显而易见的是模型并行数据一定并行。

这里的数据与参数都是稀疏的,只拉入必要的参数即可,即使参数有误,也可以在最后收敛。

参数更新方案

同步更新

同步更新特点
  • 设置同步点,通常每一轮迭代至少一个同步点
    • 同步点等候所有节点完成任务,统一更新参数
    • 更新后进入下一轮迭代
  • 最大程度模拟序列计算
    • 与序列计算结果基本一致
    • 与序列计算具有同样的理论保障
同步更新缺点
  • 低效
    • 网络速度慢,延迟大
  • 配置相同的机器计算速度不一致导致等待
    • 与机器的即时状态有关
    • 与需要处理的数据有关

异步更新

异步更新缺点
  • 本地数据不全面:单个节点只有部分数据,独立更新参数从总体看结果不正确
  • 不同的机器执行的更新次数有很大的差异
  • 参数互相依赖:下一轮的梯度计算可能依赖上一轮所有的正确参数值
  • 参数过期:本轮更新的参数的梯度不是最新的参数的梯度

半同步更新

半同步更新特点
  • 设置执行最快和最慢的节点间轮数的最大差异
  • 比同步块,比异步准确