強化學習基礎篇(二十七)Model-free控制

強化學習基礎篇(二十七)Model-free控制

終于推進到控制部分了,控制的問題才是核心框咙。

1伸辟、預測與控制

預測與控制的區(qū)別在于:

  • 預測問題中是輸入一個MDP (S,A,P,R,\gamma)以及一個策略\pi,然后輸出基于當前策略\pi的價值函數(shù)V_{\pi}梅惯。
  • 控制問題是MDP (S,A,P,R,\gamma)宪拥,然后輸出最優(yōu)價值函數(shù)V_*以及最優(yōu)策略\pi_*

之前的內(nèi)容主要講了MC铣减,TD她君,TD(\lambda)算法,這三個算法都是為了在給定策略下去估計價值函數(shù)V(s)葫哗。其區(qū)別在于MC需要得到一個完整的episode才能進行一次價值函數(shù)的更新缔刹,而TD方法則可以沒走一步就更新一次價值函數(shù)。但是我們的目標是要得到最優(yōu)的策略劣针,所以我們需要通過控制問題校镐,在有MDP的情況下,通過價值函數(shù)去改進策略捺典。不斷得進行迭代改進鸟廓,最終收斂到最優(yōu)策略和最優(yōu)價值函數(shù)。

控制的例子很多,比如控制一個機器人行走肝箱,讓智能體學會玩圍棋哄褒,開發(fā)一個交易管理的智能體等等。這些實際的問題在顯示中可能有著兩類問題:

  • 一是煌张,MDP模型未知呐赡,但是我們可以從現(xiàn)實中很容易進行采樣收集數(shù)據(jù)。
  • 二是骏融,MDP模型已知链嘀,但是問題的規(guī)模太大了,完全沒辦法進行高效的計算档玻,所以必須使用采樣的方法怀泊。

Model-free控制就是專注于解決這類問題。

2误趴、同軌策略與異軌策略(On and Off Policy)

同軌策略學習(On policy learning)就是智能體已經(jīng)有了一個策略\pi霹琼,并且基于該策略\pi進行采樣,以得到的經(jīng)驗軌跡集合來更新價值函數(shù)。雖有采用策略評估和策略改進對給定策略進行優(yōu)化,以獲得最優(yōu)策略迫肖。由于需要優(yōu)化的策略\pi基于當前給定的策略\pi肌厨,所以稱之為On Policy。

異軌策略學習(Off policy learning)是智能體雖然有一個策略\pi,但是并不基于該策略\pi進行采樣,而是基于另一個策略\mu進行采樣。另一個策略\mu可以是人類專家制定的策略等一些較為成熟的策略方法模孩。由于優(yōu)化的策略不完全基于當前策略,所以稱為Off Policy贮缅。

3榨咐、同軌蒙特卡洛控制(On-policy Monte Carlo Control)

廣義策略迭代(GPI)

回顧一下之前提到的廣義策略迭代(Generalized Policy Iteration,GPI)模型是指讓策略評估和策略改善交互的一般概念谴供,它不依賴于兩個過程的粒度(granularity)和其他細節(jié)祭芦。幾乎所有強化學習方法都可以被很好地描述為GPI。

image.png

如果評估過程和改善過程都穩(wěn)定下來憔鬼,即不再發(fā)生變化龟劲,那么價值函數(shù)和策略必須都是最優(yōu)的,如上圖(右)所示轴或。

人們還可以用兩個目標來考慮GPI中評估和改善過程的相互作用昌跌,如上圖(左)所示,上面的線代表目標價值函數(shù)V=V^{\pi}照雁,下面的線代表目標\pi=greedy(v)蚕愤。目標會發(fā)生相互作用答恶,因為兩條線不是平行的。從一個策略\pi和一個價值函數(shù)v開始萍诱,每一次箭頭向上代表著利用當前策略進行價值函數(shù)的更新悬嗓,每一次箭頭向下代表著根據(jù)更新的價值函數(shù)貪婪地選擇新的策略,說它是貪婪的裕坊,是因為每次都采取轉(zhuǎn)移到可能的包竹、狀態(tài)函數(shù)最高的新狀態(tài)的行為。最終將收斂至最優(yōu)策略和最優(yōu)價值函數(shù)籍凝。

基于MC的GPI

