(十 一)從零開始學(xué)人工智能--強(qiáng)化學(xué)習(xí): 強(qiáng)化學(xué)習(xí)入門基礎(chǔ)

強(qiáng)化學(xué)習(xí)入門基礎(chǔ)

文章目錄

強(qiáng)化學(xué)習(xí)入門基礎(chǔ)

1. 強(qiáng)化學(xué)習(xí)基礎(chǔ)知識

1.1 強(qiáng)化學(xué)習(xí)發(fā)展歷程

1.2 強(qiáng)化學(xué)習(xí)特點

1.3 強(qiáng)化學(xué)習(xí)應(yīng)用

1.4 強(qiáng)化學(xué)習(xí)基本概念

1.5 強(qiáng)化學(xué)習(xí)智能體的主要組成部分

1.6 強(qiáng)化學(xué)習(xí)的分類

2. 動態(tài)規(guī)劃

2.1 什么是動態(tài)規(guī)劃

2.2 動態(tài)規(guī)劃基本思想

2.3 動態(tài)規(guī)劃基本概念

2.3.1 多階段決策問題

2.3.2 動態(tài)規(guī)劃一些術(shù)語

2.4 動態(tài)規(guī)劃三要素

2.5 動態(tài)規(guī)劃適用條件

2.6 動態(tài)規(guī)劃例子

2.6.1 路徑迷宮問題

2.6.2 0-1背包問題

3. 馬爾可夫決策過程

3.1 馬爾可夫過程

3.2 馬爾可夫決策過程

聲明

參考資料

1. 強(qiáng)化學(xué)習(xí)基礎(chǔ)知識

強(qiáng)化學(xué)習(xí)(reinforcement learning)是受行為心理學(xué)啟發(fā)的一個機(jī)器學(xué)習(xí)領(lǐng)域,其研究的是智能體(agent)如何在一個環(huán)境(environment)中采取動作(action)以最大化我們想要的獎勵(reward)序调。這是一個涵蓋領(lǐng)域非常廣的問題州泊,也在博弈論酱讶、控制論、信息論樊零、運(yùn)籌學(xué)、基于模擬的優(yōu)化容贝、多代理系統(tǒng)、集群智能之景、統(tǒng)計學(xué)和遺傳算法等許多學(xué)科領(lǐng)域得到了研究斤富。在運(yùn)籌學(xué)和控制論領(lǐng)域,強(qiáng)化學(xué)習(xí)方法所在的領(lǐng)域被稱為近似動態(tài)規(guī)劃锻狗。

1.1 強(qiáng)化學(xué)習(xí)發(fā)展歷程

1956年Bellman提出了動態(tài)規(guī)劃方法满力。

1977年Werbos提出只適應(yīng)動態(tài)規(guī)劃算法。

1988年sutton提出時間差分算法轻纪。

1992年Watkins 提出Q-learning 算法油额。

1994年rummery 提出Saras算法。

1996年Bersekas提出解決隨機(jī)過程中優(yōu)化控制的神經(jīng)動態(tài)規(guī)劃方法刻帚。

2006年Kocsis提出了置信上限樹算法潦嘶。

2009年kewis提出反饋控制只適應(yīng)動態(tài)規(guī)劃算法。

2014年silver提出確定性策略梯度(Policy Gradients)算法崇众。

2015年Google-deepmind 提出Deep-Q-Network算法掂僵。

可見航厚,強(qiáng)化學(xué)習(xí)已經(jīng)發(fā)展了幾十年,并不是一門新的技術(shù)锰蓬。在2016年幔睬,AlphaGo擊敗圍棋世界冠軍李世石之后,融合了深度學(xué)習(xí)的強(qiáng)化學(xué)習(xí)技術(shù)大放異彩芹扭,成為這兩年最火的技術(shù)之一麻顶。總結(jié)來說舱卡,強(qiáng)化學(xué)習(xí)就是一個古老而又時尚的技術(shù)辅肾。

圖1 AlphaGo對戰(zhàn)李世石

1.2 強(qiáng)化學(xué)習(xí)特點

我們先看看機(jī)器學(xué)習(xí)的分類:

圖2 機(jī)器學(xué)習(xí)分類

可以看出機(jī)器學(xué)習(xí)包括三大類:有監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)轮锥。

回顧下前面課程講過的有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí):

(1)有監(jiān)督學(xué)習(xí):又稱為有導(dǎo)師的學(xué)習(xí)矫钓,即人工給定一組數(shù)據(jù),每個數(shù)據(jù)的屬性值也給出交胚,對于數(shù)據(jù)集中的每個樣本份汗,想要算法預(yù)測并給出正確答案盈电。以任務(wù)為驅(qū)動蝴簇,主要包括兩類問題:回歸問題,分類問題匆帚。

(2)無監(jiān)督學(xué)習(xí):又稱為無導(dǎo)師學(xué)習(xí)熬词,數(shù)據(jù)一般是沒有標(biāo)簽的。以數(shù)據(jù)為驅(qū)動吸重,包括聚類等互拾。

那么,什么是強(qiáng)化學(xué)習(xí)呢嚎幸?

強(qiáng)化學(xué)習(xí)(Reinforcement Learning, RL)?主要用于決策和控制領(lǐng)域颜矿,比如下棋,開車等嫉晶;根據(jù)輸入信息確定行為骑疆。要解決的核心問題是在環(huán)境中執(zhí)行動作以獲得最大的累積獎勵。

強(qiáng)化學(xué)習(xí)是基于當(dāng)前環(huán)境的條件寞钥,而執(zhí)行一個行動趣席,以取得最大化的預(yù)期利益赁豆。其靈感源自于行為主義心理學(xué),即有機(jī)體如何在環(huán)境給予的獎勵或懲罰的刺激下诈火,逐步形成對刺激的預(yù)期,產(chǎn)生能獲得最大利益的慣性行為状答。比如:在訓(xùn)練狗狗站起來時冷守,如果狗狗站起來就給它獎勵刀崖,如給它肉條吃,如果不站起來就給它一些懲罰教沾,如用鞭子打它蒲跨,這樣的話,通過不斷的強(qiáng)化授翻,從而讓狗能夠?qū)W會站起來這個動作或悲。

強(qiáng)化學(xué)習(xí)也是如此,就是給很多樣本去學(xué)習(xí)算法堪唐,但是對于樣本沒有給出對錯巡语,你執(zhí)行完樣本后最后給出一個反饋,然后算法通過調(diào)整策略和行為來達(dá)到最優(yōu)的狀態(tài)淮菠。

