ブログ

行列式と置換②:置換(permutation)の合成と使用例の確認

線形代数の枠組みで$n$次正方行列の行列式(determinant)を取り扱うにあたっては置換(permutation)という概念を抑えておく必要があります。当記事では置換(permutation)の合成の概要と具体的な使用例の確認について取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$4$章「行列式」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

置換の合成

置換の定義

置換$\sigma$は下記のように表される。
$$
\large
\sigma :
\begin{cases}
1 \longmapsto 3 \\
2 \longmapsto 5 \\
3 \longmapsto 2 \\
4 \longmapsto 4 \\
5 \longmapsto 1
\end{cases}
$$

$\sigma$は下記のように表す場合もある。
$$
\large
\begin{align}
\sigma = \left[ \begin{array}{ccccc} 1 & 2 & 3 & 4 & 5 \\ 3 & 5 & 2 & 4 & 1 \end{array} \right]
\end{align}
$$

上記の詳細は下記で取り扱った。
https://www.hello-statisticians.com/math_basic/matrix_permutation2.html

置換の合成

置換$\sigma$を作用させた後に置換$\tau$を作用させる置換を$\sigma$と$\tau$の合成といい、$\tau \sigma$のように表す。基本的に置換は演算子$\nabla$のように右から作用させるので、$\tau \sigma$の場合は$\sigma, \, \tau$の順に置換の処理が行われる。

置換の使用例

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$053$

・$[1]$
$$
\large
\begin{align}
\sigma = \left[ \begin{array}{cccc} 1 & 2 & 3 & 4 \\ 3 & 2 & 4 & 1 \end{array} \right], \, \tau = \left[ \begin{array}{cccc} 1 & 2 & 3 & 4 \\ 2 & 4 & 3 & 1 \end{array} \right]
\end{align}
$$

「$1 \longmapsto 3 \longmapsto 3$」、「$2 \longmapsto 2 \longmapsto 4$」、「$3 \longmapsto 4 \longmapsto 1$」、「$4 \longmapsto 1 \longmapsto 2$」のように置換処理を行うので、合成置換$\tau \sigma$は下記のように表される。
$$
\large
\begin{align}
\tau \sigma = \left[ \begin{array}{cccc} 1 & 2 & 3 & 4 \\ 3 & 4 & 1 & 2 \end{array} \right]
\end{align}
$$

・$[2]$
$$
\large
\begin{align}
\sigma = \tau = \left[ \begin{array}{ccccc} 1 & 2 & 3 & 4 & 5 \\ 2 & 3 & 5 & 1 & 4 \end{array} \right]
\end{align}
$$

「$1 \longmapsto 2 \longmapsto 3$」、「$2 \longmapsto 3 \longmapsto 5$」、「$3 \longmapsto 5 \longmapsto 4$」、「$4 \longmapsto 1 \longmapsto 2$」、「$5\longmapsto 4 \longmapsto 1$」のように置換処理を行うので、合成置換$\tau \sigma$は下記のように表される。
$$
\large
\begin{align}
\sigma = \tau = \left[ \begin{array}{ccccc} 1 & 2 & 3 & 4 & 5 \\ 3 & 5 & 4 & 2 & 1 \end{array} \right]
\end{align}
$$

ResNet(Deep Residual Network)の構成の詳細とベンチマークまとめ

ResNetはCNNに基づくDeepLearningにResidual Blockを導入することで層の深いCNNの学習を可能にしたアーキテクチャです。当記事では現在画像認識タスクなどでデフォルトに用いられることが多いResNetの構成の詳細とベンチマークについて取りまとめを行いました。
当記事の作成にあたっては、ResNet論文や「深層学習 第$2$版」の第$5$章「畳み込みニューラルネットワーク」の内容などを参考にしました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

畳み込み演算の概要

畳み込み演算の数式

フィルタサイズ$W_{f} \times H_{f}$を用いた畳み込みによって出力の$(i,j)$成分$u_{ij}$が計算されるとき、入力に対応する$x$とフィルタに対応する$h$を元に$u_{ij}$は下記のように計算されます。
$$
\large
\begin{align}
u_{ij} = \sum_{p=0}^{W_f-1} \sum_{q=0}^{H_f-1} x_{i+p,j+q} h_{pq}
\end{align}
$$

上記は入力のチャネルとフィルタの枚数が$1$の場合の畳み込みに対応しますが、入力のチャネル数が$C$、フィルタの枚数$C_{out}$枚のとき畳み込みによって出力の$u_{ijk}$成分は下記のように計算されます。
$$
\large
\begin{align}
u_{ijk} = \sum_{c=1}^{C} \sum_{p=0}^{W_f-1} \sum_{q=0}^{H_f-1} x_{i+p,j+q,c} h_{pqck} + b_{k}
\end{align}
$$

上記の$c$は入力のチャネルのインデックス、$k$はフィルタのインデックスにそれぞれ対応します。フィルタのインデックスと出力のチャネルのインデックスが一致することも合わせて確認しておくと良いです。

Resの構成とパフォーマンス

Residual Block

ResNet論文 Figure$\, 2$

ResNetでは上図のResidual Blockが導入されたことが特徴的です。入力$\mathbf{x}$に対応するパラメータ処理を$\mathcal{F}$と表す場合、AlexNetやVGGNetのようなResNet以前のDeepLearningでは出力を$\mathcal{F}(\mathbf{x})$で計算するのに対し、ResNetでは下記のように計算を行います。
$$
\large
\begin{align}
\mathcal{F}(\mathbf{x}) + \mathbf{x}
\end{align}
$$

このような計算を行うことにより、層の深いDeepLearningにおける勾配消失(vanishing gradients)/勾配爆発(exploding gradients)問題を緩和することが可能になります。たとえば中間層における入力を$\mathbf{h}_{l}$、出力を$\mathbf{h}_{l+1}$とおくとき、Residual Blockの式に基づいて$\mathbf{h}_{l+1} = \mathcal{F}(\mathbf{h}_{l}) + \mathbf{h}_{l}$のように処理が表されます。

このとき、誤差逆伝播の式における$\displaystyle \frac{\partial \mathbf{h}_{l+1}}{\partial \mathbf{h}_{l}}$は下記のように得られます。
$$
\large
\begin{align}
\frac{\partial \mathbf{h}_{l+1}}{\partial \mathbf{h}_{l}} = \frac{\partial \mathcal{F}(\mathbf{h}_{l})}{\partial \mathbf{h}_{l}} + \mathbf{1} \quad (1)
\end{align}
$$