在之前的GPI方法中周瞎,策略評估用到的是貝爾曼方程,策略改進使用的是貝爾曼最優(yōu)方程:
\begin{aligned} v_{*}(s) &=\max _{a} \mathbb{E}\left[R_{t+1}+\gamma v_{*}\left(S_{t+1} \mid S_{t}=s, A_{t}=a\right)\right] \\ &=\max _{a} \sum_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left[r+\gamma v_{*}\left(s^{\prime}\right)\right] \end{aligned}
但是使用動態(tài)規(guī)劃算法來改善策略是需要知道某一狀態(tài)的所有后續(xù)狀態(tài)及狀態(tài)間轉(zhuǎn)移概率饵蒂,即:
\pi^{\prime}(s)=\underset{a \in \mathcal{A}}{\operatorname{argmax}}\left(\mathcal{R}_{s}^{a}+\mathcal{P}_{s s^{\prime}}^{a} V\left(s^{\prime}\right)\right)
但是如果后續(xù)的轉(zhuǎn)移概率未知声诸,則在策略估計中就不能使用貝爾曼期望方程,而是變?yōu)閟ample方法退盯,比如MC方法或TD方法彼乌。

在模型未知的時候,首先應該用狀態(tài)行為對的價值Q(s,a)來代替狀態(tài)價值V(s)
\pi'(s)=\underset{a \in \mathcal{A}}{\operatorname{argmax}}Q(s,a)
這樣做的目的是可以改善策略而不用知道整個模型渊迁,只需要知道在某個狀態(tài)下采取什么樣的行為價值最大即可慰照。

所以基于Q(s,a)的GPI可以為如下形式。

image.png

即使這樣宫纬,至少還存在一個問題焚挠,即當我們每次都使用貪婪算法來改善策略的時候膏萧,將很有可能由于沒有足夠的采樣經(jīng)驗而導致產(chǎn)生一個并不是最優(yōu)的策略漓骚,我們需要不時的嘗試一些新的行為,這就是探索(Exploration)榛泛。

探索的例子

image.png

如上圖蝌蹂,在你面前有兩扇門,考慮如下的行為曹锨、獎勵并使用貪婪算法改善策略:

  • 你打開左側(cè)門得到獎勵為0:V(left)=0
  • 你打開右側(cè)門得到獎勵為1:V(right)=+1
  • 使用greedy策略孤个,會繼續(xù)去打開右側(cè)門,而不會打開左側(cè)門沛简,假設得到獎勵為+3:V(right)=\frac{1+3}{2}=+2
  • 繼續(xù)greedy策略齐鲤,打開右側(cè)門,假設得到獎勵+2:V(right)=\frac{1+3+2}{3}=+2
  • 如此一直循環(huán)下去椒楣,會一直打開右側(cè)門给郊。

這種情況下,打開右側(cè)門是否就一定是最好的選擇呢捧灰?

答案顯而易見是否定的淆九。因此完全使用貪婪算法改善策略通常不能得到最優(yōu)策略。為了解決這一問題,我們需要引入一個隨機機制炭庙,以一定的概率選擇當前最好的策略饲窿,同時給其它可能的行為一定的幾率,這就是\epsilon-greedy探索焕蹄。

\epsilon-greedy探索策略

\epsilon-greedy策略是一個最簡單的探索策略逾雄,其假設所有m個動作都有著非0的概率被執(zhí)行,在策略選擇中以1-\epsilon的概率去選擇貪婪動作擦盾,并以\epsilon的概率選擇隨機動作嘲驾。其數(shù)學表達式為:
\pi(a \mid s)=\left\{\begin{array}{ll} \epsilon / m+1-\epsilon & \text { if } a^{*}=\underset{a \in \mathcal{A}}{\operatorname{argmax}} Q(s, a) \\ \epsilon / m & \text { otherwise } \end{array}\right.

如果我們在GPI的策略改進部分使用\epsilon-greedy探索策略,那么我們會有理論證明保障改進的策略可以可以單調(diào)遞增的迹卢。

即對于任意的\epsilon-greedy策略\pi辽故,使用相應的q_{\pi}得到的\epsilon-greedy策略\pi'是在\pi上的一次策略提升,即v_{\pi'}(s) \ge v_{\pi}(s)腐碱。

