論文読みメモ: Trellis Networks for Sequence Modeling(その1)

以下の論文を読みます。

Shaojie Bai, J. Z. Kolter, V. Koltun. Trellis Networks for Sequence Modeling. In 7th International Conference on Learning Representations, ICLR 2019, 2019. [1810.06682] Trellis Networks for Sequence Modeling
※ キャラクターは架空のものです。私の誤りは私に帰属します。お気付きの点がありましたらコメント等で指摘ください。
f:id:cookie-box:20190101155733p:plain:w60

これは TCN を提案された方々の論文ですが、この論文では系列データを学習する新しいモデル構造である Trellis Networks(「格子垣」ネットワーク)を提案するようですが、この TrellisNet はアブストラクトによると

  • ちょっと特殊な Temporal Convolutional Networks (TCN) ともいえるし、
  • ちょっと特殊な Recurrent Neural Networks (RNN) ともいえる
とのことですね…しかし、RNN と TCN はどちらも系列データを学習するモデルですがその仕組みは全く異なりますよね? RNN は現時点の入力と前の時点の出力から現時点の出力をつくりますし、TCN は現時点までの入力たちをどんどん畳込んで現時点の出力をつくりますし、そもそも下図をみても、どちらもお世辞にも「格子」にはみえないと思います。

f:id:cookie-box:20201010183627p:plain:w570
f:id:cookie-box:20190101160814p:plain:w60

じゃあ RNN のようでもあって、TCN のようでもあって、格子にみえるモデルを考えてみたらいいんじゃないかな。そもそもどんなモデルだったら格子にみえるだろう?

f:id:cookie-box:20190101155733p:plain:w60

どんなって、「格子」というからには…あれ、格子ってなんでしょう…あ、そうです! 複素数平面の格子点です! つまり、格子点のように、何か横方向のインデックスと縦方向のインデックスをもつものがあれば、格子にみえるでしょう。むしろそれが格子の定義かもしれませんが…まあいいです。

それで、RNN や TCN には縦方向と横方向のインデックスをもつものがあるかという話です。この場合、横方向のインデックスは時間ステップでしょう。縦方向のインデックスは何層目の特徴かといったようなものが考えられると思います。入力を0層目、出力を1層目とすれば RNN も TCN も格子とはいえますね。でも、それではちょっとお粗末だと思います。それでは格子というより梯子ですから。

…あっ、でも、RNN も TCN も構造上2つ以上積み重ねることができますね。そうすれば、時刻 ti 層目の出力が格子にみえると思います。

…いや、よく考えると、RNN に TCN を重ねることも、TCN に RNN を重ねることも妨げられるものではないですね。ステップ毎に出力を出すタイプの系列モデルであれば中身がどうあっても積み重ねらることができますから。であれば、TCN → RNN → TCN → RNN のような積み重ねだって可能ですし、かつ格子にみえます。TrellisNet の正体はもうこれでは?

f:id:cookie-box:20190101160814p:plain:w60

いい線なんじゃないかな。でも TCN → RNN → TCN → RNN というモデルではないみたいだね。それよりは TCN → TCN → TCN → TCN が近いと思う。3ページ目の Figure 1 をみる限りは。たぶん TrellisNet には純粋な再帰路はない。

f:id:cookie-box:20190101155733p:plain:w60

うおおおい! 私には考えさせておいて自分はちゃっかりカンニングしてるじゃないですか! それに、TCN → TCN → TCN → TCN だと RNN 要素なくないですか? TrellisNet はちょっと特殊な RNN なんでしょう?

f:id:cookie-box:20190101160814p:plain:w60

どう RNN なのか解説してくれるのが 4.2 節なんだと思う。

f:id:cookie-box:20190101155733p:plain:w60

…おとなしくイントロダクションから読んでいきます。って、最初の段落、どばっと文献の引用がありますが、個々の内容には何も言及されていないですね…。近年の系列データの学習の研究では、RNN も改良が続けられているし、TCN も高いパフォーマンスを発揮しているし、セルフアテンションに基づくネットワークも快進撃をみせているということですが…セルフアテンションって RNN や TCN の並びに入るんですか? RNN や TCN は将来のデータをカンニングしてはならないという縛りがあるはずですが、文章に対する品詞分類や翻訳などのタスクでは、ふつう将来のデータ(単語)をカンニングしてもいいですよね? むしろカンニングしろって感じですが…。