一方でResidual Blockを用いないオーソドックスなDeepLearningにおける$\displaystyle \frac{\partial \mathbf{h}_{l+1}}{\partial \mathbf{h}_{l}}$は下記のように計算されます。
$$
\large
\begin{align}
\frac{\partial \mathbf{h}_{l+1}}{\partial \mathbf{h}_{l}} = \frac{\partial \mathcal{F}(\mathbf{h}_{l})}{\partial \mathbf{h}_{l}} \quad (2)
\end{align}
$$

$(2)$式ではある層のパラメータが全て$0$に近くなった場合、$\displaystyle \frac{\partial \mathbf{h}_{l+1}}{\partial \mathbf{h}_{l}} \simeq 0$となり、誤差逆伝播における以降の勾配が全て零ベクトル/零行列となります。

ある層のパラメータが全て$0$に近くなる場合も$(1)$式が用いられていればそれまでの勾配が等倍されるので勾配が保存されます。

VGG-19とResNetの対応

ResNetの構造は下図のようなVGG-$19$との対応を元に理解すると良いです。

ResNet論文 Figure$\, 3$

プーリングとダウンサンプリング

前項「VGG-$19$とResNetの対応」の図でVGG-$19$とResNetの対応の確認を行いましたが、一番左のVGG-$19$ではプーリングを行なっているのに対し、真ん中と右側ではプーリングではなくストライドを$2$にすることでダウンサンプリングを行なっていることに注意が必要です。

入門書などのCNNの解説では「畳み込み」と「プーリング」がセットで解説されることが多い一方で、ストライドが$2$以上の畳み込みの二つの処理が代用されることが多くなっているようです1

bottleneck構造とResNetの層の数

オーソドックスなResNetでは$3 \times 3$の畳み込みが$2$回繰り返されるところを、$1 \times 1$、$3 \times 3$、$1 \times 1$の$3$回に置き換えた構造をbottleneck構造といいます。bottleneck構造は下図のように表されます。

ResNet論文 Figure$\, 5$

上記のbottleneck構造を元に、ResNetの構成は下記のようなパターンを持ちます。

ResNet論文 Table$\, 1$

ResNetのパフォーマンス

ResNet論文 Table$\, 4$
ResNet論文 Table$\, 5$

参考

・ResNet論文
・VGGNet論文

  1. 深層学習 第$2$版 $5.4$節 P.$87 \,$ l.$4$〜$5$ ↩︎

同変性(equivariance)と不変性(invariance)の定義と具体例に基づく解釈

点群(point clouds)の取り扱いやCNN(Convolutional Neural Network)を用いた画像処理の理解にあたって、同変性(equivariance)と不変性(invariance)を抑えておくと良いです。当記事では同変性と不変性の定義や具体的な処理例に基づく解釈について取りまとめを行いました。
当記事の作成にあたっては、「深層学習 第$2$版」の$5.7.1$「同変性と不変性」の内容などを参考にしました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

同変性と不変性の定義

同変性(equivariance)の定義

DeepLearningの学習結果に基づく推論は基本的に「入力$\mathbf{x}$に関数$f$を作用させて特徴量$\mathbf{x}’=f(\mathbf{x})$を得る」という流れで処理が行われる。このとき変換の$g$に対し、「関数$f$が同変である」場合、下記の式が成立するように変換$g’$が存在する。
$$
\large
\begin{align}
f(g(\mathbf{x})) = g'(f(\mathbf{x}))
\end{align}
$$

上記の変換$g’$は$g$に一致する場合もある。たとえば「畳み込み演算$f$」における「並進移動」を$g$とおくと、$f$がプーリングのようなダウンサンプリングを伴わない場合、$g’$は$g$に一致する。

不変性(invariance)の定義

$\mathbf{x}’=f(\mathbf{x})$に基づく特徴量の取得にあたって、変換$g$について下記が成立する場合、「$g$について$f$が不変である」という。
$$
\large
\begin{align}
f(\mathbf{x}) = f(g(\mathbf{x}))
\end{align}
$$

たとえば点群のような集合データにおける並び替えを$g$、PointNetやSet TransformerのようなDeepLearningに対応する関数を$f$とする場合、並び替えによって結果は変わらないので$f$は$g$について不変(invariant)である。

同変性と不変性の解釈

同変性(equivariance)は「畳み込み演算$f$」における「平行移動$g$」のように入力も出力も一定の順序で配置される場合に出てくると理解しておくとよい。一方、不変性(invariance)は「点群などの集合データ」に対して「Set Transformerのような演算$f$」を行う際の「並び変え$g$」や、「GAP(Global Average Pooling)を伴うCNNに対応する関数$f$」と「平行移動$g$」について成立するので、最終的に和を計算する場合などに成立しやすいと解釈しておくと良い。

「点群」などの処理に用いられるSet Transformerは下記で取り扱った。

ISAB(Induced Set Attention Block)とSet Transformer

点群(point clouds)のような集合の入力(input set)の処理にあたってTransformerを用いた研究にSet Transformerがあります。当記事ではISAB(Induced Set Attention Block)などを中心にSet Transformer論文の取りまとめを行いました。
「Set Transformer: A Framework for Attention-based Permutation-Invariant Neural Networks」や「深層学習 改定第$2$版」の第$7$章「集合・グラフのためのネットワークと注意機構」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

Transformerの概要

Dot Product Attentionに主に基づくTransformerの仕組みについては既知である前提で当記事はまとめました。下記などに解説コンテンツを作成しましたので、合わせて参照ください。

・直感的に理解するTransformerの仕組み(統計の森作成)

Transformerの基本式

Transformerの基本的な処理であるDot Product Attentionを$\mathrm{Attention}(Q, K, V)$とおくと、$\mathrm{Attention}(Q, K, V)$は下記のような式で表されます。
$$
\large
\begin{align}
\mathrm{Attention}(Q, K, V) &= \mathrm{Softmax} \left( \frac{Q K^{\mathrm{T}}}{\sqrt{d}} \right) V \quad (1) \\
Q & \in \mathbb{R}^{m \times d}, K \in \mathbb{R}^{n \times d}, \, V \in \mathbb{R}^{n \times d} \\
Q K^{\mathrm{T}} & \in \mathbb{R}^{m \times n}, \, \mathrm{Attention}(Q, K, V) \in \mathbb{R}^{m \times d}
\end{align}
$$

