「最急降下法機械学習の圏 // 使えるのか?」で言及した、単一ニューラルネットの形状の圏 SNNS (the category of Single Neural Network Shapes)からパラメータ付き関数の圏 Para(AES) への実現関手〈実装関手〉について説明します。
何はともあれ、しりとりの圏が実用的な例で出てきた事が嬉しい。
内容:
概ユークリッド空間の圏
概ユークリッド空間〈almost Euclidean space〉については次の記事を参照してください。
概ユークリッド空間のあいだの射は、1回〈階〉連続微分可能写像だと定義*1すると、概ユークリッド空間の圏AESが決まります。
今回使う概ユークリッド空間は、普通のユークリッド空間 Rn と、ユークリッド空間のあいだのアフィン線形写像の空間 AL(Rn, Rm) だけです。アフィン線形写像 f:Rn → Rm は次の形で書けます。
この表示から、次の同型があるのは分かります。
- AL(Rn, Rm) Rnm + m
同型写像をひとつ具体的に与え固定すると概ユークリッド空間になります。ここでは、行列の第1行を左から右に読んでいき、次には第2行という順序で行列成分を列挙します。行列成分の列挙の後に定数項ベクトル成分を並べることで同型を作ることにします。この大域座標を GAL(Rn, Rm):LA(Rn, Rm) → Rnm + m として、記号の乱用で AL(Rn, Rm) = (AL(Rn, Rm), GAL(Rn, Rm)) とします。
概ユークリッド空間の直積はまた概ユークリッド空間になるので、AL(Rn, Rm) × AL(Rk, Rℓ) も概ユークリッド空間です。
ニューラル関数の圏
σ:R → R in AES に対して σ(n):Rn → Rn は次のように定義します。
関数 σ:R → R in AES (活性化関数〈activation function〉と呼ばれる)をひとつ固定して、概ユークリッド空間の圏の部分圏 Neulσ ⊆ AES を定義します。Neulσ の射はσ-ニューラル関数〈σ-neural function〉と呼ぶことにして、σ-ニューラル関数の全体を帰納的〈inductive〉に定義しましょう。
- アフィン線形写像 f:Rn → Rm in AES はσ-ニューラル関数である。特に、恒等写像 idRn:Rn → Rn はニューラル関数である。
- n = 1, 2, ... に対して、σ(n):Rn → Rn はσ-ニューラル関数である。
- f, g∈Mor(AES) がσ-ニューラル関数で結合可能なとき、それらの結合 f;g もσ-ニューラル関数である。
- 以上で定義される関数だけがσ-ニューラル関数である。
圏 Neulσ の対象の集合とホムセットは:
- Obj(Neulσ) = |Neulσ| = (すべてのユークリッド空間の集合) N
- Neulσ(Rn, Rm) = (Rn → Rm のニューラル関数の集合)
ニューラル関数を定義する条件の二番目を次のように変更しても同じ関数クラスを定義します。
- アフィン線形写像 f:Rn → Rm, g:Rm → Rℓ に対して、f;σ(n);g:Rn → Rℓ はσ-ニューラル関数である。
[/補足]
σをアフィン線形関数(1次関数)に選んでしまうと、σ-ニューラル関数はアフィン線形関数のことになってしまいます。σをうまく選べば、AES(Rn, Rm) の関数を Neulσ(Rn, Rm) のニューラル関数でより良く近似可能になります。さらに、関数空間 Neulσ(Rn, Rm) 全体を使うのではなくて、有限個の実数パラメータで表示できる部分空間だけでも十分良い近似が得られると期待されています。
そして、実際に近似を求めるアルゴリズム(のひとつが)が最急降下法機械学習です。
関数のパラメータ族とパラメータ付き関数
集合圏で、F:P → Map(A, B) in Set があると、反カリー化することにより、f = F∪ :P×A → B in Set が得られます(下付きの'∪'は反カリー化オペレータ記号)。もちろん、f をカリー化すると、もとの F に戻ります。
- 反カリー化 (-)∪:Set(P, Map(A, B)) → Set(P×A, B) in Set
- カリー化 (-)∩:Set(P×A, B) → Set(P, Map(A, B)) in Set
集合圏では、F = f∩ と f = F∪ は1:1に対応するので、ときに同一視することもあります。Pをパラメータの集合と考えると、F:P → Map(A, B) in Set は関数のパラメータ族〈parameterized family of functions〉です。一方、f:P×A → B in Set は、入力の一部にパラメータ集合を持つ関数〈function with parameters〉です。後者の関数をパラメータ付き関数〈parameterized function〉とも呼びます。
一般的な圏Cでは、関数のパラメータ族に相当する射は F:P → [A, B] in C になります。ここで、[A, B] は指数対象ですが、指数対象が利用できない圏もあります。パラメータ付き関数 f:PA → B in C ならモノイド積があれば定義できます。後々の都合を考えて、C は対称モノイド圏だとしましょう。
パラメータ付き射 f:PA → B と g:QB → C in C に対して、パラメータ付き射としての結合をして f;;g:(PQ)A → C in C を定義できます。(以下に出てくる αQ,P,A はモノイド圏の結合律子です)。
- f;;g := αQ,P,A;(idQf);g in C
次のような対応があります。(以下に出てくる λA はモノイド圏の左単位律子です。)
- f:PA → B in C ⇔ f:A → B in Para(C)
- f;;g:(PQ)A → C in C ⇔ f;g:A → C in Para(C)
- λA:1A → A in C ⇔ idA:A → A in Para(C)
すぐ上のような対応で、パラメータ付き射の圏 Para(C) が構成できます。ただし、この素朴な構成だけでは若干問題があります。パラメータ対象の同型による同値関係で商をとらないと、ちゃんとした圏にはなってくれません。商をとってもなお、ホムセットが小さい保証はありません。
でもまー、ここではうるさいこと言わないで、Para(C) は出来た、大丈夫だと思いましょう。
特に、圏 Para(AES) の射 f:A → B は、概ユークリッド空間 P をパラメータ空間とする微分可能写像です。気持ちの上では、f:A → B in Para(AES) を関数のパラメータ族 F:P → C1(A, B) in Set と思ってもかまいません(C1(A, B) は、概ユークリッド空間 A から B への1階微分可能写像の集合)。
単一ニューラルネットの形状の圏
単一のニューラルネットの形状を表すデータからなる圏SNNSはしりとりの圏です。
ただし、上記記事で使っているひらがなの集合を自然数の集合 N = {0, 1, 2, ...} に置き換えます。ひらがな文字列は自然数のリストに置き換えます。念の為、圏SNNSの仕様を書いておきます。
- Obj(SNNS) = |SNNS| = N
- Mor(SNNS) = List≧1(N) (長さ1以上の自然数のリスト)
- dom((n, ..., m)) = n
- cod((n, ..., m)) = m
- id(n) = (n) (長さ1のリスト)
- comp((n, ..., m), (m, ..., ℓ)) = (n, ..., m);(m, ..., ℓ) = (n, ..., m, ..., ℓ) (しりとり結合)
(2, 3, 4, 3) とか (3, 3) とかは、圏SNNSの射です。この2つの射は結合可能で、(2, 3, 4, 3);(3, 3) = (2, 3, 4, 3) となります。
リストの長さとしりとり結合のあいだには次の関係があります。
- length(α;β) = length(α) + length(β) - 1
形状からの実現関手
さて、関手 SIσ:SNNS → Para(AES) を定義しましょう。σ:R → R in AES は選んで固定した活性化関数です。
圏SNNSの射 (n, ..., m) に対する関手 SIσ の値は、SIσ((n, ..., m)) と書くべきですが、二重の括弧を省略して SIσ(n, ..., m) と略記します。
まず、SNNSの対象(自然数) n に対してn次元ユークリッド空間を対応させます。
- For n∈|SNNS|, SIσ(n) := Rn ∈|Para(AES)|
射(自然数のリスト)に対する値ですが、リストの長さが 1, 2, 3 の場合を丁寧に説明します。
リストの長さが 1 の場合
混乱しないように、長さ 1 のリスト (n):n → n in SNNS を idn と書きます。
- SIσ(idn) := ({0}×Rn∋ (0, x) x ∈Rn) : Rn → Rn in Para(Rn)
要するに、長さ 1 のリストは、パラメータ付き関数の圏の恒等射に対応します。SIσ を関手にしたいので、そりゃそうなります。
リストの長さが 2 の場合
長さ 2 のリスト (n, m):n → m in SNNS に対する関手の値は:
- SIσ(n, m) := (AL(n, m)×Rn∋ (f, x) f(x) ∈Rm) : Rn → Rm in Para(Rn)
SIσ(n, m) は、評価写像〈evaluation map〉です。パラメータ空間が、概ユークリッド空間としての AL(n, m) で、パラメータ付き関数としてのプロファイルは Rn → Rm です。気持ちの上では、AL(n, m) を AES(Rn, Rm) = C1(Rn, Rm) へ埋め込む写像だと思ってもかまいません。
次のような解釈ができます。
- SIσ(n, m):Rn → Rm in Para(AES)
- SIσ(n, m):AL(n, m)×Rn → Rm in AES
- (SIσ(n, m))∪:AL(n, m) → AES(Rn, Rm) in Set
- (SIσ(n, m))∪:AL(n, m) → Neulσ(Rn, Rm) in Set (Neulσ(Rn, Rm) ⊆ AES(Rn, Rm))
リストの長さが 3 の場合
長さ 3 のリスト (n, k, m):n → m in SNNS に対する関手の値は:
- SIσ(n, k, m) := (AL(n, k)×AL(k, m))×Rn∋ (f, g, x) (f;σ(k);g)(x) ∈Rm) : Rn → Rm in Para(Rn)
今度はパラメータ空間が AL(n, k)×AL(k, m) になります。中間に σ(k) を挟んで2つのアフィン線形写像を結合して、それを x に適用します。
次のような解釈ができます。
- SIσ(n, k, m):Rn → Rm in Para(AES)
- SIσ(n, k, m):(AL(n, k)×AL(k, m))×Rn → Rm in AES
- (SIσ(n, k, m))∪:AL(n, k)×AL(k, m) → AES(Rn, Rm) in Set
- (SIσ(n, m))∪:AL(n, k)×AL(k, m) → Neulσ(Rn, Rm) in Set (Neulσ(Rn, Rm) ⊆ AES(Rn, Rm))
リストの長さが 4 以上の場合
長さ 4 以上のリストに対しても同様で、アフィン線形写像と σ(k) を互い違いに結合した関数の適用になります。カリー化すれば、アフィン線形写像の空間の直積をニューラル関数の空間に埋め込んでいることになります。
SIσ が関手であるためには、次の性質が要求されます。
- SIσ((n, ..., m);(m, ..., ℓ)) = SIσ((n, ..., m));SIσ((m, ..., ℓ)) in Para(AES)
- SIσ(idn) = idSIσ(n) in Para(AES)
これらは、先に注意した“Para(AES) 構成の微妙な問題”がありますが、定義に従って確認できることです。
おわりに
リスト (n, ..., m) が表しているのはニューラルネットの形状に関する仕様で、n が入力層のニューロン数、m が出力層のニューロン数、あいだの自然数は中間層のニューロン数です。
十数年前に、初めて圏論に触れる人のためのオモチャとして考案したしりとりの圏が、理論上・実際上の意味を持つ圏として再登場して、なかなかに感慨深いものがあります。これからは、「しりとりの圏は単なるオモチャじゃなくて、応用もある実用的な圏なんだぞ」と言えますね(笑)。