因此男公,相比于有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí),強(qiáng)化學(xué)習(xí)有以下特點:

(1)沒有監(jiān)督數(shù)據(jù)合陵,只有獎勵信號枢赔;

(2)獎勵信號不一定是實時的,而很可能是延后的拥知,即一般具有延時性踏拜;

(3)時間(序列)?是一個重要因素,即強(qiáng)化學(xué)習(xí)的每一步與時間順序前后關(guān)系緊密低剔;

(4)當(dāng)前的行為影響后續(xù)接收到的數(shù)據(jù)速梗;

1.3 強(qiáng)化學(xué)習(xí)應(yīng)用

當(dāng)前,強(qiáng)化學(xué)習(xí)在諸多領(lǐng)域內(nèi)都得到廣泛的應(yīng)用襟齿,包括金融姻锁、醫(yī)療、教育猜欺、計算機(jī)視覺位隶、自然語言處理等領(lǐng)域。

圖3 強(qiáng)化學(xué)習(xí)應(yīng)用

1.4 強(qiáng)化學(xué)習(xí)基本概念

強(qiáng)化學(xué)習(xí)是根據(jù)當(dāng)前的條件作出決策和動作开皿,以達(dá)到某一預(yù)期目標(biāo)涧黄。

智能體(Agent)?是強(qiáng)化學(xué)習(xí)中的動作實體,處于某一環(huán)境?中副瀑。在每個時刻弓熏,智能體和環(huán)境都有自己的狀態(tài)。智能體根據(jù)當(dāng)前狀態(tài)確定一個動作糠睡,并執(zhí)行該動作挽鞠。之后它和環(huán)境進(jìn)入下一個狀態(tài),同時系統(tǒng)給它一個反饋值,對動作進(jìn)行獎勵或懲罰信认,以迫使智能體執(zhí)行正確的動作材义。

(1)獎勵 Reward

獎勵R_tRt?是信號反饋,是一個標(biāo)量嫁赏,反映智能體在tt時刻做得怎么樣其掂。智能體的目標(biāo)是最大化累積獎勵。

強(qiáng)化學(xué)習(xí)主要基于這樣的“獎勵假設(shè)”:所有的目標(biāo)都可以被描述成最大化累積獎勵潦蝇。

例子:玩游戲時分?jǐn)?shù)的增加/減少款熬。

(2)序列決策 Sequential Decision Making

目標(biāo):選擇一系列動作來最大化未來的總體獎勵;

這些動作可能產(chǎn)生長期的后果攘乒;

獎勵可能是延遲的贤牛;

為了獲得更多的長期獎勵(long-term reward),有時會犧牲即時獎勵(immediate reward)则酝;

例子:下棋殉簸,每一步棋沒有獎勵,只有在棋局結(jié)束時才有輸/贏的反饋沽讹;

(3)智能體和環(huán)境 Agent and Environment

圖4 智能體和環(huán)境

上圖中般卑,大腦代表智能體,地球代表環(huán)境爽雄。

(4)歷史和狀態(tài) History and State

歷史是觀測(observations)蝠检、動作(actions)和獎勵(rewards)的序列:

H_t = O_1,R_1,A_1,...,A_{t-1},O_t,R_tHt?=O1?,R1?,A1?,...,At?1?,Ot?,Rt?

歷史決定接下來發(fā)生什么:

①、智能體選擇動作盲链;

②蝇率、環(huán)境選擇觀測/獎勵迟杂;

狀態(tài)是用來決定接下來發(fā)生什么的信息刽沾,是關(guān)于歷史的一個函數(shù):

S_t = f(H_t)St?=f(Ht?)

狀態(tài)分為:環(huán)境狀態(tài)智能體狀態(tài)信息狀態(tài)排拷, 它們的含義分別如下所述:

①侧漓、環(huán)境狀態(tài)S^e_tSte?是環(huán)境的私有表示,即環(huán)境用來決定下一個觀測/獎勵的所有數(shù)據(jù)监氢,對智能體通常是不可見的布蔗。即使s^e_tste?是可見的,也可能包含不相關(guān)的信息浪腐。

②纵揍、智能體狀態(tài)S^a_tSta?是智能體的內(nèi)部表示,即智能體用來選擇下一個動作的所有信息议街。智能體狀態(tài)是強(qiáng)化學(xué)習(xí)算法可以利用的信息泽谨。它可以是歷史的任何函數(shù):S^a_t = f(H_t)Sta?=f(Ht?)。

③、信息狀態(tài)(又稱為Markov狀態(tài))包括歷史的所有有用信息吧雹。

一個狀態(tài)S_tSt?是Markov的骨杂,當(dāng)且僅當(dāng):

P[S_{t+1}|S_t] = P[S_{t+1}|S_1,...,S_t]P[St+1?∣St?]=P[St+1?∣S1?,...,St?]

即當(dāng)前狀態(tài)包含了所有相關(guān)的歷史,只要當(dāng)前狀態(tài)可知雄卷,所有的歷史信息都不需要搓蚪。

(5)完全可觀測環(huán)境 Fully Observable Environments

圖5 完全可觀測環(huán)境

(6)部分可觀測環(huán)境 Partially Observable Environments

部分觀測性:智能體間接觀測環(huán)境,比如玩英雄聯(lián)盟或者王者榮耀只能觀察到有視野的部分丁鹉。

在這種情況下妒潭,智能體狀態(tài)≠?=環(huán)境狀態(tài);

這種問題是部分可觀測馬爾可夫決策過程(Partially Observable Markov Decision Process, POMDP)揣钦;

此時杜耙,智能體必須構(gòu)建自己的狀態(tài)表示S^a_tSta?,例如:

①拂盯、記住完整的歷史:S^a_t=H_tSta?=Ht?佑女;

②、使用循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)谈竿,只根據(jù)智能體t-1t?1時刻的狀態(tài)S^a_{t-1}St?1a?和當(dāng)前觀測O_tOt?來獲得當(dāng)前狀態(tài)S^a_tSta?的表示:

S^a_t=\sigma(S^a_{t-1}W_s+O_tW_o)Sta?=σ(St?1a?Ws?+Ot?Wo?)

其中团驱,W_sWs?和W_oWo?表示狀態(tài)和觀測的權(quán)重。

