雑感等

音楽,数学,語学,その他に関するメモを記す.

ベイズ推論

モチベーション

  • 点推定よりも多くのことがわかる
    • 分布全体がわかる
      • 定量の自信のなさがわかる

ベイズ推論と「ベイズの定理」の関係

  • ベイズの定理は確率分布と確率分布の組み合わせ方を示すだけ
    • 事前分布(常識とか前知識)と尤度関数(観測したこと)とを組み合わせる方法を示すだけ
    • ベイズの定理の式に深遠な意味を求めようとしてしまうのは落とし穴
      • ベイズ推論を勉強する中で,ベイズの定理を理解するのにおそらくそれほど多くの時間は必要としない
  • ベイズの定理と事前分布と尤度関数から,事後分布全体が求まる
    • 確率分布全体を表す式が求まるのであって,あるパラメータの最適値が求まるわけじゃない
      • もちろん,確率分布全体を表す式から何らかの最適値を求められる場合はある
  • むしろ事前分布と尤度関数を,どのように表現するかが重要
    • だからベイズ推論を解説する本では,個々の確率分布をいちいち細かく説明してる

neural ODEを理解したい

https://arxiv.org/abs/1806.07366

neural ODEがわからない.この理由として考えるのは,

  •  \frac{dz}{dt}=f(z(t),t,\theta) のfがどうなってるのかわからない
    • tがどのようにfの中でパラメータ化されてるかがわからない

neural ODEがResNetやニューラルネットの拡張であることを考えれば, fについて次のように考えた:

  • f自体は活性化関数?
  • fの中で z(t)\cdot \thetaとして積をとる? ←z(t)と\thetaの絡みがよくわからない
    • それ以外の要素としてtが影響する? ←f()と\thetaの絡みがよくわからない
    • というかResNetからneural ODEに変形するときは,\theta_tみたいに,\thetatの関数だったんじゃないのか
    • f()自体がtで形を変える?

調べてみた

https://github.com/rtqichen/torchdiffeq/blob/master/examples/latent_ode.py のソースを読むとわかった.

https://arxiv.org/abs/2006.00712 Koji Hashimoto, Hong-Ye Hu, Yi-Zhuang You. Neural ODE and Holographic QCD (2020) arXiv:2006.00712v1 [hep-th] の式の表記がわかりやすかった.

上の箇条書きに対する答え

  •  \frac{dz}{dt}=f(z(t),t,\theta) のfがどうなってるのかわからない→fの中にtが含まれない場合,fは基本的にはニューラルネット.しかしfがtに依存するように設計すれば,単純なニューラルネット(多層パーセプトロンや畳み込みニューラルネット)よりも広い範囲を扱えそう

    • tがどのようにfの中でパラメータ化されてるかがわからない→fとして単純なニューラルネット(resnetにおける残差ブロック)を用いるなら,fにtは含まれない.fの中にtが含まれることはひとまず考えなくてもよい.
  • f自体は活性化関数?→活性化関数ではなく,ResNetにおける残差ブロック(1層以上のニューラルネット)に相当する

  • fの中で z(t)\cdot \thetaとして積をとる? →\thetaはパラメータ全般を指すから一部は積を取り,バイアスパラメータとして加算されることもある
    • それ以外の要素としてtが影響する? →f()が普通のニューラルネットMLPとかCNN)ならtは影響しない
    • というかResNetからneural ODEに変形するときは,\theta_tみたいに,\thetatの関数だったんじゃないのか→neural odeでは\thetatのパラメータではなく,単一の関数f()(f()がニューラルネットなら複雑な形を表現しうる関数)になる.関数は一定だからf()を決定するパラメータである\thetaは定数でtに依存しない.
    • f()自体がtで形を変える?→f()はtに依存するため値は変わるが,f()の形・数式やf()に相当するニューラルネットの構成は変わらない