Transformerでは基本的に$K=V$であり、さらにEncoderなどのSelf Attentionでは$Q=K=V$である場合が多いです。上記では$Q \neq K, \, K = V$の場合の立式を行いました。計算結果の$\mathrm{Attention}(Q, K, V)$が$\mathrm{Attention}(Q, K, V) \in \mathbb{R}^{m \times d}$のように$K, V$ではなく$Q$と同じサイズの行列が得られることに注意が必要です。また、$(1)$式における$\sqrt{d}$は$\mathrm{Softmax}$の計算結果が極端にならないように導入されます。

次に、Multi Head Attention演算を$\mathrm{Multihead}(Q, K, V)$のようにおくと、$\mathrm{Multihead}(Q, K, V)$は$(1)$式を元に下記のように定義されます。
$$
\large
\begin{align}
\mathrm{Multihead}(Q, K, V) &= \mathrm{concat}(O_1, \cdots , O_h)W^{O} \\
O_i &= \mathrm{Attention}(QW_{i}^{Q}, KW_{i}^{K}, VW_{i}^{V}) \\
O_i & \in \mathbb{R}^{m \times d_v}, \, \mathrm{concat}(O_1, \cdots , O_h) \in \mathbb{R}^{m \times h d_v} \\
W_{i}^{Q} & \in \mathbb{R}^{d \times d_k}, \, W_{i}^{K} \in \mathbb{R}^{d \times d_k}, W_{i}^{K} \in \mathbb{R}^{d \times d_v} \\
W^{O} & \in \mathbb{R}^{h d_v \times d} \\
d &= h d_{k} = h d_{v} \\
\mathrm{Multihead}(Q, K, V) & \in \mathbb{R}^{m \times d}
\end{align}
$$

Set Transformer

Multihead Attention Block

Set Transformerの論文ではMulti Head Attentionが下記のような$\mathrm{MAB}(X, Y)$で定義されます。
$$
\large
\begin{align}
\mathrm{MAB}(X, Y) &= \mathrm{LayerNorm}(H + \mathrm{FFN}(H)) \\
H &= \mathrm{LayerNorm}(X + \mathrm{Multihead}(X, Y, Y)) \\
X \in \mathbb{R}^{m \times d}, \, Y & \in \mathbb{R}^{n \times d}, H \in \mathbb{R}^{m \times d}, \, \mathrm{FFN}(H) \in \mathbb{R}^{m \times d}, \, \mathrm{MAB}(X, Y) \in \mathbb{R}^{m \times d}
\end{align}
$$

$\mathrm{MAB}(X, Y)$の$\mathrm{MAB}$はMultihead Attention Blockの略です。Set Transformerの論文では$\mathrm{MAB}(X, Y)$が下図のようにも表されます。

Set Transformer論文 Figure$\, 1, (b)$

Multihead Attention Blockの理解にあたっては、出力の$\mathrm{MAB}(X, Y)$の行列のサイズが$X$の行列のサイズに一致することに注意しておくと良いです。$X$は通常のTransformerの$Q, K, V$の$Q$に対応します。

Set Attention Block

Set Transformerの論文ではSet Attention Blockの$\mathrm{SAB}(X)$を下記のように定義します。
$$
\large
\begin{align}
\mathrm{SAB} = \mathrm{MAB}(X, X)
\end{align}
$$

上記の式はSet Transformerの論文では下記のように図式化されます。

Set Transformer論文 Figure$\, 1, (c)$

$\mathrm{SAB}(X)$はTransformerのEncoderにおける$Q=K=V$のSelf Attentionと同様の処理であると理解すると良いです。

Induced Set Attention Block

Set Transformerの論文ではInduced Set Attention Blockを表す$\mathrm{ISAB}_{m}(X)$が下記のように定義されます。
$$
\large
\begin{align}
\mathrm{ISAB}_{m}(X) &= \mathrm{MAB}(X, H) \\
H &= \mathrm{MAB}(I, X) \\
X & \in \mathbb{R}^{n \times d}, \, I \in \mathbb{R}^{m \times d}, \, H \in \mathbb{R}^{m \times d}, \, \mathrm{ISAB}_{m}(X) \in \mathbb{R}^{n \times d}
\end{align}
$$

上記の式はSet Transformerの論文では下記のように図式化されます。

Set Transformer論文 Figure$\, 1, (d)$

ISABの式は、「通常のTransformerにおけるAttentionの計算量が$\mathcal{O}(n^{2})$であり、点が多くなると処理が難しい」ので、「計算量が$\mathcal{O}(mn)$になるように$m$個のinducing pointsを導入しベクトル表現を$I \in \mathbb{R}^{m \times d}$のように定義した」と解釈すると良いです。また、ここで$\mathrm{MAB}$の演算を二回繰り返すことで、$\mathbb{R}^{n \times d} \longrightarrow \mathbb{R}^{m \times d} \longrightarrow \mathbb{R}^{n \times d}$のように元の$X$と同じ行列のサイズに戻すことができることも合わせて抑えておくと良いです。

ここで導入した$I \in \mathbb{R}^{m \times d}$はSet Transformerのパラメータ(trainable parameters)であり、Multi Head Attentionの写像計算のパラメータやFFNのMLP処理のパラメータと同様にTransformerの学習の際に値の推定が行われます。

Pooling

点群のように点の集合のPooling処理を取り扱う際に「CNNのような局所的なPoolingを行うことができない」点について注意が必要です。よって、点の集合のPoolingにあたっては全ての点の「平均」や「最大値」を計算することが一般的です。

一方で、Set TransformerではMultihead Attentionを用いたPooling(PMA; Pooling by Multihead Attention)が行われます。

Set Transformer論文ではPoolingによって$n$個の点を$k$個に集約する場合、下記のようなMultihead Attentionの処理が実行されます。
$$
\large
\begin{align}
\mathrm{PMA}_{k}(Z) &= \mathrm{MAB}(S, FFN(Z)) \\
S & \in \mathbb{R}^{k \times d}, \, Z \in \mathbb{R}^{n \times d}
\end{align}
$$

上記の$Z$は$X$の処理結果に対応し、$S$は前項の$I$のようにSet Transformerにおける学習パラメータです。

多くの場合は$k=1$が用いられる一方で、クラスタリング(clustering)のようなタスクの場合は$k > 1$が用いられることも合わせて抑えておくと良いです。$k=1$の場合は下記で取り扱ったグラフ分類と概ね同様なイメージで理解すると良いと思います。

Overall Architecture