(7)學(xué)習(xí)和規(guī)劃 Learning and Planning

在序列決策中主要包括兩類基本問題:

①空凸、學(xué)習(xí):環(huán)境在初始時是未知的嚎花,智能體通過與環(huán)境交互來改善它的策略;

②呀洲、規(guī)劃:環(huán)境模型是已知的紊选,智能體使用其模型執(zhí)行計算,而不與環(huán)境進(jìn)行任何交互道逗,從而改善策略兵罢。

(8)探索和利用 Exploration and Exploitation

強(qiáng)化學(xué)習(xí)是一個試錯(trail-and-error)?的學(xué)習(xí)過程,智能體需要從與環(huán)境的交互中發(fā)現(xiàn)好的策略滓窍,同時在這個過程中不至于丟失太多的獎勵卖词;

探索(Exploration)是為了發(fā)現(xiàn)關(guān)于環(huán)境更多的信息;即嘗試不同的行為繼而收集更多的信息吏夯、期望得到更好的決策此蜈。

利用(Exploitation)是根據(jù)現(xiàn)有的已知信息,采取當(dāng)前認(rèn)為最優(yōu)的策略噪生,從而來最大化獎勵裆赵;

探索(未知信息)和利用(已有信息)這兩者是矛盾的,如果“僅利用”跺嗽,則可能只是得到局部最優(yōu)战授,而得不到真正的最優(yōu)策略舔庶;而“僅探索”則可能得到的策略或獎勵都比較差;因此陈醒,智能體在進(jìn)行決策時需要在探索和利用之間進(jìn)行權(quán)衡惕橙。

比如:去餐廳吃飯,探索是嘗試沒有去過的餐廳吃飯钉跷,而利用是選擇原先去過的餐廳中最喜歡吃的那家餐廳弥鹦。

(9)預(yù)測和控制 Prediction and Control

預(yù)測:給定一個策略,來評估未來的獎勵爷辙;

控制:發(fā)現(xiàn)一個策略彬坏, 來優(yōu)化未來的獎勵;

1.5 強(qiáng)化學(xué)習(xí)智能體的主要組成部分

強(qiáng)化學(xué)習(xí)智能體(RL agent)主要由三部分組成:

(1)策略 Policy

策略是智能體的行為膝晾,是狀態(tài)ss到動作aa的映射栓始。

①、對于確定性策略血当,在每種狀態(tài)下智能體要執(zhí)行的動作是唯一的:

a = \pi(s)a=π(s)

比如:在一個紅綠燈路口幻赚,狀態(tài)是綠燈時,執(zhí)行的動作是通過臊旭;狀態(tài)是紅燈時落恼,執(zhí)行的動作是停止。

②离熏、對于不確定性(隨機(jī)性)策略佳谦,智能體在一種狀態(tài)下可以執(zhí)行的動作有多種,策略函數(shù)給出的是執(zhí)行每種動作的概率滋戳,即按概率從各種動作中隨機(jī)選擇一種執(zhí)行:

\pi(a|s)=P[A_t=a|S_t=s]π(a∣s)=P[At?=a∣St?=s]

比如:在一個十字路口钻蔑,定義3個動作:直行、左轉(zhuǎn)彎和右轉(zhuǎn)彎奸鸯;此時這3種動作都可能被執(zhí)行咪笑。

(2)價值函數(shù) Value Function

價值函數(shù)是對未來獎勵的預(yù)測,用來評價狀態(tài)的好壞程度府喳,進(jìn)而來決定動作的選擇蒲肋,例如:

{V_\pi }(s) = {{\rm E}_\pi }[{R_{t + 1}} + \gamma {R_{t + 2}} + {\gamma ^2}{R_{t + 3}} + ...|{S_t} = s]Vπ?(s)=Eπ?[Rt+1?+γRt+2?+γ2Rt+3?+...∣St?=s]

(3)模型 Model

模型是智能體對環(huán)境的表示蘑拯,體現(xiàn)了智能體是如何思考環(huán)境運(yùn)行機(jī)制的钝满。

模型至少解決兩個問題:

①、狀態(tài)轉(zhuǎn)移概率申窘,即預(yù)測下一個狀態(tài)的概率:

p_{ss'}^a = P[{S_{t + 1}} = s'|{S_t} = s,{A_t} = a]pss′a?=P[St+1?=s′∣St?=s,At?=a]

②弯蚜、即時獎勵,即預(yù)測可能獲得的即時獎勵:

R_s^a = E[{R_{t + 1}}|{S_t} = s,{A_t} = a]Rsa?=E[Rt+1?∣St?=s,At?=a]

1.6 強(qiáng)化學(xué)習(xí)的分類

(1)按智能體的成分分類:

①剃法、基于價值函數(shù)(Value Based):定義了狀態(tài)或動作的價值函數(shù)碎捺,來表示達(dá)到某種狀態(tài)或執(zhí)行某種動作后得到的獎勵;傾向于選擇價值最大的狀態(tài)或動作;

②收厨、基于策略(Policy Based):不需要定義價值函數(shù)晋柱,動作直接由策略函數(shù)產(chǎn)生,可以為動作分配概率分布诵叁,按照概率分布來執(zhí)行動作雁竞;

③、Actor-Critic:既有價值函數(shù)拧额,也有策略函數(shù)碑诉,兩者相互結(jié)合解決問題。

圖6 按智能體的成分分類

(2)按有無模型分類:

①侥锦、有模型/基于模型(Model Based):智能體嘗試建立一個描述環(huán)境動作過程的模型进栽,以此來指導(dǎo)價值或策略函數(shù)的更新;主要是基于動態(tài)規(guī)劃的算法恭垦,包括策略迭代算法值迭代算法快毛;

②、無模型/不基于模型(Model Free):智能體不需要關(guān)于環(huán)境的信息番挺,不試圖了解環(huán)境如何工作祸泪,僅聚焦于價值或策略函數(shù);主要包括蒙特卡洛算法時序差分學(xué)習(xí)等建芙;

圖7 按有無模型分類

當(dāng)然没隘,還有其他分類方法,比如:按環(huán)境分類(完全可觀測環(huán)境和部分可觀測環(huán)境)禁荸、按使用手段分類(傳統(tǒng)強(qiáng)化學(xué)習(xí)和深度強(qiáng)化學(xué)習(xí))等右蒲。