わかったっぽいことについて列挙

  • (Hashimoto et.al. , 2020)論文では \frac{dz}{dt}=f_{\theta}(z(t),t) \frac{dx_i}{dt}=v_i(\vec{x}(t),t;\theta)と表記されていて,\thetaがあくまでも訓練されるパラメータであることが示されている
    • "latent_ode.py"のほうでも,\thetaに相当するのは"class LatentODEfunc"中の重みパラメータになるはず(ソースを見ても明示的には重み変数は出てこないがpytorchの処理の中でたぶん更新されてる?)
  • さらに,同class内で"def forward(self, t, x):"という関数がありここでResNetに置ける残差ブロックに相当する関数(式のf())が定義される
    • しかし,同関数中ではtは使用されないことから,neural odeを普通のresnetの拡張と考えた場合は,f()はtによらない関数になるようだ
  • neural odeの式を見た通り,ニューラルネットf()の値は微分値を表しているだけ
    • 例えばf()が(全結合層+活性化関数ReLU)が2層だったら→ \displaystyle \frac{d\boldsymbol{z}(t)}{dt}=\mathrm{ReLU}( \boldsymbol{ \theta }_1 +\boldsymbol{ \theta }_2  \cdot \mathrm{ReLU}(\boldsymbol{ \theta }_3 +\boldsymbol{ \theta }_4   \boldsymbol{z} (t) ) )になる?
    • resnetのように重みが層ごとに変化するなら \displaystyle \frac{d\boldsymbol{z}(t)}{dt}=\mathrm{ReLU}( \boldsymbol{g}_1(\boldsymbol{ \theta }_1 ,t)+\boldsymbol{g}_2(\boldsymbol{ \theta }_2,t)  \cdot \mathrm{ReLU}(\boldsymbol{g}_3(\boldsymbol{ \theta }_3,t) +\boldsymbol{g}_4(\boldsymbol{ \theta }_4,t)   \boldsymbol{z} (t) ) )となる?
      • 関数g()をどうにか決める必要があるけど,g()自体もニューラルネットにすればいいのか
        • べつにg()を使わなくてもf()を十分複雑にすれば,tに依存して変化するパラメータ \boldsymbol{\theta}(t)みたいな振る舞いを学習できるのかな
  • f()がtを含むか否かについて
    • tを含まないなら,層単位でパラメータを持つネットワークを表現できない→resnet以下の表現力になる?
    • tを含ませるなら,resnet同様の表現力になる?
      • tを含ませる場合のニューラルネットの表現として,y=Ax+bをダミー入力1の導入でy=Axとして置きなおせるように,ダミー入力みたいにtを入力にすればいい?
  • Figure 3: Statistics of a trained ODE-Net. (NFE = number of function evaluations.)が示すように関数の評価回数が変わるのはなぜか

pythonで並列(joblib)使った際のパーミッションエラー

https://github.com/joblib/joblib/issues/806

albertcthomas commented on 3 Dec 2018 @robintwhite for now, if this is possible in your case, you can disable memmaping by setting max_nbytes=None in Parallel

Parallel(n_jobs=-1, max_nbytes=None)(...)としたら問題が起きなくなった

PRMLの確率的主成分分析の式とPCA/ZCA白色化

https://www.microsoft.com/en-us/research/people/cmbishop/prml-book/ https://cbrnr.github.io/2018/12/17/whitening-pca-zca/

PRMLのp.574の確率的主成分分析(PPCA)に関する式(12.45)  \displaystyle \mathbf{W}_\mathrm{ML}=\mathbf{U}_\mathrm{M} ( \mathbf{L}_\mathrm{M} - \sigma ^2 \mathbf{I} )^{1/2} \mathbf{R} において, \sigma ^2=0とした(確率的ではない普通のPCAとした)上で,

  1.   \displaystyle  \mathbf{R}=\mathbf{I}とすればPCA白色化の式を得る.
  2.   \displaystyle  \mathbf{R}= \mathbf{U}_\mathrm{M} ^{-1}とすればZCA白色化の式を得る.