證明過程如下:
\begin{aligned} q_{\pi}\left(s, \pi^{\prime}(s)\right) &=\sum_{a \in \mathcal{A}} \pi^{\prime}(a \mid s) q_{\pi}(s, a) \\ &=\epsilon / m \sum_{a \in \mathcal{A}} q_{\pi}(s, a)+(1-\epsilon) \max _{a \in \mathcal{A}} q_{\pi}(s, a) \\ & \geq \epsilon / m \sum_{a \in \mathcal{A}} q_{\pi}(s, a)+(1-\epsilon) \sum_{a \in \mathcal{A}} \frac{\pi(a \mid s)-\epsilon / m}{1-\epsilon} q_{\pi}(s, a) \\ &=\sum_{a \in \mathcal{A}} \pi(a \mid s) q_{\pi}(s, a)=v_{\pi}(s) \end{aligned}
所以完整的MC策略迭代過程在引入了\epsilon-greedy之后如下所示:

image.png

和之前講到的策略迭代方法不一樣誊垢,MC策略迭代在估計中用的是Q函數(shù),在策略改進中用的是\epsilon-greedy方法症见,在實際應用中喂走,我們稱之為蒙特卡洛控制,且更確切地給出其迭代示意圖:

image.png

MC控制使用Q函數(shù)進行策略評估谋作,使用\epsilon-greedy探索改善策略芋肠。該方法最終可以收斂至最優(yōu)策略。

圖中每一個向上或向下的箭頭都對應著多個episode遵蚜。也就是說我們一般在經(jīng)歷了多個episode之后才進行依據(jù)Q函數(shù)更新或策略改善帖池。

實際上我們也可以在每經(jīng)歷一個episode之后就更新Q函數(shù)或改善策略。但不管使用那種方式吭净,在使用\epsilon-greedy探索下我們始終只能得到基于某一策略下的近似Q函數(shù)睡汹,且該算法沒有一個終止條件,因為它一直在進行探索寂殉。

GLIE

我們希望得到一個這樣的學習方法:

  • 1囚巴、在學習開始時有足夠的探索:
    \lim _{k \rightarrow \infty} N_{k}(s, a)=\infty
  • 2、最終得到的策略沒有探索友扰,是一個確定性的策略彤叉。
    \lim _{k \rightarrow \infty} \pi_{k}(a \mid s)=\mathbf{1}\left(a=\underset{a^{\prime} \in \mathcal{A}}{\operatorname{argmax}} Q_{k}\left(s, a^{\prime}\right)\right)

為此引入了另一個理論概念:GLIE(Greedy in the Limit with infinite Exploration), 如果\epsilon-greedy策略能夠使得\epsilon\epsilon_k=\frac{1}{k}時候降低到0,那么\epsilon-greedy策略也是一個GLIE策略村怪。其算法流程如下所示:

    1. 首先從環(huán)境中使用策略\pi采樣k個episode: S_1,A_1,R_2,...,S_T \sim \pi
    1. 對于在episode中的每個狀態(tài)S_t以及動作A_t秽浇,進行如下增量更新:
      N\left(S_{t}, A_{t}\right) \leftarrow N\left(S_{t}, A_{t}\right)+1 \\ Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\frac{1}{N\left(S_{t}, A_{t}\right)}\left(G_{t}-Q\left(S_{t}, A_{t}\right)\right)
    1. 基于新得到的Q函數(shù)更新策略:
      \epsilon \leftarrow 1/k \\ \pi \leftarrow \epsilon-greedy(Q)

在理論上GLIE MC控制的方法是可以收斂到最優(yōu)動作值函數(shù),Q(s,a) \rightarrow q_*(s,a)实愚。

4兼呵、同軌時序差分(On-policy TD)學習

MC和TD控制的差別

時序差分(Temporal-difference,TD)學習方法相比于MC的方法有著幾個優(yōu)勢:

  • 低方差(low variance)
  • 可以在線實學習
  • 可以學習不完整的episode

因此可以很自然的想到在控制的迭代中去使用TD方法代替MC方法兔辅。也就是下面降到的Sarsa算法。

Sarsa算法

image.png

Sarsa算法的名字就是來源于上圖這個過程击喂,在智能體處在某個狀態(tài)S的時候按\epsilon-greedy執(zhí)行動作A维苔,會得到一個即時獎勵R,并在與環(huán)境交互中轉(zhuǎn)移到下一個狀態(tài)S'懂昂,再一次基于\epsilon-greedy策略選擇動作A'介时。

這個時候智能體不會去執(zhí)行A',而是通過自身當前的狀態(tài)行為價值函數(shù)得到該(S',A')狀態(tài)行為對的價值Q(S',A')凌彬,同時結(jié)合(S,A)獲得的獎勵R來更新Q(S,A)沸柔。所以通過公式很容易可以看出SARSA的更新規(guī)則:
Q(S, A) \leftarrow Q(S, A)+\alpha\left(R+\gamma Q\left(S^{\prime}, A^{\prime}\right)-Q(S, A)\right)
同軌策略的Sarsa算法描述如下:

