以下の論文を読みます。
- 近年の CNN の系列データへの適用事例に着想を得て、シンプルで汎用的な TCN( Temporal Convolutional Networks )を提案した。TCN は再帰構造をもたず(スキップ付きの)畳込みのみで現時点までの入力から現時点の出力を生成する。
- 11種類の系列データに対するタスク(人工的なタスク、曲に対する予測、文字/単語に対する予測)のほとんどで、TCN は同一モデルサイズ(パラメータ数だと思う)の LSTM、GRU、vanilla RNN よりも高い性能を発揮した。
- 系列データへのファーストトライアルは RNN 系のニューラルネットに代わって TCN とすべきである。
- 検証されているタスクの半分が言語データに対するタスクであり、むしろ実際に予測タスクの需要があると考えられる経済データや自然データなどでの検証はなされていない点が気になった。
- 推論時にその時点までの全データを参照する TCN が長期記憶性で有利なのは当然のようには感じる(というかそれは記憶なのだろうか)。RNN は過去の入力データを保持しない代わりに現時点までの特徴にバックアップしており、RNN と TCN のどちらを採用するか(どう組み合わせるか)は推論時に使用できるメモリサイズに依存しそう。
- 確かに最初から再帰構造縛りでモデリングする意味はわからないので、現実に系列データをニューラルネットで学習するのはまず利用できるメモリサイズで TCN する方が適当なように思う。
確かにどんなタスクを調べたのか気になるね。4節に「系列データのモデリングのタスク」ってまとめられてるのがそれかな。RNN アーキテクチャの性能比較によく使われるタスクを集めたみたい。
The adding problem | そのまま「足し算」かな。以下のような2次元系列が入力で、第2成分がマーカーになっていて、マーカーが付いた数字を足し算しろというタスクだね。 |
---|---|
Sequential MNIST and P-MNIST | MNIST は 28×28=784 ピクセルのグレースケール手書き数字画像だけど、それを長さが 784 の系列データとして入力して分類しろってタスクか…画像は縦と横の広がりがある2次元のデータなのに1次元にして判別しろっていうのも意地悪だな…。 |
Copy memory | これは下図のように「最初に入力した数字の列を覚えておいて、こちらが9を入力し始めたらその1ステップ後から出力すること」ってタスクだね。下図では4桁の数字を覚えさせているけど本当は10桁らしい。まあどうでもいいけど。出力させるまでに何ステップおくかもモデルの性能を測りたい人が適当に決めるんだろうね。 |
JSB Chorales and Nottingham | 「J. S. バッハのコラール」は382曲の4声コラール(賛美歌)が、88次元(ピアノの鍵盤数だよね)のベクトルの列で表されているっぽいね。ベクトルの各要素は0か1で、そのとき押されている鍵盤が1になっているっぽいけど、それだと「タンタン」と「ターーン」の区別付かないような…。あと4部合唱ということは同時に1になる成分は高々4つまでなのかな…ウィキペディアの画像をみてもこれ伴奏とかじゃなくて歌唱旋律だよね…まあどっちでもいいけど…。
|
PennTreebank | これは言語データで、このデータで文字レベルの系列の学習も、単語レベルの系列の学習もやったらしい。
|
Wikitext-103 | PTB より 110 倍大きいデータセットで、語彙サイズは 268K らしい。28K のウィキペディア記事(103M 単語)を訓練データに、60 の記事(218K 単語)をバリデーションデータに、60 の記事(246K 単語)をテストデータにしたらしい。PTB より代表的・現実的なデータセットで、レアな単語を含むのが特徴だとか。 |
LAMBADA | 小説から 10K の節(それぞれの節が4.6 文のコンテキスト文と、1文のターゲット文からなる)を抜き出してきたデータセットみたいだね。ターゲット文の最後の単語が予測対象になるらしい。ターゲット文の最後の単語は、人間にとって、「コンテキスト文があると容易にわかるけどターゲット文だけ見てもわからない」ものになっているんだって。つまりモデルは長い文脈を捉える必要があって、色々なモデルが LAMBADA の予測に失敗しているんだって。LAMBADA タスクの訓練に用いたデータは(LAMBADA じゃないのか?)2662 の小説の全文で、200M 語以上あって、語彙数は 93K だって。 |
text8 | PTB の 20 倍のサイズの、100M 文字を含むウィキペディア由来のデータセットで、文字レベルの言語モデリングに用いたらしい。90M 文字を訓練に、5M 文字をバリデーションに、5M 文字をテストにつかったみたいだけど、どんなデータなのか、文章や記事に区切られているのかとかよくわかんないな…。 |
それが Table 1 かな。再帰ニューラルネット側は、LSTM、GRU、vanilla RNN を適用したみたいだけど、比較対象の TCN( Temporal Convolutional Networks )は3節のアーキテクチャを参照ってあるから3節「Temporal Convolutional Networks」を確認しようかな。TCN はこの著者の人たちが汎用的になるように設計したアーキテクチャみたいだけど、新しいものではないらしい。TCN という言葉自体も Lea 2017 に既に出てきているって。TCN は系列データの予測に用いるので、以下を満たすらしい。
- 畳込み時に未来から過去へのリーケージがないようにする。
- 任意の長さの入力系列を受け取って、同じ長さの系列を出力できる。
- [1609.03499] WaveNet: A Generative Model for Raw Audio(van den Oord et al., 2016)― この WaveNet に比較すると TCN は skip connections across layers, conditioning, context stacking, gated activations をもたないらしい(?)。
- [1610.10099] Neural Machine Translation in Linear Time(Kalchbrenner et al., 2016)
- [1612.08083] Language Modeling with Gated Convolutional Networks(Dauphin et al., 2017)― このモデルに比較すると TCN はゲートをもたずもっと長期記憶性をもつらしい。
- A Convolutional Encoder Model for Neural Machine Translation - ACL Anthology(Gehring et al., 2017a)
- [1705.03122] Convolutional Sequence to Sequence Learning(Gehring et al., 2017b)
それで CNN でどうやって系列データに対するタスクに取り組むのかって話だけど、過去を参照せずに入力系列と同じ長さの系列を出すには以下みたいに1次元の FCN にすればいい。
そうですね…今の文脈でいう「系列データに対するタスク」って「現在のステップまでのすべての入力を踏まえた出力を出す」ですが、「1つ前のステップにおける隠れ層の出力を利用しなければならない」なんてルールはないですから、RNN は縛りプレイしている気がします。かといって、この縛りを外すとたくさんのデータを保持しなければ推論できないですね。1つ前のステップまでの情報が1つ前のステップにおける隠れ層の出力に込められているわけではなくなってしまいますから…。
RNN の出力は「その時点まですべての系列の特徴を集約したもの」、TCN の出力は「その時点あたりの特徴を集約したもの」だよね。RNN に入力する系列は入力したらもう捨てていいけど、TCN に入力する系列は TCN に参照される可能性がある限り保持しないといけないから、TCN で長期にわたる特徴を捉えようとすることはできるけどメモリが大変で、なんかもうメモリとの相談だよね。もちろん両者を組み合わせることもできて、まさに以下の記事で参照している Lai 2018 は先に TCN して次に RNN してるね。
逆に先に RNN して 後から TCN することもできると思うけど、その時点までの特徴にされる前の生データの系列を参照したいなら先に TCN の方がよさそうかな。どれだけ過去の生データまで参照できるかはメモリとの相談になるけどね。そういう意味では、上のアーキテクチャってなんかごてごてした恣意的なものにみえるけど割と素直なものなのかも。CNN だって部分を取って全結合するみたいなもんだし…じゃあその部分をどう取るかとか、dilated convolutions のスキップ幅自体でも学習すれば?
面倒です。
じゃあなんで訊いたし…。