PRMLのp.574の確率的主成分分析(PPCA)に関する式(12.45)  \displaystyle \mathbf{W}_\mathrm{ML}=\mathbf{U}_\mathrm{M} ( \mathbf{L}_\mathrm{M} - \sigma ^2 \mathbf{I} )^{1/2} \mathbf{R}

ただし,

  •  \displaystyle \mathbf{W}_\mathrm{ML}は,変換行列(データ \mathbf{X}にかけて, \displaystyle \mathbf{Z}=\mathbf{W}_\mathrm{ML} \mathbf{X} みたいに使う)
  •  \displaystyle \mathbf{U}_\mathrm{M}は,データ \mathbf{X}の共分散行列 \mathbf{S}固有ベクトルを並べた行列(原文とは異なり,ここでは次元削減を考えない)
  •  \displaystyle \mathbf{L}_\mathrm{M} は, \mathbf{S}固有値を対角成分とした行列(固有値の並びは \displaystyle \mathbf{U}_\mathrm{M}に対応する)
  •   \displaystyle \sigma ^2は,PPCAで次元削減する際の次元に関連した分散
  •  \displaystyle \mathbf{I}は,単位行列
  •  \displaystyle  \mathbf{R} は,任意の直交行列

さて,PPCAのモデル(潜在変数\mathbf{z}と観測されたデータ\mathbf{x}の関係)は\mathbf{x}=\mathbf{W} \mathbf{z} +\mathbf{\mu} +\mathbf{\epsilon}で表される. ノイズ項\mathbf{\epsilon}は無視すると,\mathbf{x}-\mathbf{\mu} =\mathbf{W} \mathbf{z}となる.\mathbf{x}から\mathbf{z}を求めるには,\mathbf{z}=\mathbf{W} ^{-1} ( \mathbf{x} - \mathbf{\mu} )とすれば良い.

これに,先ほどの\mathbf{W}_\mathrm{ML}\mathbf{W}に代入して, \mathbf{z}= \left( \mathbf{U}_\mathrm{M} ( \mathbf{L}_\mathrm{M} - \sigma ^2 \mathbf{I} )^{1/2} \mathbf{R}  \right) ^{-1}  ( \mathbf{x} - \mathbf{\mu} ) . さらに,次の性質を使って変形する.

したがって,\mathbf{z}=  \mathbf{R}  ^{-1}  ( \mathbf{L}_\mathrm{M} ^{-1}  - \sigma ^2 \mathbf{I} )^{1/2}   \mathbf{U}_\mathrm{M} ^{-1}  ( \mathbf{x} - \mathbf{\mu} )

ここで,\sigma ^2=0として「確率的」でない主成分分析にすると, \mathbf{z}=  \mathbf{R}  ^{-1} \mathbf{L}_\mathrm{M} ^{-1/2} \mathbf{U}_\mathrm{M} ^{-1}  ( \mathbf{x} - \mathbf{\mu} )

この上で,  \displaystyle  \mathbf{R}は任意の直交行列であるから,  \displaystyle  \mathbf{R}に代入する値として次の二つの場合を考える:  \displaystyle  \mathbf{R}=\mathbf{I}  \displaystyle  \mathbf{R}= \mathbf{U}_\mathrm{M} ^{-1}= \mathbf{U}_\mathrm{M} ^{T}

まず,  \displaystyle  \mathbf{R}=\mathbf{I}とすれば, \mathbf{z}= \mathbf{L}_\mathrm{M} ^{-1/2} \mathbf{U}_\mathrm{M} ^{-1}  ( \mathbf{x} - \mathbf{\mu} ) となる. この式で  \mathbf{x}  から  \mathbf{z}  を求める操作はPCA白色化と呼ばれる. また,この式は,p.568の式(12.24)  \displaystyle  \mathbf{y}_n=\mathbf{L} ^{-1/2} \mathbf{U} ^{T} ( \mathbf{x}_n - \bar{\mathbf{x}} )として示される式と一致する.

