---
# System prepended metadata

title: Sampling
tags: [學習筆記, deep learning]

---

# Sampling

> Organization contact [name= [ierosodin](ierosodin@gmail.com)]
###### tags: `deep learning` `學習筆記`

==[Back to Catalog](https://hackmd.io/@ierosodin/Deep_Learning)==

 * From [cnblogs](https://read01.com/zLn6K.html)
 * 重要性抽樣(Importance sampling)
     * Importance Sampling 也是藉助了容易抽樣的分布 q (proposal distribution)來解決這個問題，直接從公式出發：
     * ![](https://i.imgur.com/TcbxPaZ.png)
     * 其中，$\frac{p(z)}{q(z)}$ 可以看做 importance weight。我們來考察一下上面的式子，$p$ 和 $f$ 是確定的，我們要確定的是 $q$。要確定一個什麼樣的分布才會讓採樣的效果比較好呢？直觀的感覺是，樣本的方差越小期望收斂速率越快。比如一次採樣是 0, 一次採樣是 1000, 平均值是 500,這樣採樣效果很差，如果一次採樣是 499, 一次採樣是 501, 你說期望是 500,可信度還比較高。在上式中，我們目標是 $\frac{p×f}{q}$ 方差越小越好，所以 $|p×f|$ 大的地方，proposal distribution $q(z)$ 也應該大。舉個稍微極端的例子：
     * ![](https://i.imgur.com/4DhEiqo.png)
     * 第一個圖表示 $p$ 分布， 第二個圖的陰影區域 $f = 1$，非陰影區域 $f = 0$, 那麼一個良好的 $q$ 分布應該在左邊箭頭所指的區域有很高的分布機率，因為在其他區域的採樣計算實際上都是無效的。這表明 Importance Sampling 有可能比用原來的 $p$ 分布抽樣更加有效。
     * 但是可惜的是，在高維空間裡找到一個這樣合適的 $q$ 非常難。即使有 Adaptive importance sampling 和 Sampling-Importance-Resampling(SIR) 的出現，要找到一個同時滿足 easy to sample 並且 good approximations 的 proposal distribution, it is often impossible！
 * 馬爾科夫鏈，馬爾科夫穩態
     * 在講蒙特卡洛方法之前，必須要先講一下馬爾科夫鏈；馬氏鏈的數學定義：
         * 也就是說前一個狀態只與當前狀態有關，而與其他狀態無關，Markov Chain 體現的是狀態空間的轉換關係，下一個狀態只決定與當前的狀態(可以聯想網頁爬蟲原理，根據當前頁面的超連結訪問下一個網頁)。如下圖：
         * ![](https://i.imgur.com/xDUU1B1.png)
         * 舉一個例子，如果當前狀態為 $u(x) = (0.5, 0.2, 0.3)$, 那麼下一個矩陣的狀態就是 $u(x)T = (0.18, 0.64, 0.18)$, 依照這個轉換矩陣一直轉換下去，最後的系統就趨近於一個穩定狀態 $(0.22, 0.41, 0.37)$ (此處只保留了兩位有效數字)。而事實證明無論你從那個點出發，經過很長的 Markov Chain 之後都會匯集到這一點。
     * ![](https://i.imgur.com/NcSPE2Q.png)
     * 這個馬氏鏈的收斂定理非常重要，所有的 MCMC(Markov Chain Monte Carlo) 方法都是以這個定理作為理論基礎的。
     * 對於給定的機率分布 $p(x)$,我們希望能有便捷的方式生成它對應的樣本。由於馬氏鏈能收斂到平穩分布， 於是一個很的漂亮想法是：如果我們能構造一個轉移矩陣為P的馬氏鏈，使得該馬氏鏈的平穩分布恰好是 $p(x)$, 那麼我們從任何一個初始狀態 $x_0$ 齣發沿著馬氏鏈轉移, 得到一個轉移序列 $x_0,x_1,x_2,⋯x_n,x_{n+1}⋯$， 如果馬氏鏈在第 n 步已經收斂了，於是我們就得到了 $\pi(x)$ 的樣本 $x_n,x_{n+1}⋯$。
     * 我們接下來介紹的MCMC 算法是 Metropolis 算法的一個改進變種，即常用的 Metropolis-Hastings 算法。由上一節的例子和定理我們看到了，馬氏鏈的收斂性質主要由轉移矩陣 $P$ 決定, 所以基於馬氏鏈做採樣的關鍵問題是如何構造轉移矩陣 $P,使得平穩分布恰好是我們要的分布 $p(x)$。如何能做到這一點呢？我們主要使用如下的定理。
     * ![](https://i.imgur.com/8iTy5Cn.png)
     * ![](https://i.imgur.com/MiaAiG0.png)
     * ![](https://i.imgur.com/avQKcnz.png)
 * 馬氏鏈轉移和接受機率
     * 假設我們已經有一個轉移矩陣 $Q$ (對應元素為 $q(i,j)$), 把以上的過程整理一下，我們就得到了如下的用於採樣機率分布 $p(x)$ 的算法。
     * ![](https://i.imgur.com/3kSUmTT.png)
     * ![](https://i.imgur.com/BzEkUEn.png)
     * ![](https://i.imgur.com/6eN1hKL.png)
 * MCMC——Gibbs Sampling算法
     * ![](https://i.imgur.com/iLDdd7h.png)
     * ![](https://i.imgur.com/EYGnxq6.png)
     * 平面上馬氏鏈轉移矩陣的構造
     * ![](https://i.imgur.com/FFLuAzk.png)
     * ![](https://i.imgur.com/tk6zSyv.png)
     * ![](https://i.imgur.com/0BNc53i.png)
     * ![](https://i.imgur.com/JWvOqhx.png)
     * ![](https://i.imgur.com/wSsieE0.png)
     * 以上算法收斂後，得到的就是機率分布 $p(x_1, x_2, ⋯, x_n)$ 的樣本，當然這些樣本並不獨立，但是我們此處要求的是採樣得到的樣本符合給定的機率分布，並不要求獨立。同樣的，在以上算法中，坐標軸輪換採樣不是必須的，可以在坐標軸輪換中引入隨機性，這時候轉移矩陣 $Q$ 中任何兩個點的轉移機率中就會包含坐標軸選擇的機率，而在通常的 Gibbs Sampling 算法中，坐標軸輪換是一個確定性的過程，也就是在給定時刻t，在一根固定的坐標軸上轉移的機率是1。
 * 參考資料
     * [1] http://blog.csdn.net/xianlingmao/article/details/7768833
     * [2] http://www.cnblogs.com/daniel-D/p/3388724.html
     * [3] http://cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/
     * [4] An Introduction to MCMC for Machine Learning，2003
     * [5] Introduction to Monte Carlo Methods