SABを用いる場合

Set Attention Blockを用いる場合のEncoderとDecoderの計算例は複数のSABなどを用いて下記のように表されます。
$$
\large
\begin{align}
\mathrm{Encoder}(X) &= \mathrm{SAB}(\mathrm{SAB}(X)) = Z \\
\mathrm{Decoder}(Z) &= FFN(\mathrm{SAB}(\mathrm{PMA}_{k}(Z))) \\
X & \in \mathbb{R}^{n \times d}, Z \in \mathbb{R}^{n \times d}, \, \mathrm{Decoder}(Z) \in \mathbb{R}^{k \times d}
\end{align}
$$

ISABを用いる場合

EncoderにInduced Set Attention Blockを用いる場合もSet Attention Blockを用いる場合と同様に複数の$\mathrm{ISAB}_{m}$を用いて下記のように計算例が定義されます。
$$
\large
\begin{align}
\mathrm{Encoder}(X) &= \mathrm{ISAB}_{m}(\mathrm{ISAB}_{m}(X)) = Z \\
X & \in \mathbb{R}^{n \times d}, Z \in \mathbb{R}^{n \times d}
\end{align}
$$

Positional Encoding

Set Transformerでは基本的に前節で取り扱ったTransformerのアーキテクチャを用いる一方で、Positional Encodingは用いないことに注意が必要です。点群のような集合は入力間に順序がない(permutation invariant)ので、位置をEncodingするPositional Encodingの必要がありません。

むしろ「元々のTransformerには位置の情報がない一方で機械翻訳などのNLPタスクでは順序を取り扱う必要がありPositional Encodingが導入された」ので、Transformerのアルゴリズム自体は点群のような集合の取り扱いにより即していると解釈することもできると思います。

参考

・Transformer論文:Attention is All you need[2017]
・Set Transformer論文


行列式と置換①:置換(permutation)の定義と使用例の確認

線形代数の枠組みで$n$次正方行列の行列式(determinant)を取り扱うにあたっては置換(permutation)という概念を抑えておく必要があります。当記事では置換(permutation)の定義と具体的な使用例の確認について取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$4$章「行列式」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

置換の定義

「置換(permutation)」は文字や数字の入れ替えの操作に対応する。たとえば$12345$という数字の列に対し「$1$を$3$」、「$2$を$5$」、「$3$を$2$」、「$4$を$4$」、「$5$を$1$」にそれぞれ入れ替えると$35241$という数字の列が得られる。

上記の「$1$を$3$」、「$2$を$5$」、「$3$を$2$」、「$4$を$4$」、「$5$を$1$」に入れ替える置換操作は$\sigma$という記号を用いて下記のように表される。
$$
\large
\sigma :
\begin{cases}
1 \longmapsto 3 \\
2 \longmapsto 5 \\
3 \longmapsto 2 \\
4 \longmapsto 4 \\
5 \longmapsto 1
\end{cases}
$$

$\sigma$は下記のように表す場合もある。
$$
\large
\begin{align}
\sigma = \left[ \begin{array}{ccccc} 1 & 2 & 3 & 4 & 5 \\ 3 & 5 & 2 & 4 & 1 \end{array} \right]
\end{align}
$$

また、$\sigma$によって$i \longmapsto j$になることを写像と同様な式を用いて$j = \sigma(i)$のように表すこともできる。上記の例はそれぞれ$\sigma(1)=3, \, \sigma(2)=5, \, \sigma(3)=2, \, \sigma(4)=4, \, \sigma(5)=1$のように表せる。

置換の使用例

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$052$

・$[1]$
$$
\large
\begin{align}
\sigma = \left[ \begin{array}{cccc} 1 & 2 & 3 & 4 \\ 3 & 2 & 4 & 1 \end{array} \right], \quad (1324)
\end{align}
$$

「$1 \longmapsto 3$」、「$2 \longmapsto 2$」、「$3 \longmapsto 4$」、「$4 \longmapsto 1$」のように置換処理を行うので、求める順列は$3421$である。

・$[2]$
$$
\large
\begin{align}
\sigma = \left[ \begin{array}{ccccc} 1 & 2 & 3 & 4 & 5 \\ 2 & 3 & 5 & 1 & 4 \end{array} \right], \quad (35124)
\end{align}
$$

「$1 \longmapsto 2$」、「$2 \longmapsto 3$」、「$3 \longmapsto 5$」、「$4 \longmapsto 1$」、「$5\longmapsto 4$」のように置換処理を行うので、求める順列は$54231$である。

・$[3]$
$$
\large
\begin{align}
\sigma = \left[ \begin{array}{cccc} 1 & 2 & 3 & 4 & 5 & 6 \\ 5 & 3 & 4 & 6 & 2 & 1 \end{array} \right], \quad (632514)
\end{align}
$$

「$1 \longmapsto 5$」、「$2 \longmapsto 3$」、「$3 \longmapsto 4$」、「$4 \longmapsto 6$」、「$5 \longmapsto 2$」、「$6 \longmapsto 1$」のように置換処理を行うので、求める順列は$143256$である。

「強化学習」×「Transformer」①:Decision Transformer

Transformerは系列モデリングの学習にあたって様々な用途に用いられており、近年では「強化学習」分野へのTransformerの応用も研究されています。当記事ではTransformerを強化学習に応用した論文の一つであるDecision Transformerについての大枠を取りまとめました。
Decision Transformer論文や「ゼロから作るDeep Learning④ー強化学習編」の内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

Transformer

Dot Product Attentionに主に基づくTransformerの仕組みについては既知である前提で当記事はまとめました。下記などに解説コンテンツを作成しましたので、合わせて参照ください。

・直感的に理解するTransformerの仕組み(統計の森作成)

強化学習の基本知識

Deep Learningを用いた強化学習を理解するにあたって知っておくとよい内容を下記で取りまとめました。

・仕組みから理解するChatGPT(統計の森作成)

強化学習の基本トピックについて詳しく学ぶ際には日本語では「ゼロから作るDeep Learning④ー強化学習編」、英語では「Reinforcement Learning, second edition: An Introduction」がおすすめです。

Offline RL

Deep Q NetworkやAlphaZeroなど、多くの強化学習のアルゴリズムではエージェントと環境の相互作用によって軌道(trajectory)を生成し、「価値関数の近似」や「方策の最適化」を通して意思決定の最適化を行います。