image.png
image.png

Sarsa的收斂性

Sarsa的收斂性是有定理支持的,在滿足如下兩個條件時铲敛,Sarsa算法將收斂至最優(yōu)行為價值函數(shù)褐澎。

  • 條件1:任何時候的策略\pi(a |s)符合GLIE特性;
  • 條件二:步長系數(shù)\alpha_t滿足:\sum_{t=1}^{\infty} \alpha_{t}=\infty以及\sum_{t=1}^{\infty} \alpha_{t}^{2}<\infty

n-Step Sarsa

考慮從n=1,2, ...,\infty得到的n-step回報伐蒋,
\begin{array}{rl}n=1 & (\text { Sarsa }) \quad q_{t}^{(1)}=R_{t+1}+\gamma Q\left(S_{t+1}\right) \\ n=2 & q_{t}^{(2)}=R_{t+1}+\gamma R_{t+2}+\gamma^{2} Q\left(S_{t+2}\right) \\ \vdots & \vdots \\ n=\infty & (M C) \quad q_{t}^{(\infty)}=R_{t+1}+\gamma R_{t+2}+\ldots+\gamma^{T-1} R_{T}\end{array}
我們可以得到n-step的Q-return:
q_{t}^{(n)}=R_{t+1}+\gamma R_{t+2}+\ldots+\gamma^{n-1} R_{t+n}+\gamma^{n} Q\left(S_{t+n}\right)
所以接下來可以根據(jù)n-step的Q-return去更新Q函數(shù):
Q(S, A) \leftarrow Q(S, A)+\alpha\left(q_t^{(n)}-Q(S, A)\right)

前向觀點的Sarsa(\lambda)

image.png

TD(\lambda)是考慮了所有的n-step回報工三,同樣我們對q^{\lambda},我們也可以考慮所有的n-step的Q-return q_t^{(n)}先鱼。
q_{t}^{\lambda}=(1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} q_{t}^{(n)}
接下來可以根據(jù) q_t^{(\lambda)}去更新Q函數(shù):
Q(S, A) \leftarrow Q(S, A)+\alpha\left(q_t^{(\lambda)}-Q(S, A)\right)

后向觀點的Sarsa(\lambda)

TD(\lambda)一樣俭正,我們在算法中會使用到資格跡(Eligibility trace),但是Sarsa(\lambda)算法是對環(huán)境中的的state-action對維護了一個資格跡焙畔。
E_{0}(s, a)=0 \\ E_{t}(s, a)=\gamma \lambda E_{t-1}(s, a)+\mathbf{1}\left(S_{t}=s, A_{t}=a\right)

它體現(xiàn)的是一個結(jié)果與某一個狀態(tài)行為對的因果關(guān)系掸读,與得到結(jié)果最近的狀態(tài)行為對,以及那些在此之前頻繁發(fā)生的狀態(tài)行為對對得到這個結(jié)果的影響最大宏多。

在引入資格跡之后儿惫,Q函數(shù)的更新規(guī)則可以進行如下更新:
\delta_{t}=R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right)-Q\left(S_{t}, A_{t}\right) \\ Q(s, a) \leftarrow Q(s, a)+\alpha \delta_{t} E_{t}(s, a)

Sarsa(\lambda)算法

除了狀態(tài)價值函數(shù)Q(s,a)的更新方式、超參數(shù)\lambda绷落,以及資格跡E(s,a)以為姥闪,Sarsa(\lambda)算法的思想和Sarsa是類似的始苇,這里總結(jié)下算法流程:

image.png
image.png

5砌烁、異軌策略學習(Off-policy Learning)

異軌策略學習的目標是通過計算v_{\pi}(s)或者q_{\pi}(s,a)去評估一個目標策略\pi(a|s),但是會遵循另外一個行為策略\mu(s,a)來進行催式。其采樣可以是:\left\{S_{1}, A_{1}, R_{2}, \ldots, S_{T}\right\} \sim \mu

異軌策略這種方式之所以有效函喉,主要有幾個考慮的因素:

  • 智能體可以不從自身的行為學習,而是從觀測人類專家的行為或者觀察其他智能體的行為中進行學習荣月。
  • 我們可以服用在運行中那些以前產(chǎn)生的舊策略進行學習管呵,比如在更新過程中產(chǎn)生的各種策略 \pi_1,\pi_2...\pi_{t-1}
  • 智能體可以在遵循一些探索策略的時候去學習最優(yōu)策略哺窄。
  • 智能體可以在只遵循一個策略的時候去學習多種策略捐下。

