数理モデルのための数式:任意の列の関数

他数理記事一覧top

\(X\)の値を要素に持つ列や族\(x\)が与えられたとしよう.これが,添字集合\(L\)で添字付けられて定義されているとしよう.つまり,\(x\in X^L\)という状態だ.python ではおなじみのリスト(自然数を添字にもつ列)に対して演算を行い,結果を返す関数の定義方法をここでは紹介する.例えば,\(f\)を任意の列\(y\)に対し,総和を取る関数とすれば,それは次のように定義できる. f(y) = \sum_{i\in\sL(y)}y_i ここで,\(\sL(y)\)は\(y\)を定義している添字集合を表す.例えば今の場合\(\sL(x) = L\)である.

平均を\(g\)としたら,次の通り定義できる. g(y) = \frac{1}{\abr{\sL(y)}}\sum_{i\in\sL(y)}y_i

列から添字の集合を復元していることが特徴的である.

いったいこれらの関数はどの空間で定義されるのか,ということについて述べておく.文書中に現れうる任意の添字の集合を\(\hat{\sL}\),同じく現れうる任意の値の集合を\(X\)として(もちろん演算が適用できる範囲の集合で),任意の列の集合を\(S\)としたとき, f: S\to X, \sL: S \to\hat{\sL}, S= \bigcup_{L\subset \hat{\sL}}X^L と定義すればいい.\(X\)について,実数を扱うなら,少なくとも\(\sR\subset X\)である.

これらのような関数の定義は集合論の範囲で確定できる.なぜなら,添字集合\(L\subset \hat{\sL}\)が与えられ,列\(y\in X^K\)が与えられたとき,\(y\in X^L\)となることは\(K = L\)の場合にまたそのときに限るからである.

列の長さを常に固定とすれば,ここで考えたようなことは必要ない.しかし,AI分野ではデータセットというものを扱う必要がある.データセットには様々な長さの列が存在する.それら列を統一的に記載するにはここで提案した記法は役に立つだろう.面倒くさいからって論文に書くときだけ列を集合とする危険な扱いを避けることができる.我々にはデータセットに使われる数式の集合論で言うところの「集合」は,列を用いて実装しなければならない,という掟がある.集合なのにpythonの「set」を使ってはならないという掟だ。このような慣習は良くない.どこまでがその慣習の範囲なのか,不明確だからだ.

同じ和を書く書くのに,整数の添字の組であれこれいろいろ書くのも混乱のもとである.例えば,上記\(f\)だと行列\(A\in \sR^{n\times n}\) と\(a\in \sR^n\)があるとする.この書き方は,厳密には\([n] = \cbr{1, 2,...,n}\)の添字集合を用意して,\(L=[n]\times [n]\)として,\(A\in \sR^L, a\in\sR^{[n]}\)である.\(\hat{\sL} = L + [n]\)とすれば,どちらの要素の和も,以下のように同じでかける. f(A) = \sum_{i\in \sL(A)}A_i = \sum_{(i, j)\in L}A_{(i, j)} = \sum_{i\in[n]}\sum_{j\in[n]}A_{i, j}= \sum_{i=1}^n\sum_{j=1}^nA_{i, j} f(a) = \sum_{i\in \sL(a)}a_i = \sum_{i\in[n]} a_{i} = \sum_{i=1}^n a_{i} 繰り返し現れる添字を網羅するためだけの多重の総和記号は,冗長で一般性にかけて拡張にも乏しいので,なのでやめるべきである.例えば,部分添字集合\(M\subset L\)があっても,その要素の和は,単に, \sum_{i\in M}A_i と書けばよいが,添字を順序立てて渡っている初頭的な書き方だとこれは無理である.識別関数\(\chi_M\)何というものを用いて, \sum_{i\in M}A_i = \sum_{i=1}^n\sum_{j=1}^n \chi_M((i, j))A_{i, j} と書くこともできるが,識別関数は,ほとんどの機械学習の研究で要らないのだから,部分を処理したいなら,添字集合をつかうことを私は強く進める.データセットの一部の統計を取りたい,とか言う場合があるでしょう.