我想在TensowFlow上实现一个通用模块,它接收一个TensorFlow模型列表(此处表示为专家),并从专家混合物构建,如下图http://www.aclweb.org/anthology/C16-1133所示。
因此,此模型获得输入x
,该输入被馈送到不同的专家以及门控网络。最终输出对应于ensemble output
,它由来自不同专家的输出之和乘以来自门控网络的相应门控函数gm
给出。所有专家网络都是同时接受培训的。
此模块适用于批量培训非常重要。我正在寻找已经实现的东西并发现了这个https://github.com/AmazaspShumik/Mixture-Models,虽然它不在TensorFlow上。
所以现在我正在寻找关于构建这个模块的最佳方法的指针和建议,即关于一些已经实现的TF层或特别适合这个应用的包装器。
答案 0 :(得分:4)
是的,您可以使用门控占位符在一体化架构中执行此操作。
让我们从像这样的简单tensorflow概念代码开始,然后添加到它:
m = tf.Variable( [width,height] , dtype=tf.float32 ))
b = tf.Variable( [height] , dtype=tf.float32 ))
h = tf.sigmoid( tf.matmul( x,m ) + b )
想象一下,这是您的单一“专家”模型架构。我知道这是相当基本的,但它会用于我们的说明目的。
我们要做的是将所有专家系统存储在矩阵的 m 和 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 )
g 是1和0的矩阵。为要保留的每个神经连接插入1,为每个要阻止的神经连接插入0。如果你有4个专家系统,那么1/4的连接将是1,而3/4将是0。
如果您希望所有人都能平等投票,那么您需要将 g 的所有值设置为1/4。