隨機游走
幾何布朗運動
幾何布朗運動(Brownian motion)
布朗運動是將看起來連成一片的液體,在高倍顯微鏡下看其實是由許許多多分子組成的。液體分子不停地做無規則的運動,不斷地隨機撞擊懸浮微粒。當懸浮的微粒足夠小的時候,由於受到的來自各個方向的液體分子的撞擊作用是不平衡的。在某一瞬間,微粒在另一個方向受到的撞擊作用超強的時候,致使微粒又向其它方向運動,這樣,就引起了微粒的無規則的運動就是布朗運動。(布朗運動指的是分子迸出的微粒的隨機運動,而不是分子的隨機運動。)即布朗運動代表了一種隨機漲落現象。
隨機游走
英文:Random Walk
定義:隨機游走,概念接近於布朗運動,是布朗運動的理想數學狀態。
核心概念:任何無規則行走者所帶的守恆量都各自對應着一個擴散運輸定律。
隨機游走算法的基本思想是:
-
- 從一個或一系列頂點開始遍歷一張圖。在任意一個頂點,遍歷者將以概率 $1-a$ 游走到這個頂點的鄰居頂點,以概率 $a$ 隨機跳躍到圖中的任何一個頂點,稱 $a$ 為跳轉發生概率,每次游走后得出一個概率分布,該概率分布刻畫了圖中每一個頂點被訪問到的概率。用這個概率分布作為下一次游走的輸入並反復迭代這一過程。當滿足一定前提條件時,這個概率分布會趨於收斂。收斂后,即可以得到一個平穩的概率分布。
一維的隨機游走
一維的隨機游走可定義如下:每過一個單位時間,游走者從數軸位置 $x$ 出發以固定概率隨機向左或向右移動一個單位。不妨將 $n$ 時刻游走者的位置記為 $L_n$,則有
$L_{n}=x+X_{1}+\cdots+X_{n}$
其中 $X_1,X_2,…,X_n$ 為相互獨立的隨機變量,滿足
$P\left(X_{i}=1\right)=p=1-P\left(X_{i}=-1\right)$
最經典的一維隨機游走問題有賭徒輸光問題和酒鬼失足問題。
- 賭徒在賭場賭博,贏的概率是 $p$,輸的概率 $1-p$,每次的賭注為1元,假設賭徒最開始時有賭金1元,贏了賭金加1元,輸了賭金減1元。問賭徒輸光的概率是多少?
- 一個醉鬼行走在一頭是懸崖的道路上,酒鬼從距離懸崖僅一步之遙的位置出發,向前一步或向后退一步的概率皆為1/2,問酒鬼失足掉入懸崖的概率是多少?
二維隨機游走示例代碼:

import random import numpy as np import matplotlib.pyplot as plt N = 1000 d = 1 x =np.zeros(N+1) y =np.zeros(N+1) x[0] = 0 y[0] = 0 for i in range(0,N,1): r = random.random() #[0,1) if 0<=r<0.25 : y[i+1]=y[i]+d;x[i+1]=x[i] elif 0.25<=r<0.5: y[i+1]=y[i];x[i+1]=x[i]+d elif 0.5<=r<0.75: y[i+1]=y[i]-d;x[i+1]=x[i] else : y[i+1]=y[i]; x[i+1]=x[i]-d plt.plot(x,y,'r',x[0],y[0],'bo',x[-1],y[-1],'b*') plt.xlabel("East->") plt.ylabel('North->') plt.rcParams['figure.figsize']=(40,20) plt.show()
一維有邊界的隨機游走問題
- 下面先對一維雙邊界隨機游走問題進行求解:設初始位置為
- $x=n$,邊界為 $x=0$ 和 $ x=w$,其中 $0<=n<=w$,$n、w$ 為整數。游走者每個單位時間移動一次,向左、向右移動的概率都為 $1/2$,達到邊界后停止移動。
若用 $S_n$ 表示初始位置為 $x=n$ 時最終落入邊界 $x=0$ 的概率。顯然我們會有 $S_0=1$ 和 $S_w=0$,即初始位置為邊界的情況。若 $0<n<w$,則考慮其下一次移動。有 1/2 的概率向左到達 $n-1$,有$1/2$ 的概率向右到達 $n+1$。 則由全概率公式可得
$S_n =\frac{1}{2} S_{n+1}+\frac{1}{2} S_{n-1}$
整理得到
$S_{n+1}=2 S_{n}-S_{n-1}$
利用
$S_{n+1}-S_{n}=S_{n}-S_{n-1}$
可得
$S_{n}-S_{n-1}=\cdots=S_{1}-S_{0}=k$
累加法可得
$S_{n}=k n+S_{0}$
由 $S_0=1,S_w=0$,可得
$S_{n}=1-\frac{1}{w} n=\frac{w-n}{w}$ 同理,$T_n$ 初始位置為 $x=n$ 時最終落入邊界 $x=w$ 的概率,可得 $T_n=n/w$。 對於單邊界情況,可以令 $w$ 趨於正無窮得到,即可得 $S_n=1,T_n=0$。
全局最優化的方法:隨機游走算法
梯度下降法方法對於求解精度不高的情況是實用的,可以用局部極小值近似替代全局最小值點。但是當要求精確求解全局最小值時,梯度下降法就不適用了,需要采用其他的辦法求解。常見的求解全局最優的辦法有拉格朗日法、線性規划法、以及一些人工智能算法比如遺傳算法、粒子群算法、模擬退火算法等(可以參見我之前的博客)。而今天要講的是一個操作簡單但是不易陷入局部極小值的方法:隨機游走算法。
隨機游走算法操作步驟
設 $f(x)$ 是一個含有 $n$ 個變量的多元函數, $x=\left(x_{1}, x_{2}, \ldots, x_{n}\right)$ 為 $n$ 維向量。
1. 給定初始迭代點 $ x$ ,初次行走步長 $ \lambda$ ,控制精度 $ \epsilon$$(\epsilon$ 是一個非常小的正數, 用於控制結束算法 $ )$ 。
2. 給定迭代控制次數 $ N$,$k$ 為當前迭代次數,置 $ k=1$ 。
3. 當 $ k<N$ 時,隨機生成一個$ (-1,1) $ 之間的 $ n$ 維向量 $ u=\left(u_{1}, u_{2}, \cdots, u_{n}\right),\left(-1<u_{i}<1, i=1,2, \cdots, n\right) $,並將其標准化得到 $ u^{\prime}=\frac{u}{\sqrt{\sum_{i=1}^{n} u_{i}^{2}}} $ 。 令 $ x_{1}=x+\lambda u^{\prime}$ ,完成第一步游走。
4. 計算函數值,如果 $ f\left(x_{1}\right)<f(x)$,即找到了一個比初始值好的點,那么 $ k$ 重新置為 $1$,將 $ x_{1}$ 變為 $ x$,回到第2步;否則 $ k=k+1$,回到第3步。
5. 如果連續 $ N$ 次都找不到更優的值,則認為,最優解就在以當前最優解為中心, 當前步長為半徑的 $ N$ 維球內(如果是三維,則剛好是空 間中的球體)。此時,如果 $\lambda<\epsilon$ , 則結束算法;否則,令 $\lambda=\frac{\lambda}{2} $,回到第1步,開始新一輪游走。
圖上的隨機游走
圖上的 Random Walk 是指給定一個圖和一個出發點,隨機地選擇一個鄰居結點,移動到鄰居結點上,然后把當前結點作為出發點,重復以上過程。那些被隨機選出的結點序列就構成了一個在圖上的 Random Walk 過程,如下圖所示。

早期的搜索引擎例如Yahoo!使用的是關鍵詞匹配技術,其性能容易受到關鍵詞頻率的欺騙,所以搜索效果不是很好。但是到1998年Jon Kleinberg 提出了HITS[17]算法,以及Sergey Brin 和 Larry Page 提出了 PageRank[18]算法之后,搜索的正確率就得到了巨大的改觀,其原因就是這兩種技術都建立在共同理論支柱就是圖上的 Random Walk上。
Random Walk 是隨機過程(Stochastic Process)的一個重要組成部分,通常描述的是最簡單的一維 Random Walk 過程。下面給出一個例子來說明:考慮在數軸原點處有一只螞蟻,它從當前位置(記為x(t) )出發,在下一個時刻( x(t+1))以 的概率向前走一步(即 x(t+1)= x(t)+1),或者以 的概率向后走一步(即 x(t+1)= x(t)-1),這樣螞蟻每個時刻到達的點序列 就構成一個一維隨機游走過程。
本質上 Random Walk 是一種隨機化的方法,在實際上生活中,例如醉漢行走的軌跡、花粉的布朗運動、證券的漲跌等都與 Random Walk 有密不可分的關系。Random Walk已經被成功地應用到數學,物理,化學,經濟等各種領域。當前研究者們已經開始將 Random Walk 應用到信息檢索、圖像分割等領域,並且取得了一定的成果,其中一個突出的例子就是 Brin 和 Page 利用基於 Random Walk 的 PageRank 技術創建了 Google 公司。
相關理論
馬爾科夫鏈:t+1時刻的狀態只與t時刻有關,也就是只與上一步狀態有關,如果從i到j的轉移概率與時間無關稱為齊時馬爾科夫鏈,否則稱為非齊時馬爾科夫鏈。
