位置エンコーディングPositional Encoding
場所ごとに順番の印を付ける方法
- 位置エンコーディングは、断片ごとに何番目の場所かを示す印を付ける作業です。
- なぜ必要かというと、すべての場所を一度に見る方式には順番の概念がそもそもないからです。
- 印は別に置かれるのではなく、元の内容に足されて一つの塊として入っていきます。
- 決まった規則で作った印を使うこともあれば、学習で自然に決めさせることもあります。
- 最近は絶対的な何番目かより、二つの場所がどれだけ離れているかを込める方式が広く使われています。
目次
1たとえで理解する
劇場のチケットには座席番号が書かれています。この番号がなかったらどうなるでしょう。観客は全員入っていますが、誰が前列で誰が後列かわかりません。人数は同じで顔ぶれもそのままなのに、順番だけが消えてしまうのです。位置エンコーディングは、この座席番号をチケットに書き込む作業です。
番号は観客と別々に扱われません。チケット一枚に座席番号と観覧する人の情報が一緒に書かれています。位置エンコーディングも同じで、断片の内容に順番の印を足して一つの塊にします。
座席番号が付いた瞬間、「前列の人は後列の人より舞台に近い」といった関係が生まれます。番号があってはじめて、距離も前後も語れるのです。
2くわしく
順番を失ってしまう構造
文を一語ずつ順に渡しながら処理していた以前の方式には、順番の問題がありませんでした。処理する順番がそのまま順番だったからです。その代わり遅かったのです。
今使われている方式は、すべての場所が互いを一度に見ます。おかげでとても速くなりましたが、代償が生まれました。全員が同時に互いを見ると、誰が先に出てきたのかわかりません。「犬が猫を追いかけた」と「猫が犬を追いかけた」が、同じ単語の集まりに見えてしまいます。
そのため文を入れる前に、順番の印を付けておく必要があります。この印がなければ、単語の順番をいくら入れ替えてもモデルの結果は変わりません。
番号を内容に足します
印は断片の横に別々に付くのではありません。断片の内容を表す数字の並びに、同じ大きさの順番の数字の並びを足して一つにします。すると、その場所の値には「何であるか」と「何番目か」が一緒に入ることになります。
足して混ぜても構わない理由は、収める場所に十分な余裕があるからです。数字の並びの項目は数百から数千あり、内容と順番が互いに違う方向へ収まる余地があります。学習を経て、モデルは二つを見分けて読む方法を身につけます。
印を作る二つの系統
最初に提案された方式は、人が決めた規則で印を作りました。いくつもの周期の波を重ねて、場所ごとに違う模様が出るようにするやり方です。学習が要らず、学習時に見たことのない長さにもそのまま番号を振れるという利点があります。
もう一つの系統は、印そのものを学習で決めさせる方式です。場所ごとに数字の並びを一つずつ用意し、学習中に値が合うようにします。データに合った印が得られますが、あらかじめ用意した場所数を超えると、付ける番号がなくなります。
絶対番号より二つの間の距離
何番目かをそのまま記す方式には弱点があります。同じ文が文書の前のほうにあるか後ろのほうにあるかで番号がまったく変わってしまいますが、実際に大事なのは「この単語とあの単語が何マス離れているか」であることが多いのです。
そこで最近は、二つの場所の距離そのものが計算に表れるように作った方式が広く使われています。場所の番号に応じて値を少しずつ回転させ、二つの場所を見比べるときに自然とその間の距離が反映されるようにする方法です。前後どこに置かれても同じ間隔なら同じ関係として読まれるので、長い文章でずっと安定します。
座席数を超えると
学習のときに見たことのない、とても遠い場所番号が入ってくると、モデルが揺らぎます。劇場にない座席番号が書かれたチケットを受け取ったようなものです。文章が急に不自然になったり、前の部分を見失ったりすることが起きます。
コンテキストウィンドウを広げる作業が単に数字を大きくするだけの問題ではない理由がここにあります。印を広い範囲に合わせて調整し直し、伸びた長さで少し追加学習させる過程が一緒に必要です。
3もう少し正確に
位置エンコーディングは、各トークンの埋め込みに位置の情報を持たせたベクトルを足すか、アテンションの計算段階で位置関係を反映させる技法です。最初に提案された方式は、いくつもの周期のサインとコサインの値を場所ごとに違う形で配置した固定方式で、場所ごとに学習されるベクトルを置く方式も広く使われました。今の大きなモデルの多くが使う方式は、クエリとキーを場所番号の分だけ回転させ、二つの場所の相対距離が自然に反映されるようにする回転方式です。
たとえがずれる点もあります。劇場の座席番号は整数一つですが、位置エンコーディングは場所ごとに数百個の値からなる並びです。また座席番号は観客の情報と別々に記されますが、位置エンコーディングは内容の値に足され、見た目では区別できないように混ざります。何より劇場の座席は番号が重なってはいけませんが、位置の印は値が完全に違ってさえいればよく、順番どおりに大きくなる必要もありません。
4やってみる
5よくある誤解
モデルが単語の順番を当然知っていると思われがちですが、実際には順番の印を別に付けてやらないと、単語を入れ替えても結果は同じになります。
位置の印が断片の横に別々に付くと見なされがちですが、実際には内容の値に足されて一つの塊として入ります。
コンテキストの長さは設定を変えるだけで伸びると思われがちですが、実際には印を広い範囲に合わせて手直しし、追加の学習をしてやる必要があります。
7ひとこと要約
つまり位置エンコーディングは劇場の座席番号のように、断片ごとに何番目かを示す印を付け、順番を知らない構造に前後の概念を取り戻す方法です。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02