2017-05-08 55 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。