IIm7→V7にII Dorian使うのってIV Lydian使うのと一緒か
neural ODEを理解したい
https://arxiv.org/abs/1806.07366
neural ODEがわからない.この理由として考えるのは,
- のfがどうなってるのかわからない
- tがどのようにfの中でパラメータ化されてるかがわからない
neural ODEがResNetやニューラルネットの拡張であることを考えれば, fについて次のように考えた:
- f自体は活性化関数?
- fの中でとして積をとる? ←z(t)と\thetaの絡みがよくわからない
- それ以外の要素としてtが影響する? ←f()と\thetaの絡みがよくわからない
- というかResNetからneural ODEに変形するときは,みたいに,はの関数だったんじゃないのか
- 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] の式の表記がわかりやすかった.
上の箇条書きに対する答え
のfがどうなってるのかわからない→fの中にtが含まれない場合,fは基本的にはニューラルネット.しかしfがtに依存するように設計すれば,単純なニューラルネット(多層パーセプトロンや畳み込みニューラルネット)よりも広い範囲を扱えそう
- tがどのようにfの中でパラメータ化されてるかがわからない→fとして単純なニューラルネット(resnetにおける残差ブロック)を用いるなら,fにtは含まれない.fの中にtが含まれることはひとまず考えなくてもよい.
f自体は活性化関数?→活性化関数ではなく,ResNetにおける残差ブロック(1層以上のニューラルネット)に相当する
- fの中でとして積をとる? →はパラメータ全般を指すから一部は積を取り,バイアスパラメータとして加算されることもある
わかったっぽいことについて列挙
- (Hashimoto et.al. , 2020)論文ではやと表記されていて,があくまでも訓練されるパラメータであることが示されている
- "latent_ode.py"のほうでも,に相当するのは"class LatentODEfunc"中の重みパラメータになるはず(ソースを見ても明示的には重み変数は出てこないがpytorchの処理の中でたぶん更新されてる?)
- さらに,同class内で"def forward(self, t, x):"という関数がありここでResNetに置ける残差ブロックに相当する関数(式のf())が定義される
- しかし,同関数中ではtは使用されないことから,neural odeを普通のresnetの拡張と考えた場合は,f()はtによらない関数になるようだ
- neural odeの式を見た通り,ニューラルネットf()の値は微分値を表しているだけ
- 例えばf()が(全結合層+活性化関数ReLU)が2層だったら→ になる?
- resnetのように重みが層ごとに変化するなら となる?
- 関数g()をどうにか決める必要があるけど,g()自体もニューラルネットにすればいいのか
- べつにg()を使わなくてもf()を十分複雑にすれば,tに依存して変化するパラメータみたいな振る舞いを学習できるのかな
- 関数g()をどうにか決める必要があるけど,g()自体もニューラルネットにすればいいのか
- 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) において, とした(確率的ではない普通のPCAとした)上で,
- とすればPCA白色化の式を得る.
- とすればZCA白色化の式を得る.
PRMLのp.574の確率的主成分分析(PPCA)に関する式(12.45)
ただし,
- は,変換行列(データにかけて,みたいに使う)
- は,データの共分散行列の固有ベクトルを並べた行列(原文とは異なり,ここでは次元削減を考えない)
- は,の固有値を対角成分とした行列(固有値の並びはに対応する)
- は,PPCAで次元削減する際の次元に関連した分散
- は,単位行列
- は,任意の直交行列
さて,PPCAのモデル(潜在変数と観測されたデータの関係)はで表される. ノイズ項は無視すると,となる.からを求めるには,とすれば良い.
これに,先ほどのをに代入して, . さらに,次の性質を使って変形する.
- は固有ベクトルを並べた行列だから直交行列であるため,
したがって,.
ここで,として「確率的」でない主成分分析にすると, .
この上で,は任意の直交行列であるから,に代入する値として次の二つの場合を考える:と.
まず,とすれば, となる. この式でからを求める操作はPCA白色化と呼ばれる. また,この式は,p.568の式(12.24)として示される式と一致する.
一方,とすれば, となる. この式でからを求める操作はZCA白色化と呼ばれる.