フォング/スピヴァック/トゥイーラス*1の次の論文が面白そうなので話題にします。
- Title: Backprop as Functor: A compositional perspective on supervised learning
- Authors: Brendan Fong, David I. Spivak, Rémy Tuyéras
- Submitted: 28 Nov 2017 (v1), May 2019 (v3)
- Pages: 13p + 4p(appendix)
- URL: https://arxiv.org/abs/1711.10455
この論文のサマリーを提供する気はなくて、読むときに注意すべき事項と、一般化したほうが良さそう/変更したほうが良さそうなところについて述べます。大雑把なハナシしかしないので、個別の論点はまた別な記事にするかも知れません。[追記]関連記事を書きました。関連記事は、目次の下にリストすることにします。[/追記]
内容:
関連記事:
何が書いてないか
フォング達の論文を読んでも、テクノロジーとしての最急降下法機械学習の技法はサッパリ分からないです(書いてないから)。具体的詳細はともかくとして、この分野の鳥瞰的景観〈Bird's eye view〉は得られるかも知れません。
確率統計的な議論はまったく出てきません。誤差関数 E が天下りに現れます。誤差関数の定義や合理化に確率統計的な議論が使われますが、それはもう終わっているという前提です。
最急降下法機械学習アルゴリズムを抽象化した概念的実体をGD学習子〈GradientDescent learner〉と呼ぶことにしましょう。フォング達の論文では、GD学習子はLearnと呼ばれる圏の射として実現されます。ただし、Learnの射がすべてGD学習子というわけではありません。とある関手の像となる射がGD学習子です。
GD学習子は、訓練データセットを食わせる〈フィードする〉ことによって学習を実行します。フォング達の論文では、学習の実行については何も書いてありません。単一の学習データ(値のペア)に対するワンステップの更新動作しか問題にしていません。更新動作の繰り返しとしての学習の実行はまだ始まってないという前提です。
前提をまとめると:
- 確率統計的な議論は終わっている。だから、書いてない。
- 学習の実行は始まってない。だから、書いてない。
フォング達の論文が語っていることは、ニューラルネットの形状(簡単な仕様)とパラメータ付き関数〈parameterized function〉とGD学習子のあいだのマクロな関係性だけです。
「で、何がうれしいの?」と聞かれると、僕はよく分かりません。ひょっとすると、最急降下法機械学習のライブラリ/フレームワークの設計原理になるかも知れません。が、鳥瞰的景観を眺めたときの爽快感が一番の“うれしさ”のような気がします。
ちょっと一般化すれば
フォング達の論文で中心的役割を演じている圏はParaとLearnです。圏Paraも圏Learnも、対象は集合だとしています。これは分かりやすさのためだと思います。が、最急降下法は微分を使うので、単なる集合の上で最急降下法が定義できるわけではありません。
微分計算ができる空間となると、(可微分構造を備えた)多様体となるでしょう。リーマン計量もあったほうが便利なので、リーマン多様体の圏RieMan*2をベースにするのが良さそうです。
特定の圏 Para、Learn を考えるのではなくて、ベースの圏から新しい圏を作る構成法としての Para, Learn を考えることにしましょう。集合圏Setがベースなら、
リーマン多様体の圏RieManがベースなら、
という圏達を使って理論を展開できます。
Para、Learn の構成を見ると、ベースの圏はそれぞれ対称モノイド圏〈symmetric monoidal category〉、デカルト・モノイド圏〈Cartesian monoidal category〉なら大丈夫*3なので、Para, Learn は次のような“圏の圏”のあいだの関手になるでしょう*4。( は、“圏の圏”の2-圏達からなる3-圏です。)
ベースの圏をいきなりリーマン多様体の圏にするのは大変だし、とりあえずはその必要もないでしょう。非常に簡単な多様体のクラスとして概ユークリッド空間〈almost Euclidean space〉のクラスがあります。概ユークリッド空間は次の記事で定義しています -- ほとんどユークリッド空間と変わらない多様体です。
概ユークリッド空間のあいだの射は適当な回数(階数)連続微分可能な写像〈r≧1 な Cr-写像〉です*5。概ユークリッド空間の圏をAESとして、
が、GD学習子を論じるときの適切なセッティングでしょう。
ここは分かりにくい
概ユークリッド空間の圏AESをベースに考えることにして、最急降下法機械学習がやっていることは、想定される“真な関数” を、与えられた訓練データセットをもとに推測することです。推測で得られた関数 は の近似ですが、近似の良さ(あるいは悪さ)を計るときに誤差関数を使います。
この誤差関数の定義は僕は分からなかったです。しかしこれは、はしょっている部分の議論を僕が知らないだけで、僕の無知のせいです。
それでも、誤差関数を作るモトみたいな関数 より、 を第一変数に関して偏微分した関数 をプライマリにしたほうが分かりやすい気がします。 は2つの実数値の食い違いを求める関数で、距離と幾分似た感じがします。
先に述べたように、パラメータ付き関数〈parametrized function〉や学習子〈learner〉は集合圏でなくても定義できるので、以下、圏のモノイド積を 、モノイド単位を 1 で表します。
一般の学習子、つまり Learn(C) (C はデカルト・モノイド圏)の射は、3つ組 (I, U, r) で定義されます。
- 学習子〈learner〉
- パラメータ空間〈parameter space〉
- 実装関数〈implementation {function}?〉
- 更新関数〈update {function}?〉
- リクエスト関数〈request {funcion}?〉
このなかでリクエスト関数については、フォング達の論文でも、"The request function is perhaps a little mysterious at this stage." と書いてあるように、イマイチ正体不明・意味不明なモノです。誤差関数の作り方も分からない僕には、GD学習子のリクエスト関数の作り方がどこから来たのか想像できません。そもそも、想像じゃダメですけど。
意図や由来の詮索は諦めて天下りの定義を認めるなら、実装関数
さえあれば、そこから誤差関数の微分〈勾配ベクトル場〉を使ってGD学習子( の射)を構成できることが論文の付録で証明されています。
この構成が、関手
になります。ただし、この関手を完全に決定するには幾つかのオプションを決める必要があります。
フォング達はまた、ニューラルネットの圏NNetも定義してますが、NNetの定義も分かりにくいですね。節を改めて書きます。
ニューラルネットの形状の圏
フォング達の圏NNetは、その対象・射に実体的意味は何もなく、ニューラルネットの形状(ニューロン数や層の数)を記述するだけの構文的対象物です。そうであるなら、もっと簡単な圏を作れそうです。二種類の圏を作ってみました。
- SNNS 単一ニューラルネットの形状の圏〈the category of single neural network shapes〉
- MNNS 多重ニューラルネットの形状の圏〈the category of multiple neural network shapes〉
圏SNNSは、ほんとにメチャクチャ簡単です。しかし、モノイド積を持ちません。モノイド積を入れた圏がMNNSです。モノイド積を入れたらけっこう複雑になってしまったので、今日はMNNSの話はしません。
圏SNNSを定義しましょう。
集合Xに対して、List(X) は、Xを項目〈要素 | 成分 | エントリー〉とするリストの集合です。リストの長さに制限を付けたいときは、List≧1(X) のような書き方をします。
圏SNNSの対象の集合はN(自然数の全体)です。射の集合は List≧1(N) です。つまり、長さ 2 1 以上の自然数のリストが射です。([追記]「長さ2以上」は間違いでした。[/追記])
- Obj(SNNS) = |SNNS| := N
- Mor(SNNS) := List≧1(N)
射の結合は、リストを繋ぐのですが、単なる連接ではなくてしりとり結合を使います。
恒等射もしりとりの圏と同じです。まさか、しりとりの圏が意味のある例で出てくるとは思わなかった。
リスト (n, ..., m) に対する dom((n, ..., m)) = n がニューラルネットの入力層のニューロン数、cod((n, ..., m)) = m がニューラルネットの出力層のニューロン数、length((n, ..., m)) - 2 が中間層の数を意味します(-1 のときも中間層なしです)。
使えるのか?
圏SNNSの対象と射は、ニューラルネットの形状に関する大雑把な情報(仕様)を提供するだけです。活性化関数 を決めてやると、次の関手が確定します*6。
'SI'は、Single neural network の Implementation のつもりです。形状の情報だけから、概ユークリッド空間のあいだのパラメータ付き関数が決定します。さらに、(オプションを具体化した)GDL関手を繋ぐと、学習子の圏 Learn(AES) 内にGD学習子を実現できます。
GDL関手のオプションは、最急降下法のワンステップの“歩幅”を指定する正実数 ε と、実数値の食い違いを計る関数 なので、2つの関手 SI, GDL を合わせてもチューニング要素は3つです。
- 活性化関数
- 正実数
- 食い違いを計る関数
最初の節で「最急降下法機械学習のライブラリ/フレームワークの設計原理になるかも知れません」と言ったのは、このようなオプションを指定するだけでGD学習子が手に入れば便利だし、全体が compositional にできていれば、色々なモノを色々に組み合わせて試せるのも便利な気がしたからです。僕は実務経験がないので、想像で言ってるだけですけどね。