一方,  \displaystyle  \mathbf{R}= \mathbf{U}_\mathrm{M} ^{-1}= \mathbf{U}_\mathrm{M} ^{T}とすれば, \mathbf{z}= \mathbf{U}_\mathrm{M} \mathbf{L}_\mathrm{M} ^{-1/2} \mathbf{U}_\mathrm{M} ^{-1}  ( \mathbf{x} - \mathbf{\mu} ) となる. この式で  \mathbf{x}  から  \mathbf{z}  を求める操作はZCA白色化と呼ばれる.

集合による数の表現

自然数

  • 0 = {}
  • k+1 = { k , { k } }
名前 展開 実体
0 {}
1 { 0, {0} } { {} , { {} } }
2 { 1, {1} } { { {} , {{}} } , { { {} , {{}} } } }
3 { 2, {2} } { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } }

整数

  • n-m = < n ,m > = { n, { n, m } }
名前 展開 実体
0 0-0=< 0 , 0 > { {} , { {} , {} } }
0 1-1=< 1 , 1 > { { {}, {{}} } , { { {}, {{}} } , { {}, {{}} } } }
0 2-2=< 2 , 2 > { { { {}, {{}} } ,{ { {}, {{}} } } } , { { { {}, {{}} } ,{ { {}, {{}} } } } , { { {}, {{}} } ,{ { {}, {{}} } } } } }
0 3-3=< 3 , 3 > { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } } }
1 1-0=< 1 , 0 > { { {}, {{}} } , { { {}, {{}} } , {} } }
1 2-1=< 2 , 1 > { { { {}, {{}} } ,{ { {}, {{}} } } } , { { { {}, {{}} } ,{ { {}, {{}} } } } , { {}, {{}} } }
2 2-0= < 2 , 0 > { { { {}, {{}} } ,{ { {}, {{}} } } } , { { { {}, {{}} } ,{ { {}, {{}} } } } , {} } }
3 3-0=< 3 , 0 > { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , {} } }
-1 0-1= < 0 , 1 > { {} , { {} , { {}, {{}} } } }
-1 1-2=< 1 , 2 > { { {}, {{}} } , { { {}, {{}} } , { { {}, {{}} } ,{ { {}, {{}} } } } } }
-2 0-2=< 0 , 2 > { {} , { {} , { { {}, {{}} } ,{ { {}, {{}} } } } } }

Note: 上記では自然数で0={}としたが,自然数で1={}と定義しても,整数の実体と名前の対応には影響しない.

有理数

  • r/s = < r , s > = { r , { r , s } }
名前 展開 実体
0 0/1=< 0 , 1 > { { {} , { {} , {} } } , { { {} , { {} , {} } } , { { {}, {{}} } , { { {}, {{}} } , {} } } } }
0 0/2=< 0 , 2 > { { {} , { {} , {} } } , { { {} , { {} , {} } } , { { {}, {{}} } ,{ { {}, {{}} } } } } }
1 2/2=< 2 , 2 > { { { {}, {{}} } ,{ { {}, {{}} } } } , { { { {}, {{}} } ,{ { {}, {{}} } } } , { { {}, {{}} } ,{ { {}, {{}} } } } } }
-1/3 (-1)/3=< -1 , 3 > { { {} , { {} , { {}, {{}} } } } , { { {} , { {} , { {}, {{}} } } } , { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , {} } } } }
-3/2 3/(-2)=< 3 , (-2) > { { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , {} } } , { { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , { { { { {} , {{}} } , { { {} , {{}} } } } , { { { {} , {{}} } , { { {} , {{}} } } } } } , {} } } , { {} , { {} , { { {}, {{}} } ,{ { {}, {{}} } } } } } } }

実数

無限集合になるから実体として表記できない?

  • 切断による定義なら,ある値を「ある値未満のすべての有理数の集合」で表す.
  • コーシー列による定義なら,ある値を無限数列で表す.

数の「実体」を集合で書き下してみたが,結局かっこの羅列になった. これは,PC内のファイルをバイナリエディタで開いて,あらゆるファイルが1と0で表せることを改めて確認したようなものだ.

数だけあってもどうしようもなく,演算を導入してようやく意味がある.

参照