VowpalWabbit:差异和可扩展性

jay*_*100 8 performance scalability machine-learning vowpalwabbit online-algorithm

嗨伙计们:我试图确定VowpalWabbit的"状态"如何随着输入集的大小增长而保持.在典型的机器学习环境中,如果我有1000个输入向量,我希望一次发送所有这些,等待模型构建阶段完成,然后使用该模型创建新的预测.

在大众,似乎算法的"在线"性质使这种范式转变为更高性能并且能够实时调整.

1)如何实施这种实时模型修改?

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

ari*_*elf 19

只是为了加入carlosdc的好答案.

vowpal wabbit分开的一些功能,并允许它扩展到tera-feature(10 12)数据大小是:

在线权重向量: vowpal wabbit维护一个内存权重向量,它实际上是它正在构建的模型的权重向量.这就是你在问题中称之为"状态"的东西.

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

集群模式: vowpal wabbit支持在集群中的多个主机上运行,​​在节点上强制使用二进制树图结构,并使用all-reduce从叶到根的减少.

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

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

检查点和增量学习: vowpal wabbit允许您在学习时将模型保存到磁盘,然后加载模型并继续学习中断的--save_resume选项.

类似于测试的错误估计:vowpal wabbit计算的平均损失"一如既往"始终是看不见的(样本外)数据(*).这消除了对预先计划的保留或交叉验证的麻烦.您在培训期间看到的错误率是"类似测试".

超越线性模型: vowpal wabbit支持多种算法,包括矩阵分解(粗略矩阵SVD),潜在Dirichlet分配(LDA)等.它还支持动态生成术语交互(双线性,二次,立方和前馈sigmoid神经​​网络,用户指定的单位数),多类分类(除了基本回归和二进制)分类)等等.

在github上的官方vw wiki中有教程和许多示例.

(*)一个例外是如果您使用多个传递--passes N选项.


car*_*sdc 9

大众是随机梯度下降的(非常)复杂的实现.您可以在这里阅读更多关于随机梯度下降的信息

事实证明,随机梯度下降的良好实现基本上是I/O限制,它的速度和数据一样快,因此VW有一些复杂的数据结构来"编译"数据.

因此问题(1)的答案的答案是通过随机梯度下降而问题(2)的答案绝对不是.