雑記

以下の記事を読みます。

その他の参考文献
※ キャラクターは架空のものです。私の誤りは私に帰属します。お気付きの点がありましたらコメントでご指摘ください。
f:id:cookie-box:20200531131544p:plain:w60

自然言語タスクを中心に威力を発揮している Transformer というモデルは、もっぱら Attention という仕組みのみを使用し、再帰も畳込みもしないのですよね? なるほど原論文のタイトルも「Attention こそがすべて」というわけですが…そもそもなぜ元々は再帰や畳込みをしていたんでしょう?

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

入力として系列データを受け取って何らかの出力をするタスクでは、本質的に「異なるステップの情報を束ねる」ことが必要だからでしょ。とても長い系列データを束ねるとなると、すべてを全結合するなんてできないから、素朴には「逐次的に束ねていく(再帰)」か「現在のステップに近い範囲を束ねる(畳込み)」かくらいしかないよね。

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

そういわれると再帰か畳込みをせざるを得ないような気がしてきました。しかし、では Transformer はいったい何をすると…? というのを解説するのが参照している記事ですが。最初に以下の式が出てきますね。

 h_t = u_t \odot h_{t-1} + (1- u_t) \odot \tilde{h}_t
これは、コンテクスト(とよんでしまいましょう) h_t が更新されていく式ですね。前回のコンテクスト h_{t-1} と新たなコンテクスト候補  \tilde{h}_t を、それぞれ重み u_t 1- u_t で混合しています。

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

その更新式はそのまま GRU だね。ただ、GRU の更新ゲートの表式は前回のコンテクストに  1 - z_t をかけて新たなコンテクスト候補に z_t をかける流儀が多いように思うけど。 GRU だったら新たなコンテクスト候補は  \tilde{h}_t = {\rm tanh} \bigl( U (r_t \odot h_{t-1} \bigr) + W x_t) になるね(r_t = \sigma(U_r h_{t-1} + W_r x_t) はリセットゲート)。

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

ええ、参照している記事ではリセットゲートのない GRU を想定しています。そして、上式のような更新式は shortcut connection(residual connection)と解釈できると。… u_t(1 - u_t) がなければ、 \tilde{h}_t は前回のコンテクストから今回のあるべきコンテクストまでの残差というのはわかりますが。この観点を掘り下げるためか、上の式を時間方向に展開していっていますね。

 h_t = (1- u_t) \odot \tilde{h}_t + u_t \odot  \bigl(  (1- u_{t-1}) \odot \tilde{h}_{t-1} + u_{t-1} \odot  h_{t-2} \bigr)
この式の展開は以下のようになるのではないかと思うのですが(ただし、開始インデックスの方が終了インデックスより大きい  \prod \astvector of ones とします)、参照している記事は違うような気がしますね? まあ置いておきましょう。コンテクストの初期値 h_0 の項もかいてみましたがゼロベクトルから始めるのであれば要りませんね。
 \displaystyle h_t = \sum_{i=1}^t \left( \prod_{j=i + 1}^{t} u_j \right) \odot (1 - u_i) \odot \tilde{h}_i + \left( \prod_{j=1}^{t} u_j \right) \odot h_0

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

ある時刻のコンテクスト候補 ★ が伝わっていく様子を図で描くとこうかな。

f:id:cookie-box:20200903234344p:plain:w360

つづいたらつづく