AI解剖教室 · Part 5 アテンション完全攻略
第48章 割ってからソフトマックス
Q. 関連度スコアをそのままソフトマックスしてはだめなのでしょうか? なぜわざわざ1回割るのでしょう?
- 第47章で「行く」がつけたスコアは2, −1, 3, 1でした。あれ? 第14章で見たスコア3, 2, 1, −1と同じ数ですね。
- そのままソフトマックスすると、第14章とまったく同じになります。学校に65.7%、私は24.2%、行く8.9%、今日1.2%。
- でもアテンションは、その前にもう1ステップします。スコアを√dで割るのです。dはQ、Kのベクトルの欄の数です。
- この例は2欄なので√2、約1.41で割ります。2は1.41、−1は−0.71、3は2.12、1は0.71になります。
- 割ったスコアでソフトマックスすると、学校に55.7%、私は27.5%、行く13.5%、今日3.3%。さっきよりかたよりが減りました。
- なぜ割るのでしょう? 欄が多いと内積は大きくなります。128欄のベクトルだと、スコアが20や−14のように大きくなり、1語がほぼ100%を取ります。
- こんなにかたよると、スコアを少し変えても結果が変わらず、学習がうまく進みません(第21章)。√128 ≈ 11.3で割ると、また平らに分かれます。
- これで「行く」が、語ごとに見つめる割合が決まりました。次の章では、この割合どおりにValueをまぜます。
この章のまとめ
- スコアを√dで割ってからソフトマックスする。d = Q、Kの欄の数。
- 欄が多いと内積が大きくなり、そのままだと1語がほぼ100%を取ってしまう。
- √dで割ると、欄の数に関係なく割合がほどよく分かれ、学習がうまく進む。