一方で、予め既に得た軌道(trajectory)を元に教師あり学習のような学習を行うことで意思決定の最適化を行うことができます。このような強化学習の枠組みはオフライン強化学習(Offline RL)といわれます。

Decision TransformerではこのOffline RLの枠組みを用いるので、このような強化学習の研究分野があることは抑えておくと良いです。Offline RLについて詳しくは下記などを参照すると良いと思います。

・Offline RL論文
・A Survey on Transformers in Reinforcement Learning

Decision Transformer

Causal Transformer

Decision Transformer論文 Figure$\, 1$

Decision Transformerの処理概要は上図のように表されます。図より、メインの処理がCausal Transformerによって実現できることが確認できますが、Decision Transformer論文のSection.$3$のMethodより、基本的にはGPTと同様の処理を用いることが確認できます。

GPT(Generative Pre-Training)は自己回帰型(Auto Regressive)の処理に基づきます。処理の詳細はGPTの論文が参照するTransformer Decoderの解説で取り扱いました。

returns-to-go

Decision Transformerでは通常の強化学習で用いるRewardの$r_{t}$に基づいて下記のように定義される報酬和$\hat{R}_{t}$を用います。
$$
\large
\begin{align}
\hat{R}_{t} = \sum_{t’=t}^{T} r_{t’} \quad (1)
\end{align}
$$

上記をDecision Transformer論文では「returns-to-go」のような用語で表されます。一般的な強化学習では軌道(trajectory)の$\tau$を$\tau=(r_0,s_0,a_0,r_1,s_1,a_1, \cdots)$のように表すことが多い一方で、Decision Transformerでは$(1)$式で定義した「returns-to-go」を用いて下記のように軌道$\tau$を定義します。
$$
\large
\begin{align}
\tau=(\hat{R}_0,s_0,a_0,\hat{R}_1,s_1,a_1, \cdots , \hat{R}_{t}, s_{t}, a_{t}, \cdots)
\end{align}
$$

また、上記の$s_{t}$は時点$t$における状態、$a_{t}$は時点$t$における行動を表します。

Decision Transformerの擬似コード

Decision Transformer論文のAlgorithm$\, 1$にDecision Transformerの擬似コードが掲載されています。

# R, s, a, t: returns-to-go, states, actions, or timesteps
# transformer: transformer with causal masking (GPT)
# embed_s , embed_a , embed_R: linear embedding layers
# embed_t: learned episode positional embedding
# pred_a: linear action prediction layer

# main model
def DecisionTransformer(R, s, a, t):
    # compute embeddings for tokens
    pos_embedding = embed_t(t) # per-timestep (note: not per-token) s_embedding = embed_s(s) + pos_embedding
    a_embedding = embed_a(a) + pos_embedding
    R_embedding = embed_R(R) + pos_embedding

    # interleave tokens as (R_1, s_1, a_1, ..., R_K, s_K)
    input_embeds = stack(R_embedding , s_embedding , a_embedding)

    # use transformer to get hidden states
    hidden_states = transformer(input_embeds=input_embeds)

    # select hidden states for action prediction tokens
    a_hidden = unstack(hidden_states).actions

    # predict action
    return pred_a(a_hidden)

# training loop
for (R, s, a, t) in dataloader: # dims: (batch_size, K, dim)
    a_preds = DecisionTransformer(R, s, a, t)
    loss = mean((a_preds - a)**2) # L2 loss for continuous actions optimizer.zero_grad(); loss.backward(); optimizer.step()

# evaluation loop
target_return = 1 # for instance , expert -level return
R, s, a, t, done = [target_return], [env.reset()], [], [1], False
while not done: # autoregressive generation/sampling
    # sample next action
    action = DecisionTransformer(R, s, a, t)[-1] # for cts actions new_s, r, done, _ = env.step(action)
    
    # append new tokens to sequence
    R = R + [R[-1] - r] # decrement returns-to-go with reward s, a, t = s + [new_s], a + [action], t + [len(R)]
    R, s, a, t = R[-K:], ... # only keep context length of K

上記は28行目のa_preds = DecisionTransformer(R, s, a, t)がDecision Transformerを用いたActionの予測に対応するところから理解すると理解しやすいです。Decision Transformerは「状態」、「行動」、「returns-to-go」の入力に基づいて行動の予測を行います。

Decision Transformerの学習

Decision Transformerの学習では学習に用いる「軌道」のサンプルセットが最適である前提で、同様の振る舞いをTransformerが模倣するように学習を行います。

予測結果の$a_t$と「学習に用いる軌道サンプル」を元に、行動が離散値の場合はCross Entropy、連続値の場合は平均二乗誤差(mean-squared error)がlossに用いられます。前項で取り扱った擬似コードでは平均二乗誤差が計算されます。

Evaluations

Decision Transformer論文 Figure$\, 3$

参考

・Transformer論文:Attention is All you need[2017]
・Decision Transformer論文
・Offline RL論文
・A Survey on Transformers in Reinforcement Learning
・Transformer Decoder論文

MoE(Mixture of Experts)とSwitch Transformers

Transformerに分岐処理を行うMoE(Mixture of Experts)を導入することで計算コストを大きく増やさずにパラメータ数を増やすことが可能になります。当記事ではこのような方針に基づいてTransformerの学習を行った研究であるSwitch Transformerについて取りまとめを行いました。
MoE(Mixture of Experts)論文や、Switch Transformers論文などの内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

Transformer

Dot Product Attentionに主に基づくTransformerの仕組みについては既知である前提で当記事はまとめました。下記などに解説コンテンツを作成しましたので、合わせて参照ください。

・直感的に理解するTransformerの仕組み(統計の森作成)

MoEとSwich Transformersの仕組み

Switch Transformersの概要

Switch Transformersでは大まかに下図のような処理が行われます。

Switch Transformers論文 Figure$\, 2$

図の左が通常のTransformerにおける処理を表しており、オレンジのブロックがself-attention、水色のブロックがMLP(FFN)処理にそれぞれ対応します。右側がSwitch Transformerの処理を表しており、複数のFFNをExpertと見なし、Routerでtokenを各Expertに割り当てる処理が導入されています。

このような処理を行うことで同一レイヤーに複数のMLP処理が存在することから計算コストは上げずにパラメータ数を増やすことが可能になります。以下、詳しい処理についてSwitch Transformers論文の数式を元に確認を行います。

Mixture of Expert Routing

