主成分分析と自己注意機構

# 1 はじめに

「[生成ＡＩと物理学](https://qiita.com/mtanaka-kumw/items/34a9228e188524c8dbc5)」では2回にわたって物理学者 Tim Lou のブログ記事に触発されて生成ＡＩと物理学の類似性について考察した。そこでは大規模言語モデル（*LLM*）の主流なアーキテクチャーである *Transformer* の要となるアルゴリズム「自己注意機構（*Self-attenttion mechanism*）」が、物理系の粒子のダイナミックスをつかさどる運動方程式と同等な数学的形式、すなわちポテンシャル項の勾配によって粒子が駆動されるのと同様なスキームでトークンが潜在空間内で遷移する描像を描いた。その際、「世界知識」が凝縮されたポテンシャル項の係数行列 $M$ の影響下で周辺のトークンとの相互作用を繰り返すうちに、自らのベクトル成分にコンテキスト情報が蓄積され、入力時にトークンが持つ本来の辞書的概念だけでなく文脈に沿った概念が形成されていった。さらにマルチヘッドアテンション（*Multi-head attention*）によってセグメント化されたトークンベクトルの各々に、後々のタスクに有用になる特徴量情報を有機的に格納することになる。そして *LLM* がある一定規模に達すると、ある種の協同効果（*Synergetic effect*）が現れ「創発」を誘発し、これまでできなかった様々なタスクが実現される。あの記事ではそういった描像を描いてきたが、単に物理系の運動方程式との類推だけで、あたかも意識を持つかのような反応を示す *LLM* の謎が解明されるべくもなく、これは可能性の一端と解明に向けてのヒントを示したに過ぎない。

話は変わって、かねてより著者は自己注意機構と主成分分析の類似性に注目していた。自己注意機構を詳細に検討したこの機会を利用して、本稿では自己注意機構と主成分分析の類似性と、その類似性に基づいた主成分分析における自己注意機構の応用を述べてみたい。

# 2 主成分分析（ PCA: *Principal Component Analysis*）

[主成分分析](https://qiita.com/mtanaka-kumw/items/d620c92d3a2c1543911c)は、データの分散が大きい方向から順に直交基底をとり、それらの基底からなるデータ空間の部分空間（多様体）からデータを眺める統計手法である。次元削減、それを利用したデータ圧縮、高次元データの可視化などに用いられる。
<!--
かねてからこの主成分分析と自己注意機構（*Self-attention mechanism*）の類似性に興味を抱いていたが、今回、その共通性が明らかになったので論じてみたい。
-->

## 2.1 【アナロジー】

まず、自己注意機構（*Self-attention mechanism*）に登場するトークン $\boldsymbol{t}\_i (i=1,\cdots,N)$ を主成分分析の分析対象となるデータ群とみなし、データ行列を

```math
X = \left( \boldsymbol{t}_1, \cdots, \boldsymbol{t}_N \right) ^{T}
\quad・・・\quad(15)
```

と定義し、データ行列から作られる共分散行列を

```math
S = \frac{1}{n-1} X^{T}X
\quad・・・\quad(16)
```

とする。なお、数式番号は前回の記事「[生成ＡＩと物理学](https://qiita.com/mtanaka-kumw/private/34a9228e188524c8dbc5)」シリーズに引き続いて連番を振っていることを断っておく。

自己注意機構（*Self-attention mechanism*）におけるトークン $\boldsymbol{t}\_i$ の更新式(3)において、 $\boldsymbol{t}\_i$ 自身も右辺第２項の和に取り込むと

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

と書き換えられる。ここで、自己注意機構（*Self-attention mechanism*）で訓練によって得られるパラメータ行列 $Q, K, V$ を恒等行列 $I_p$ とおく。すなわち

```math
Q = K = V = I_p
\quad・・・\quad(18)
```

としてみよう。 
これに伴い、(5)式から

```math
M = V \left( Q^{T}K \right)^{-1} = I_p \left( I_p^{T}I_p \right)^{-1} = I_p
\quad・・・\quad(19)
```

となる。
(18)式を考慮すると、(17)式の右辺は

```math

\begin{equation}
\begin{split}

\sum_{k} V \boldsymbol{t}_{k} a_{i,k} \to \sum_{k} I_p \boldsymbol{t}_{k} a_{i,k}
&= \sum_{k} \boldsymbol{t}_{k} a_{i,k} \\
&= \left( \boldsymbol{t}_{1}, \cdots, \boldsymbol{t}_{N} \right)

\begin{pmatrix}
a_{i,1} \\
\vdots \\
a_{i,N} \\
\end{pmatrix}

= X^{T} \boldsymbol{a}_{i}

\quad・・・\quad(20)

\end{split}
\end{equation}
```

となる。ここで、

```math
\boldsymbol{a}_{i} = \left( a_{i,1}, \cdots, a_{i,N} \right) ^{T}
\quad・・・\quad(21)
```

である。
また、(2)式で与えられるアテンション重み $a_{i,k}$ は、(18)式を考慮して

```math

\begin{equation}
\begin{split}

a_{i,k} 

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

=
\frac{\exp{ \left(I_p \boldsymbol{t}_{i} \cdot I_p \boldsymbol{t}_{k} \right) }}
{\sum_{k} \exp{ \left(I_p \boldsymbol{t}_{i} \cdot I_p \boldsymbol{t}_{k} \right) }} 

=
\frac{\exp{ \left( \boldsymbol{t}_{i} \cdot \boldsymbol{t}_{k} \right) }}
{\sum_{k} \exp{ \left( \boldsymbol{t}_{i} \cdot \boldsymbol{t}_{k} \right) }}

\quad・・・\quad(22)

\end{split}
\end{equation}

```

となる。これは、 $\boldsymbol{t}\_{i}$ と $\boldsymbol{t}\_{k}$ の類似度 $\boldsymbol{t}\_{i} \cdot \boldsymbol{t}\_{k} = \boldsymbol{t}\_{i}^{T} \boldsymbol{t}\_{k}$ をスコア（*logit*）として *Softmax* 関数を通して確率を計算したものである。
一方、(16)式に(15)式を代入すると

```math

\begin{equation}
\begin{split}

S 
&= \frac{1}{n-1} X^{T}X
=
\frac{1}{n-1} \left( \boldsymbol{t}_1, \cdots, \boldsymbol{t}_N \right) ^{T} \left( \boldsymbol{t}_1, \cdots, \boldsymbol{t}_N \right) \\

&=
\frac{1}{n-1}
\begin{pmatrix}
\boldsymbol{t}_{1}^{T} \boldsymbol{t}_{1} & \cdots & \boldsymbol{t}_{1}^{T} \boldsymbol{t}_{N} \\
\vdots & \ddots & \vdots \\
\boldsymbol{t}_{N}^{T} \boldsymbol{t}_{1} & \cdots & \boldsymbol{t}_{N}^{T} \boldsymbol{t}_{N}  \\
\end{pmatrix} \\

&=
\begin{pmatrix}
Cov[\boldsymbol{t}_{1}, \boldsymbol{t}_{1}] & \cdots & Cov[\boldsymbol{t}_{1}, \boldsymbol{t}_{N}] \\
\vdots & \ddots & \vdots \\
Cov[\boldsymbol{t}_{N}, \boldsymbol{t}_{1}] & \cdots & Cov[\boldsymbol{t}_{N}, \boldsymbol{t}_{N}] \\
\end{pmatrix} 
\quad・・・\quad(23)

\end{split}
\end{equation}

```

となり、共分散行列の成分はトークン間の共分散であることがわかる。
よって、主成分分析では、(22)式で与えられるアテンション重み $a_{i,k}$ をトークン間の共分散 $Cov[\boldsymbol{t}\_{i},\boldsymbol{t}\_{k} ]$ に置き換えたものと解釈できる。アテンション重み $a_{i,k}$ も共分散 $Cov[\boldsymbol{t}\_{i},\boldsymbol{t}\_{k} ]$ も２つのトークン $\boldsymbol{t}\_{i},\boldsymbol{t}\_{k}$ 間の類似性を示す尺度であるから、この置き換えは正当なものである。

以上から、主成分分析の共分散行列はアテンション重み行列とみなせる。

```math
S = 
\begin{pmatrix}
a_{1,1} & \cdots & a_{1,N} \\
\vdots & \ddots & \vdots \\
a_{N,1} & \cdots & a_{N,N} \\
\end{pmatrix}

= \left( \boldsymbol{a}_{1}, \cdots, \boldsymbol{a}_{N} \right)
\quad・・・\quad(24)
```

ただし、この場合のアテンション重み $a_{i,k}$ は(22)式で与えられるような確率ではなく、(23)式に示すような共分散 $Cov[\boldsymbol{t}\_{i},\boldsymbol{t}\_{k} ]$ である。

> コラム：固有ベクトルとマルチヘッドアテンションの類似性
>
> 共分散行列 $S$ の固有ベクトルは、データの特徴量空間の基底の線形結合になっている。もう少しくだけた言い方に直すと、固有ベクトルはデータの特徴量（たとえば、データポイントが個々の患者データだとすると、特徴量は性別、年齢、診断名、検査結果、・・・などである）の合成特徴量ベクトルになっている。これは、自己注意機構（*Self-attention mechanism*）のマルチヘッドアテンションに類似している。なぜなら、Fig.7（「[生成ＡＩと物理学（その２）](https://qiita.com/mtanaka-kumw/private/f4458597b5bd68e98b37)」のFig.7）に示すように、マルチヘッドアテンションの各ヘッダにはトークンの基本的な情報（構造、品詞、意味、・・・）が集約され、自己注意機構（*Self-attention mechanism*）から生成された潜在ベクトルは、主成分分析の固有ベクトルのように、特徴量の合成ベクトルになっているからである。ただし、固有ベクトルがどの特徴量をどの程度含んでいるかは人が決めるものではなく、データによって決まるものであったように、潜在ベクトルの各ヘッドの機能は人が設計できるものではなく、訓練コーパスからの学習によって形成されるものである。したがって、潜在ベクトルがどのようにトークン情報を構造化（組織化）しているのかは人間にはわからない。

# 3 主成分分析の拡張

主成分分析の応用である次元削減（あるいはその適用であるデータの可視化）は、通常、第１主成分得点～第２主成分得点（あるいは第３主成分得点）に限定して特徴量空間にデータポイントをマップし、データのクラスタリングの状況を把握したり、データの特性を解釈する。
アイデアとして、マップするデータポイントを主成分得点ではなく、(14)式を利用して、特徴量 $i$ を潜在空間の状態ベクトル $\boldsymbol{h}\_{i}$ に変換してプロットするとどうなるだろか。潜在空間の状態ベクトルを表す(14)式を主成分分析の文脈で表すと

```math

\begin{equation}
\begin{split}

\boldsymbol{h}_{i} 
&= MQ^{T}K \sum_{k} \boldsymbol{t}_{k} a_{i,k} 
= V \sum_{k} \boldsymbol{t}_{k} a_{i,k} 

\quad・・・\quad(25)

\end{split}
\end{equation}

```

となる。(24)式との違いは、 $\boldsymbol{t}_{i}$ 自身も(24)式の右辺第２項の和に取り込んでいる点である。
(25)式において、(18)式を代入すると

```math

\begin{equation}
\begin{split}

\boldsymbol{h}_{i} 
&= I_{p} I_{p}^{T} I_{p} \sum_{k} \boldsymbol{t}_{k} a_{i,k} 
= I_{p} \sum_{k} \boldsymbol{t}_{k} a_{i,k} 
= \sum_{k} \boldsymbol{t}_{k} a_{i,k} 

\quad・・・\quad(26) \\

a_{i,k} &= Cov[\boldsymbol{t}_{i},\boldsymbol{t}_{k} ]

\quad・・・\quad(27)

\end{split}
\end{equation}

```

を得る。
状態ベクトル $\boldsymbol{h}\_{i}$ はどのような意味を持つのだろうか。*GPT* の場合、 $\boldsymbol{h}\_{i}$ は次トークンの予測に適した情報を持つであろう。*BERT* の場合、 $\boldsymbol{h}\_{i}$ は文脈を反映したトークンの意味情報を持つだろう。では、主成分分析の場合はどのような情報を持つだろうか。おそらく、データポイントの特徴量セット全体を加味した（反映した）意味情報を持つものと思われる（Fig.9）。

![Fig9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538461/b231bc9a-f82b-475f-f853-91404033e45f.png)

たとえば、個人の関心度をアンケート調査したときのある特徴量－たとえば性別－と、患者の血液検査の結果を収集したデータに含まれる特徴量である「性別」には異なる特徴が現れるのではないだろうか。その違いを表現するのがこの潜在空間上の状態ベクトルだ $\boldsymbol{h}\_{i}$ と思われる。

特徴量空間上でのデータポイント $\boldsymbol{t}\_{i}$ と状態ベクトル $\boldsymbol{h}\_{i}$ の関係を Fig.10 に示す。

![Fig10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538461/4848a617-c85c-40c7-8c1b-e873ba93714e.png)

# 4 Transformer ベースの主成分分析

実際に主成分分析の分析対象であるデータを学習データにして、*Transformer* アーキテクチャを通してこれらのデータを学習する。つまり、$Q, K, V$ を $I_p$ とおくのではなく、データから学習させる。ただし、正解データはないので、*BERT* 風に *Masked Language Model* で自己教師あり学習を行う（任意のデータをマスクして、*Transformer* に推測させ、推測結果をマスクを外したデータで答え合わせをする）。そのようにして作成した潜在空間上の状態ベクトル $\boldsymbol{h}\_{i}$ はどうなるだろうか。 $\boldsymbol{t}\_{i}$ と $\boldsymbol{h}\_{i}$ を統計的に比較して本物そっくりのサンプルが生成できないか評価してみるとよい。
特に、医療データは要配慮個人情報のため、取得や利用については本人の同意が必要なので、入手が困難である。そこで、この *Transformer Based PCA* (*TB-PCA*) を利用して本物そっくりの検査データが生成できれば、医療系学生（医師、看護師、検査技師、診療情報管理士、医療情報技師など）の教育に利用できる。そのほか、一般に入手困難な模擬データセットを作成できる。

# 5 おわりに

本稿ではかねてよりの著者の考え－それは妄想かもしれないが－にあった *Transformer* の自己注意機構（*Self-attention mechanism*）と主成分分析（PCA: *Principal Component Analysis*）の類似性に着目して*Transformer* ベースの主成分分析なるものを提案した。