HLearn 的 Readme 表明,Monoid 类型类用于并行批量训练。我在几个文件中看到了 trainMonoid
的提及,但是我很难理解这个庞大的代码库。有人能以初学者友好的方式解释一下它是如何工作的吗?我猜它与结合性属性有关。
HLearn 的 Readme 表明,Monoid 类型类用于并行批量训练。我在几个文件中看到了 trainMonoid
的提及,但是我很难理解这个庞大的代码库。有人能以初学者友好的方式解释一下它是如何工作的吗?我猜它与结合性属性有关。
这在此文章中解释了,该文章链接在您提问的页面中。由于您需要一个适合初学者的描述,我将为您提供一个非常高层次的描述,这是我在阅读文章后理解的粗略概述。请将其视为该想法的概览,要完全理解所有内容,您必须学习这些文章。
基本思想是使用代数属性避免重复工作。他们通过使用单调操作和同态的结合性来实现。
给定两个集合A
和B
,带有两个二元运算+
和*
,同态是一个函数f:A -> B
,使得f(x + y)= f(x)* f(y)
,即它是一种保持两个集合之间结构的函数。
在该文章的情况下,函数f
基本上是将输入集映射到训练模型的函数。
{3,4}
上对T({1,2})
进行测试{2,4}
上对T({1,3})
进行测试{2,3}
上对T({1,4})
进行测试从这里可以看出,我们训练了1
三次。使用同态映射,我们可以计算T({1})
一次,然后将结果与其他部分结果组合以获得最终训练模型。
最终结果的正确性由操作的结合律和同态映射保证。
并行化时可以应用相同的思想:将输入分成k
个组,在并行执行训练,然后合并结果:T(x_1 + x_2 + ... + x_k) = T(x_1) * T(x_2) * ... * T(x_k)
,其中T(x_i)
调用完全并行执行,只有在最后才需要合并结果。
T
转化为在线算法:T_O(m, d) = m * T(d)
其中m
是已经训练好的模型(通常将是训练至该点的模型),d
是您添加用于训练的新数据点。
再次强调,结果的精确性归功于同态性,即如果m = T(x)
,那么m * T(d) = T(x+d)
,即在线算法与所有这些数据点的批量算法给出相同的结果。