Switch Transformerの論文ではtokenのベクトル表現を$\mathbf{x} \in d_{model}$とおくとき、全$N$個のExpertsの中で$i$番目のExpertのgate-valueの$p_{i}(\mathbf{x})$が下記のように定義されます。
$$
\large
\begin{align}
p_{i}(\mathbf{x}) &= \frac{e^{h_{i}(\mathbf{x})}}{\sum_{j=1}^{N} e^{h_{j}(\mathbf{x})}} = \mathrm{Softmax}(h_{i}(\mathbf{x})) \\
h(\mathbf{x}) &= W_{r} \mathbf{x} \\
W_{r} & \in \mathbb{R}^{N \times d_{model}}
\end{align}
$$

上記の$h(\mathbf{x})$は要素数が$N$のベクトルであり、$h_{i}(\mathbf{x})$や$h_{j}(\mathbf{x})$は$h(\mathbf{x})$の$i$番目の要素と$j$番目の要素にそれぞれ対応します。

一般的なMixture of ExpertにおけるRoutingでは、このように計算を行ったgate-valueの$p_{1}(\mathbf{x}), \cdots , p_{N}(\mathbf{x})$の中から上位$k$個の値のインデックスを選び各Expertの出力の線形和によって全体の出力を得ます。ここで上位$k$個に対応するインデックスの集合を$\mathcal{T}$とおくと、全体の出力$\mathbf{y} \in \mathbb{R}^{d_{model}}$は下記のような式で定義されます。
$$
\large
\begin{align}
\mathbf{y} &= \sum_{i \in \mathcal{T}} p_{i}(\mathbf{x}) E_{i}(\mathbf{x}) \\
E_{i}(\mathbf{x}) &= FFN_{i}(\mathbf{x})
\end{align}
$$

上記の$E_{i}(\mathbf{x})$は各Expertの出力に対応するので、$\mathbf{x}$に$i$番目のExpertのMLP処理を施したと理解すると良いです。

Switch Routing

MoE(Mixture of Experts)論文では前項の「Mixture of Expert Routing」のように複数のExpertを用いて処理を行うことが必須であるとされた一方で、Switch Transformerでは$1$つのトークンに対し$1$つのExpertのみが用いられます。

Switch Transformer論文では$k=1$のExpertを用いるRoutingの方針に基づいて構成されるレイヤーを「Switch Layer」、このようなRoutingを「Switch Routing」のようにそれぞれ表されます。

分散処理とauxiliary loss

Expert CapacityとCapacity Factor

Switch Transformerでは前節で確認を行ったようにRouterがExperts(複数のFFNに対応)に処理を分岐させます。したがって、各Expertの処理は分散処理が可能です。

一方で単に処理を分岐させるだけの場合、$1$つのExpertに処理が偏り結果的にRouterの処理の意義がなくなる懸念があります。このような場合の対処にあたって、Switch Transformerでは各Expertに下記の数式に基づいて「Expert Capacity」が設定されます。
$$
\large
\begin{align}
\mathrm{expert \,\, capacity} = \left( \frac{\mathrm{tokens \,\, per \,\, batch}}{\mathrm{number \,\, of \,\, experts}} \right) \times \mathrm{capacity \,\, factor}
\end{align}
$$

上記の$\mathrm{tokens \,\, per \,\, batch}$はSwitch Transformerに入力するバッチのトークンの数、$\mathrm{number \,\, of \,\, experts}$はExpertsの数にそれぞれ対応します。

要するに基本的には各Expertに均等に処理を分岐させる前提でExpertの容量の上限が定義され、$\mathrm{capacity \,\, factor}$は生じうる分岐の偏りに対するバッファと解釈すると良いです。

各Expertの容量の上限であるExpert Capacityの数をトークンが超えた場合は超えた分のトークンの計算がその層ではスキップされます。ここまでに確認した内容について論文では下記のような図で図式化されます。

Switch Transformer論文 Figure$\, 3$の一部

上図のようにSwitch Transformerでは各Expertにトークンを分岐させFFN処理を行います。

図の左のCapacity Factorが$1.0$の場合にExpert Capacityの上限がオーバーし処理されないトークンが出たことが、赤の点線より確認できます。

Load Balancing Loss

それぞれのExpertになるべく均等にtokenが配分されるように、Switch TransformerではLoad Balancing Lossというlossが導入されます。lossの式を下記で表しました。
$$
\large
\begin{align}
\mathrm{loss} &= \alpha N \sum_{i=1}^{N} f_{i} P_{i} \\
f_{i} &= \frac{1}{T} \sum_{x \in \mathcal{B}} \mathbb{1} \{ \mathrm{argmax} \, p(x) = i \} \\
P_{i} &= \frac{1}{T} \sum_{x \in \mathcal{B}} p_{i}(x)
\end{align}
$$

上記は『Switch Routingに用いられる$1$hot表現の平均$(f_{1}, \cdots , f_{N})$と、一般的なMixture of Expert Routingに用いられる確率(gated-value)の平均$(P_{1}, \cdots , P_{N})$の分布が大きく乖離しないようにlossを導入した』と解釈すると良いです。

$N$のより具体的な解釈にあたっては、$f_{1}, \cdots , f_{N}$と$P_{1}, \cdots , P_{N}$の分布がどちらも一様分布の場合、$\displaystyle N \sum_{i=1}^{N} f_{i} P_{i}$が下記のように計算できることを確認しておくと良いと思います。
$$
\large
\begin{align}
N \sum_{i=1}^{N} f_{i} P_{i} &= N \sum_{i=1}^{N} \frac{1}{N} \cdot \frac{1}{N} \\
&= \cancel{N^{2}} \cdot \frac{1}{\cancel{N^{2}}} \\
&= 1
\end{align}
$$

全体処理とパラメータ

参考

・Transformer論文:Attention is All you need[2017]
・Switch Transformer論文
・Mixture of Experts論文

ブロック対角行列の行列式の計算と固有多項式(characteristic polynomial)

固有多項式(characteristic polynomial)は固有値を計算する際の固有方程式に用いられる多項式です。当記事ではブロック対角行列(block-diagonal matrix)の行列式の計算と、固有多項式の計算について取り扱いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$8$章「固有値問題と行列の対角化」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

ブロック対角行列の固有多項式

ブロック行列の行列式

$$
\large
\begin{align}
X = \left( \begin{array}{cc} A & B \\ O & D \end{array} \right)
\end{align}
$$

上記のように定義した$X$の行列式$\det{(X)}$について下記が成立する。
$$
\large
\begin{align}
\det{(X)} = \left| \begin{array}{cc} A & B \\ O & D \end{array} \right| = |A||D| = \det{(A)}\det{(D)} \quad (1)
\end{align}
$$