重要性采樣

這里要先介紹下載Off-policy中重要的概念重要性采樣(Importance Sampling)账锹,重要性采樣就是我們要計算函數(shù)f(X)在分布P下的期望時候,不好計算坷襟。那么我們可以轉(zhuǎn)換下思路奸柬,去轉(zhuǎn)化到計算函數(shù)在一個比較容易計算的分布下Q下的期望:
\begin{aligned} \mathbb{E}_{X \sim P}[f(X)] &=\sum P(X) f(X) \\ &=\sum Q(X) \frac{P(X)}{Q(X)} f(X) \\ &=\mathbb{E}_{X \sim Q}\left[\frac{P(X)}{Q(X)} f(X)\right] \end{aligned}
考慮t時刻之后的動作狀態(tài)軌跡 \rho_{t}=A_{t}, S_{t+1}, A_{t+1}, \cdots, S_{T},可以得到該軌跡出現(xiàn)的概率為:
\mathbb{P}\left(\rho_{t}\right)=\prod_{k=t}^{T-1} \pi\left(A_{k} \mid S_{k}\right) \mathbb{P}\left(S_{k+1} \mid S_{k}, A_{k}\right)
因此可以得到相應的重要性權(quán)重為:
\eta_{t}^{T}=\frac{\prod_{k=t}^{T-1} \pi\left(A_{k} \mid S_{k}\right) \mathbb{P}\left(S_{k+1} \mid S_{k}, A_{k}\right)}{\prod_{k=t}^{T-1} \mu\left(A_{k} \mid S_{k}\right) \mathbb{P}\left(S_{k+1} \mid S_{k}, A_{k}\right)}=\prod_{k=t}^{T-1} \frac{\pi\left(A_{k} \mid S_{k}\right)}{\mu\left(A_{k} \mid S_{k}\right)}
即便是未知環(huán)境模型婴程,也能得到重要性權(quán)重廓奕。

IS下的異軌MC

對于off-policy Monte-Carlo使用importance sampling:

  • a、使用從MC的行為策略\mu中得到的回報去評估策略\pi,
  • b档叔、得到的加權(quán)回報為:

G_{t}^{\pi / \mu}=\frac{\pi\left(A_{t} \mid S_{t}\right)}{\mu\left(A_{t} \mid S_{t}\right)} \frac{\pi\left(A_{t+1} \mid S_{t+1}\right)}{\mu\left(A_{t+1} \mid S_{t+1}\right)} \cdots \frac{\pi\left(A_{T} \mid S_{T}\right)}{\mu\left(A_{T} \mid S_{T}\right)} G_{t}

  • c桌粉、根據(jù)加權(quán)回報更新值函數(shù):
    V\left(S_{t}\right) \leftarrow V\left(S_{t}\right)+\alpha\left(G_{t}^{\pi / \mu}-V\left(S_{t}\right)\right)

這里要注意的是如果行為策略\mu的概率為0,但是目標策略\pi的概率非0衙四,就不能用了铃肯。

同時我們知道,MC方法的方差本來就很大传蹈,而重要性采樣將會使得方差急劇增大缘薛,因此結(jié)合重要性采樣的MC方法更不適用。

IS下的異軌TD

對于off-policy TD使用importance sampling卡睦,使用從TD方法在遵循行為策略\mu的同時去去評估策略\pi宴胧,其更新方式為:
V\left(S_{t}\right) \leftarrow V\left(S_{t}\right)+\alpha\left(\frac{\pi\left(A_{t} \mid S_{t}\right)}{\mu\left(A_{t} \mid S_{t}\right)}\left(R_{t+1}+\gamma V\left(S_{t+1}\right)\right)-V\left(S_{t}\right)\right)
采用TD的方式比MC的方式大大降低了方差。

Q-Learning算法

Q-Learning算法是不需要使用重要性采樣的表锻,其過程是這樣的:

  • t時刻與環(huán)境進行實際交互的行為A_t由一個\epsilon-greedy策略\mu生成:A_{t} \sim \mu\left(\cdot \mid S_{t}\right)
  • t+1時刻用來更新Q值的行為A_{t+1}'恕齐,通過一個完全greedy的策略\pi產(chǎn)生:A_{t+1}' \sim \pi\left(\cdot \mid S_{t+1}\right)