2. 動態(tài)規(guī)劃

為什么要介紹動態(tài)規(guī)劃?

正如開篇所講赶熟,在運(yùn)籌學(xué)和控制論領(lǐng)域瑰妄,強(qiáng)化學(xué)習(xí)方法所在的領(lǐng)域被稱為近似動態(tài)規(guī)劃。

動態(tài)規(guī)劃是將復(fù)雜問題拆分成相互聯(lián)系的小問題并按順序進(jìn)行解決映砖,即主要用于解決多階段決策問題间坐,而從廣義上講,強(qiáng)化學(xué)習(xí)問題也是一種多階段決策問題邑退,即智能體通過進(jìn)行多階段決策來獲得最大化收益地技。因此,了解動態(tài)規(guī)劃對學(xué)習(xí)強(qiáng)化學(xué)習(xí)有很大的幫助庵芭。

2.1 什么是動態(tài)規(guī)劃

圖8 Quora關(guān)于動態(tài)規(guī)劃的回答

用一句話解釋動態(tài)規(guī)劃就是”記住之前做過的事“回官,如果更準(zhǔn)確些版扩,其實是”記住之前得到的答案“闺魏。

2.2 動態(tài)規(guī)劃基本思想

首先說一下分治法:將原問題分解成規(guī)模更小的子問題,然后將這些子問題逐個擊破辣辫,將已解決的子問題合并,最終得到原問題的解谷遂。在這里葬馋,各個子問題之間是相互獨立的。

動態(tài)規(guī)劃與分治法類似肾扰,但不同的是分解的各個子問題之間是是相互聯(lián)系的畴嘶,通常具有時間或空間上的次序性,在求解的過程中按一定次序?qū)ψ訂栴}進(jìn)行求解集晚。為了避免多次解決這些子問題窗悯,它們的結(jié)果都逐漸被計算并儲存,從簡單的問題直到整個問題都被解決偷拔。

因此蒋院,對于一個動態(tài)規(guī)劃問題,只需要從兩方面進(jìn)行考慮:找出問題之間的聯(lián)系以及儲存子問題的結(jié)果莲绰。

2.3 動態(tài)規(guī)劃基本概念

下面將通過圖9路徑選擇問題對動態(tài)規(guī)劃進(jìn)行詳解欺旧。

圖9 路徑選擇問題

2.3.1 多階段決策問題

如果一類活動過程可以分為若干個互相聯(lián)系的階段,在每一個階段都需要做出決策(采取措施)蛤签,一個階段的決策確定以后辞友,常常影響到下一個階段的決策,從而就完全確定一個過程的活動路線震肮,則稱它為多階段決策問題踏枣。

在多階段決策問題中,各個階段采取的決策钙蒙,一般來說是與時間相關(guān)的茵瀑,決策依賴于當(dāng)前狀態(tài),又隨即引起狀態(tài)的轉(zhuǎn)移躬厌,一個決策序列就是在變化的狀態(tài)中產(chǎn)生出來的马昨,因此有”動態(tài)“的含義,稱這種解決多階段決策最優(yōu)化問題的方法為動態(tài)規(guī)劃方法扛施。

在圖9中鸿捧,所求解的問題是:AA點到EE點;這個問題就是個多階段決策問題疙渣。

2.3.2 動態(tài)規(guī)劃一些術(shù)語

(1)階段:把所給求解問題的過程恰當(dāng)?shù)?/b>分成若干個相互聯(lián)系的子問題匙奴,以便能夠按一定次序去求解,每次求解一個子問題妄荔,則對應(yīng)一個階段泼菌。

在圖9中谍肤,階段:圖中的4個階段;

(2)狀態(tài):狀態(tài)表示每個階段開始面臨的客觀條件哗伯,即在求解子問題時的已知條件荒揣。狀態(tài)描述了研究的問題過程中的狀態(tài)。

在圖9中焊刹,階段1的狀態(tài)是AA系任,階段2的狀態(tài)是B_1B1?、B_2B2?和B_3B3?虐块,以此類推俩滥。那么,各個階段的狀態(tài)可以定義為:

S_1=\{A\}S1?={A}

S_2=\{B_1, B_2, B_3\}S2?={B1?,B2?,B3?}

S_3=\{C_1, C_2, C_3\}S3?={C1?,C2?,C3?}

S_4=\{D_1, D_2\}S4?={D1?,D2?}

最終階段(EE點)在這里表示為S_5S5?贺奠,那么此階段的狀態(tài)定義為:

S_5=\{E\}S5?={E}

在這里霜旧,以上狀態(tài)的定義是為了與圖9相對應(yīng)。而在實際應(yīng)用中敞嗡,我們一般以S_0S0?作為初始狀態(tài)颁糟。

(3)決策:決策表示從當(dāng)前階段的狀態(tài)出發(fā)到達(dá)下一階段的狀態(tài)所做出的的選擇。

在圖9中喉悴,比如當(dāng)前階段是階段1棱貌,狀態(tài)是AA,到達(dá)下一階段2的狀態(tài)箕肃,可以選擇B_1B1?婚脱、B_2B2?和B_3B3?,這里的選擇就是決策勺像;

(4)策略:策略表示由所有階段的決策組成的決策序列障贸。

在圖9中,如果4個階段的選擇分別是B_1B1?吟宦,C_1C1?篮洁、D_1D1?和EE,那么殃姓,這些選擇組成的序列(A \rightarrow B_1 \rightarrow C_1 \rightarrow D_1 \rightarrow EA→B1?→C1?→D1?→E)就是其中一個策略袁波。

(5)狀態(tài)轉(zhuǎn)移方程:狀態(tài)轉(zhuǎn)移方程是確定兩個相鄰階段的狀態(tài)的演變過程,描述了狀態(tài)之間是如何演變的蜗侈。

在圖9中篷牌,假設(shè)xx點和yy點是相鄰兩個階段的點,dis[x]dis[x]表示從xx點到EE點的距離踏幻,dis[y]dis[y]表示從yy點到EE點的距離枷颊,map(x, y)map(x,y)表示從xx點到y(tǒng)y點的距離,那么,狀態(tài)轉(zhuǎn)移方程可以寫成:

dis[x]=dis[y]+map(x,y)dis[x]=dis[y]+map(x,y)

(6)最優(yōu)策略:最優(yōu)策略表示所有策略中代價最小夭苗、性能最優(yōu)的策略信卡。

