8

I am trying to ascertain how VowpalWabbit's "state" is maintained as the size of our input set grows. In a typical machine learning environment, if I have 1000 input vectors, I would expect to send all of those at once, wait for a model building phase to complete, and then use the model to create new predictions.

In VW, it appears that the "online" nature of the algorithm shifts this paradigm to be more performant and capable of adjusting in real-time.

  1. How is this real-time model modification implemented ?

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

4

2 回答 2

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)、潜在狄利克雷分配 (LDA) 等。它还支持动态生成术语交互(双线性、二次、三次和前馈 sigmoid 神经网络,具有用户指定的单元数)、多类分类(除了基本回归和二元分类)等。

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

(*) 一个例外是,如果您使用带有--passes N选项的多个通行证。

于 2013-03-21T03:59:39.690 回答
10

VW 是随机梯度下降的(非常)复杂的实现。您可以在此处阅读有关随机梯度下降的更多信息

事实证明,随机梯度下降的一个好的实现基本上是 I/O 限制的,它尽可能快地获取数据,因此 VW 有一些复杂的数据结构来“编译”数据。

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

于 2012-01-30T17:27:20.783 回答