2017-05-08 33 views
2

TensorFlowモデル(ここではエキスパートと表記されています)のリストを受け取り、次の図に示すようにMixture of Expertsからビルドした汎用モジュールを実装したいと思いますhttp://www.aclweb.org/anthology/C16-1133TensorFlowでのエキスパートの混合

enter image description here

したがって、このモデルは、異なる専門家に同様にゲーティングネットワークに供給される入力xを取得します。最終的な出力はensemble outputに対応し、これは、異なるエキスパートからの出力の合計に、対応するゲーティング関数gm(ゲーティングネットワークに由来)を掛けたもので与えられます。すべての専門家ネットワークは、同時に訓練されています。

このモジュールはバッチトレーニングに適していることが重要です。私はすでに実装されているものを探していましたが、これはTensorFlowではなく、https://github.com/AmazaspShumik/Mixture-Modelsでした。

今、私は、このモジュールを構築するための最良のアプローチ、つまりすでに実装されている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で定義されています。これは、グラムは、1と0の行列がある

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を挿入します。 4つのエキスパートシステムがある場合、接続の1/4は1になり、3/4は0になります。

これらのすべてを均等に投票したい場合は、をすべて1/4に設定します。

関連する問題