生成ＡＩと物理学（その１）

# 1 はじめに
2023年は ChatGPT に代表される生成 AI ブームに明け暮れた。数十年後に振り返ってみるとき、この年は科学技術史上でも大きなターニングポイントとして語り継がれるであろう。
ChatGPT が見せつけた威力は、ある人をして、ついに AI は意識を獲得したのだと言わしめるかと思いきや、いや、単に確率にしたがって単語を紡いでいるだけだという人もいる。その判定は歴史に委ねるしかないが、スティーブン・ウルフラム（Stephen Wolfram）の著書「[ChatGPTの頭の中](https://www.hayakawa-online.co.jp/shopdetail/000000015521/)」とティム・ロウ（Tim Lou）のブログ記事 "[*Understanding Large Language Models: The Physics of (Chat)GPT and BERT*](https://towardsdatascience.com/understanding-large-language-models-the-physics-of-chat-gpt-and-bert-ea512bcc6a64)" に触発されて大規模言語モデル（LLM: *Large Language Model*）の意味文法の獲得とそのダイナミクスに想像をめぐらしたので、考えを整理し、本記事を執筆した。

# 2 物理学者が見た生成 AI（LLM）
スティーブン・ウルフラムもティム・ロウも物理学者である。AI 科学者には物理学者が多い。エントロピーやポテンシャルなど AI 理論には物理学由来の専門用語も多い。とにかく AI と物理学は親和性が高いようだ。Tim Lou はそのブログ記事で LLM の中心的アーキテクチャーである Transformer と粒子の運動をつかさどる運動方程式の類似性を指摘し、物理学が ChatGPT などの生成 AI の複雑な振る舞いを解明できるのではないかと示唆している。
彼の主張はこうだ。言語は根本的な構成要素である文字（symbols）から出発し、それを組み合わせた単語（words）、その単語からなる文（sentences）、節（passages）、本（books）、そして巻（volumes）が生成される。物理でも同じ階層構造が見られる。それは、クォーク（quarks）や電子（electrons）などの素粒子（elementary particles）、力を媒介する光子（photons）、これらの素粒子や力からなる原子（atoms）、さらに原子が組み合わさってできる大量の分子（molecules）、化合物（structures）、細胞（cells）、そして生物（beings）が形作られる。物理の世界では、一見、全く異なる起源にも拘わらず、多くの複雑な系に一種の「創発」現象が見られる。固体-液体-気体の相転移や超電導などがその好例である。物理学の根本粒子は簡単な運動方程式によって記述されるにも拘わらず、それらが組み合わさって複雑なシステムになると、ある複雑さを臨界点としてこのような創発現象が現れるのである。ある程度の規模の LLM がそれまでと打って変わって格段にタスクをこなし始める創発現象は、この物理の世界のアナロジーで解明されるのではないか。それが Tim Lou らの物理学者の見解である。
以降は、この Tim Lou の考えをベースに著者なりの考えを交えて LLM と物理学の類似性を見ていく。

# 3 自己注意メカニズム（*Self-attention mechanism*）
LLM の文脈では単語をトークンと言う。厳密には単語とトークンは異なる概念であるが、ここでは拘らない。ChatGPT や BERT など、現在主流な生成 AI が依拠するアーキテクチャーである Transformer の中核は自己注意メカニズム（*self-attention mechanism*）が担っている。Transformer の詳細は[文献](https://arxiv.org/pdf/1706.03762.pdf)に譲るとして、ここでは self-attention が物理学における粒子の運動方程式と類似していることを示す。
Transformer では何層にもわたって self-attention が適用され、入力層から入ってきたトークンが潜在空間内であたかも周辺の多数の粒子の相互作用を受けるかのように次々に周囲の文脈情報を吸収してそのベクトル成分を更新し、最終的に出力層から出ていく。そして、辞書的な概念だけでなく、文脈情報をそのベクトル要素にたっぷりと埋め込まれた出力トークンが、ユーザが意図した様々なタスクをこなす。まず、その様子を記述することからはじめよう。

各層で $i$ 番目のトークン $\\boldsymbol{t}_{i}$ を選ぶと、それは以下の自己注意メカニズム（*self-attention mechanism*）に従って更新される（複数の注意ヘッドは無視する）。

```math
\boldsymbol{t}_{i} \to 
\boldsymbol{t}_{i} + 
\frac{\sum_{k \ne i} \exp{ \left(Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) } V\boldsymbol{t}_{k}}
{\sum_{k \ne i} \exp{ \left(Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }}
\quad・・・\quad(1)
```

アテンション重み $a_{i,k}$ は次式で与えられる。

```math
a_{i,k} = \frac{\exp{ \left(Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }}
{\sum_{k \ne i} \exp{ \left(Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }}
\quad・・・\quad(2)
```

これを用いると、(1)式は次のように表される。

```math
\boldsymbol{t}_{i} \to \boldsymbol{t}_{i} +
\sum_{k \ne i} V\boldsymbol{t}_{k} a_{i,k}
\quad・・・\quad(3)
```

アテンション重み $a_{i,k}$ は、トークン $\boldsymbol{t}\_i$ と $\boldsymbol{t}\_k$ がどれくらい関係あるかを示す指標（内積 $Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_k$）を　Softmax 関数で規格化（確率化）したもので（Fig.1）、これを使って $\boldsymbol{t}_k$ の情報（$V\boldsymbol{t}_k$）の $a\_{i,k}$ で与えられる割合だけを $\boldsymbol{t}_𝑖$ に取り込んでいる（Fig.2）。これによって、トークン $\boldsymbol{t}_𝑖$ は文脈情報（周辺のトークンが形成する情報）を学習する。

![Fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538461/9848059e-89ae-2e91-6542-98e1fb86c835.png)

![Fig2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538461/a5088e10-481d-3d76-938a-caefe265dfc8.png)


ここで、行列 $Q, K, V$ はその要素が学習によって作られる行列で、LLM の学習戦略によってその内容は変わってくる。たとえば、次トークンを予想する学習戦略（自己回帰学習）では、GPT のようにトークン $\boldsymbol{t}_𝑖$ から次トークンを予想するのに有益な情報を引き出すような行列が形成されるだろうし、BERT のような MLM（*Masked Language Modeling*）では、文脈に沿った有益なトークン情報を引き出すような行列が形成されるだろう。

# 4 ポテンシャル

重要なのは、指数形式は一種のポテンシャル項の微分として書き直せるということである。

```math
\boldsymbol{t}_{i} \to 
\boldsymbol{t}_{i} + M \cdot \nabla_{\boldsymbol{t}_i} 
\ln {\left[ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right)} \right]}
\quad・・・\quad(4)
```

```math
M = V(Q^{T}K)^{-1}
\quad・・・\quad(5)
```

(1)式が(4)式のようなポテンシャルの勾配に沿ってトークン $\boldsymbol{t}_i$ が更新される式に書き換えられることを示す。

まず、

```math

\begin{equation}
\begin{split}

\nabla_{\boldsymbol{t}_i} 
\ln {\left[ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) } \right]}
&=
\frac{\nabla_{\boldsymbol{t}_i} \lbrace \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) } \rbrace}
{ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }} \\
&=
\frac{ \sum_{k \ne i} \lbrace 
\nabla_{\boldsymbol{t}_i}\left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) 
\rbrace
\exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right)}
}
{ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }}

\quad・・・\quad(6)

\end{split}
\end{equation}

```

ここで、

```math
\boldsymbol{t}_i = \left( t_{1,i}, \cdots, t_{p,i} \right)^{T} 
```
```math
Q = 
\begin{pmatrix}
q_{1,1} & \cdots & q_{1,p} \\
\vdots & \ddots & \vdots \\
q_{p,1} & \cdots & q_{p,p} \\
\end{pmatrix},

K = 
\begin{pmatrix}
k_{1,1} & \cdots & k_{1,p} \\
\vdots & \ddots & \vdots \\
k_{p,1} & \cdots & k_{p,p} \\
\end{pmatrix},

V = 
\begin{pmatrix}
v_{1,1} & \cdots & v_{1,p} \\
\vdots & \ddots & \vdots \\
v_{p,1} & \cdots & v_{p,p} \\
\end{pmatrix}

```

とおくと

```math

\begin{equation}
\begin{split}

\nabla_{\boldsymbol{t}_i} \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right)

&=

\begin{pmatrix}
\frac{\partial}{\partial t_{1,i}} \\
\vdots \\
\frac{\partial}{\partial t_{p,i}} \\
\end{pmatrix}

\left[

\begin{pmatrix}
q_{1,1} & \cdots & q_{1,p} \\
\vdots & \ddots & \vdots \\
q_{p,1} & \cdots & q_{p,p} \\
\end{pmatrix}

\begin{pmatrix}
t_{1,i} \\
\vdots \\
t_{p,i} \\
\end{pmatrix}

\right]^T

\begin{pmatrix}
k_{1,1} & \cdots & k_{1,p} \\
\vdots & \ddots & \vdots \\
k_{p,1} & \cdots & k_{p,p} \\
\end{pmatrix}

\begin{pmatrix}
t_{1,k} \\
\vdots \\
t_{p,k} \\
\end{pmatrix} \\

&=

\begin{pmatrix}
\frac{\partial}{\partial t_{1,i}} \\
\vdots \\
\frac{\partial}{\partial t_{p,i}} \\
\end{pmatrix}

\begin{pmatrix}
\sum_{n=1}^{p} q_{1,n} t_{n,i} \\
\vdots \\
\sum_{n=1}^{p} q_{p,n} t_{n,i} \\
\end{pmatrix}^T

\begin{pmatrix}
\sum_{n=1}^{p} k_{1,n} t_{n,k} \\
\vdots \\
\sum_{n=1}^{p} k_{p,n} t_{n,k} \\
\end{pmatrix} \\

&=

\begin{pmatrix}
\frac{\partial}{\partial t_{1,i}} \\
\vdots \\
\frac{\partial}{\partial t_{p,i}} \\
\end{pmatrix}

\sum_{m=1}^{p} \sum_{n=1}^{p} q_{m,n} t_{n,i} \sum_{n'=1}^{p} k_{m,n'} t_{n',k}

\quad・・・\quad(7)

\end{split}
\end{equation}

```

となる。

ここで、(7)式の最後の項の第 $l$ 成分の微分は

```math

\begin{equation}
\begin{split}

\frac{\partial}{\partial t_{l,i}} \sum_{m=1}^{p} \sum_{n=1}^{p} q_{m,n} t_{n,i} \sum_{n'=1}^{p} k_{m,n'} t_{n',k}

&=

\sum_{m=1}^{p} \sum_{n=1}^{p} q_{m,n} \frac{\partial t_{n,i}}{\partial t_{l,i}} \sum_{n'=1}^{p} k_{m,n'} t_{n',k} \\

&=

\sum_{m=1}^{p} \sum_{n=1}^{p} q_{m,n} \delta_{n,l} \sum_{n'=1}^{p} k_{m,n'} t_{n',k} \\

&=

\sum_{m=1}^{p} q_{m,l} \sum_{n=1}^{p} k_{m,n} t_{n,k} \\

&=

\left( q_{1,l}, \cdots, q_{p,l} \right)

\begin{pmatrix}
\sum_{n=1}^{p} k_{1,n} t_{n,k} \\
\vdots \\
\sum_{n=1}^{p} k_{p,n} t_{n,k} \\
\end{pmatrix} \\

&=

\boldsymbol{q}_{l}^{T} K \boldsymbol{t}_{k}

\quad・・・\quad(8)

\end{split}
\end{equation}

```

となる。したがって

```math

\begin{equation}
\begin{split}

\begin{pmatrix}
\frac{\partial}{\partial t_{1,i}} \\
\vdots \\
\frac{\partial}{\partial t_{p,i}} \\
\end{pmatrix}

\sum_{m=1}^{p} \sum_{n=1}^{p} q_{m,n} t_{n,i} \sum_{n'=1}^{p} k_{m,n'} t_{n',k}

&=

\begin{pmatrix}
\boldsymbol{q}_{1}^{T} K \boldsymbol{t}_{k} \\
\vdots \\
\boldsymbol{q}_{p}^{T} K \boldsymbol{t}_{k} \\
\end{pmatrix} \\

&=

\begin{pmatrix}
\boldsymbol{q}_{1}^{T}  \\
\vdots \\
\boldsymbol{q}_{p}^{T}  \\
\end{pmatrix}
K \boldsymbol{t}_{k} \\

&=

Q^{T} K \boldsymbol{t}_{k}

\quad・・・\quad(9)

\end{split}
\end{equation}

```

となり、これを(7)式に代入すると、最終的に

```math

\nabla_{\boldsymbol{t}_i} \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right)

= Q^{T} K \boldsymbol{t}_{k}

\quad・・・\quad(10)
```

を得る（Fig.3参照）。

![Fig3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538461/795111d1-57ca-cf45-f185-1cbd2d0260e4.png)


(6)式に(10)式を代入すると

```math

\nabla_{\boldsymbol{t}_i} 
\ln {\left[ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) } \right]}

=

\frac{ \sum_{k \ne i} 

Q^{T} K \boldsymbol{t}_{k}

\exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right)}
}
{ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }}

\quad・・・\quad(11)

```

となり、(11)式に左から $V(Q^T K)^{−1}$ を掛けると

```math

\begin{equation}
\begin{split}

V(Q^T K)^{−1} \nabla_{\boldsymbol{t}_i} 
\ln {\left[ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) } \right]}

&=

V(Q^T K)^{−1}

\frac{ \sum_{k \ne i} 

Q^{T} K \boldsymbol{t}_{k}

\exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right)}
}
{ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }} \\

&=

\frac{ \sum_{k \ne i} 

V \boldsymbol{t}_{k}

\exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right)}
}
{ \sum_{k \ne i} \exp{ \left( Q\boldsymbol{t}_{i} \cdot K\boldsymbol{t}_{k} \right) }} 

\quad・・・\quad(12)

\end{split}
\end{equation}

```

を得る。

(5)式 $M=V(Q^T K)^{−1}$ を用いると(12)式の左辺は(4)式の右辺第２項に一致し、 (12)式の右辺の最終項は(1)式の右辺第２項に一致し、(1)式は(4)式のようにポテンシャル項の微分として書き直せることが証明できた。

# ここまでの整理

本稿では、Tim Lou のブログ記事にしたがって、 LLM の中心的なアーキテクチャー Transformer の要となるアルゴリズムである自己注意メカニズムが、物理学の粒子を記述する運動方程式と同様にポテンシャル項の微分として書き直せることを見てきた。つまり、LLM のトークンダイナミックスは物理系の粒子の運動と同じ数学的形式にしたがって支配されているという興味深い事実を見出だした。
次回はトークンダイナミックスを支配する方程式(4)のポテンシャル項の係数 $M$ の意味するところを考察し、トークンが潜在空間でどのような動きをしているかを考察する。


生成 AI と物理学（その２）へ [:arrow_upper_right:](https://qiita.com/mtanaka-kumw/items/f4458597b5bd68e98b37) 


# 参考文献
1. スティーヴン・ウルフラム：ChatGPTの頭の中. 早川書房, 2023/7.
2. Tim Lou：Understanding Large Language Models: The Physics of (Chat)GPT and BERT. https://towardsdatascience.com/understanding-large-language-models-the-physics-of-chat-gpt-and-bert-ea512bcc6a64 (2023.11.19 確認)
3. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin: Attention Is All You Need. arXiv preprint arXiv:1706.03762, 2017, https://arxiv.org/pdf/1706.03762.pdf（2023.11.19 確認）