其動作狀態(tài)值函數(shù)的更新方式為:
Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left(R_{t+1}+\gamma Q\left(S_{t+1}, A^{\prime}\right)-Q\left(S_{t}, A_{t}\right)\right)
其中的TD target是:R_{t+1}+\gamma Q(S_{t+1}, A^{\prime})A’ \sim \pi\left(\cdot \mid S_{t}\right)

這里和之前的TD target還是有區(qū)別的:R_{t+1}+\gamma Q(S_{t+1}, A_{t+1})瞬逊,A_{t+1} \sim \mu\left(\cdot \mid S_{t}\right)

Q-Learning進行異軌控制

我們已經(jīng)知道Q-Learning中目標策略\pi是一個關(guān)于Q(s,a)的貪婪策略:
\pi\left(S_{t+1}\right)=\underset{a^{\prime}}{\operatorname{argmax}} Q\left(S_{t+1}, a^{\prime}\right)
行為策略\mu是一個關(guān)于Q(s,a)\epsilon-greedy策略显歧,所以Q-Learning的目標可以簡化為:
\begin{aligned} & R_{t+1}+\gamma Q\left(S_{t+1}, A^{\prime}\right) \\=& R_{t+1}+\gamma Q\left(S_{t+1}, \underset{a^{\prime}}{\operatorname{argmax}} Q\left(S_{t+1}, a^{\prime}\right)\right) \\=& R_{t+1}+\max _{a^{\prime}} \gamma Q\left(S_{t+1}, a^{\prime}\right) \end{aligned}
其Q函數(shù)的更新方式為:
Q(S, A) \leftarrow Q(S, A)+\alpha\left(R+\gamma \max _{a^{\prime}} Q\left(S^{\prime}, a^{\prime}\right)-Q(S, A)\right)
算法描述為:

image.png
image.png

6、總結(jié)

下面兩張圖概括了各種DP算法和各種TD算法确镊,同時也揭示了各種不同算法之間的區(qū)別和聯(lián)系士骤。總的來說TD是采樣+有數(shù)據(jù)引導(bootstrap)蕾域,DP是全寬度+實際數(shù)據(jù)拷肌。如果從Bellman期望方程角度看:聚焦于狀態(tài)本身價值的是迭代法策略評估(DP)和TD學習,聚焦于狀態(tài)行為對價值函數(shù)的則是Q-策略迭代(DP)和SARSA旨巷;如果從針對狀態(tài)行為價值函數(shù)的Bellman優(yōu)化方程角度看巨缘,則是Q-價值迭代(DP)和Q學習。

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末采呐,一起剝皮案震驚了整個濱河市若锁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斧吐,老刑警劉巖又固,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仲器,死亡現(xiàn)場離奇詭異,居然都是意外死亡仰冠,警方通過查閱死者的電腦和手機娄周,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沪停,“玉大人煤辨,你說我怎么就攤上這事∧菊牛” “怎么了众辨?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舷礼。 經(jīng)常有香客問我鹃彻,道長,這世上最難降的妖魔是什么妻献? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任蛛株,我火速辦了婚禮,結(jié)果婚禮上育拨,老公的妹妹穿的比我還像新娘谨履。我一直安慰自己,他們只是感情好熬丧,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布笋粟。 她就那樣靜靜地躺著,像睡著了一般析蝴。 火紅的嫁衣襯著肌膚如雪害捕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天闷畸,我揣著相機與錄音尝盼,去河邊找鬼。 笑死佑菩,一個胖子當著我的面吹牛盾沫,可吹牛的內(nèi)容都是我干的倘待。 我是一名探鬼主播疮跑,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼组贺,長吁一口氣:“原來是場噩夢啊……” “哼凸舵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起失尖,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤啊奄,失蹤者是張志新(化名)和其女友劉穎渐苏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菇夸,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡琼富,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了庄新。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞠眉。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖择诈,靈堂內(nèi)的尸體忽然破棺而出械蹋,到底是詐尸還是另有隱情,我是刑警寧澤羞芍,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布哗戈,位于F島的核電站,受9級特大地震影響荷科,放射性物質(zhì)發(fā)生泄漏唯咬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一畏浆、第九天 我趴在偏房一處隱蔽的房頂上張望胆胰。 院中可真熱鬧,春花似錦刻获、人聲如沸煮剧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勉盅。三九已至,卻和暖如春顶掉,著一層夾襖步出監(jiān)牢的瞬間草娜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工痒筒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宰闰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓簿透,卻偏偏與公主長得像移袍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子老充,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354