【问题标题】:Mixture of Experts on TensorFlowTensorFlow 专家组合
【发布时间】:2017-05-08 10:32:15
【问题描述】:

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

所以这个模型得到一个输入x,它被输入到不同的专家以及门控网络。最终输出对应于ensemble output,它是不同专家的输出之和乘以来自门控网络的相应门控函数gm。所有专家网络都是同时训练的。

此模块适合批量训练很重要。我一直在寻找已经实现的东西并找到了这个https://github.com/AmazaspShumik/Mixture-Models,虽然它不在 TensorFlow 上。

所以现在我正在寻找有关构建此模块的最佳方法的指针和建议,即有关一些已经实现的 TF 层或特别适合此应用程序的包装器。

【问题讨论】:

    标签: python tensorflow neural-network deep-learning


    【解决方案1】:

    是的,您可以通过使用门控占位符在一体式架构中做到这一点。

    让我们从这样一个简单的 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 )
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多