このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

マルコフ圏におけるテンソル計算の手順とコツ

圏論では、さまざまな絵図/テキスト式が出てきます。絵図〈diagram | picture〉とテキスト式〈text expression〉とのあいだの相互翻訳や、絵図/テキスト式を使った計算は、機械的作業(アルゴリズムの実行)です。したがって、手順をマスターすれば、誰でも出来ることです。ひらめきや才能が必要なのではなくて、トレーニングが必要なだけです。

ただし、手早く処理したりショートカットするために、多少のコツはあります。この記事では、ストリング図で記述されているマルコフ射(マルコフ圏の射)を、テキスト式に翻訳して計算する手順とコツを述べます。ここでのコツとは、「変数に名前を付けないで番号で済ませる」という(割とくだらない)方法です。\require{enclose}%
\newcommand{\V}[1]{\enclose{circ}{#1}}%
\newcommand{\hyp}{\mbox{-} }%
\newcommand{\eq}{\mathrm{eq} }%
\newcommand{\P}{ {\bf P} }%
\newcommand{\In}{ \mbox{ in } }%
\newcommand{\For}{ \mbox{For } }%
\newcommand{\cat}[1]{ \mathcal{ #1 } }%
\newcommand{\lis}[1]{ \boldsymbol{ #1 } }%
\newcommand{\conc}{ \mathop{\#} }%
\newcommand{\BR}[1]{ \left[\!\left[ {#1} \right]\!\right]}%

内容:

マルコフ圏とその多圏

マルコフ圏についてはここでは説明しません。「マルコフ圏 A First Look -- 圏論的確率論の最良の定式化」とそこから参照されている記事を参照してください。

C がマルコフ圏のとき、C をそのまま使うより(簡易的な)多圏を作ったほうが便利です(作り方は「対称モノイド多圏(簡約版)」参照)。D = Poly(C) を、Cから作った簡約多圏〈reduced polycategory〉とすると、D = Poly(C) は次のように定義されます。

  • 対象:  |\cat{D}| := List(|\cat{C}|) \cal{C} の対象のリストの集合)
  • ホムセット: \For \lis{a}, \lis{b}\in |\cat{D}|,\;  \cat{D}(\lis{a}, \lis{b}) := \cat{C}(\bigotimes(\lis{a}), \bigotimes(\lis{b}) )

ここで出てきたリストに対する総モノイド積 \bigotimes(\hyp) は次のように定義されます。

  • \bigotimes( () ) := {\bf 1}_{\cat{C}}\cat{C} の単位対象)
  • \bigotimes( (A_1) ) := A_1
  • \bigotimes( (A_1, A_2) ) := A_1\otimes A_2
  • \bigotimes( (A_1, \cdots, A_n) ) := A_1\otimes \cdots \otimes A_n

Dの結合と恒等射は、この定義と整合するように決めます。また、Dのモノイド構造は次のように定義します。

  • \For \lis{a}, \lis{b}\in |\cat{D}|,\;  \lis{a}\otimes\lis{b} := \lis{a}\conc\lis{b} (リストの連接 \conc がモノイド積)
  • 射に対するモノイド積は、\cat{C} のモノイド積を引き継ぐ(多少の細工が必要)。
  • {\bf 1}_{\cat{D}} := () (空リストが単位対象)

多圏Dにおけるプロファイルの書き方に、略記の習慣があります。

  • f \in \cat{D}(\lis{a}, \lis{b})
  •  \lis{a} = (A_1, \cdots, A_n)
  •  \lis{b} = (B_1, \cdots, B_m)

のとき、f: \lis{a} \to \lis{b}\In \cat{D} を次のように書きます。

  • f: A_1, \cdots, A_n  \to B_1, \cdots, B_m \In \cat{D}

リストを囲む丸括弧を省略します。ここではこの略記を採用せずに、次のように丸括弧をちゃんと書きます。略記による便利さより弊害のほうが大きいと思うので。

  • f: (A_1, \cdots, A_n)  \to (B_1, \cdots, B_m) \In \cat{D}

マルコフ・テンソル

マルコフ圏の典型例は、可測空間の圏Meas上のジリィモナドのクライスリ圏Stocです。Stocの射はマルコフ核と呼びます(「マルコフ核: 確率計算のモダンな体系」参照)。

可測空間を有限離散可測空間だけに制限すると、マルコフ圏Stocの部分マルコフ圏FinDiscStocになります。圏FinDiscStocの射であるマルコフ核は(ちょっと拡張した)マルコフ行列で表現できます。そして、Poly(FinDiscStoc) の射はマルコフテンソル(後述)で表現できます。

テンソル」は多義曖昧語ですが、ここで出てきたテンソル*1は、次の形の写像です。

  •  t:\prod(\lis{x})\times \prod(\lis{y}) \to \P \In {\bf Set}

ここで、ボールド体の \lis{x}, \lis{y} などは有限集合のリストを表し、\P は非負実数の半環を意味します。\prod(\hyp) はリストに対する総直積で、\bigotimes(\hyp) と同様に定義されます。次の点には注意してください -- 空リストの総直積は単元集合*2で、その唯一の要素をアスタリスクで表します。

  • \prod( () ) = {\bf 1} = \{\ast\}

テンソル s をラムダ記法で書くならば:

  •  s = \lambda\, (x, y)\in \prod(\lis{x})\times \prod(\lis{y}).(\, s(x, y)\:\in \P \,)

\lis{x} = (X_1, \cdots, X_n), \lis{y} = (Y_1, \cdots, Y_m) として、露骨〈explicit〉な成分表示(入れ子の括弧を若干省略)をするなら:

  •  s = \lambda\, ( (x_1,\cdots, x_n),(y_1, \cdots, y_m)  )\in (X_1\times \cdots \times X_n)\times (Y_1\times \cdots\times Y_m).(\, s( (x_1,\cdots, x_n),(y_1, \cdots, y_m) )\:\in \P \,)

反図式順記法に合わせるために、引数の左右順序をひっくり返す(ペアの右が第一成分、左が第二成分、区切り記号を縦棒とする)と:

  •  s = \lambda\, ( y_1, \cdots, y_m \mid x_1,\cdots, x_n )\in (X_1\times \cdots \times X_n)\times (Y_1\times \cdots\times Y_m).(\, s( y_1, \cdots, y_m \mid x_1,\cdots, x_n)\:\in \P \,)

色々省略して簡潔に書けば:

  •  s = \lambda\, (y_1, \cdots,  y_m \mid x_1,\cdots, x_n ).(\, s( y_1, \cdots, y_m \mid x_1,\cdots, x_n) \,)

成分に展開するのをやめれば:

  •  s = \lambda\, (y \mid x ).(\, s( y \mid x) \,)

さて、テンソルの圏 T *3を次のように定義します。

  • 対象:  |{\bf T}| = List(|{\bf FinSet}|) {\bf FinSet} は有限集合の圏)
  • ホムセット: \For \lis{x}, \lis{y}\in |{\bf T}|,\; {\bf T}(\lis{x}, \lis{y}) := Map(  \prod(\lis{x})\times\prod( \lis{y}), \P)

テンソルTの射)の結合は、次のように定義します。


\For s = \lambda\, (y\mid x).(\, s(y \mid x)\,) : \lis{x} \to \lis{y} \In {\bf T}\\
\qquad t = \lambda\, (z\mid y).(\, t(z \mid y) \,) : \lis{y} \to \lis{z} \In {\bf T}\\
t\circ s := \lambda\, (z\mid x).(\, \sum_{y} t(z \mid y) s(y \mid x) \,)  : \lis{x} \to \lis{z} \In {\bf T}

恒等射は次のようです。


\mathrm{id}_{\lis{x}} := \lambda\, (x'\mid x).(\, \eq(x', x) \,) \In \lis{x} \to \lis{x} \In {\bf T}

ここで、\eq(\hyp, \hyp) は、2つの引数が等しければ 1 を返し、そうでなければ 0 を返す関数です。

2つのテンソルテンソル積(圏のモノイド積)は次のようです。


\For s = \lambda\, (y\mid x).(\, s(y \mid x)\,) : \lis{x} \to \lis{y} \In {\bf T}\\
\qquad u = \lambda\, (w\mid z).(\, u(w \mid z) \,) : \lis{z} \to \lis{w} \In {\bf T}\\
s\otimes u := \lambda\, (y, w\mid x, z).(\, s(y \mid x) u(w \mid z) \,)  : \lis{x}\otimes\lis{z} \to \lis{y}\otimes\lis{w} \In {\bf T}

テンソル s = \lambda\, (y\mid x).(\, s(y \mid x)\,)マルコフテンソル〈Markov tensor〉であるとは、次の条件(保存法則〈conservation law〉という)を満たすことです。

  • \forall x\in \prod(\lis{x}).(\, \sum_{y} s(y\mid x) = 1 \,) (保存法則)

射をマルコフテンソルだけに制限すると、圏 T の部分圏となるので、その部分圏を MT とします。

今定義した圏MTと、有限離散可測空間とマルコフ核の圏から作った簡約多圏 Poly(FinDiscStoc) のあいだには規準的〈canonical〉な同型があります。

  • {\bf MT} \cong Poly({\bf FinDiscStoc}) \In {\bf CAT}

この規準的な同型を通して、MT と Poly(FinDiscStoc) はしばしば同一視されます。ここでは、もっぱら圏 MT を扱いますが、その背後に Poly(FinDiscStoc) があることは想定しています。

[補足]

この記事では触れませんが、関連するいくつかの圏があります。それらを表にまとめておきます。([追記]マルコフ・テンソルに関連する圏達」により詳しい話を書きました。[/追記]

対象が番号/番号リスト 対象が集合/集合リスト 簡約多圏
L FinSet Poly(FinSet)
Mat FXMat Poly(FXMat) = FXTens
Tens FXTens = T -

L は、|L| := N, L(n, m) := Map({1, ..., n}, {1, ..., m}) で定義される圏です。行列の圏 Mat の対象集合も N で、番号ベースのテンソルの圏 Tens の対象集合は List(N) です。FXTens をこの記事では短く T と書いています。T は既に定義しました。

N, List(N) を、有限集合/有限集合のリストに一般化した圏が表の二列目にあります。表の三列目は二列目の圏を多圏化した簡約多圏です。FXTens は既に多圏なので多圏化する必要はありません。

FX は、Finitely eXtended の略で、単に X なら有限性の条件が外れます。

  • XMat : 対象を(有限とは限らない)任意の集合にまで拡張した行列の圏
  • XTens : 対象を(有限とは限らない)任意の集合のリストにまで拡張したテンソルの圏

保存法則を満たす行列・テンソルの圏には M を付けることにすると:

  • MMat : 番号ベースのマルコフ行列の圏*4
  • MTens : 番号ベースのマルコフテンソルの圏
  • MFXMat : 集合ベースのマルコフ行列の圏、FinDiscStoc と同型。
  • MFXTens : 集合ベースのマルコフテンソルの圏、Poly(FinDiscStoc) と同型。

[/補足]

例題: 同時化

次のストリング図を例題にします。この図が表す射をテキスト式で書き下します。


\xymatrix {
  {} & *+[o][F]{a}\ar[d]^X & {} 
\\
  {}  & *{\Delta}\ar[dl]^X \ar[dr]_X & {} 
\\
  {\mathrm{I}} \ar[d]^X  & {} & *+[F]{f} \ar[d]_Y
\\
  {}   &  {} & {}
}\\
\mbox{in }{\bf MT}

ストリング図をXyJaxで描いているので(「カリー/ハワード対応のための記法・図法」参照)だいぶ不格好です。幾つか注意をしておくと:

  1. 矢印があるので明らかですが、描画方向は上から下です。
  2. ノード(射の図示)a は、三角形で表すのが多数派です。三角で囲むことが出来なかったので丸で囲んでます。
  3. \Delta は、マルコフ圏の対角射〈コピー射〉です。枝分かれしたワイヤーだけで描くことが多いと思います。
  4. 左側の I は恒等射です。通常、恒等射はノードとしては描かずワイヤーだけです。

図に出現している射のプロファイルを列挙します。

  1.  a:() \to (X) \In {\bf MT}
  2.  \Delta = \Delta_X :(X) \to (X, X) \In {\bf MT}
  3.  \mathrm{I} = \mathrm{I}_X = \mathrm{id}_X: (X) \to (X) \In {\bf MT}
  4.  f: (X) \to (Y) \In {\bf MT}

ストリング図全体として、次の射を表しています。

  •  a;\Delta_X;(I_X \otimes f) : () \to (X, Y)\In {\bf MT}

この射(テンソル)を、ラムダ記法で具体的に表現したらどうなるか? が課題です。

まず、ストリング図に出現するワイヤーに番号を付けておきます。


\xymatrix {
  {} & *+[o][F]{a}\ar[d]_1^X & {} 
\\
  {}  & *{\Delta}\ar[dl]_2^X \ar[dr]_X^3 & {} 
\\
  {\mathrm{I}} \ar[d]_4^X  & {} & *+[F]{f} \ar[d]_Y^5
\\
  {}   &  {} & {}
}\\
\mbox{in }{\bf MT}

この番号を変数名に含む変数を使うことにします。次の5つの変数です。

  1.  x1 \in X
  2.  x2 \in X
  3.  x3 \in X
  4.  x4 \in X
  5.  y5 \in Y

そして、アスタリスク \ast は、\prod( ()) = {\bf 1} の唯一の要素です。

それぞれの射(テンソル)を簡略なラムダ記法で表示すると次のようです。

  1.  a = \lambda\, (x1\mid\ast) .(\, a(x1\mid \ast)  \,)
  2.  \Delta = \lambda\, (x2, x3 \mid x1) .(\, \Delta(x2, x3\mid x1)  \,)
  3.  \mathrm{I} = \lambda\, (x4 \mid x3) .(\, \mathrm{I}(x4\mid x3)  \,)
  4.  f = \lambda\, (y5 \mid x3).(\, f(y5\mid x3) \,)

ちょっとずつ計算してみると:


\quad \Delta \circ a \\
= \lambda\, (x2, x3 \mid \ast) .(\, \sum_{x1}\Delta(x2, x3\mid x1) a(x1\mid \ast) \,)\\
\:\\
\quad \mathrm{I}\otimes f \\
= \lambda\, (x4, y5 \mid x2, x3).(\, \mathrm{I}(x4 \mid x2) f(y5\mid x3)  \,)\\
\:\\
\quad (I\otimes f)\circ (\Delta \circ a) \\
= \lambda\, (x4, y5 \mid \ast).(\, \sum_{x2,x3}\left[ \mathrm{I}(x4 \mid x2) f(y5\mid x3)\sum_{x1}\Delta(x2, x3\mid x1) a(x1\mid \ast)\right] \,)\\
= \lambda\, (x4, y5 \mid \ast).(\, \sum_{x2,x3}\sum_{x1} \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast) \,)

ここから先は、ラムダ関数式の本体式〈body expression〉だけを抜き出して計算します。次の表示を利用します。

  • \mathrm{I}(x4 \mid x2) = \eq(x4, x2)
  • \Delta(x2, x3\mid x1) = \eq(x2, x1)\eq(x3, x1)

計算を続けましょう。(後に解説があります。)


\quad \sum_{x2,x3}\sum_{x1} \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast)\\
= \sum_{x2,x3, x1} \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast)\\
= \sum_{x2,x3,x1} \eq(x4, x2) f(y5\mid x3) \eq(x2, x1)\eq(x3, x1) a(x1\mid \ast)\\
= \sum_{x2,x3} \eq(x4, x2) f(y5\mid x3) \eq(x3, x2) a(x2\mid \ast)\\
= \sum_{x2} \eq(x4, x2) f(y5\mid x2)  a(x2\mid \ast)\\
= f(y5\mid x4) a(x4\mid \ast)\\

上の計算の詳細は次節にあるので、とりあえず結果を認めてもう一度ラムダ関数式のなかに収めると:


\quad (I\otimes f)\circ (\Delta \circ a) \\
= \lambda\, (x4, y5 \mid \ast).(\, \sum_{x2,x3}\sum_{x1} \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast) \,)\\
= \lambda\, (x4, y5 \mid \ast).(\, f(y5\mid x4) a(x4\mid \ast) \,) \\
= \lambda\, (x, y \mid \ast).(\, f(y\mid x) a(x\mid \ast) \,)

最後の変形は、ラムダ束縛変数の名前は好きにリネーム(アルファ変換という)してよい、という規則を使っています。

最終的結果である \lambda\, (x, y \mid \ast).(\, f(y\mid x) a(x\mid \ast) \,) は、fa による同時化〈jointfication〉といいます。つまり、最初のストリング図は同時化の図だったのです。

総和の計算規則

ここからは、計算の規則の説明をします。個々の計算ではなくて、計算全般に共通するパターンの説明です。このテの説明には、式や変数を表すメタ変数が必要になります。筆記体\mathscr{E}, \mathscr{F} などは式を表すメタ変数、ギリシャ小文字 \xi, \eta などは変数を表すメタ変数とします。

次はひとつの計算規則です。併置(単に並べる)は掛け算を意味します。

  •  \sum_\xi \mathscr{E}\mathscr{F} = \mathscr{E} \sum_\xi \mathscr{F}

ただし、無条件に使える計算規則ではなくて、次の条件が付きます。

  • \mathscr{E} のなかに変数 \xi が現れない。

例を挙げると:


\quad \mathrm{I}(x4 \mid x2) f(y5\mid x3)\sum_{x1}\Delta(x2, x3\mid x1) a(x1\mid \ast) \\
= \sum_{x1} \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast)

これは、次のようにして計算規則を適用している例です。

  • 変数 \xi が、実際には x1
  • \mathscr{E} が、実際には \mathrm{I}(x4 \mid x2) f(y5\mid x3)
  • \mathscr{F} が、実際には \Delta(x2, x3\mid x1) a(x1\mid \ast)
  • 等式の左右は入れ替わって  \mathscr{E} \sum_\xi \mathscr{F}  = \sum_\xi \mathscr{E}\mathscr{F}

次も総和に関する計算規則です。

  • \sum_\xi (\sum_\eta \mathscr{E}) = \sum_{\xi, \eta} \mathscr{E}

総和の繰り返しは、2つの変数を同時に動かして一気に総和したものと同じです。総和記号はまとめたり分解したりできます。

例を挙げると:


\quad \sum_{x2,x3}\sum_{x1} \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast)\\
= \sum_{x2,x3, x1} \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast)

これは、次のようにして計算規則を適用している例です。

  • 変数 \xi が、実際には x2, x3 (2個の変数)
  • 変数 \eta が、実際には x1
  • \mathscr{E} が、実際には \mathrm{I}(x4 \mid x2) f(y5\mid x3)\Delta(x2, x3\mid x1) a(x1\mid \ast)

最後に、総和記号を消去するときに使う計算規則です。

  •  \sum_\xi \eq(\xi, \eta)\mathscr{E} = \mathscr{E}\BR{\xi := \eta}

記号の説明をすると:

  • \mathscr{E}\BR{\xi := \eta} は、式 \mathscr{E} に出現する変数 \xi\eta で置き換えた式

例を挙げると:


\quad \sum_{x2} \sum_{x3} \eq(x4, x2) f(y5\mid x3) \eq(x3, x2) a(x2\mid \ast)\\
= \sum_{x2} \eq(x4, x2) f(y5\mid x2)  a(x2\mid \ast)\\

これは、次のようにして計算規則を適用している例です。

  • 一番外側の総和はそのまま、内側の総和に計算規則を適用
  • 変数 \xi が、実際には x3
  • 変数 \eta が、実際には x4
  • \eq(x3, x2) を前に持ってくる。
  • \mathscr{E} が、実際には \eq(x3, x2) f(y5\mid x2)  a(x2\mid \ast)

変数に名前を付けない

先の計算例では、使う変数は次のような名前を持っていました。

  • x1, x2, x3, x4, y5

bashの関数定義やTeXのマクロ定義では、変数に名前はなくて番号で識別します。これはもちろん不便なことがありますが、変数は無名でもよい事例になっています。

変数を、ドル記号+番号 として先の計算をしてみると次のようになります。


\quad \sum_{\$2,\$3}\sum_{\$1} \mathrm{I}(\$4 \mid \$2) f(\$5\mid \$3)\Delta(\$2, \$3\mid \$1) a(\$1\mid \ast)\\
= \sum_{\$2,\$3, \$1} \mathrm{I}(\$4 \mid \$2) f(\$5\mid \$3)\Delta(\$2, \$3\mid \$1) a(\$1\mid \ast)\\
= \sum_{\$2,\$3,\$1} \eq(\$4, \$2) f(\$5\mid \$3) \eq(\$2, \$1)\eq(\$3, \$1) a(\$1\mid \ast)\\
= \sum_{\$2,\$3} \eq(\$4, \$2) f(\$5\mid \$3) \eq(\$3, \$2) a(\$2\mid \ast)\\
= \sum_{\$2} \eq(\$4, \$2) f(\$5\mid \$2)  a(\$2\mid \ast)\\
= f(\$5\mid \$4) a(\$4\mid \ast)\\

ウゲゲ、なんか気持ち悪いですね。自然数値が定数として出現することはほとんどないので、番号(自然数値)そのものを変数として使ってしまっても問題はないでしょう。


\quad \sum_{2,3}\sum_{1} \mathrm{I}(4 \mid 2) f(5\mid 3)\Delta(2, 3\mid 1) a(1\mid \ast)\\
= \sum_{2,3, 1} \mathrm{I}(4 \mid 2) f(5\mid 3)\Delta(2, 3\mid 1) a(1\mid \ast)\\
= \sum_{2,3,1} \eq(4, 2) f(5\mid 3) \eq(2, 1)\eq(3, 1) a(1\mid \ast)\\
= \sum_{2,3} \eq(4, 2) f(5\mid 3) \eq(3, 2) a(2\mid \ast)\\
= \sum_{2} \eq(4, 2) f(5\mid 2)  a(2\mid \ast)\\
= f(5\mid 4) a(4\mid \ast)\\

これなら見やすい。さらに、\eq(i, j) (i = j) と略記すると次のようになります。これが、僕が普段実際に使っている書き方です。


\quad \sum_{2,3}\sum_{1} \mathrm{I}(4 \mid 2) f(5\mid 3)\Delta(2, 3\mid 1) a(1\mid \ast)\\
= \sum_{2,3, 1} \mathrm{I}(4 \mid 2) f(5\mid 3)\Delta(2, 3\mid 1) a(1\mid \ast)\\
= \sum_{2,3,1} (4 = 2) f(5\mid 3) (2 = 1)(3 = 1) a(1\mid \ast)\\
= \sum_{2,3} (4 = 2) f(5\mid 3) (3 =  2) a(2\mid \ast)\\
= \sum_{2} (4 = 2)  f(5\mid 2) a(2\mid \ast)\\
= f(5\mid 4) a(4\mid \ast)\\

ワイヤーに番号が付いたストリング図(下に再掲)と見比べならが計算すると、ラクチンに計算できます。テキスト式が反図式順なので、上下左右の方向には注意する必要があります。


\xymatrix {
  {} & *+[o][F]{a}\ar[d]_1^X & {} 
\\
  {}  & *{\Delta}\ar[dl]_2^X \ar[dr]_X^3 & {} 
\\
  {\mathrm{I}} \ar[d]_4^X  & {} & *+[F]{f} \ar[d]_Y^5
\\
  {}   &  {} & {}
}\\
\mbox{in }{\bf MT}

例題: 周辺化

もうひとつ例題をやっておきましょう。


\xymatrix {
  {}  & *+[o][F]{a}\ar[dl]_1^X \ar[dr]_Y^2 & {} 
\\
  {\mathrm{I}} \ar[d]_3^X  & {} & *+[o][F]{!}
\\
  {}   &  {} & {}
}\\
\mbox{in }{\bf MT}

射(テンソルa, \mathrm{I}, ! は次のプロファイルを持ちます。

  1.  a:() \to (X, Y) \In {\bf MT}
  2.  \mathrm{I} = \mathrm{I}_X = \mathrm{id}_X : (X) \to (X)\In {\bf MT}
  3.  ! = !_Y : (Y) \to () \In {\bf MT}

とりあえずは名前のある変数を導入しましょう。

  1. x1 \in X
  2. y2 \in Y
  3. x3 \in X

この変数により射をラムダ記法で書くと:

  1.  a = \lambda\, (x1, y2\mid \ast).(\,a(x1, y2\mid \ast) \,)
  2.  \mathrm{I} = \lambda\, (x3 \mid x1).(\, \mathrm{I}(x3 \mid x1) \,)
  3.  ! = \lambda\, (\ast \mid y2).(\, !(\ast \mid y2) \,)

次の等式が使えます。

  •  \mathrm{I}(x3 \mid x1) = \eq(x3, x1)
  •  !(\ast \mid y2) = 1

次の計算規則があると思ってもいいです。

  •  \sum_{\xi} !(\ast \mid \xi)\mathscr{E} = \sum_{\xi} \mathscr{E}

変数を番号だけにして予備的な計算をしてみましょう。


\quad \sum_{1,2} (\mathrm{I}(3 \mid 1) !(\ast \mid 2)) a(1, 2\mid \ast)\\
= \sum_{1,2} (3 = 1) a(1, 2 \mid \ast)\\
= \sum_{2} a(3, 2 \mid \ast)

これより:


\quad (I \otimes !)\circ a\\
= \lambda (x3 \mid x1, y2).(\, \mathrm{I}(x3\mid x1) !(\ast \mid x2) \,) \circ 
\lambda\, (x1, y2\mid \ast ).(\, a(x1, y2\mid \ast) \,) \\
= \lambda (x3 \mid \ast).(\, \sum_{y2} a(x3, y2 \mid \ast)  \,)\\
= \lambda (x \mid \ast).(\, \sum_{y} a(x, y \mid \ast)  \,)

最後の変形は、ラムダ束縛変数のリネーム(アルファ変換)です。この計算で得られた結果は、a第一周辺化〈1st marginalization〉といいます。ストリング図の左右を入れ替えると第二周辺化〈2nd marginalization〉が定義できます。

まとめ

テンソルTの射)の結合と恒等射とテンソル積は、次のようです。

  •  t\circ s := \lambda\, (z\mid x).(\, \sum_{y} t(z \mid y) s(y \mid x) \,)
  •  \mathrm{id}_{\lis{x}} := \lambda\, (x'\mid x).(\, \eq(x', x) \,)
  •  s\otimes u := \lambda\, (y, w\mid x,z).(\, s(y \mid x)u(w \mid z) \,)

