クエリ・キー・値もよく聞くがよく分からないやつだ。
ちょっと雰囲気で読むと、ドット積 Attention をエンコーダの出力シーケンスに適用したものを素朴に抽象化すると
\begin{align*}
\mathrm{Attention}(Q, K, V) = \left[ \mathrm{softmax}(QK^T) \right] V
\end{align*}
で、$\mathrm{softmax}(QK^T)$ の部分が Attention ウェイトになっていて、これを $V$ にかけこむと、重要な値が抽出される感じだということ。まぁ、ちょっと転置するところが後ろに移動したりしている部分が気になるが、ちょっと気にしないことにするとそんな感じかな?という気はする。計算の都合で Attention ウェイトをスケールすると
\begin{align*}
\mathrm{Attention}(Q, K, V) = \left[ \mathrm{softmax} \left(\frac{QK^T}{\sqrt{d_k}} \right) \right] V
\end{align*}
という [1706.03762] Attention Is All You Need の式 (1) の形になる。なんかあの謎の式の雰囲気は分かったような・・・気がする。
Positional Encoding については Transformer の位置エンコーディング - らんだむな記憶 で少し触れた。
6/08_transformer_torch.py を K80 上で実行したところ、30 エポックで 15 分だった。思ったより早い・・・。
epoch: 30 loss: 0.531, val_loss: 2.12 > she doesn 't have any <unk> . = <s> 彼女 に は 敵 は い な い 。 </s> < <s> 彼女 に は 急 が な い 。 </s> は 。 </s> </s> </s> </s> </s> </s> </s> </s> > she played the piano well enough . = <s> 彼女 は かなり うま く ピアノ を 弾 い た 。 </s> < <s> 彼女 は 料理 が 十分 だ 。 </s> し た 。 </s> </s> </s> </s> </s> </s> </s> </s> > i don 't like sad movies . = <s> 私 は 悲し い 映画 は 嫌い だ 。 </s> < <s> 私 は 映画 が 好き で は な い 。 </s> 、 馬鹿 だ 。 </s> </s> </s> </s> > i 'll be here by monday . = <s> 月曜 日 まで に ここ に 来 て い ま す 。 </s> < <s> 月曜 から ここ に 来 ま す 。 </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>
結果の良し悪しは分からない部分もあるが、ここまでの他のモデルと比べてもそこまで悪くもないだろう。
付録の部分はよくある内容なので飛ばすことにして、p.438 まで完了ということにする。
この後は、以下のような感じだろうか?
- [1706.03762] Attention Is All You Need をじっくり読み込む。
- ソースコード中に色々
print
を突っ込んで理解を深めてみる。 - Transformer の実装 - らんだむな記憶 で触れた他の実装と比較してみる。
- BERT を通じて理解を深めてみる。例えば PyTorch の Transformer ライブラリ - らんだむな記憶 や、BERTによる自然言語処理入門 Transformersを使った実践プログラミング | Ohmsha が参考になるのではないかと期待している。