次の1次元シーケンスを想定します。
A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...
A, B, C, ..
ここの文字は「通常の」イベントを表しています。
#, $, %, ...
ここの記号は「特別な」イベントを表しています
すべてのイベント間の時間間隔は均一ではありませんが(数秒から数日まで)、過去のイベントほど、将来のイベントに影響を与える可能性は低くなります。理想的には、これらの時間遅延を明示的に考慮することができます。
通常のイベントタイプは約10000、特別なイベントタイプは約100です。特別なイベントに先行する通常のイベントの量はさまざまですが、100〜300を超えることはほとんどありません。
基本的に、特別なイベントを予測できるようになる、通常のイベントシーケンスのパターンを探すことに興味があります。
これで、さまざまな方法でこれに取り組むことができます:特徴ベクトル+標準分類、相関ルール学習、HMMなどを作成します。
この場合、LSTMベースのネットワークがどのように最適になるかについて興味があります。簡単なのは、Karparthyのchar-rnnのようなことを行い、履歴が与えられたら次のイベントを予測することです。次に、新しいシーケンス
C, Z, Q, V, V, ... , V, W
モデル全体を実行して、次に来る可能性が最も高い特別なイベントを確認できます。しかし、それは適切なフィット感をまったく感じていません。
これは一時的な分類の問題なので、Alex Gravesが説明しているように、Connectionistの一時的な分類を使用するのが適切です。
ただし、現時点で多額の投資をする前に、LSTMがどれだけ適切にここに収まるかを感じるために、より簡単で迅速に実験できる何かを探しています。Tensorflowは、ある時点でCTCの例を見ますが、まだ見ていません。
だから私の(サブ)質問は:
- 上記の問題があり、LSTMを試してみたいのであれば、char-rnnタイプのアプローチを試してみる価値はありますか。
- イベント間タイミング情報をどのように明示的に組み込みますか。no-opイベントで固定クロックを使用することは明らかに機能しますが、見苦しいようです。
- LSTMをトレーニングできたとしたら、モデルを調べて、どのような種類のイベント「モチーフ」を取得したかを確認する方法はありますか?(つまり、convnetsのフィルターに類似)
常に役立つサンプルコード(Pythonを推奨)。
編集:シーケンスにノイズがあることを追加するだけです。一部のイベントは安全に無視できますが、正確にどのイベントを前もって言うことが常に可能であるとは限りません。したがって、理想的には、モデル(およびモデルから派生したモチーフ)はこれに対して堅牢です。