AutoEncodersの変換


10

オートエンコーダの変換に関するGeoff Hintonの論文を読んだところです

Hinton、Krizhevsky、Wang:Transforming Auto- encoders 。人工ニューラルネットワークと機械学習、2011年。

そして、このようなもので遊んでみたいと思います。しかし、それを読んでも、実際にそれを実装する方法についての紙から十分な詳細を得ることができませんでした。

  • 入力ピクセルとカプセルのマッピングがどのように機能するかを知っている人はいますか?
  • 認識ユニットで正確に何が起こっているべきですか?
  • どのように訓練する必要がありますか?すべての接続間の標準のバックプロップですか?

さらに良いのは、これまたは同様の何かのソースコードへのリンクです。


著者に連絡してみましたか?多分彼らはオンラインで利用できる何かを持っています。
Ricardo Cruz

回答:


4

説明を助けるためにいくつかのテンソルフローコードの例をまとめました(完全で機能するコードはこの要点にあります)。このコードは、リンクした論文のセクション2の最初の部分からカプセルネットワークを実装します。

N_REC_UNITS = 10
N_GEN_UNITS = 20
N_CAPSULES = 30

# input placeholders
img_input_flat = tf.placeholder(tf.float32, shape=(None, 784))
d_xy = tf.placeholder(tf.float32, shape=(None, 2))

# translate the image according to d_xy
img_input = tf.reshape(img_input_flat, (-1, 28, 28, 1))
trans_img = image.translate(img_input, d_xy)
flat_img = tf.layers.flatten(trans_img)

capsule_img_list = []

# build several capsules and store the generated output in a list
for i in range(N_CAPSULES):
    # hidden recognition layer
    h_rec = tf.layers.dense(flat_img, N_REC_UNITS, activation=tf.nn.relu)
    # inferred xy values
    xy = tf.layers.dense(h_rec, 2) + d_xy
    # inferred probability of feature
    p = tf.layers.dense(h_rec, 1, activation=tf.nn.sigmoid)
    # hidden generative layer
    h_gen = tf.layers.dense(xy, N_GEN_UNITS, activation=tf.nn.relu)
    # the flattened generated image
    cap_img = p*tf.layers.dense(h_gen, 784, activation=tf.nn.relu)

    capsule_img_list.append(cap_img)

# combine the generated images
gen_img_stack = tf.stack(capsule_img_list, axis=1)
gen_img = tf.reduce_sum(gen_img_stack, axis=1)

入力ピクセルとカプセルのマッピングがどのように機能するかを知っている人はいますか?

これはネットワーク構造に依存します。その論文の最初の実験(および上記のコード)では、各カプセルに入力画像全体を含む受容野があります。これが最も簡単な配置です。その場合、これは、入力画像と各カプセルの最初の非表示レイヤーの間の完全に接続されたレイヤーです。

あるいは、カプセル受容野は、その論文の後半の実験のように、ストライドのあるCNNカーネルのように配置できます。

認識ユニットで正確に何が起こっているべきですか?

認識単位は、各カプセルの内部表現です。各カプセルはこの内部表現を使用しpて、カプセルの機能が存在する確率、およびxy推定された平行移動値を計算します。その紙の図2は、ネットワークがxy正しく使用することを学習していることを確認するためのチェックです(そうです)。

どのように訓練する必要がありますか?すべての接続間の標準のバックプロップですか?

具体的には、生成された出力と元の出力の類似性を強制する損失を使用して、自動エンコーダーとしてトレーニングする必要があります。ここでは、平均二乗誤差がうまく機能します。それとは別に、はい、backpropで勾配降下法を伝播する必要があります。

loss = tf.losses.mean_squared_error(img_input_flat, gen_img)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.