解答と解説を表示
<h4>Transformer: Scaled Dot-Product Attention とスケーリングの重要性</h4>
<p>TransformerのSelf-Attention機構では、Queryベクトル (Q) と Keyベクトル (K) の類似度を計算するために内積(Dot Product)がよく用いられます。しかし、単純な内積ではなく、<strong>Scaled Dot-Product Attention</strong> という、内積をスケーリング(調整)する手法が標準的に採用されています。</p>
<div class="section">
<h5>Scaled Dot-Product Attention の計算式</h5>
<p>Queryベクトル \(\mathbf{q}\) と Keyベクトル \(\mathbf{k}\) のアテンションスコアは、以下のように計算されます。</p>
<div class="formula">
$AttentionScore(\mathbf{q}, \mathbf{k}) = \frac{\mathbf{q} \cdot \mathbf{k}}{\sqrt{d_k}}$
</div>
<p>ここで、\(\mathbf{q} \cdot \mathbf{k}\) はベクトル \(\mathbf{q}\) と\(\mathbf{k}\)の内積、\(d_k\) はこれらのベクトルの次元数(Keyベクトルの次元数)を表します。この \( / \sqrt{d_k} \) の部分がスケーリング操作です。</p>
</div>
<div class="section">
<h5>なぜスケーリングが必要なのか?</h5>
<p>スケーリングが必要となる主な理由は、<strong>内積の値の大きさ</strong>と、後続の<strong>Softmax関数</strong>の性質に関係しています。</p>
<ul>
<li><strong>内積の値と次元数:</strong> QueryベクトルとKeyベクトルの各要素が平均0、分散1の独立なランダム変数であると仮定すると、それらの内積 \(\mathbf{q} \cdot \mathbf{k} = \sum_{i=1}^{d_k} q_i k_i\) の平均は0ですが、分散は \(d_k\) になります。つまり、<strong>ベクトルの次元数 \(d_k\) が大きくなるほど、内積の値(のばらつき)も大きくなる傾向</strong>があります。</li>
<li><strong>Softmax関数と勾配消失:</strong> アテンションスコアは、Softmax関数によって正規化され、アテンションウェイト(確率分布)に変換されます。Softmax関数 \( \text{softmax}(z_i) = e^{z_i} / \sum_j e^{z_j} \) は、入力値 \(z_i\) の絶対値が大きい領域では、その勾配が非常に小さく(ほぼ0に)なってしまいます。</li>
<li><strong>問題点:</strong> もしスケーリングを行わず、次元数 \(d_k\) が大きい場合に内積 \(\mathbf{q} \cdot \mathbf{k}\) が非常に大きな(あるいは非常に小さな)値をとると、Softmax関数への入力が飽和領域に入ってしまい、勾配が消失します。これは、誤差逆伝播による学習がうまく進まなくなり、モデルの収束を妨げる原因となります。</li>
</ul>
</div>
<div class="section">
<h5>スケーリングの効果</h5>
<p>内積を \(\sqrt{d_k}\) で割ることにより、内積の値の分散が次元数 \(d_k\) に依存しないように(分散を1程度に)調整されます。これにより、Softmax関数への入力が大きくなりすぎるのを防ぎ、<strong>勾配消失問題を緩和し、学習プロセス全体を安定化させる</strong>ことができます。<strong>(選択肢2が正しい)</strong></p>
</div>
<div class="section">
<h5>他の選択肢の評価</h5>
<ul>
<li>選択肢1: 次元数の影響を抑制しますが、完全に依存しなくするわけではありません。主目的は学習の安定化です。</li>
<li>選択肢3: このスケーリング操作は、計算量やメモリ使用量にはほとんど影響を与えません。</li>
<li>選択肢4: QueryとKeyの次元数を揃えることはAttention計算の前提ですが、スケーリングはそのための操作ではありません。</li>
</ul>
</div>
<p>したがって、Scaled Dot-Product Attentionにおけるスケーリングは、特に高次元のベクトルを扱う場合に、学習を安定させるための重要なテクニックです。</p>