Hayami Kaito Web
← Apps

アテンション(Transformer)

短い文の単語ごとに Query・Key・Value を作り、内積・softmax・重み付きの和でセルフアテンションを計算する様子を、行列の色で 1 段ずつ表示します。マスクや温度、複数のヘッドによる注目のしかたの違いも確かめられます。

文(語に区切ってあります)

語を選んで文を作る

10 語まで。

ヘッド

温度(スコアを割る数)

Query は位置エンコーディングを 1 つ前の位置へ回したもの、Key は位置エンコーディングそのもの。内積は 1 つ前の語でいちばん大きくなります。語順を知るために、実際のモデルにもよく現れる形です。

黒い1%猫7%が7%白い3%魚13%を54%食べ13%た3%
上の語(Query)を押すと、その語から下の語(Key)への重みを太い線と % で示します。薄い線はほかの語の重みです。

「食べ」の重み

いちばん注目した語: 「を」。散らばり(エントロピー) 2.15 ビット(1 語に集中で 0、全部に均等で 3.00)

「食べ」の意味の変化(Value の混ざり方)

生き物
元 0.30
出力 0.18
食べ物
元 0.50
出力 0.14
場所
元 0.00
出力 0.00
色
元 0.00
出力 0.04

計算の流れ

行ごとに softmax で 0〜1、合計 1 の重みにします。行の語が、どの語の情報をどれだけ取り込むかを表します。

黒い猫が白い魚を食べた
黒い0.250.060.140.130.020.020.160.22
猫0.570.140.030.070.070.010.010.09
が0.130.550.130.030.070.070.010.01
白い0.030.130.540.130.030.070.070.01
魚0.070.030.120.500.120.030.070.06
を0.060.070.030.120.500.120.030.07
食べ0.010.070.070.030.130.540.130.03
た0.010.010.070.070.030.130.550.13

マルチヘッド: 3 つのヘッドの重みを並べる

ヘッドごとに違う重み行列を持つので、同じ文でも注目のしかたが違います。実際のモデルは 1 層に 12〜100 個ほどのヘッドを持ち、それぞれの出力をつないで、もう 1 つの重み行列で混ぜます。

直前の語を見るヘッド

黒い猫が白い魚を食べた
黒い
猫
が
白い
魚
を
食べ
た

文法の役割を見るヘッド

黒い猫が白い魚を食べた
黒い
猫
が
白い
魚
を
食べ
た

意味の近さを見るヘッド

黒い猫が白い魚を食べた
黒い
猫
が
白い
魚
を
食べ
た

使い方

  • 文とヘッドを選び、線の図の上の語を押すと、その語がどの語に注目しているかを表示します。「語を選んで文を作る」から自分で文を組み立てることもできます。
  • 温度を下げると重みが 1 つの語に集中し、上げると均等に近づきます。因果マスクをオンにすると、各語は自分より前の語しか見られなくなります。
  • 「計算の流れ」で、埋め込みから出力までの行列を 1 段ずつ確かめられます。色が濃いほど値が大きく、橙は負の値です。
  • このアプリの重みは、しくみを見せるために手で決めたものです。実際のモデルは、大量の文章から重みを学習します。

アテンションとは

ChatGPT などの大規模言語モデルの土台である Transformer(2017 年)の中心にあるしくみです。文の各語について「ほかのどの語の情報をどれだけ取り込むか」を、語どうしの関係から毎回計算します。語ごとに Query(探しているもの)・Key(持っているもの)・Value(渡す中身)の 3 つのベクトルを作り、Query と Key の内積が大きい語ほど、その Value を多く取り込みます。

式で書くと Attention(Q, K, V) = softmax(QKᵀ / √dk)·V です。√dk で割るのは、次元が大きいと内積が大きくなりすぎて softmax が 1 つに偏るのを防ぐためです。すべての語の組を同時に計算できるので、語を 1 つずつ順に読む RNN より並列に速く学習でき、遠く離れた語どうしの関係もとらえられます。そのかわり、語の数の 2 乗の計算が必要になります。