拡散モデル、データサイエンスのための確率の知識

拡散モデルなどを学んでいて、記号の使い方などに戸惑いましたけど、以下を知ってれば十分です。
### 確率とサンプリング
確率とサンプリングを混同してはいけない。区別してその関係を考える必要がある。このあたりが不明瞭な書籍も多い。
* 確率$P(x)$とは「$x$∈集合Ω」を定義域とする正値のスカラー関数で、総和が１になるもののことです。$P(a)$と書くときは、$a$は$x$の集合（Ωの部分集合）です。集合は離散的でも連続的でもいいです。一個だけ、というのも部分集合なので、文脈にもよるけど、$P(x)$は$x$が一個だけの場合も複数の場合（部分集合）もあると理解しておきます。確率$P(a)$とは部分集合$a$のΩに対する割合です。連続的な場合は集合を細かく分割してヒストグラム的に考えると離散的な場合と同じことになります。
* 連続的な場合についての注意：我々のあつかう連続的な集合Wはほぼすべて距離空間ですー距離空間では集合Wの任意の要素$x,y$について距離（最短距離）$l(x,y)$が計算できます：距離空間では$x-z-y$とｚ点を中継すると必ず$l(x,y)$よりも長くなる、というのをみたしています（三角不等式）。距離空間であれば、集合Wを重なりがないように細かく分割する、ということができます。距離空間の性質を持たなくても積分が定義できる集合なら良いのですが、むずかしく考えなくてもいいです(というか測度(微小部分の大きさ）というのと確率というのはおよそ同じ概念）。
* **「確率$P(x)$」と「サンプリング」の概念の関係**に注意する。「$P(x)$に従うサンプリング」とは乱数を用いて確率が$P(x)$になるように$x$を順次作っていくことです。これを$x \sim P$と書きます。無限回繰り返せば$P(x)$が再現できる。もう少し数学的に言うと$x \sim P$なる$x$は｛$x_i|i=1,...\infty$｝という集合を意味します。無限大というのは極限的に実現されると考えますーN個で打ち切るとするならNが大きくなればなるほど確率$P$を忠実に再現するということです。なので「$P(x)$が決まれば、サンプリングの仕方がきまる。あるいは逆にサンプリングを指定すれば$P(x)$が決まる」という意味で、等価です。これを「確率とサンプリングの等価則」と呼んでおきます。あるいは、確率はサンプリングの生成子(generator)であると言えばいいです。もう少し具体的には、確率とはサンプリング（乱数発生）のアルゴリズムを生成するためのコア情報です。
    * 無限回とは、一気に無限回行う、のでなく、アルゴリズム的にいくらでも増やせる、ということです。大学では「実数の∞＞整数の∞」とか習うが注意が必要ーアルゴリズム的に計算機に生成できる実数の数は可算無限個しかない。ややこしいことはぼんやりと知っとくだけにして可算無限だけ考えといたらいい。無限ってややこしいので、時間を費やしすぎずに考察しておくべき
* ${\mathbb E}_{x\sim P}[f(x)]=\int dx P(x) f(x)$ は確率分布$P(x)$を用いて$f(x)$を平均するということ。左辺と右辺は明瞭に区別して理解しておきます。右辺は確率の形式ですが、左辺はサンプリング式ですー順次加算していって極限を考える操作です。モンテカルロ法の基礎になります。
  * $x$の定義域がサイコロのような離散集合であれば${\mathbb E}_{x\sim P}[f(x)]= \sum_x P(x) f(x)$です。
 

### 条件付き確率
 * 同時確率の定義　$$P(a,b)=P(a∩b)$$　          
すなわちコンマで分けているときはa∩bと解釈すること。集合Ωの部分集合であるaとかbは、集合Ωの要素であって、ある特定の条件を満たすものであると考えてもよい。

* 条件付き確率の定義：　$$P(a|b)=P(a∩b)/P(b)$$
bである条件下でのaの確率。縦棒の右は条件である。bである部分集合の中でのaの割合、というのを表している。要するに$P$のなかのすべての要素の∩をとった後、縦棒右の要素のPで割る、と理解しておく。
P(a)をprior probably（事前確率）, P(a|b)をposterior probablity（事後確率）と言うこともある。a,bが任意の部分集合で成り立つことに注意。
そもそも『「条件」とは部分集合を指定することである』という点を考えておくこと。
参考：https://www.physics.okayama-u.ac.jp/~otsuki/lecture/ynu2021/ynu_02.pdf

* 条件付き確率の推移則：　bを縦棒の右へ移して条件とするには
$$P(a,b|c)=P(a∩b∩c)/P(c)=P(a|b,c)P(b,c)/P(c)$$
とすればいいことがわかる。この証明をいつも思い出せるようにしておくと論文が読みやすい。基本は単純なことで、$P(a|b,c)$などの分子は$P(a,b,c)=P(a∩b∩c)$であり分母が何かで何を縦棒の右(条件）に持ってくるかが決まる。

* 条件付き確率の交換則（=ベイズの定理）:　$$P(a|b)P(b)=P(b|a)P(a)$$ は上の定義からただちにわかる。

* $P(a|b,c)=P(b|a,c)P(a,c)/P(b,c)$を証明するには、交換則と推移則を使う必要がある。というかややこしいことを考えず$P(a|b,c)=P(a∩b∩c)/P(b∩c)$と考えるのが早い。$P(a,b,c,...|A,B,C...)$でも上の２つのルールで$a,b,c,...,A,B,C...$の位置をいれかえることができる。
* また縦棒の右や左を空にすることもできる。そう考えたいときには、$P(a,b,c,...|A,B,C...)=P(a,b,c,...,{\rm Ω}|A,B,C...,{\rm Ω})$と省略した形でΩがはいっているがΩは移動できない、と考えれば良い。そういうことを考えると交換則は不要。

* 確率の周辺化(marginalize) $P(x,y)$を$y$で積算して（要するに条件$y$をやめるということ）、$x$のみで指定された確率$P(x)$とすること。たとえばモンティホール問題も周辺化する問題と考えれます。

### サイコロのモデル化による確率の導出
 
* 上での議論に従ってサイコロのモデル化について考えてみます。ノートの左側に現実世界（サイコロ）、右側に論理世界を書いておいて対応づけを考えます。現実世界でサイコロを振る操作を考え(無限回繰り返した結果の表ができたと考える）、論理世界におけるサンプリングに対応させてサイコロサンプリングと名づける。この表は行うたびに違うので無限にバラエティがあるが（ややこしいが無限回繰り返した表のバラエティが無限）、共通する特徴は、１から６の数字が相関なく並んでいることです。この特徴を満たすサンプリングをサイコロサンプリングと呼びます。そしてサイコロサンプリング＝「$x \sim$サイコロモデル」となるようなサイコロモデル（確率）を考えることになります。
**「確率」と「サンプリング」を区別**して考えましょう。ここに書いたように分析的に考えておく必要ありです。現実世界のモデル化としてサイコロサンプリングが存在しますーそれの生成子が確率です。
    * 大学入試までに確率に関するムダ用語（弊害あり）を多く学ばされます。サクッと忘れましょう。場合の数と確率は関係ないです。同様に確からしいとかいう意味不明のトリックと組み合わせて確率の入試問題を無理筋で作るためのものです。

* いったんモデル化（論理世界への移し込み）を行っておけば、あとは論理世界で考え、得た結果を逆に現実世界へ引き戻して、実験結果と対応づけるんです（ふつうの自然科学ではもちろん常識です）。


* 「ある特定のサンプリング手順が与えられていて$P(x)$を求めなさい」という問題はしばしば複雑です。媒介的変数や複雑な手順が介在します。言い方を変えると、サンプリングアルゴリズムを最大限短縮（周辺化）したものが「$P(x)$に従うサンプリング」です。

#### 雑

* 完全乱数を作るアルゴリズムは存在しません。そもそも「完全乱数を作るアルゴリズム」という言明に矛盾があるーアルゴリズムがあるのなら何らかの系統性がありますから。ただ理想気体を考えるときみたいに「完全乱数は極限的な意味で存在する。たとえば複数の乱数生成アルゴリズムに番号を打って、その番号が大きくなるほど完全乱数に近くなる」と想像しておきます。この仮定をしておけば「サンプリング列を与える」というのと「確率を与える」というのが等価となります。
*　乱数ですが、上に書いたようなことは気にせずに、乱数が生成できて、だいたいの関数$f(x)$について${\mathbb E}_{x\sim P}[f(x)]= \int dx P(x) f(x)$がだいたい成り立ってればOKです。

 * 拡散モデルでは$t$を０からTまで（tは整数とします）増やしていく順拡散、そして逆拡散を考えます。確率過程の連鎖、マルコフ過程です。このときの順拡散過程は条件付き確率$q(x^t|x^{t-1})$で指定しますーこれにはガウシアンブロードニングの単純なものを使います。この変数位置を交換し、逆拡散のために条件付き確率$q(x^{t-1}|x^t)$を求めたいんです。これは、交換則をもちいて$q(x^{t-1}|x^t)=q(x^t|x^{t-1})q(x^t)/q(x^{t-1})$として求めれますーしかしながら$q(x^t),q(x^{t-1})$を求めるのは大変なので、$x^0$を挿入して、$q(x^{t-1}|x^t,x^0)=q(x^t|x^{t-1},x^0)q(x^t,x^0)/q(x^{t-1},x^0)$を考えます（上で書いた条件付き確率の定義に習えばこれは簡単に示せる）。$x^0$は初期画像で大量にあり$P(x^0)$という確率分布を作っていると考えます。$q(x^t,x^0)$はガウシアンブロードニングの連鎖なので、ガウシアンブロードニングになります（ガウシアンの畳み込みはガウシアン）。なので$x^0$については何らかの形で平均をとることで、変数$x^0$を消去し最終的に逆拡散$q(x^{t-1}|x^t)$を得ることができると言えます。実際には平均化というより最適化操作（学習過程）であり、学習すべきパラメータをθとして、$p_\theta(x^{t-1}|x^t)$と書きます。


* 統計とは？ 
たとえば、ある番組の視聴率みたいなものを考える。この場合、離散集合｛Yes、No｝を考え、サンプリングを考えることになる。まず、サンプリングの数が全人口であれば、完全なサンプリングとなることに注意する。一般的なサンプリングは、たとえば、全人口$N$が１億人で、サンプリングの数$n$は１０００人というような形になる。注意点としては、サンプリングが排他的なものである点である（乱数とは違い、値でなく個人IDを選び出す形のサンプリングとなる）。
すなわち、統計の場合を、上述の無限列の場合との比較で述べると、
#1. 「完全なサンプリング」が存在し、そのサンプリングを生成を指定する確率$P(x）$も完全に決定されているはず。これはすなわちー全人口を考えたときのYes,Noの人口割合である。しかしながら、完全なサンプリングを取得するのは困難で、一般的にはこの$P(x）$は未知である。
#2. その「完全なサンプリング」からランダムに$n$個を選びだしたサンプリングを考える（これは$P(x)$を生成子とはするが$n \to N$で$P(x)$を正確に再現する、$N$の有限性を考えた特殊なサンプリング。ただし$n<<N$であれば特殊性は無視できる）。その集合からP(x)を推定する、という話になる。