在圖9中,如果尋找最優(yōu)策略的話听诸,即是求解從A點到E點的最短路徑問題坐求,這里的最優(yōu)策略是:A \rightarrow B_2 \rightarrow C_1 \rightarrow D_1 \rightarrow EA→B2?→C1?→D1?→E蚕泽。

2.4 動態(tài)規(guī)劃三要素

使用動態(tài)規(guī)劃解決問題時晌梨,最重要的的是確定動態(tài)規(guī)劃三要素:

(1)問題拆分:將原問題拆解為子問題,并找到子問題之間的具體聯(lián)系须妻;

(2)狀態(tài)定義:定義每個階段的狀態(tài)仔蝌;

(3)狀態(tài)轉(zhuǎn)移方程推導(dǎo):找到從前一個階段轉(zhuǎn)化到后一個階段之間的遞推關(guān)系;

2.5 動態(tài)規(guī)劃適用條件

(1)最優(yōu)化原理:如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的荒吏,就稱該問題具有最優(yōu)子結(jié)構(gòu)敛惊,即滿足最優(yōu)化原理。簡而言之绰更,一個最優(yōu)化策略的子策略總是最優(yōu)的瞧挤。

(2)無后效性:某階段狀態(tài)一旦確定,這個狀態(tài)的決策只與當(dāng)前狀態(tài)有關(guān)儡湾,與以前各個階段的狀態(tài)無關(guān)特恬。即每個狀態(tài)都是過去歷史的一個完整總結(jié)。

(3)子問題重疊性:子問題之間不是相互獨立的徐钠,一個子問題在下一階段決策中可能被多次使用到癌刽。

2.6 動態(tài)規(guī)劃例子

下面通過路徑迷宮?和?0-1背包?兩個經(jīng)典案例來溫習(xí)如何通過三要素求解 動態(tài)規(guī)劃問題。

2.6.1 路徑迷宮問題

問題描述

一個機(jī)器人位于一個m \times nm×n網(wǎng)格的左上角(起始點在下圖中標(biāo)記為“StartStart”)尝丐。機(jī)器人每次只能向下或者向右移動一步显拜。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為“FinishFinish”)。問總共有多少條不同的路徑爹袁?

圖10 路徑迷宮問題

例如:上圖是一個3 \times 73×7的網(wǎng)格远荠,有多少可能的路徑?

根據(jù)動態(tài)規(guī)劃三要素來對該問題進(jìn)行求解:

(1)問題拆分

該問題是機(jī)器人從“StartStart”格到“FinishFinish”格失息,機(jī)器人到達(dá)一個格子可以通過其上邊和左邊的格子到達(dá)譬淳,即第(i, j)(i,j)格可以從(i-1, j)(i?1,j)格和(i, j-1)(i,j?1)格到達(dá),因此根时,可以把第(i, j)(i,j)格問題拆分為(i-1, j)(i?1,j)格和(i, j-1)(i,j?1)格問題瘦赫,然后這兩個問題也可以按以上方式重復(fù),直到“StartStart”位置蛤迎。

(2)狀態(tài)定義

在問題階段中提到第(i, j)(i,j)格會和(i-1, j)(i?1,j)格和(i, j-1)(i,j?1)格有關(guān)聯(lián)确虱,那有什么關(guān)聯(lián)呢?可以這樣考慮替裆,第(i-1, j)(i?1,j)格問題的答案其實是從“StartStart”到第(i-1, j)(i?1,j)格的路徑總數(shù)校辩,第(i, j-1)(i,j?1)格同理窘问。因此,我們可以把第(i, j)(i,j)格的狀態(tài)定義為“從StartStart到第(i, j)(i,j)格的路徑總數(shù)”宜咒。

(3)狀態(tài)轉(zhuǎn)移方程推導(dǎo)

根據(jù)狀態(tài)定義也知道惠赫,第(i, j)(i,j)格的總路徑數(shù)等于第(i-1, j)(i?1,j)格和(i, j-1)(i,j?1)格的路徑數(shù)之和,因此故黑,狀態(tài)轉(zhuǎn)移方程為:

f(i, j)=f(i-1, j)+f(i, j-1)f(i,j)=f(i?1,j)+f(i,j?1)

注意:在實現(xiàn)過程中儿咱,當(dāng)機(jī)器人處于第1行和第1列時,其對應(yīng)路徑總數(shù)都是1场晶。

參考代碼:

classSolution{publicintcountPaths(intm,intn){int[][]f=newint[m][n];for(inti=0;i<m;i++){for(intj=0;j<n;j++){if(i==0||j==0)f[i][j]=1;else{f[i][j]=f[i-1][j]+f[i][j-1];}}}returnf[m-1][n-1];}}

2.6.2 0-1背包問題

問題描述

一共有NN個物品混埠,它們有各自的重量和價值,第ii(ii從1開始)件物品的重量為w[i]w[i]诗轻,價值為v[i]v[i]钳宪,在總重量不超過背包承載上限WW的情況下,能夠裝入背包的最大價值是多少扳炬?

圖11 01背包問題

在這里吏颖,如果使用暴力窮舉的方法,每件物品都存在裝入和不裝入兩種情況恨樟,因此半醉,一共需要2^N2N種情況,復(fù)雜度很高厌杜。

如果按照動態(tài)規(guī)劃的方法奉呛,根據(jù)動態(tài)規(guī)劃三要素來進(jìn)行求解:

(1)問題拆分

該問題的目標(biāo)是使得書包內(nèi)物品的總價值最大,而變量是物品和書包的限重夯尽。

定義dp[i][j]dp[i][j]表示將前ii件商品裝進(jìn)限重為jj的背包可以獲得的最大價值瞧壮,0<=i<=N,0<=j<=W0<=i<=N匙握,0<=j<=W咆槽;

當(dāng)背包的限重為jj時,對于第ii件物品圈纺,有兩種選擇:

①秦忿、背包限重充足,能夠裝下蛾娶,選擇放入灯谣;此時背包的限重減少w[i]w[i],即j-w[i]j?w[i]蛔琅,裝入背包中物品的價值是裝入前i-1i?1件物品的價值與第ii件物品價值的總和胎许,即dp[i-1][j-w[i]] + v[i]dp[i?1][j?w[i]]+v[i];

②、背包限重不足辜窑,不放入钩述;此時背包的限重為jj,價值為dp[i-1][j]dp[i?1][j]穆碎;

