LoginSignup
7
4

More than 5 years have passed since last update.

chainerでCommon Representation Learningをやってみる

Last updated at Posted at 2017-03-18

概要

KDD2016 workshopに出てる, IBM Research, Indiaの人の「Joint multi-modal representations for e-commerce catalog search driven by visual attributes 」をchainerで実装しようというものです.

論文の手法の元論文はこちらです.
この論文の本実装は,Theanoで書かれています.

論文の内容は,ざっくり読んだ感じ,テキストと画像がペアで与えられたとき,その共通空間をNeural Netを使って求めて(手法名は「Correlational Neural Net, 略してCorrNet」)検索エンジンに役立てようというなものになってます.

2つの異なるモーダルの共通空間を求める場合,CCAを使うのが一般的かと思いますが,実用上scikit-learnのCCAはデータサイズが大きくなるととたんに訓練に時間がかる&MemoryErrorで使い物にならないこともありますし,今回はサクッとchainerで実装してみました.

python3で,jupyter notebookで書いたコードはこちらです.

相関係数を共通空間で大きくなるように学習させるのがポイントみたいです.

イメージ図
スクリーンショット 2017-03-27 11.29.47.png

ロス関数は,2つのモーダルが与えられたとき両方復元する際の損失,片方のモーダルが与えられたとき両方復元する際の損失,そして隠れ層での相関が高くなるようにする損失で構成されてます.
スクリーンショット 2017-03-27 11.35.52.png

使用したデータ

簡単に試してみたかったのでMNIST使って,28x28の画像と,one-hot-vector形式にしたラベル情報の共通空間を求めました.

今後違うデータでも試すつもりです.

結果

もともとの画像

スクリーンショット 2017-03-24 17.07.01.png

復元後の画像(「画像」 → 「画像」)

スクリーンショット 2017-03-24 17.06.36.png

うまく復元できてるようです

ラベルを使っての復元後の画像(「ラベル」 → 「画像」)

スクリーンショット 2017-03-24 17.06.52.png

ラベル情報を組み合わせて(0と8)の復元後の画像(「ラベル」 → 「画像」)

スクリーンショット 2017-03-27 11.52.26.png

0と8の中間のような画像がちゃんと生成されております.

ロスの推移

Total

loss.png

Detail

detail_loss.png

ちゃんと隠れ層で相関が高くなるように学習が進んでおります!

考察

ラベル情報からだけでも復元できるようです!

いずれにせよ,chainer,やはりTheanoよりだいぶ簡単に書けてログも出力できて便利ですね^^

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4