🐒

Stanford NLP with Deep Learning Lecture8のまとめ

2023/06/14に公開

1.はじめに

今回も引き続き、Stanford大学のNLP with DeepLearningの講義についてまとめていきたいと思います。今回は前回、前々回と異なりボリュームがかなり少なくなっています。
というのも3分の2近くが講義の最終課題についての説明だったので、この記事の目的の趣旨とは異なると判断したためです。
ただ、最終課題における課題設定の部分やデータマイニングの部分はかなり自分たちにとっても考慮すべきだなと思う点がかなりあったりと勉強になる内容でした。
なので本稿は講義全体のまとめというより、前回の最後に登場したSeq2SeqとAttentionを組み合わせたものの延長性のような内容になっています。

2.Attentionについて

2-1:Seq2SeqとAttention

Attentionのスタートとして、前稿でも少し触れたSeq2SeqとAttentionを組み合わせたモデルについて数式を中心に触れていきたいと思います。
まず、このモデルとしては以下のような流れでAttentionを利用しています。
(1) Attention scoreの算出
(2) Attention probabilitiesの取得
(3) Attention Weightの算出
(4) Attention WeightとDecoderの出力の接続

これらについてそれぞれの内部でおこわれている計算について見ていきます。
また、その際にEncoder,Decoderの隠れ層のベクトルについては以下のように表すとします。

  • Encoder hidden state
    \mathbf{h}_1, \mathbf{h}_2, \cdots , \mathbf{h}_N \in \mathbb{R}^h
  • t地点におけるDecoder hidden state
    \mathbf{s}_t \in \mathbb{R}^h

(1)Attention score

\mathbf{e}^t = [\mathbf{s}_t^T\mathbf{h}_1, \mathbf{s}_t^T\mathbf{h}_2, \cdots, \mathbf{s}_t^T\mathbf{h}_N] \in \mathbb{R}^N

ここでは各単語とDecoderが見ている単語(t地点)の内積を取ることでどの単語とDecoderの対象としている単語が関係しているかを表す値を求めています。

(2)Attention probabilities

\mathbf{\alpha}^t = Softmax(\mathbf{e}^t) \in \mathbb{R}^N

(1)でもとめたscoreを元に確率分布に変換するためにsoftmax関数を用いて確率を算出しています。

(3)Attention weight

\mathbf{a}_t = \displaystyle\sum_{n=1}^N \alpha_i^T\mathbf{h}_i \in \mathbb{R}^h

(2)の値を元に重み付き和を計算します。

(4)出力の接続

[\mathbf{a}_t;\mathbf{s}_t] \in \mathbb{R}^{2h}

ここから機械翻訳タスクであれば、翻訳後の単語を生成していきます。

2-2:Attentionの凄さ!!

Attention内部について述べたので、次はAttentionの導入によって得た恩恵について述べていきます。

機械翻訳のパフォーマンスが劇的に向上した

⇨人間が翻訳する時と同様に翻訳する単語ごとに翻訳前の文章を参照できるようになったため

Seq2Seqの抱えるbottle neck問題を解決した

⇨それまで翻訳前のテキスト情報をEncoderの最終層の出力のみ用いてDecoderに渡していたため、系列長が長くなるにつれて情報量が減少するという対して、Attentionによって各単語のベクトル情報も参照できるようになり、系列長の長さによって情報量が損なわれる心配がなくなったため

勾配消失問題にも対処した

Attentionによって毎回Encoderのベクトル情報を参照しているため逆伝播の時も系列長の長さが長くなっても勾配が消失しにくくなったため

解釈性が増した

それまでモデル内部における翻訳過程が不明瞭であったがAttentionの計算途中で用いたAttention distributionを用いることでどの単語に注目しているか等の確認が簡単に行えるようになった

2-3:Attentionの発展系

これまではEncoderの隠れ層とDecoderの隠れ層のシンプルな内積を用いたAttentionについて述べてきました。
次は、さらにそこからAttention scoreの算出方法を工夫することで発展したさまざまなAttentionについて述べていきます。(Self Attentionについては次の講義になるのでCross Attentionについて述べていきます)

1. Basic dot-product attention

式(1)で表されるAttentionで最もシンプルなAttention scoreの算出方法

\begin{align} e_i &= \mathbf{s}_t^T\mathbf{h}_i \in \mathbb{R} \tag{1} \\ &[\mathbf{h} \in \mathbb{R}^{d1}:values(Encoderの隠れ層), \mathbf{s} \in \mathbb{R}^{d2}:query(Decoderの隠れ層)] \end{align}

算出方法がシンプルである一方、\mathbf{s}_t\mathbf{h}_iの次元が等しいという仮定のもと計算しているので適用できない時があります。

2. Multiplicative attention

式(2)で表される1の弱点に対応させたAttention scoreの算出方法

\begin{align} e_i &= \mathbf{s}_t^T\mathbf{W}\mathbf{h}_i \in \mathbb{R} \tag{2} \\ &[\mathbf{W} \in \mathbb{R}^{d2 \times d1}:重み行列] \end{align}

重み行列で次元の調整をしてあげることで1の問題点を解決したAttentionです。
1の問題は解決できた一方でこの手法は、Encoder,Decoderの隠れ層の次元が増加すればするほどパラメータの数が増加していくため計算コストの問題点がありました。

3. Reduced rank multiplicative attention

式(3)で表される1の弱点に対応させたAttention scoreの算出方法

\begin{align} e_i &= \mathbf{s}_t^T(\mathbf{U}^T\mathbf{V})\mathbf{h}_i \\ &= (\mathbf{U}\mathbf{s}_t)^T(\mathbf{V}\mathbf{h}_i ) \in \mathbb{R} \tag{3} \\ &[\mathbf{U} \in \mathbb{R}^{k \times d2},\mathbf{V} \in \mathbb{R}^{k \times d1}, k<<d1,d2] \end{align}

この手法は2の課題であった計算コストの問題に対して重み行列のランクを下げることで計算コストの増加を抑制し、解決しました。これはTransformerにおけるAttentionでも利用されている手法です。

4. Additive attention

最後にニューラルネットを模倣したAttention scoreの算出方法について述べていきます。

\begin{align} e_i &= \mathbf{v}^Ttanh(\mathbf{W}_1\mathbf{h}_i+\mathbf{W}_2\mathbf{s}_t) \in \mathbb{R} \tag{4} \\ &[\mathbf{W}_1 \in \mathbb{R}^{d3 \times d1}, \mathbf{W}_2 \in \mathbb{R}^{d3 \times d2}, \mathbf{v} \in \mathbb{R}^{d3}, d3:ハイパラ] \end{align}

このAttentionについては似たような算出方法のAttentionはあっても同じなものがなかったのでなにが優れているとかっていうのがいまいちよくわかりませんでした。
ただ、講義中で教授がなまえひどいよね!変えた方がいいよって言ってたのが印象的でした。

3.おわりに

今回はAttentionとは?という部分にフォーカスした記事になりました。
次の講義から講師の方が変わったり、いよいよTransformerに関わってくる部分になってくるので楽しみですね。
余談ですが、最近梅雨入りして毎日低気圧による頭痛と眠気でモチベが落ちててまずいです、、
天候なんかに負けず、これまで以上にがんばらないと!!!って感じですね

4.参考資料

[1]Stanford CS224N NLP with Deep Learning | Winter 2021 | Lecture 8 - Final Projects; Practical Tips

Discussion