TensorFlow中的专家混合模型

4
我希望在TensorFlow上实现一个通用模块,该模块接收一组TensorFlow模型(这里称为专家),并从中构建出一个混合专家模型,如下图所示,该图来自http://www.aclweb.org/anthology/C16-1133。请注意,保留HTML标签。

enter image description here

所以,这个模型接收一个输入 x,并将其馈送到不同的专家以及门控网络。最终输出对应于集成输出,它是由来自不同专家的输出乘以相应的门控函数gm的总和给出的,该函数来自门控网络。所有专家网络都是同时训练的。
重要的是,该模块适用于批量训练。我正在寻找一些已经实现的内容,并找到了https://github.com/AmazaspShumik/Mixture-Models,尽管它不是基于TensorFlow的。
因此,我现在正在寻找关于构建此模块的最佳方法的指针和建议,特别是关于一些已经实现的TF层或包装器,它们对于此应用程序特别合适。
1个回答

6

是的,您可以通过使用门控占位符在全一体架构中实现此操作。

让我们从一个简单的 TensorFlow 概念代码开始,然后逐步添加内容:

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

假设这是您的单个“专家”模型架构。我知道它相当基础,但它足以用于我们的说明目的。
我们要做的是将所有专家系统存储在矩阵的mb中,并定义一个门控矩阵。
让我们把门控矩阵称为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 )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接