固有多項式の定義

$n$次正方行列$A$の固有多項式$F_{A}(t)$は$F_{A}(t)=\det{(tI_{n} \, – \, A)}$のように定義される。固有多項式の定義は下記でも取り扱った。

ブロック対角行列の固有多項式

次節の基本例題$156$で取り扱った。

計算例

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$156$

$$
\large
\begin{align}
A = \left( \begin{array}{cccc} A_1 & O & \cdots & O \\ O & A_2 & \cdots & O \\ \vdots & \vdots & \ddots & \vdots \\ O & O & \cdots & A_r \end{array} \right)
\end{align}
$$

上記のブロック対角行列$A$に対し、$(1)$式を繰り返し適用することで下記のように固有方程式$F_{A}(t)$を得ることができる。
$$
\large
\begin{align}
F_{A}(t) &= \left| \begin{array}{cccc} t I_1 \, – \, A_1 & O & \cdots & O \\ O & t I_2 \, – \, A_2 & \cdots & O \\ \vdots & \vdots & \ddots & \vdots \\ O & O & \cdots & t I_r \, – \, A_r \end{array} \right| \\
&= \det{(t I_1 \, – \, A_1)} \left| \begin{array}{cccc} t I_2 \, – \, A_2 & \cdots & O \\ \vdots & \ddots & \vdots \\ O & \cdots & t I_r \, – \, A_r \end{array} \right| \\
&= \cdots \\
&= \det{(t I_1 \, – \, A_1)} \cdots \det{(t I_r \, – \, A_r)} \\
&= F_{A_1}(t) \cdots F_{A_r}(t)
\end{align}
$$

上記より、ブロック対角行列$A$の固有多項式について下記が成立する。
$$
\large
\begin{align}
F_{A}(t) = F_{A_1}(t) \cdots F_{A_r}(t)
\end{align}
$$

最小多項式(minimal polynomial)の定義と計算例

行列$A$を代入すると零行列$O$になる多項式の中で「次数が最小」かつ「最高次の係数が$1$」である多項式を最小多項式(minimal polynomial)といいます。当記事では最小多項式の定義とチャート式線形代数の演習を題材に計算例について取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$8$章「固有値問題と行列の対角化」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

最小多項式の定義と求め方

最小多項式の定義

$n$次正方行列$A$に対して集合$I_{A}$を下記のように定義する。
$$
\large
\begin{align}
I_{A} = \{ f(t)| f(A) = O \}
\end{align}
$$

上記は$I_{A}$が「$A$を代入すると零行列になるような多項式の全体がなす集合」と解釈できる。このように定義を行なった集合$I_{A}$における「次数が最小」かつ「多項式の最高次数の係数が$1$」である多項式を最小多項式(minimal polynomial)という。

最小多項式の求め方

固有多項式$F_{A}(t)$を因数分解の形式で表した後に、$2$乗より大きい要素は$1$乗から順に最小多項式の定義が成立するかを確認すれば良い。具体的な導出の流れは次節の演習で取り扱った。

最小多項式の使用例

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$173$

・$[1]$
$$
\large
\begin{align}
A &= \left( \begin{array}{cc} 2 & 1 \\ 2 & 3 \end{array} \right)
\end{align}
$$

上記の$A$の固有多項式を$F_{A}(t)$とおくと、$F_{A}(t)$は下記のように表せる。
$$
\large
\begin{align}
F_{A}(t) &= \det{(tI_{2} \, – \, A)} = \left| \begin{array}{cc} t-2 & -1 \\ -2 & t-3 \end{array} \right| \\
&= (t-2)(t-3) – 2 \\
&= t^{2} – 5t + 6 – 2 \\
&= t^{2} – 5t + 4 \\
&= (t-1)(t-4)
\end{align}
$$

上記より、行列$A$の最小多項式は$(t-1)(t-4)$である。

・$[2]$
$$
\large
\begin{align}
A = \left( \begin{array}{ccc} 3 & 1 & 1 \\ 2 & 4 & 2 \\ 1 & 1 & 3 \end{array} \right)
\end{align}
$$

上記の$A$の固有多項式を$F_{A}(t)$とおくと、$F_{A}(t)$は下記のように表せる。
$$
\large
\begin{align}
F_{A}(t) &= \det{(tI_{2} \, – \, A)} = \left| \begin{array}{ccc} t-3 & -1 & -1 \\ -2 & t-4 & -2 \\ -1 & -1 & t-3 \end{array} \right| \\
&= -\left| \begin{array}{ccc} -1 & -1 & t-3 \\ -2 & t-4 & -2 \\ t-3 & -1 & -1 \end{array} \right| \\
&= \left| \begin{array}{ccc} 1 & 1 & 3-t \\ -2 & t-4 & -2 \\ t-3 & -1 & -1 \end{array} \right| \\
&= \left| \begin{array}{ccc} 1 & 0 & 0 \\ -2 & t-2 & -2(t-2) \\ t-3 & -(t-2) & (t-2)(t-4) \end{array} \right| \\
&= (-1)^{1+1} \left| \begin{array}{cc} t-2 & -2(t-2) \\ -(t-2) & (t-2)(t-4) \end{array} \right| \\
&= (t-2)^{2} \left| \begin{array}{cc} 1 & -2 \\ -1 & t-4 \end{array} \right| \\
&= (t-2)^{2} (t-4-2) = (t-2)^{2} (t-6)
\end{align}
$$

ここで$p(t)=(t-2)(t-6)$とおくと、$p(A)$は下記のように計算できる。
$$
\large
\begin{align}
p(A) &= (A \, – \, 2I_{3})(A \, – \, 6I_{3}) \\
&= \left( \begin{array}{ccc} 1 & 1 & 1 \\ 2 & 2 & 2 \\ 1 & 1 & 1 \end{array} \right) \left( \begin{array}{ccc} -3 & 1 & 1 \\ 2 & -2 & 2 \\ 1 & 1 & -3 \end{array} \right) \\
&= \left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{array} \right) = O
\end{align}
$$

よって最小多項式の定義より、行列$A$の最小多項式は$(t-2)(t-6)$である。

固有多項式(characteristic polynomial)の定義と三角行列の固有多項式

固有多項式(characteristic polynomial)は固有値を計算する際の固有方程式に用いられる多項式です。当記事では固有多項式の定義・活用と、三角行列(triangular matrix)における固有多項式の計算について取り扱いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$8$章「固有値問題と行列の対角化」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