f:id:cookie-box:20190101160814p:plain:w60

セルフアテンションが RNN や TCN の並びに入るかということについては、セルフアテンション層は未来の単語も過去の単語も参照するということはしていないと思う。だから分の途中まででも出力は同じだよ。Positional Encoding とかあるから文章中の座標は単語に貼り付けてある必要はあるし、ネットワークを学習するときに次の単語を説明しようとしたり前の単語の説明しようとしたりということをしないということではないよ。

f:id:cookie-box:20190101155733p:plain:w60

なるほど? …イントロダクションの3段落目には、アブストラクトにあったように、TrellisNet はちょっと特殊な TCN であるということがもう少し詳しくかかれているようですね。

f:id:cookie-box:20190101160814p:plain:w60

そこを読む限り、TrellisNet は TCN → TCN → TCN → TCN (多層 TCN)なんだけど、全ての TCN は重みを共有しているし、どの層にも入力データが injection されるんだね(右図)。なるほど格子にみえる。z_t^{(0)} はゼロベクトルね。

でも「これをみせられてもよい性能をもつとは思われないでしょう」と。まあこれだけぱっとみせられても何がいいのか、全ての TCN が重みを共有している意義は何なのかわからないね。でもこれが記憶をトランケートされた RNN の一般化になっていることをこの論文で示すらしい。それが優れている根拠になっているといいたいのかな。

f:id:cookie-box:20190101155733p:plain:w60

「RNN とみなせるから優れているのだ」ですか。RNN に一定の信頼があるのは確かでしょうが。イントロダクションの5段落目にあるのは TrellisNet の性能を検証したタスクですね。おそらく先の先行研究にならって選定されていると思われます。個々のタスクの出自やデータサイズなんかの詳細は Appendix C にあるようです。

  • 文字レベル Penn Treebank(PTB)
  • 単語レベル Penn Treebank(PTB)
  • 単語レベル WikiText-103(WT103) ― 大規模データとして採用されているようですね。
  • sequential MNIST
  • permuted MNIST
  • sequential CIFAR-10
そしてこのタスクのどれもで SOTA を達成したようです(厳密には WT103 については同時期に出た論文の transformer モデルに劣っているようですが)。これまでそれぞれ異なるモデルが SOTA を達成していた6タスクを TrellisNet が一気に塗り替えたのだというのが強調されていますね。

ところで sequential MNIST 以下はもう「系列モデルに対するスタンダードなストレステスト」とされていますが、手書き数字や写真って本来全てのピクセルを同時に認識でき、縦横のつながりも明らかなものですよね。明らかに CNN さんに学習させるべきですよね。それを出鱈目な順序でピクセルごとに流すような、無駄な曲芸のようなタスクを系列モデルにさせるのってパワハラに当たらないんですか?

TrellisNet
f:id:cookie-box:20201011140713p:plain:w200
f:id:cookie-box:20190101160814p:plain:w60

TrellisNet(乙)は私たち(甲)との間に「乙は甲に自然に系列としての構造をもつデータを学習する労務を提供すること」などという雇用契約は結んでいないからパワハラには当たらないね。雇用契約にない仕事をさせるのが問題になるからね。

f:id:cookie-box:20190101155733p:plain:w60

いや法律的な見解ではなく、本来は2次元としての構造をもつデータがベンチマークとなっているのはどうなのかといいたかったんですが…。2節の「背景」は短いですね。かいてある内容としては、

  • 再帰ニューラルネットって自然言語以外にも色々なドメインに利用されているよね(という感じでまたどばっと引用だけありますね)。
  • 畳込みニューラルネットも長期記憶が必要なタスクで優れているんだよね(ここでこの方たちの TCN を含んでどばっと引用がありますね)。
  • self-attention もあるよね(どばっと略)。
  • 今回は RNN と TCN の架け橋となるモデルを提案するよ。
といった感じでまあ何にせよ RNN と TCN を組み合わせるといった感じですが、RNN と TCN を組み合わせた先行研究も引用されていますね。ただどのようなものだったのか詳しくわかりませんね。TrellisNet の方が両者をより深く結びつけたのだということではあるんでしょうが。

f:id:cookie-box:20190101160814p:plain:w60

