Thu Jan 20 2022

日本において Coinhive が合法化された. ここが EU なら, ユーザーに許可を取る限りで合法だとなっていたはずだ. ユーザーの意図に反してユーザーのデバイス資源を占有するプログラムであって, そして提供側が利益を得るという点で, web 広告と比較されがちだ. 産業になってしまったものは誰も今から違法化するわけにいかない. 日本が海外から見れば児童ポルノだと言われるようなイラストを取ってつけたゲームを許してるのも, 日本の産業になってしまったからだと思われる.

といった文章を書くことで日記の体裁を保った. 以下駄文.

推論の圏

\(\def\Hom{\mathrm{Hom}}\)

推論

最終的にやりたいことは推論だ.

推論という操作は大雑把には写像だ. MNIST というデータセットは 28x28 の白黒画像に手書きした数字 (0-9) が1つ書かれている.

一枚の画像が入力として与えられるから, 書かれてる数字を推論せよという問題がある. 28x28 の画像は(画像という構造を忘れて)便宜的に \(\{0,1\}\)\(784 = 28 \times 28\) 個並んだものとすれば,

これがこの推論における入出力になる. \(a \in A\) が与えられたとき, ちょうど1つの \(b \in B\) を与えるとしてよい. \(B\) の上の確率分布を与えるようなものとしてもよい(この二つに本質的な差は内容に思える). ここでは単に写像として書く.

さて \(A,B\) があったときに, その間に写像さえあればいくらでも推論を作る事ができる. どんな入力に対しても \(0 \in B\) を予測するようなものも推論ではある. もちろん我々が欲しいのは, 良い推論である. 推論の良し悪しというのは普通データセットの上で定量的に評価する. 適当に用意した推論 \(f \colon A \to B\) があったときに, それより良い推論 \(f'\) があるかどうか, あるならどうすれば手に入るかを考えるのは自然だ.

さて以上のようにありとあらゆる集合を対象にして, その間のありとあらゆる推論を射とする圏を 推論の圏 と呼ぶことにする.

予測モデル

個々のやりたい推論に対して, 良さそうな推論を緻密に構築するのは難しい. しかしながら, 推論 \(f \colon A \to B\) から \(f\) から具体的なパラメータだけを分離した \(\overline{f}\) は構成が容易だ. この \(\overline{f}\) を推論 \(f\) のための 予測モデル という. とり得るパラメータ空間を \(P\) とすれば, 推論 \[f \colon A \to B\] に対して \[\overline{f} \colon A \times P \to B\] と書こう. なぜこのような \(\overline{f}\) を構成するのが簡単かといえば, 一般に \(\mathbb R^M \to \{0,1,\ldots,N-1\}\) といった形式の推論のための予測モデルはすでにいくらでも提案されており, 書籍やインターネットで手に入るからである. 上記の \(M, N\) を今回の \(A,B\) に沿うように調整するだけでよい.

普通, \[\overline{f} \colon A \times P \to B\] があったら \(\overline{f}\) を予測モデル, \(A\) を入力, \(P\) をパラメータと呼ぶが, しかしそのような意味付けはプログラマ(人間)のための便宜上のものに過ぎない. 推論の圏においては \((A \times P)\) から \(B\) を予測する推論でしかない.

この形式の推論(予測モデル)では, 射 \(\overline f\) を採用すると一度決めたら, 「良い推論を探す」とは「良いパラメータ \(p \in P\) を探す」ことにほかならない. この操作のことを 学習 という.

定数 \(p \in P\) のことを単集合 \(I = \{\ast\}\) からの射 \(p \colon I \to P\) と同一視すれば, \[f \circ (1_A \times p) \colon A \to B\] がシンプルに \(A\) から \(B\) への推論になる. この合成を「パラメータを \(p\) で固定する」という.

教師データ

学習に必要な道具について考える. 推論 \(A \to B\) を得るためには, \(a \in A\) については \(b \in B\) を(あるいは確率分布を)予測すべきという教師データが必要である.

もし全ての \(a \in A\) に対して教師データが用意されているなら, コレ自体を良い推論として使うことができる. しかし, 教師データとして与えられたものだけそれを使って推論して, 与えられていない場合には代わりに \(\bot\) を出力する推論が構築できる.

\[\Delta \colon A \to B \cup \{\bot\}\] \[\Delta(a) = \begin{cases} b & \text{ if } (a,b) \in D \\ \bot & \text{ else } \\ \end{cases}\]

この定義は \(a\) が重複して含まれてる場合を考慮してないといった問題があるが細かいことは省く.

\(\Delta\) のことも \(\mathcal D\) と同様に単に教師データと呼ぶことにする.

生成

推論 \(f \colon A \to B\) に対して, 推論 \[g \colon B \to A\] であって, \[f \circ g = 1_B\] なるような \(g\)\(f\) に対する生成と呼ぶ(\(1_B\) は恒等射).

もし \(f\) の生成があれば, そのようなものの1つを \(f^\top\) と書く.

特に, 教師データ \(\mathcal D\) による推論 \(\Delta\) については, 簡単にその生成 \(\Delta^\top\) が構築できる.

以下では一般の推論 \(f\) から生成 \(f^\top\) が構築できるとする.

誤差伝播に基づいた学習

深層学習における具体的な方法をここで述べることはしない. 圏のレベルでは, 次の操作があるということだけ言うことにする.

二つの推論 \(f,g \colon A \to B\) について, \[L \colon \Hom(A, B) \times A \times \Hom(A, B) \to A\] がある.

ここで \(\Hom(X,Y)\) とは \(X\) から \(Y\) への推論の集合を表す.

これは何をやりたいかというと, \(f(a)\) の値が \(g(a)\) の値に近づくような, \(a' = L(f,a,g)\)\(a\) の周りで探す操作であることを期待している.

があるとき, 型を揃えるために, \(\Delta \circ \pi_1 \colon A \times P \to B\) を用意すれば, \[L(\overline f, -, \Delta \circ \pi_1) \colon A \times P \to A \times P\] が得られる. 便宜的にこれを \[\overline f \triangleleft \Delta ~ \colon ~ A \times P \to A \times P\] と書こう.

これの \(\to P\) だけ抽出して, \[\pi_2 \circ ( \overline f \triangleleft \Delta ) ~ \colon ~ A \times P \to P\] とすれば, これがパラメータ更新の操作になっている.

ただし \(\bot\) の分は上手に無視することにする.

予測の合成

ここまでの説明では, ちょうど1つの予測モデルで最初の入力から最後の出力を推論していた. 実際にはこの推論は複数に分解してもよい. これは, パラメータの探索空間が狭まるとか実用上の効果がある.

MNIST の例で A, B の間に C という余計な空間を挟む. 例えば \(M\) 次元ユークリッド空間などである.

予測 \(A \to B\) を作るのに, 予測 \(f \colon A \to C\)\(g \colon C \to B\) をそれぞれ作って, これの合成 \(g \circ f\) として構築することを考える.

予測モデルを使う場合はそれぞれに

を与える必要がある. この合成は,

\[\overline{g} \circ \overline{f} \colon A \times (P \times Q) \to B\]

として動く.

学習

やればできる.