2017-05-08 25 views
2

我想在TensowFlow上实现一个通用模块,该模块接收TensorFlow模型列表(此处表示为专家),并从该混合专家中构建,如下图所示: http://www.aclweb.org/anthology/C16-1133TensorFlow上的专家混合

enter image description here

所以该模型得到,其被馈送到不同的专家以及对选通网络的输入x。最终输出对应于ensemble output,它由来自不同专家的输出的总和乘以来自门控网络的相应门控功能gm给出。所有的专家网络都是同步训练的。

该模块适用于批量培训很重要。我正在寻找已经实施的东西,发现这个https://github.com/AmazaspShumik/Mixture-Models,虽然它不在TensorFlow上。

所以现在我正在寻找关于构建这个模块的最佳方法的指针和建议,即关于某些已经实现的TF层或包装器,它们将特别适合于此应用。

回答

3

是的,您可以使用门控占位符在一体化架构中执行此操作。

让我们先从这样一个简单的概念tensorflow代码,然后添加到它:

m = tf.Variable([width,height] , dtype=tf.float32 )) 
b = tf.Variable([height] , dtype=tf.float32 )) 
h = tf.sigmoid(tf.matmul(x,m) + b) 

想象这是你的唯一“专家”的模型架构。我知道这是相当基本的,但它会做我们的例证。

我们现在要做的是商店都在矩阵的b并定义一个门控矩阵的专家系统。

我们称之为门控矩阵g。它将阻止特定的神经连接。神经连接定义于m。这将是您的新配置

g = tf.placeholder([width,height] , dtype=tf.float32) 
m = tf.Variable([width,height] , dtype=tf.float32 ) 
b = tf.Variable([height] , dtype=tf.float32 ) 
h = tf.sigmoid(tf.matmul(x, tf.multiply(m,g)) + b) 

是1和0的矩阵。为每个想要保留的神经连接插入一个1,为每一个想要阻止的插入一个0。如果你有4个专家系统,那么1/4的连接将是1,而3/4将是0。

如果您希望他们都投票平等,那么您需要将所有g的值设置为1/4。