普通の日記

3週間たってしまったし、普通の日記をする。

ここ数日考えていたことなど。

1.領域

理論というのがあります。

プログラム意味論 (情報数学講座)

 

↑みたいな本を結構前に読んで知ったのが最初(かつ実質的に最後)で、数学的には(非空)有効集合の上限をとれるような半順序集合とその単調連続関数、またはそれらのなす圏の理論のことです。何に使うのかというと、まぁよりよい解説は調べれば出てくると思うのですが、表示的意味論の文脈で、

らしいという観察があり、そこでこうした「上限」という極限構成が自由に行えるような「よく定義されている」性の順序構造を入れておき、意味はそこへ写像しましょうというのが一つの動機だと思います。プログラムは停止しなかったりすることがあるので、そういう値が\botや部分的にそれを返す関数などとして表現されます。\botにならずきちんと値を返す関数は、この順序で上位に来ます。これはこれとしてとてもおもしろく、「順序構造」で表現できる性質は本当に様々あって、発散する計算もそうした構造で表現できるのか、うまいなーというお気持ちが得られます。

 

で、それとは別にHaskellとかOCamlとかの代数的データ型を持った言語というのがあります。代数的データとは型についてのProduct,Coproduct,Terminalとかが取れたりするやつです。そこでこれらの言語は代数的データ型の演算(コンストラクタ)を混ぜながら、データ型自体を再帰定義することができます。プリミティブな型の意味論を与えるのは簡単ですが、再帰している場合にどうするか? という問題に、先と同じ解答を与えることができます。データ型の圏を、領域っぽくふるまう(\omega鎖の余極限があるような、mono射のみの)圏として、同じように再帰の「ガワ」をかぶせた列の余極限をとって不動点にします。リストや木などがその例になります。

 

Haskellなんかは圏の概念が使われていて云々~というのが少し前にあったと思います。僕はそれでHaskellに(というか計算機科学に)興味を持ったのですが、触ってみると言うほど使われているか? という疑問があります。MonadやFunctorは圏のそれに由来するのは確かだと思いますが、これらは個別の例でしかないわけです。型のレベルではまぁ使われているというかなんというか…? で、ちょっとググってみると、そもそもHaskellのデータ型の圏\bf{Hask}は圏じゃないという話が出てきます。

 

https://wiki.haskell.org/Hask

ただこの例はundefを使っていて、Haskellの評価戦略のせいでは?という気がするので、そんなに致命的ではないのでしょう(そもそも何に対して?)。

 

しかしまぁせっかくだし、圏とか領域とかの話を応用できんものかなーという気分にはなってくるのです。現実の汎用言語にそれに厳密に従わせるのは難しいでしょうから、圏なり領域なりでのいじった知見をそのままコーディングへ、という程度ならバチも当たらないでしょう。

 

そこで、再帰スキームとかいう概念が見つかります。

http://comonad.com/reader/2009/recursion-schemes/

Dynamorphism 〜 Haskellでも動的計画法がしたい! 〜 : 東京工業大学 ロボット技術研究会

ぶっちゃけるとまだよく理解していないのですが、日記なら許されるでしょう。

眺めてみると、代数/余代数を振り回すあたり、圏で計算概念をアレしようという勢力の香りがするし、射の構成が、「~を満たす最小の」というあたり領域です。いいですね。ここでの代数余代数は、再帰関数を、分岐処理の余代数と、結果の合流の代数を、その不動点型上で行いましょうという話に見えます。

しかしのっけから、

http://kodu.ut.ee/~eugene/kabanov-vene-mpc-06.pdf

Unfortunately, in CPO initial algebras do not exist.

とか言われてしまいます。CPOというのは領域の圏のことで、領域と圏をあわせるなら、圏で概念を特徴づけつつ、CPOで構成と計算を行って、その結果をそのままコーディングへ、と行きたいところですが、厳密な圏的普遍性をCPOでやるのは厳しいっぽい。それで、関連文献では領域じみた構成と疑似コーディングはしますが、それがどういった「弱い」普遍性をもつかまでは書いてなかったりします。

 

ほんで中途半端やなーというお気持ちで終わってしまうのですが、CPOはexponentialがあるので、\hom(A,B)も領域になります。射の合成も単調関数とわかっていますから、これはCPO豊穣な圏なわけです。すると豊穣圏には豊穣圏で、普遍性のバリエーションが考えられるわけです。例えば再帰スキームは、純粋に圏の議論だけでみると余自由コモナドを得る随伴を使うのですが、この随伴はもちろん正確な随伴ではありません。しかし今順序豊穣な圏なので、随伴の条件\hom(A,GB)\simeq\hom(FA,B)を、

\hom(A,GB)\dashv \hom(FA,B)に緩めることができます。順序集合の随伴なので、これは実質Galois接続です。こうした概念はもうあるようで、lax 2-Adjunctionだそうです。で、実際余自由コモナドを分解する「随伴」の、関連文献に書かれている領域計算をためしにやってみると、どうもGalois接続としての要件を満たしているような気がします。

 

お、ええやん。それでは再帰スキームにおける構成の圏論的普遍性を、CPO豊穣のlax 2-Adjunctionできちんと表現できるし、なぜそのようにコードを書かなければいけないかに理由がつくじゃん。とおもったところで気力が尽きてしまい。以来ずっと放置しているのです。つらいですね。さまざまなところでさまざまな頑張りが要求されることがわかります。

 

2.渡辺澄夫氏の理論

ってどういう扱いなのでしょうか。門外漢には完全に事情がわからない。

本としてはこれです↓

