なぜクエリとキーを掛け合わせることで、生徒と教師の類似性が得られるのでしょうか? その内部原理は何ですか?
注意メカニズムでは、乗算query
によって得られる類似度は、実際には 2 つのベクトル間の内積を計算することによって実現されます。key
具体的にはquery
、key
と で内積演算を行います [ここでの内積演算は、2 つのベクトル間の相関を数学的に測定できる類似度を測定する方法と見なすことができます。2 つのベクトルが似ているほど、内積は大きくなります。] を縮小係数self.soft
(通常は特徴次元の平方根) で割ると、対応するベクトル間のコサイン類似度が得られ、類似度スコアが得られます。
類似度の計算方法は?
内積演算に加えて、コサイン類似度と呼ばれるベクトルの類似度を測定するために一般的に使用される別の方法があります。
1.内積:
2. コサイン類似度:
Attention メカニズムでは、通常、クエリ ベクトルとキー ベクトルの類似度を計算するときに内積またはコサイン類似度が使用されます。たとえば、上記の式では、a はクエリ ベクトル (つまり、生徒ネットワークによって出力される特徴ベクトル) を表すことができ、b はキー ベクトル (つまり、教師ネットワークによって出力される特徴ベクトル) を表すことができます。
注:注意メカニズムについては、上記の式の計算方法に加えて、コサイン類似度を計算するときに正規化を実行して、出力重み行列が確率分布の定義に準拠していることを確認する必要もあります。一般的に使用される正規化方法には、ソフトマックス関数とシグモイド関数があります。
## 4、computer Q and K attention weight: batch_size X No. stu feature X No.tea feature
energy = torch.bmm(proj_query, proj_key)/self.soft
attention = F.softmax(energy, dim = -1)
コサイン類似度 / 畳み込みカーネル間のペアワイズ コサイン類似度_Similarity convolution_Ma Pengsen のブログ - CSDN ブログ