固有多項式

固有多項式の定義

$n$次正方行列$A$の$t$を変数とする固有方程式$F_{A}(t)$は行列式$\det$と$n$次の単位行列$I_{n}$を用いて下記のように定義される。
$$
\large
\begin{align}
F_{A}(t) = \det{(tI_{n} \, – \, A)}
\end{align}
$$

固有方程式は上記を用いて$F_{A}(t)=\det{(tI_{n} \, – \, A)}=0$のように表す。

三角行列の固有多項式

固有多項式の使用例

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$154$

$[1]$
$$
\large
\begin{align}
A = \left( \begin{array}{cc} 2 & 1 \\ 2 & 3 \end{array} \right)
\end{align}
$$

上記の$A$の固有多項式を$F_{A}(t)$とおくと、$F_{A}(t)$は下記のように表せる。
$$
\large
\begin{align}
F_{A}(t) &= \det{(tI_{2} \, – \, A)} = \left| \begin{array}{cc} t-2 & -1 \\ -2 & t-3 \end{array} \right| \\
&= (t-2)(t-3) – 2 \\
&= t^{2} – 5t + 6 – 2 \\
&= t^{2} – 5t + 4 \\
&= (t-1)(t-4)
\end{align}
$$

上記より行列$A$の固有値は$1$と$4$である。

・固有値$1$に対応する固有空間の基底
$A-I_{2}$は下記のように行基本変形を行うことができる。
$$
\large
\begin{align}
A \, – \, I_{2} &= \left( \begin{array}{cc} 1 & 1 \\ 2 & 2 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{cc} 1 & 1 \\ 0 & 0 \end{array} \right)
\end{align}
$$

よって、$(A-I_{2})\mathbf{x}=\mathbf{0}$の解は$\displaystyle \mathbf{x} = c \left( \begin{array}{c} 1 \\ -1 \end{array} \right)$であり、このベクトルが固有値$1$に対応する固有空間の基底である。

・固有値$4$に対応する固有空間の基底
$A-4I_{2}$は下記のように行基本変形を行うことができる。
$$
\large
\begin{align}
A \, – \, 4I_{2} &= \left( \begin{array}{cc} -2 & 1 \\ 2 & -1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{cc} -2 & 1 \\ 0 & 0 \end{array} \right)
\end{align}
$$

よって、$(A \, – \, 4I_{2})\mathbf{x}=\mathbf{0}$の解は$\displaystyle \mathbf{x} = c \left( \begin{array}{c} 1 \\ 2 \end{array} \right)$であり、このベクトルが固有値$1$に対応する固有空間の基底である。

・$[2]$
$$
\large
\begin{align}
A = \left( \begin{array}{ccc} 3 & 1 & 1 \\ 2 & 4 & 2 \\ 1 & 1 & 3 \end{array} \right)
\end{align}
$$

上記の$A$の固有多項式を$F_{A}(t)$とおくと、$F_{A}(t)$は下記のように表せる。
$$
\large
\begin{align}
F_{A}(t) &= \det{(tI_{2} \, – \, A)} = \left| \begin{array}{ccc} t-3 & -1 & -1 \\ -2 & t-4 & -2 \\ -1 & -1 & t-3 \end{array} \right| \\
&= -\left| \begin{array}{ccc} -1 & -1 & t-3 \\ -2 & t-4 & -2 \\ t-3 & -1 & -1 \end{array} \right| \\
&= \left| \begin{array}{ccc} 1 & 1 & 3-t \\ -2 & t-4 & -2 \\ t-3 & -1 & -1 \end{array} \right| \\
&= \left| \begin{array}{ccc} 1 & 0 & 0 \\ -2 & t-2 & -2(t-2) \\ t-3 & -(t-2) & (t-2)(t-4) \end{array} \right| \\
&= (-1)^{1+1} \left| \begin{array}{cc} t-2 & -2(t-2) \\ -(t-2) & (t-2)(t-4) \end{array} \right| \\
&= (t-2)^{2} \left| \begin{array}{cc} 1 & -2 \\ -1 & t-4 \end{array} \right| \\
&= (t-2)^{2} (t-4-2) = (t-2)^{2} (t-6)
\end{align}
$$

上記より行列$A$の固有値は$2$と$6$であり、それぞれの重複度は$2$と$1$である。以下、それぞれの固有値に対応する固有ベクトルの計算を行う。

・固有値$2$に対応する固有空間の基底
$A \,- \, 2I_{3}$は下記のように行基本変形を行うことができる。
$$
\large
\begin{align}
A \, – \, 2I_{3} &= \left( \begin{array}{ccc} 1 & 1 & 1 \\ 2 & 2 & 2 \\ 1 & 1 & 1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 1 & 1 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{array} \right)
\end{align}
$$

よって、$(A \, – \, 2I_{3})\mathbf{x}=\mathbf{0}$の解は$\displaystyle \mathbf{x} = c \left( \begin{array}{c} 1 \\ -1 \\ 0 \end{array} \right) + d \left( \begin{array}{c} 1 \\ 0 \\ -1 \end{array} \right)$であるので、$\displaystyle c \left( \begin{array}{c} 1 \\ -1 \\ 0 \end{array} \right)$と$d \left( \begin{array}{c} 1 \\ 0 \\ -1 \end{array} \right)$が固有値$2$に対応する固有空間の基底である。

・固有値$6$に対応する固有空間の基底
$A \, – \, 6I_{3}$は下記のように行基本変形を行うことができる。
$$
\large
\begin{align}
A \, – \, 6I_{2} &= \left( \begin{array}{ccc} -3 & 1 & 1 \\ 2 & -2 & 2 \\ 1 & 1 & -3 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 1 & -3 \\ 2 & -2 & 2 \\ -3 & 1 & 1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 1 & -3 \\ 0 & -4 & 8 \\ 0 & 4 & -8 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 1 & -3 \\ 0 & 1 & -2 \\ 0 & 0 & 0 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 0 & -1 \\ 0 & 1 & -2 \\ 0 & 0 & 0 \end{array} \right)
\end{align}
$$

よって、$(A \, – \, 6I_{2})\mathbf{x}=\mathbf{0}$の解は$\displaystyle \mathbf{x} = c \left( \begin{array}{c} 1 \\ 2 \\ 1 \end{array} \right)$であり、このベクトルが固有値$6$に対応する固有空間の基底である。

基本例題$155$