マルコフテンソルを定義する保存法則〈保存性〉は次の条件です。

  • \forall x\in \prod(\lis{x}).(\, \sum_{y} s(y\mid x) = 1 \,)

基本的な射 \mathrm{I} = \mathrm{id}, \Delta, ! に関しては次の等式が使えます。(変数名は適当に変更してかまいません。)

  •  \mathrm{I}(x2 \mid x1) = \eq(x2, x1)
  •  \Delta(x2, x3 \mid x1) = \eq(x2, x1)\eq(x3, x1)
  •  !(\ast \mid x) = 1

総和に関する計算規則には次があります。

  • \mathscr{E} のなかに変数 \xi が現れないとき、 \sum_\xi \mathscr{E}\mathscr{F} = \mathscr{E} \sum_\xi \mathscr{F}
  • \sum_\xi (\sum_\eta \mathscr{E}) = \sum_{\xi, \eta} \mathscr{E}
  •  \sum_\xi \eq(\xi, \eta)\mathscr{E} = \mathscr{E}\BR{\xi := \eta}

*1:「多行列」という言葉を使うと紛れがないのですが一般的ではなく、多義曖昧語「テンソル」が無闇と無節操に使われています。

*2:空集合だと誤解している人が相当数いるようです。空リストの総直和なら空集合ですが、総直積は単元集合です。

*3:僕がやっているセミナー内では、行きがかり上 FXTens という長い名前を使っています。ここでは短く T としました。

*4:FinDiscStocのモノイド積を、MMat内で表現できなくはないですが、非常に煩雑になります。おすすめしません。