performance - VowpalWabbit:差异和可扩展性

标签 performance machine-learning scalability vowpalwabbit online-algorithm

我试图确定随着输入集大小的增长,VowpalWabbit 的“状态”是如何维持的。在典型的机器学习环境中,如果我有 1000 个输入向量,我希望立即发送所有这些向量,等待模型构建阶段完成,然后使用该模型创建新的预测。

在大众汽车中,算法的“在线”性质似乎使这种范式变得更加高效并且能够实时调整。

  1. 这种实时模型修改是如何实现的?

  2. 随着时间的推移,大众汽车是否会根据总输入数据大小占用越来越多的资源?也就是说,当我向 VW 模型添加更多数据时(当它很小时),一旦特征向量输入的累积数量增加到 1000、10000 或数百万,实时调整计算是否开始花费更长的时间?

最佳答案

只是为了补充 carlosdc 的好答案。

一些使 vowpal wabbit 与众不同并允许其扩展到万亿级 (1012) 数据大小的功能是:

在线权重向量: Vowpal Wabbit 在内存中保留 weight-vector它本质上是它正在构建的模型的权重向量。这就是您在问题中所说的“国家”。

无限数据大小: 权重向量的大小与特征(独立输入变量)的数量成正比,而不是与示例(实例)的数量成正比。与许多其他(非在线)学习者不同,这就是 vowpal wabbit 能够在空间中扩展的原因。由于它不需要像典型的批处理学习器那样将所有数据加载到内存中,因此它仍然可以从太大而无法放入内存的数据集中学习。

集群模式: vowpal wabbit支持在集群中的多个主机上运行,​​在节点上强加二叉 TreeMap 结构并使用从叶到根的all-reduce缩减。

哈希技巧: vowpal wabbit 采用所谓的 hashing trick 。所有功能名称都使用 murmurhash-32 哈希为整数。这有几个优点:它非常简单且省时,无需处理哈希表管理和冲突,同时允许功能偶尔发生冲突。事实证明(在实践中),具有数千个不同特征的训练集中的少量特征冲突类似于添加隐式正则化项。与直觉相反,这通常会提高而不是降低模型的准确性。它也与特征空间的稀疏性(或密度)无关。最后,它允许输入特征名称是任意字符串,这与大多数传统学习器不同,传统学习器要求特征名称/ID 既是 a) 数字,又是 b) 唯一。

并行性: vowpal wabbit 通过在两个单独的线程中运行解析和学习来利用多核 CPU,进一步提高其速度。这使得 vw 能够像读取数据一样快速地学习。事实证明,vw 中大多数支持的算法与直觉相反,瓶颈在于 IO 速度,而不是学习速度。

检查点和增量学习: vowpal wabbit 允许您在学习时将模型保存到磁盘,然后使用 --save_resume 选项加载模型并从上次停下的地方继续学习。 p>

类似测试的误差估计: vowpal wabbit“实时计算”的平均损失始终基于看不见的(样本外)数据 (*)。这样就无需费心预先计划的保留或进行交叉验证。您在训练期间看到的错误率与“测试类似”。

超越线性模型: vowpal wabbit 支持多种算法,包括矩阵分解(粗略稀疏矩阵 SVD)、潜在狄利克雷分配 (LDA) 等。它还支持动态生成项交互(双线性、二次、三次和前馈 sigmoid 神经网络,具有用户指定的单元数)、多类分类(除了基本回归和二元分类之外)分类)等等。

the official vw wiki中有教程和很多例子在 github 上。

(*) 一个异常(exception)是如果您通过 --passes N 选项使用多次传递。

关于performance - VowpalWabbit:差异和可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065160/

相关文章:

java - Java 中的线程安全双向关联

node.js - Node 集群与 Dynos 缩放

asp.net - 对 html 控件使用 runat=server 的性能问题

c# - 表达式树的性能

machine-learning - 尽管 MNIST 模型具有很高的训练和测试精度,但仍错误地预测测试图像

machine-learning - 时间序列之间的相关性

c++ - 为什么 Erlang 和其他函数编程语言不是原生 c/c++?

image - 如何估算GIF文件大小?

WPF .NET 4 DataGrid 列性能

python - 模型的准确度是 0.86 而 AUC 是 0.50?