通過以上兩種方式進(jìn)行重復(fù)牙勘,直到放入物品的數(shù)量為0為止沦辙。

(2)狀態(tài)定義

根據(jù)問題階段的描述竭翠,可以將第ii個階段的狀態(tài)定義為dp[i][j]dp[i][j]卒废,即前ii件商品裝進(jìn)限重為jj的背包可以獲得的最大價值供填。

(3)狀態(tài)轉(zhuǎn)移方程推導(dǎo)

根據(jù)問題階段和狀態(tài)定義的描述,第i階段背包的總價值為上述兩種情況中取最大值的情況痹籍,即狀態(tài)轉(zhuǎn)移方程為:

dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])\ \ if\ \ j>=w[i]dp[i][j]=max(dp[i?1][j],dp[i?1][j?w[i]]+v[i])??if??j>=w[i]

參考代碼:

for(inti=0;i<=N;i++){for(intj=0;j<=W;j++){if(j<w[i])dp[i][j]=dp[i-1][j];elsedp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);}}

3. 馬爾可夫決策過程

在機(jī)器學(xué)習(xí)領(lǐng)域氓仲,環(huán)境通常被闡釋成一個馬爾可夫決策過程(Markov Decision Process, MDP),許多強(qiáng)化學(xué)習(xí)算法都是用了動態(tài)編程(dynamic programming)技術(shù)贺氓。傳統(tǒng)技術(shù)和強(qiáng)化學(xué)習(xí)算法之間主要不同在于后者并不需要關(guān)于 MDP 的知識并且它們的目標(biāo)是無法獲取明確的方法的大型 MDP。強(qiáng)化學(xué)習(xí)要解決的問題可以抽象成馬爾可夫決策過程床蜘。這里先介紹下馬爾可夫過程辙培,再進(jìn)一步介紹馬爾可夫決策過程。

3.1 馬爾可夫過程

(1)?馬爾可夫特性 Markov Property

在上面介紹強(qiáng)化學(xué)習(xí)的信息狀態(tài)時邢锯,介紹到:

一個狀態(tài)S_tSt?是Markov的扬蕊,當(dāng)且僅當(dāng):

P[S_{t+1}|S_t] = P[S_{t+1}|S_1,...,S_t]P[St+1?∣St?]=P[St+1?∣S1?,...,St?]

即當(dāng)前狀態(tài)包含了所有相關(guān)的歷史,只要當(dāng)前狀態(tài)可知丹擎,所有的歷史信息都不需要尾抑。

馬爾可夫特性:當(dāng)一個隨機(jī)過程在給定當(dāng)前狀態(tài)及所有過去狀態(tài)情況下,其未來狀態(tài)的條件概率分布僅依賴于當(dāng)前狀態(tài)蒂培。

(2)?馬爾可夫過程 Markov Process

馬爾可夫過程:又稱為馬爾可夫鏈(Markov Chain)再愈,是一個無記憶的隨機(jī)過程,其中护戳,隨機(jī)過程是指一個系統(tǒng)的狀態(tài)隨著時間線隨機(jī)演化翎冲。也就是說,馬爾可夫過程是一個具有馬爾可夫特性的隨機(jī)狀態(tài)序列S_1S1?,?S_2S2?, …媳荒。

馬爾可夫過程可以表示成一個二元組:

<S,P>

其中抗悍,SS是有限的狀態(tài)集合,PP是一個狀態(tài)轉(zhuǎn)移概率矩陣钳枕。

對于馬爾可夫狀態(tài)ss和其后繼狀態(tài)s's′缴渊,狀態(tài)轉(zhuǎn)移概率定義為:

P_{ss'} = P[S_{t+1}=s'|S_t=s]Pss′?=P[St+1?=s′∣St?=s]

狀態(tài)轉(zhuǎn)移矩陣PP定義了所有狀態(tài)的轉(zhuǎn)移概率:

KaTeX parse error: Unknown column alignment: * at position 41: …{\begin{array}{*?{20}{c}} {{P_{1…

其中,nn是狀態(tài)數(shù)量鱼炒,矩陣中的每一行元素之和為1衔沼。

3.2 馬爾可夫決策過程

與馬爾可夫過程不同的是,在馬爾可夫決策過程(MDP)中,智能體可以執(zhí)行動作俐巴,從該改變自己和環(huán)境的狀態(tài)骨望,并且得到反饋(即懲罰或獎勵)。

MDP可以表示成一個五元組:

<S,A,P,R,γ>

其中欣舵,SS為有限的狀態(tài)集合擎鸠;

AA為有限的動作集合;

PP為狀態(tài)轉(zhuǎn)移矩陣缘圈,P^a_{ss'} = P[S_{t+1}=s' | S_t=s, A_t=a]Pss′a?=P[St+1?=s′∣St?=s,At?=a]劣光;

RR為獎勵函數(shù)(reward function),R_s^a = E[{R_{t + 1}}|{S_t} = s,{A_t} = a]Rsa?=E[Rt+1?∣St?=s,At?=a]糟把;這個函數(shù)是即時獎勵的期望绢涡,即在時刻tt時,智能體的狀態(tài)為ss遣疯,在執(zhí)行動作aa后雄可,下一個時刻t+1t+1立即能得到的獎勵R_{t+1}Rt+1?的期望。

\gammaγ為折扣因子(discount factor)缠犀,\gamma \in [0,1]γ∈[0,1]数苫;

(1)回報 Return

強(qiáng)化學(xué)習(xí)的目標(biāo)是達(dá)到某種預(yù)期,當(dāng)前執(zhí)行動作的結(jié)果會影響系統(tǒng)后續(xù)的狀態(tài)辨液,因此虐急,需要確定動作在未來是否能夠得到好的回報,這種回報具有延時性滔迈。

定義回報(Return)G_tGt?是從tt時刻之后未來執(zhí)行一組動作能夠獲得的獎勵的總和止吁,即:

{G_t} = {R_{t + 1}} + \gamma {R_{t + 2}} + ... = \sum\limits_{k = 0}^\infty {{\gamma ^k}{R_{t + k + 1}}}Gt?=Rt+1?+γRt+2?+...=k=0∑∞?γkRt+k+1?

這里,折扣因子\gammaγ體現(xiàn)了未來的獎勵在當(dāng)前時刻的價值比例燎悍;

在k+1k+1步后敬惦,獲得的獎勵RR在tt時刻體現(xiàn)的價值是{\gamma} ^k RγkR;

當(dāng)\gammaγ接近0時间涵,趨向于短期性評估仁热;當(dāng)\gammaγ趨向于1時,趨向于考慮遠(yuǎn)期的利益勾哩;

使用折扣因子\gammaγ的原因:

①抗蠢、沒有一個完美的模型能夠擬合出未來會發(fā)生什么,未來具有不確定性思劳,執(zhí)行特定的動作不一定得到特定的狀態(tài)迅矛,所以,將來的獎勵所占的權(quán)重隨著時間衰減潜叛;

②秽褒、如果不加上折扣因子壶硅,當(dāng)狀態(tài)無限時,會導(dǎo)致求和項趨向于無窮大销斟,不收斂庐椒;

③、更符合人類/動物的行為:偏好即時獎勵R_{t+1}Rt+1?蚂踊;

(2)策略 Policy

策略\piπ是給定狀態(tài)下動作的概率分布约谈,用\pi(a|s)π(a∣s)表示在MDP中某一狀態(tài)ss采取動作aa的概率:

\pi(a|s)=P[A_t=a|S_t=s]π(a∣s)=P[At?=a∣St?=s]

一個策略完整定義了智能體的行為,即定義了智能體在各個狀態(tài)下各種可能的動作及其概率的大小犁钟。

MDP的策略僅和當(dāng)前狀態(tài)有關(guān)棱诱,與歷史信息無關(guān);

(3)價值函數(shù) Value Function

類似于有監(jiān)督學(xué)習(xí)中需要定義損失函數(shù)來評價預(yù)測函數(shù)的優(yōu)劣涝动,在強(qiáng)化學(xué)習(xí)中也需要對策略的優(yōu)劣進(jìn)行評價迈勋,為此定義了了價值函數(shù)。

價值函數(shù)包括狀態(tài)價值函數(shù)(state-value function)v_{\pi}(s)vπ?(s)和動作價值函數(shù)(action-value function)q_{\pi}(s,a)qπ?(s,a)醋粟。

①靡菇、狀態(tài)價值函數(shù)v_{\pi}(s)vπ?(s)表示在狀態(tài)ss下,遵循策略\piπ執(zhí)行動作昔穴,能夠獲得的回報期望镰官;或者說當(dāng)執(zhí)行策略\piπ時,評估智能體處在狀態(tài)ss時的價值大小吗货,即:

v_{\pi}(s)=E_{\pi}[G_t|S_t=s]vπ?(s)=Eπ?[Gt?∣St?=s]

②、動作價值函數(shù)q_{\pi}(s,a)qπ?(s,a)表示在遵循策略\piπ時狈网,對當(dāng)前狀態(tài)ss執(zhí)行具體的動作aa時所能獲得的回報期望宙搬;或者說在執(zhí)行策略\piπ時,評估處在狀態(tài)ss時執(zhí)行動作aa的價值大小拓哺,即:

q_{\pi}(s,a)=E_{\pi}[G_t|S_t=s,A_t=a]qπ?(s,a)=Eπ?[Gt?∣St?=s,At?=a]

動作價值函數(shù)除了指定狀態(tài)ss和策略\piπ外勇垛,還指定了在當(dāng)前狀態(tài)ss時執(zhí)行的動作aa。這個函數(shù)衡量的是按照某一策略士鸥,在某一狀態(tài)時執(zhí)行各種動作的價值闲孤。

(4)貝爾曼期望方程 Bellman Expectation Equation

狀態(tài)價值函數(shù)v_{\pi}(s)vπ?(s)可以分解為即時獎勵與其后繼狀態(tài)的折扣價值之和,即:

v_{\pi}(s)=E_{\pi}[R_{t+1}+{\gamma}v_{\pi}(S_{t+1})|S_t=s]vπ?(s)=Eπ?[Rt+1?+γvπ?(St+1?)∣St?=s]

動作價值函數(shù)可以轉(zhuǎn)化為即時獎勵與后繼狀態(tài)執(zhí)行相應(yīng)動作的折扣價值之和烤礁,即:

q_{\pi}(s,a)=E_{\pi}[R_{t+1}+{\gamma}q_{\pi}(S_{t+1},A_{t+1})|S_t=s,A_t=a]qπ?(s,a)=Eπ?[Rt+1?+γqπ?(St+1?,At+1?)∣St?=s,At?=a]

v_{\pi}(s)vπ?(s)和q_{\pi}(s,a)qπ?(s,a)之間的關(guān)系:

下面圖中的空心圓圈表示狀態(tài)讼积,黑色實心圓圈表示動作,連線表示把該狀態(tài)與執(zhí)行的動作關(guān)聯(lián)起來脚仔。

①勤众、使用q_{\pi}(s,a)qπ?(s,a)表示v_{\pi}(s)vπ?(s):

{v_\pi }(s) = \sum\limits_{a \in A} {\pi (a|s){q_\pi }(s,a)}vπ?(s)=a∈A∑?π(a∣s)qπ?(s,a)

圖12\ 使用q_{\pi}(s,a)表示v_{\pi}(s)圖12?使用qπ?(s,a)表示vπ?(s)

②、使用v_{\pi}(s)vπ?(s)表示q_{\pi}(s,a)qπ?(s,a):

{q_\pi }(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_\pi }(s')}qπ?(s,a)=Rsa?+γs′∈S∑?Pss′a?vπ?(s′)

圖13\ 使用v_{\pi}(s)表示q_{\pi}(s,a)圖13?使用vπ?(s)表示qπ?(s,a)

將上述兩種情況組合起來鲤脏,可以得到:

{v_\pi }(s) = \sum\limits_{a \in A} {\pi (a|s)}(R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_\pi }(s'))}vπ?(s)=a∈A∑?π(a∣s)(Rsa?+γs′∈S∑?Pss′a?vπ?(s′))

{q_\pi }(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a\sum\limits_{a' \in A} {\pi (a'|s'){q_\pi }(s',a')}}qπ?(s,a)=Rsa?+γs′∈S∑?Pss′a?a′∈A∑?π(a′∣s′)qπ?(s′,a′)

(5)最優(yōu)價值函數(shù) Optimal Value Function

最優(yōu)狀態(tài)價值函數(shù)v_*(s)v??(s)是從所有策略產(chǎn)生的狀態(tài)價值函數(shù)中们颜,選取使?fàn)顟B(tài)ss價值最大的函數(shù):

{v_*}(s) = \mathop {max}\limits_\pi {v_\pi }(s)v??(s)=πmax?vπ?(s)

類似的吕朵,最優(yōu)動作價值函數(shù)q_*(s,a)q??(s,a)是從所有策略產(chǎn)生的動作價值函數(shù)中,選取使?fàn)顟B(tài)動作對<s,a>價值最大的函數(shù):

{q_*}(s,a) = \mathop {\max }\limits_\pi {q_\pi }(s,a)q??(s,a)=πmax?qπ?(s,a)

最優(yōu)價值函數(shù)明確了MDP可能的最優(yōu)表現(xiàn)窥突。

(6)最優(yōu)策略 Optimal Policy

對于任何狀態(tài)ss努溃,當(dāng)遵循策略\piπ的價值不小于策略\pi'π′的價值時,則策略\piπ優(yōu)于策略\pi'π′:

\pi \ge \pi ' \ if \ {v_\pi }(s) \ge {v_{\pi '}}(s),\ \forall sπ≥π′?if?vπ?(s)≥vπ′?(s),??s

對于任何MDP:

①阻问、存在一個最優(yōu)策略茅坛,好于或等于所有其他策略;

②则拷、所有的最優(yōu)策略都實現(xiàn)了最優(yōu)價值函數(shù)贡蓖,包括最優(yōu)狀態(tài)價值函數(shù)和最優(yōu)動作價值函數(shù);

怎么尋找最優(yōu)策略呢煌茬?

最優(yōu)策略可以通過最大化最優(yōu)動作價值函數(shù)q_*(s,a)q??(s,a)來尋找:

KaTeX parse error: Unknown column alignment: * at position 57: … \begin{array}{*?{20}{c}} 1&{if …

對于任何MDP問題斥铺,總存在一個確定性的最優(yōu)策略;

如果知道了最優(yōu)動作價值函數(shù)q_*(s,a)q??(s,a)坛善,則表明找到了最優(yōu)策略晾蜘。

(7)貝爾曼最優(yōu)方程 Bellman Optimality Equation

對于v_*v??,一個狀態(tài)的最優(yōu)價值等于從該狀態(tài)出發(fā)執(zhí)行的所有動作中產(chǎn)生的動作價值中最大的那個動作價值:

{v_*}(s) = \mathop {\max }\limits_a {q_*}(s,a)v??(s)=amax?q??(s,a)

對于q_*q??眠屎,在狀態(tài)ss剔交,采取動作aa的最優(yōu)價值由兩部分組成,一部分是離開狀態(tài)ss時的即時獎勵改衩,另一部分是其后繼狀態(tài)s's′的最優(yōu)狀態(tài)價值的概率求和:

{q_*}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_*}(s')}q??(s,a)=Rsa?+γs′∈S∑?Pss′a?v??(s′)

將上述兩種情況組合起來岖常,可以得到:

{v_*}(s) = \mathop {\max }\limits_a (R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_*}(s')})v??(s)=amax?(Rsa?+γs′∈S∑?Pss′a?v??(s′))

{q_*}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a\mathop {\max }\limits_{a'} {q_*}(s',a')}q??(s,a)=Rsa?+γs′∈S∑?Pss′a?a′max?q??(s′,a′)

貝爾曼最優(yōu)方程是非線性的,一般通過迭代的方法來求解貝爾曼最優(yōu)方程葫督,例如:基于動態(tài)規(guī)劃的算法(價值迭代竭鞍、策略迭代)、蒙特卡洛算法和時序差分學(xué)習(xí)等橄镜,這些方法在前文中強(qiáng)化學(xué)習(xí)的分類中有提到偎快,后續(xù)會進(jìn)行講解。

聲明

本博客所有內(nèi)容僅供學(xué)習(xí)洽胶,不為商用晒夹,如有侵權(quán),請聯(lián)系博主姊氓,謝謝丐怯。

參考資料

[1]?動態(tài)規(guī)劃之初識動規(guī):有了四步解題法模板,再也不害怕動態(tài)規(guī)劃

[2]?動態(tài)規(guī)劃理解

[3]?路徑迷宮問題

[4]?動態(tài)規(guī)劃之背包問題系列

[5]?David Silver強(qiáng)化學(xué)習(xí)公開課

[6]?David Silver強(qiáng)化學(xué)習(xí)公開課中文講解

[7] 機(jī)器學(xué)習(xí)原理他膳、算法與應(yīng)用

[8] 人工智能:一種現(xiàn)代的方法(第3版)

[9] An Introduction to Reinforcement Learning

[10] Algorithms for Reinforcement Learning

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末响逢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棕孙,更是在濱河造成了極大的恐慌舔亭,老刑警劉巖些膨,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钦铺,居然都是意外死亡订雾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門矛洞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洼哎,“玉大人,你說我怎么就攤上這事沼本∝停” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵抽兆,是天一觀的道長识补。 經(jīng)常有香客問我,道長辫红,這世上最難降的妖魔是什么凭涂? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮贴妻,結(jié)果婚禮上切油,老公的妹妹穿的比我還像新娘。我一直安慰自己名惩,他們只是感情好澎胡,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绢片,像睡著了一般滤馍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上底循,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音槐瑞,去河邊找鬼熙涤。 笑死,一個胖子當(dāng)著我的面吹牛困檩,可吹牛的內(nèi)容都是我干的祠挫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼悼沿,長吁一口氣:“原來是場噩夢啊……” “哼等舔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糟趾,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤慌植,失蹤者是張志新(化名)和其女友劉穎甚牲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝶柿,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡丈钙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了交汤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雏赦。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芙扎,靈堂內(nèi)的尸體忽然破棺而出星岗,到底是詐尸還是另有隱情,我是刑警寧澤戒洼,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布俏橘,位于F島的核電站,受9級特大地震影響施逾,放射性物質(zhì)發(fā)生泄漏敷矫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一汉额、第九天 我趴在偏房一處隱蔽的房頂上張望曹仗。 院中可真熱鬧,春花似錦蠕搜、人聲如沸怎茫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轨蛤。三九已至,卻和暖如春虫埂,著一層夾襖步出監(jiān)牢的瞬間祥山,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工掉伏, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留缝呕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓斧散,卻偏偏與公主長得像供常,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸡捐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容