「convolutional LSTMs combine convolutional and recurrent units」というのは RNN ユニットと CNN ユニットを組み合わせたというようにみえるけどね。なら RNN の結果を CNN したり、CNN の結果を RNN したり、それこそ TCN → RNN → TCN → RNN のようなものなのかな。知らないけど。

f:id:cookie-box:20190101155733p:plain:w60

3節の SEQUENCE MODELING AND TRELLIS NETWORKS に進みます。冒頭では「系列モデルとは長さ T の系列を受け取って長さ T の系列を出すものであって t 番目の出力は未来の入力に依存してはいけないものとする」という TCN の論文同様の定義が示されています。その後にはもう TrellisNet が以下のように定式化されていますね。

  • 系列モデルの入力を  x_{1:T} = (x_1, \cdots, x_T) \in \mathbb{R}^{T \times p} とする。
  • 時刻 ti 層目の出力を  z_{t}^{(i)} \in \mathbb{R}^{q} とする(つまり何層目の出力であっても q 次元である)。  z_{t}^{(0)} はゼロベクトルとする。
  • TrellisNet の  z_{t+1}^{(i + 1)} \in \mathbb{R}^{q} のつくり方としては、まず  \tilde{z}_{t+1}^{(i + 1)} \in \mathbb{R}^{r} を下図のように線形結合で生成し(Conv1D とも解釈できますね)、  \tilde{z}_{t+1}^{(i + 1)}z_{t}^{(i)} に適当な非線形関数 f を適用して  z_{t+1}^{(i + 1)} とする。
f:id:cookie-box:20201011173741p:plain:w360
W_1W_2 はすべての i 層目で共通ですがら、x_tx_{t+1} を変換した  \tilde{x}_{t+1} = W_1^{x} x_t + W_2^{x} x_{t+1} は使い回せるとありますね(W_j^x \in \mathbb{R}^{r \times p})。

…いっていることはわかりますが、腑に落ちませんね。特に最終出力  z_{t+1}^{(i + 1)} = f \bigl( \tilde{z}_{t+1}^{(i + 1)}, z_{t}^{(i)} \bigr) について、なぜ  z_{t}^{(i)} を使うのか、f は具体的にどういった関数なのかという点です。f がわからなければ TrellisNet が何をするモデルなのかイメージすることは難しいと思います。もっといえばすべての層でウェイトを共有する理由だってわかりません。本文中には Vogel & Pock (2017) が画像処理で層方向のウェイトの共有をやっているとありますがだから何やら。

f:id:cookie-box:20190101160814p:plain:w60

3節の最後に LSTM セルに基づく活性化をするとあるよ。4節にその理論的根拠があるとあるけど、先に活性化の式がある 5.1 節をみてみようか。気になるしね。

f:id:cookie-box:20190101155733p:plain:w60

LSTM で活性化? LSTM は活性化関数ではないと思うんですが…5.1 節をみると、ゲート付き活性化というのがそもそもあるんですね? 5.1 節を読む限り、その LSTM に基づくゲート付き活性化というのは以下になるはずです。

f:id:cookie-box:20201011230518p:plain:w560
えっと、これは何なんでしょう。何やら LSTM めいてはいますが…。

f:id:cookie-box:20190101160814p:plain:w60

…もし「前回の入力」と「前回の前の層の出力」を使用しないなら、これは時刻 i から時刻 i+1 に進む LSTM だよね。ただし、実際には i とは何層目かであって時刻を表すインデックスではないけど。それに、実際には「前回の入力」と「前回の前の層の出力」が混ぜ込まれるし、いわば「入力とゲートに混ぜ物があり、他人の記憶を植え付けられた LSTM」かな。微塵も LSTM ではないな…。

f:id:cookie-box:20190101155733p:plain:w60

読み飛ばした 4 節に戻りますね。4.1 節は、TrellisNet と TCN の共通点と相違点について、「各層で未来のデータを参照せず畳込みを行うこと」「多層化するほど参照範囲が広がること」の2点は TCN と同様ですが、「各層の重みが共有されていること」「各層に入力データがインジェクションされること」は TCN と異なるといっていますね。それはまあそうですが。「各層の重みが共有されていること」は学習の安定化とモデルサイズの節約に寄与する正則化になっているとのことです。

その2があればつづく