Tue Jan 22 2019

自然な射の逆射は自然

自然な射, 要するに自然変換があるとする. \[\alpha : F \Rightarrow G\] これが自然であるとは, 任意の射 \(x : A \to B\) について, 次が可換になるということ.

\(\require{AMScd}\) \[\begin{CD} FA @>\alpha_A>> GA \\ @VFxVV @VGxVV \\ FB @>\alpha_B>> GB \end{CD}\]

この図式で \(\alpha\) が2度登場するが自然射はこのように, 任意の対象 \(X\) に対して \[\alpha_X : FX \to GX\] を与える.

さて, 今, 任意の \(X\) に対して \(\beta_X = \alpha_X^{-1}\) なる逆射を与える \(\beta\) があるとする. これは自然な射だろうか?

先の \(\alpha\) に関する図式を等式に書き直すと, \[Gx \alpha_A = \alpha_B Fx.\] この左に \(\beta_B\) を掛けて右から \(\beta_A\) を掛けると, \[\beta_B Gx \alpha_A \beta_A = \beta_B \alpha_B Fx \beta_A.\] \(\alpha\)\(\beta\) で添字が揃ってて隣り合ってる部分は打ち消して良いので (逆射なので), \[\beta_B Gx = Fx \beta_A.\]

これを図式に書き直すと, つまり下が可換ということ:

\(\require{AMScd}\) \[\begin{CD} FA @<\beta_A<< GA \\ @VFxVV @VGxVV \\ FB @<\beta_B<< GB \end{CD}\]

これはつまり \(\beta\)\(G \Rightarrow F\) なる自然変換であることを言っている. というわけで, 自然な射の逆射は自然.

圏論をやってると具体例なんてどうでもいいという気持ちになってきた.

行列や多重配列のことをテンソルと呼ぶのやめろ

機械学習をやってる人たちの大部分は線形代数をまともに習得していないと思う. 特にテンソルという用語を「強い行列」くらいのつもりで使っている. 行列が実数を長方形のように並べたものであるのに対して, 実数をちょうど直方体のようにに並べたもののことを3階テンソルなどと呼んでいる. そして彼らに言わせれば行列とは 2階テンソルであるらしい. どういうことなのだろうか.

ベクトルが何かを分かってない?

ベクトルとは行ベクトルとか列ベクトルのように, 実数を (有限個) 一列に並べたもののこと, ではない. それは数ベクトルと読んで1つの表現方法に過ぎない. 普通にはベクトル空間をまず定義して, その元のことをベクトルと呼ぶだろう. だから例えば級数関数もベクトルだし, 行列もベクトルである. もちろん構造 (足し算とスカラー倍) を定める必要があるけど. 別に行列はベクトルの一般化ではない.

もちろんテンソルが何かを分かっていない?

wiki/Tensor の "As multilinear maps" を使えば, ベクトル空間 \(V\) の上の \((r,s)\) 型テンソルとは, \[V^* \times \cdots \times V^* \times V \times \cdots V \to \mathbb R\] なる多重線形写像のこと. ここで左側には \(V^*\)\(r\) 個, \(V\)\(s\) 個並んでいるとする. また \(\mathbb R\) は実数のこと (他の体を使ってもよい).

\(V\) に対して \(V^*\) が何だったかと言えば, \(V \to \mathbb R\) なる線形写像全体のことで双対空間と呼ばれるものであった. 性質として, \(V\)\(n\) 次元ベクトル空間であれば, \(V^*\) もまた \(n\) 次元ベクトル空間である. ただしそれらは同型なものでは無い (全然違う). 双対の双対は元と同型である (\((V^*)^* \simeq V\)).

テンソルは単なる写像ではなくて線形写像なので, 自由度は全然なくて, 要は引数側での基底についての値だけ定めれば写像全体が定まる. \(V\) の基底を \[e_1,\ldots,e_n\] とする. ここから導かれる \(V^*\) の双対基底を \[f_1,\ldots,f_n\] とする.

念の為. 双対基底とは \(f_i(e_j) = \delta_{i,j}\) (クロネッカーのデルタ) なるもののことで, これは確かに双対空間の基底になっている.

というわけで, \(\Gamma\)\(V\) の上の \((r,s)\) 型テンソルだとすると, \(\Gamma\) の形は, \[(f_{i_1}, \ldots, f_{i_r}, e_{j_1}, \ldots, e_{j_s})\] の値を定めれば決まる. (一般の引数についてはこれの線形和で値が決まるので.) では上の引数に対する値を \[\Gamma^{i_1, \ldots, i_r}_{j_1, \ldots, j_s}\] と書くことにする. この添字の全通り, \[n^{r+s}\] 個の値を定めれば \(\Gamma\) は決まる. ここで \(r+s\) のことを \(\Gamma\) の階 (rank) という.

だから単に \(m\) 階のテンソルと言われても \(r=0,s=m\) の場合もあれば, \(r=1,s=m-1\) の場合もあるわけだ.

例えば 2 階テンソルは \(n^2\) 個の値を定めれば決まる. \(n^2\) 個の値は縦に \(n\) 個, 横に \(n\) 個, 正方形みたいに数を並べれば表現できる. 仮に \((0,2)\) 型だとして:

\[\left[\begin{array}{ccc} \Gamma_{1,1} & \cdots & \Gamma_{1,n} \\ \vdots & & \vdots \\ \Gamma_{n,1} & \cdots & \Gamma_{n,n} \\ \end{array}\right]\]

というわけで \(n \times n\) 行列として表現できる. \(n\) 次元ベクトルの上の2階テンソル全体は \(n \times n\) 行列全体と同型であることが分かる.

同様に \(3\) 階テンソルは \(n^3\) 個の値を定めれば決まるので, 数を立方体のように書けば表現できる...

そこまではいいが, これはテンソルを正方行列 (や立方体行列) で表現できることを言ってるだけで, 逆はわからない. 例えば正方ではない行列をどうやってテンソルで表現するか? 自明な方法としては, その形の行列全体を一個のベクトル空間 (例えば \(\mathbb R^{n \times m}\)) と思って, その上の \((0,1)\) 型テンソルと言うことは出来る. …だから何だ.