ベイズ統計の理論と方法

わりと出てすぐあたりの時期に買って非可算無限時間積んでいたのですが、ええかげんにせえよということで読み始めました。なんか機械学習やらAIやらで賑やかな世界があるっぽいということは聞きつつも、完全に他分野なので実装する力もなく、理論的な話をするにもなんか具体的なモデルがどうのこうのという話が多い印象の中、原理的な話を高い信頼性で書いてそう…という勝手な信頼をもって買い、積んでいたのです。今でも信頼していますよ。

 

大雑把には、任意回トライアルの確率空間上、学習アルゴリズムをその上のn回までで決まるような測度への可測関数だと思って、その経験損失を眺めていれば学習の挙動がわかる。では経験損失の挙動は何で決まるか? どう計算できるか? ベイズ推定の場合はどうか? という話と認識しています。ほんで、ベイズ推定の場合は経験対数損失(これも確率過程)をハミルトニアンとしたカノニカルアンサンブルが事後分布になり、インデックスと連動した低温極限をとることが学習の進行なので、ハミルトニアンの最小値に向かって最急降下法を取ればいいのですが、ハミルトニアンが素直な性質を持たないことがあり、うまくいかない事があります。しかしその場合でも解析的であれば、ナニヤラアンナコトコンナコトをすることで、無事計算ができるようになります。で、このナニヤラアンナコトコンナコトに、代数幾何の結果が利用されるので、代数幾何すごいね!というお気持ちになるのです。代数幾何、だれか教えて。

 

いずれ話がまとまったらノートをアレすると思います。

 

で、まぁそれはそうと、これを読みながら、どうせならσ加法族上で話してくれんかなーというお気持ちをもったので、それで書き直してみるなどの遊びをしていたのですが、じわじわと\mathbb{R}^n上の確率密度関数の贔屓っぷりはやばいというお気持ちがでてきました。これは次の話ですが。

 

3.確率ってさぁ…

 

確率測度とは何か。それはconcreteなσalgebra上の単位排他加算加法準同型のことです。\mathbb{R}^n上の積分が1になる正値関数は副次的な奴です。だいたい可測自己同型写像でいくらでも変わるやん。

普通確率論やるということになると、集合代数でσalgebraを作って、その上に測度を置いて一丁上がり、確率変数はその上の可測関数なわけです。もしかすると、ながらく離散確率空間や\mathbb{R}上の密度関数の形でしか確率を見たことがない人がいて、そういう方から見ると、「σalgebraってなんやねん」という話になりかねないのですが、数理科学の概念一般というか、大体この手の概念はちゃんとそう宣言する理由があるわけです。ないならギャップがある(過激派)。

 

で、それは何かというと、(古典的)「事象」なわけです。「事象」といったときに、それにどんな構造がありますか?と聞くと、否定や論理積論理和が取れるという観察があります。ほんで、統計処理をしたいので、加算無限回のそれがとれた方がいいということで、加算無現項の論理和と否定をとれるとします。これが(abstract)σalgebra。それから、確率はそれらに対して、「その事象が成り立つ確率」を返すわけなので、[0,1]への適当な準同型を確率と呼びます。

 

ん?まてよ、「事象」代数が集合演算じゃないやんけ。となるのがまぁギャップと言えばギャップですが、こういう束っぽい代数構造は大体集合圏との随伴が取れるはずなので、集合代数に表現すればよし。なんでするのか? うーん… 便宜上…

 

まぁσalgebraくらいは認めてください。

いずれこの手のギャップは殺す。(任意の人名を代入)の名にかけて。

 

でなんで密度関数が副次的かというと、これはルベーグ測度に対するRadon-Nikodim微分なんですよ。で、その\mathbb{R}上の測度としてルベーグ測度はなにによって、どこまで特徴付けられるのか、といったら、それはHaar測度で、定数倍を除き一意じゃないですか。要するに、それがHaar測度であることに何か意味がないなら、これをチョイスする理由がないんですよ。

 

例えばあなたが局所的には\mathbb{R}で座標書けるような可測空間であれこれしたいとするじゃないですか。で、そこで確率を考えた。もしかするとMAPとか最尤とかしちゃうかもしれない。そこで確率密度関数を、RN微分で…アアッーー!!!!!

 

まってそのルベーグ測度をチョイスする理由はなに?その座標ってさ、加法意味を持つの(ンフッ♥)え、微分同相を除いて一意?アハァーー。そうか、その測度が好きなんだねウンウン。

 

みたいなことが起きうるわけじゃないですか。

 

似たようなことがエントロピーでも起きる。エントロピーは狭義には離散確率空間ないしは可測空間の可算分割でしか定義できないはずなんですが、連続空間でも無理やり定義する方法があり、微分エントロピーとか呼びます。で、これ確率密度関数使うわけで、当然底空間の基準測度に依存するわけですよ。だいたい微分エントロピー、この基準測度へのKLdivergenceですよ。そりゃ依存するよ。もちろん、大抵の人はこうした事情をよく知っていて何をいまさらとお思いでしょうが。統計力学で古典的カノニカルアンサンブルでリウヴィル測度とらなかったせいで無事死亡した話を思い出しますね。

 

で、何がいいたいかというと、形式的な特徴付けをしないで、具体的な話をしすぎると、馴染みのある概念の非自明な性質がなんなのか自覚しないままアレしちゃうんですよね。かといって、いちいち普段使う概念を動機づけ、特徴付けしようとすると、僕のように完全に身動きが取れなくなりますのでそれは真似してはいけない。

 

はい。

 

塩梅が厳しいというわかりがあります。