Open kawase621 opened 3 years ago
@kawase621 さま
ご質問ありがとうございます。
ここは本書のなかでもややこしく、申し訳ございません。
まず本章で引用しているプログラムと、SAGANの論文の式に記載を合わせている関係で(Beta_Tを明示的に出すために)、 実装コードが■質問2のようになっています。
そして、■質問1に回答するためには、さらに考える必要がありますが、 ご指摘の通り、解説が誤っています。
P.268の説明の中で、8行目に「行方向にソフトマックス関数を計算」とありますが 完全に @kawase621 さまのご指摘の通りであり、
Sについて行方向のソフトマックスではなく、結果的にβに対して行方向にソフトマックスされるように、 Sについては列方向でソフトマックス関数を計算しております。
丁寧に追って、また共有いただき、ありがとうございます。 本Issueに誤植ラベルをはり、他の読者の皆様の参考にさせてください。
重要なご質問を誠にありがとうございます。
修正
P.268の説明の中で、8行目 「行方向にソフトマックス関数を計算し」
↓
P.268の説明の中で、8行目 「列方向にソフトマックス関数を計算し」
および、図5.3.2の「行方向で正規化し転置」 ↓ 「列方向で正規化し転置」
本件、納得しました。 お忙しい中、ご回答ありがとうございます。
respect author: hello I find a question: in your book, you achieve the SAGAN as: but at this most stars github file(https://github.com/heykeetae/Self-Attention-GAN/blob/master/sagan_models.py) as: please notice the red box, i don't sure that do Transpose to the attention map or not?
お忙しいところ恐れ入りますが、P.268〜P.269のSelf-Attentionの実装について2点、質問させて下さい。
■質問1 P.268の説明の中で、8行目に「行方向にソフトマックス関数を計算」とありますが、βを求める式からすると、Sに対して「列方向にソフトマックス関数を計算」し、それがβの「行方向の」要素になるように読めます。 実装上も、Sに対して「nn.Softmax(dim=-2)」が適用されており、これはSの「列方向」にソフトマックス関数を計算していることになると思うのですが、いかがでしょうか? 結果的にβは、転置されることで行方向にソフトマックス関数が計算されたものになるとの理解です。
■質問2 Attention Mapは以下のように2回転置されていますが、これは何故でしょうか? 1回目の転置がなければ、oを求める際も転置が必要ないように思うのですが。