Week5

第5周

九窖铡、神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)(Neural Networks: Learning)

9.1 代價函數(shù)

參考視頻: 9 - 1 - Cost Function (7 min).mkv

首先引入一些便于稍后討論的新標記方法:

假設(shè)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練樣本有m個溉委,每個包含一組輸入x和一組輸出信號y点待,L表示神經(jīng)網(wǎng)絡(luò)層數(shù),S_I表示每層的neuron個數(shù)(S_l表示輸出層神經(jīng)元個數(shù))畴椰,S_L代表最后一層中處理單元的個數(shù)。

將神經(jīng)網(wǎng)絡(luò)的分類定義為兩種情況:二類分類和多類分類鸽粉,

二類分類:S_L=0, y=0\, or\, 1表示哪一類斜脂;

K類分類:S_L=k, y_i = 1表示分到第i類;(k>2)

我們回顧邏輯回歸問題中我們的代價函數(shù)為:

J\left(\theta \right)=-\frac{1}{m}\left[\sum_\limits{i=1}^{m}{y}^{(i)}\log{h_\theta({x}^{(i)})}+\left(1-{y}^{(i)}\right)log\left(1-h_\theta\left({x}^{(i)}\right)\right)\right]+\frac{\lambda}{2m}\sum_\limits{j=1}^{n}{\theta_j}^{2}

在邏輯回歸中触机,我們只有一個輸出變量帚戳,又稱標量(scalar),也只有一個因變量y儡首,但是在神經(jīng)網(wǎng)絡(luò)中片任,我們可以有很多輸出變量,我們的h_\theta(x)是一個維度為K的向量蔬胯,并且我們訓(xùn)練集中的因變量也是同樣維度的一個向量对供,因此我們的代價函數(shù)會比邏輯回歸更加復(fù)雜一些,為:\newcommand{\subk}[1]{ #1_k }
h_\theta\left(x\right)\in \mathbb{R}^{K} {\left({h_\theta}\left(x\right)\right)}_{i}={i}^{th} \text{output}

J(\Theta) = -\frac{1}{m} \left[ \sum\limits_{i=1}^{m} \sum\limits_{k=1}^{k} {y_k}^{(i)} \log \subk{(h_\Theta(x^{(i)}))} + \left( 1 - y_k^{(i)} \right) \log \left( 1- \subk{\left( h_\Theta \left( x^{(i)} \right) \right)} \right) \right] + \frac{\lambda}{2m} \sum\limits_{l=1}^{L-1} \sum\limits_{i=1}^{s_l} \sum\limits_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2

這個看起來復(fù)雜很多的代價函數(shù)背后的思想還是一樣的氛濒,我們希望通過代價函數(shù)來觀察算法預(yù)測的結(jié)果與真實情況的誤差有多大产场,唯一不同的是,對于每一行特征舞竿,我們都會給出K?個預(yù)測京景,基本上我們可以利用循環(huán),對每一行特征都預(yù)測K?個不同結(jié)果骗奖,然后在利用循環(huán)在K?個預(yù)測中選擇可能性最高的一個确徙,將其與y?中的實際數(shù)據(jù)進行比較。

正則化的那一項只是排除了每一層\theta_0后执桌,每一層的\theta 矩陣的和鄙皇。最里層的循環(huán)j循環(huán)所有的行(由s_{l+1} 層的激活單元數(shù)決定),循環(huán)i則循環(huán)所有的列鼻吮,由該層(s_l層)的激活單元數(shù)所決定育苟。即:h_\theta(x)與真實值之間的距離為每個樣本-每個類輸出的加和,對參數(shù)進行regularizationbias項處理所有參數(shù)的平方和椎木。

9.2 反向傳播算法

參考視頻: 9 - 2 - Backpropagation Algorithm (12 min).mkv

之前我們在計算神經(jīng)網(wǎng)絡(luò)預(yù)測結(jié)果的時候我們采用了一種正向傳播方法违柏,我們從第一層開始正向一層一層進行計算,直到最后一層的h_{\theta}\left(x\right)香椎。

現(xiàn)在漱竖,為了計算代價函數(shù)的偏導(dǎo)數(shù)\frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right),我們需要采用一種反向傳播算法畜伐,也就是首先計算最后一層的誤差馍惹,然后再一層一層反向求出各層的誤差,直到倒數(shù)第二層。
以一個例子來說明反向傳播算法万矾。

假設(shè)我們的訓(xùn)練集只有一個樣本\left({x}^{(1)},{y}^{(1)}\right)悼吱,我們的神經(jīng)網(wǎng)絡(luò)是一個四層的神經(jīng)網(wǎng)絡(luò),其中K=4良狈,S_{L}=4后添,L=4

前向傳播算法:

下面的公式推導(dǎo)過程見:https://blog.csdn.net/qq_29762941/article/details/80343185

我們從最后一層的誤差開始計算,誤差是激活單元的預(yù)測({a^{(4)}})與實際值(y^k)之間的誤差薪丁,(k=1:k)遇西。
我們用\delta來表示誤差,則:\delta^{(4)}=a^{(4)}-y
我們利用這個誤差值來計算前一層的誤差:\delta^{(3)}=\left({\Theta^{(3)}}\right)^{T}\delta^{(4)}\ast g'\left(z^{(3)}\right)
其中 g'(z^{(3)})S 形函數(shù)的導(dǎo)數(shù)严嗜,g'(z^{(3)})=a^{(3)}\ast(1-a^{(3)})粱檀。而(θ^{(3)})^{T}\delta^{(4)}則是權(quán)重導(dǎo)致的誤差的和。下一步是繼續(xù)計算第二層的誤差:
\delta^{(2)}=(\Theta^{(2)})^{T}\delta^{(3)}\ast g'(z^{(2)})
因為第一層是輸入變量漫玄,不存在誤差茄蚯。我們有了所有的誤差的表達式后,便可以計算代價函數(shù)的偏導(dǎo)數(shù)了称近,假設(shè)λ=0第队,即我們不做任何正則化處理時有:
\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=a_{j}^{(l)} \delta_{i}^{l+1}

重要的是清楚地知道上面式子中上下標的含義:

l 代表目前所計算的是第幾層。

j 代表目前計算層中的激活單元的下標刨秆,也將是下一層的第j個輸入變量的下標凳谦。

i 代表下一層中誤差單元的下標,是受到權(quán)重矩陣中第i行影響的下一層中的誤差單元的下標衡未。

如果我們考慮正則化處理尸执,并且我們的訓(xùn)練集是一個特征矩陣而非向量。在上面的特殊情況中缓醋,我們需要計算每一層的誤差單元來計算代價函數(shù)的偏導(dǎo)數(shù)如失。在更為一般的情況中,我們同樣需要計算每一層的誤差單元送粱,但是我們需要為整個訓(xùn)練集計算誤差單元褪贵,此時的誤差單元也是一個矩陣,我們用\Delta^{(l)}_{ij}來表示這個誤差矩陣抗俄。第 l 層的第 i 個激活單元受到第 j 個參數(shù)影響而導(dǎo)致的誤差脆丁。

我們的算法表示為:

即首先用正向傳播方法計算出每一層的激活單元,利用訓(xùn)練集的結(jié)果與神經(jīng)網(wǎng)絡(luò)預(yù)測的結(jié)果求出最后一層的誤差动雹,然后利用該誤差運用反向傳播法計算出直至第二層的所有誤差槽卫。

在求出了\Delta_{ij}^{(l)}之后,我們便可以計算代價函數(shù)的偏導(dǎo)數(shù)了胰蝠,計算方法如下:
D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}+\lambda\Theta_{ij}^{(l)} {if}\; j \neq 0

D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)} {if}\; j = 0

Octave 中歼培,如果我們要使用 fminuc這樣的優(yōu)化算法來求解求出權(quán)重矩陣震蒋,我們需要將矩陣首先展開成為向量,在利用算法求出最優(yōu)解后再重新轉(zhuǎn)換回矩陣躲庄。

假設(shè)我們有三個權(quán)重矩陣查剖,Theta1,Theta2 和 Theta3噪窘,尺寸分別為 10*11梗搅,10*11 和1*11,
下面的代碼可以實現(xiàn)這樣的轉(zhuǎn)換:

thetaVec = [Theta1(:) ; Theta2(:) ; Theta3(:)]

...optimization using functions like fminuc...

Theta1 = reshape(thetaVec(1:110, 10, 11);

Theta2 = reshape(thetaVec(111:220, 10, 11);

Theta1 = reshape(thetaVec(221:231, 1, 11);

9.3 反向傳播算法的直觀理解

參考視頻: 9 - 3 - Backpropagation Intuition (13 min).mkv

在上一段視頻中效览,我們介紹了反向傳播算法,對很多人來說荡短,當?shù)谝淮慰吹竭@種算法時丐枉,第一印象通常是,這個算法需要那么多繁雜的步驟掘托,簡直是太復(fù)雜了瘦锹,實在不知道這些步驟,到底應(yīng)該如何合在一起使用闪盔。就好像一個黑箱弯院,里面充滿了復(fù)雜的步驟。如果你對反向傳播算法也有這種感受的話泪掀,這其實是正常的听绳,相比于線性回歸算法和邏輯回歸算法而言,從數(shù)學(xué)的角度上講异赫,反向傳播算法似乎并不簡潔椅挣,對于反向傳播這種算法,其實我已經(jīng)使用了很多年了塔拳,但即便如此鼠证,即使是現(xiàn)在,我也經(jīng)常感覺自己對反向傳播算法的理解并不是十分深入靠抑,對于反向傳播算法究竟是如何執(zhí)行的量九,并沒有一個很直觀的理解。做過編程練習(xí)的同學(xué)應(yīng)該可以感受到這些練習(xí)或多或少能幫助你颂碧,將這些復(fù)雜的步驟梳理了一遍荠列,鞏固了反向傳播算法具體是如何實現(xiàn)的,這樣你才能自己掌握這種算法稚伍。

在這段視頻中弯予,我想更加深入地討論一下反向傳播算法的這些復(fù)雜的步驟,并且希望給你一個更加全面直觀的感受个曙,理解這些步驟究竟是在做什么锈嫩,也希望通過這段視頻受楼,你能理解,它至少還是一個合理的算法呼寸。但可能你即使看了這段視頻艳汽,你還是覺得反向傳播依然很復(fù)雜,依然像一個黑箱对雪,太多復(fù)雜的步驟河狐,依然感到有點神奇,這也是沒關(guān)系的瑟捣。即使是我接觸反向傳播這么多年了馋艺,有時候仍然覺得這是一個難以理解的算法,但還是希望這段視頻能有些許幫助迈套,為了更好地理解反向傳播算法捐祠,我們再來仔細研究一下前向傳播的原理:

前向傳播算法:

反向傳播算法做的是:

感悟:上圖中的 \delta^{(l)}_{j}="error" \ of cost \ for \ a^{(l)}_{j} \ (unit \ j \ in \ layer \ l) 理解如下:

\delta^{(l)}_{j} 相當于是第 l 層的第 j 單元中得到的激活項的“誤差”,即”正確“的 a^{(l)}_{j} 與計算得到的 a^{(l)}_{j} 的差桑李。

a^{(l)}_{j}=g(z^{(l)}) 踱蛀,(g為sigmoid函數(shù))。我們可以想象 \delta^{(l)}_{j} 為函數(shù)求導(dǎo)時邁出的那一丁點微分贵白,所以更準確的說 \delta^{(l)}_{j}=\frac{\partial}{\partial z^{(l)}_{j}}cost(i)

9.4 實現(xiàn)注意:展開參數(shù)

參考視頻: 9 - 4 - Implementation Note_ Unrolling Parameters (8 min).mkv

在上一段視頻中率拒,我們談到了怎樣使用反向傳播算法計算代價函數(shù)的導(dǎo)數(shù)。在這段視頻中禁荒,我想快速地向你介紹一個細節(jié)的實現(xiàn)過程猬膨,怎樣把你的參數(shù)從矩陣展開成向量,以便我們在高級最優(yōu)化步驟中的使用需要圈浇。

9.5 梯度檢驗

參考視頻: 9 - 5 - Gradient Checking (12 min).mkv

當我們對一個較為復(fù)雜的模型(例如神經(jīng)網(wǎng)絡(luò))使用梯度下降算法時寥掐,可能會存在一些不容易察覺的錯誤,意味著磷蜀,雖然代價看上去在不斷減小召耘,但最終的結(jié)果可能并不是最優(yōu)解。

為了避免這樣的問題褐隆,我們采取一種叫做梯度的數(shù)值檢驗(Numerical Gradient Checking)方法污它。這種方法的思想是通過估計梯度值來檢驗我們計算的導(dǎo)數(shù)值是否真的是我們要求的。

對梯度的估計采用的方法是在代價函數(shù)上沿著切線的方向選擇離兩個非常近的點然后計算兩個點的平均值用以估計梯度庶弃。即對于某個特定的 \theta衫贬,我們計算出在 \theta-\varepsilon 處和 \theta+\varepsilon 的代價值(\varepsilon是一個非常小的值,通常選取 0.001)歇攻,然后求兩個代價的平均固惯,用以估計在 \theta 處的代價值。

Octave 中代碼如下:

gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)

\theta是一個向量時缴守,我們則需要對偏導(dǎo)數(shù)進行檢驗葬毫。因為代價函數(shù)的偏導(dǎo)數(shù)檢驗只針對一個參數(shù)的改變進行檢驗镇辉,下面是一個只針對\theta_1進行檢驗的示例:
\frac{\partial}{\partial\theta_1}=\frac{J\left(\theta_1+\varepsilon_1,\theta_2,\theta_3...\theta_n \right)-J \left( \theta_1-\varepsilon_1,\theta_2,\theta_3...\theta_n \right)}{2\varepsilon}

最后我們還需要對通過反向傳播方法計算出的偏導(dǎo)數(shù)進行檢驗。

根據(jù)上面的算法贴捡,計算出的偏導(dǎo)數(shù)存儲在矩陣 D_{ij}^{(l)} 中忽肛。檢驗時,我們要將該矩陣展開成為向量烂斋,同時我們也將 \theta 矩陣展開為向量屹逛,我們針對每一個 \theta 都計算一個近似的梯度值,將這些值存儲于一個近似梯度矩陣中汛骂,最終將得出的這個矩陣同 D_{ij}^{(l)} 進行比較罕模。

9.6 隨機初始化

參考視頻: 9 - 6 - Random Initialization (7 min).mkv

任何優(yōu)化算法都需要一些初始的參數(shù)。到目前為止我們都是初始所有參數(shù)為0帘瞭,這樣的初始方法對于邏輯回歸來說是可行的手销,但是對于神經(jīng)網(wǎng)絡(luò)來說是不可行的。如果我們令所有的初始參數(shù)都為0图张,這將意味著我們第二層的所有激活單元都會有相同的值。同理诈悍,如果我們初始所有的參數(shù)都為一個非0的數(shù)祸轮,結(jié)果也是一樣的。

我們通常初始參數(shù)為正負ε之間的隨機值侥钳,假設(shè)我們要隨機初始一個尺寸為10×11的參數(shù)矩陣适袜,代碼如下:

Theta1 = rand(10, 11) * (2*eps) – eps

9.7 綜合起來

參考視頻: 9 - 7 - Putting It Together (14 min).mkv

小結(jié)一下使用神經(jīng)網(wǎng)絡(luò)時的步驟:

網(wǎng)絡(luò)結(jié)構(gòu):第一件要做的事是選擇網(wǎng)絡(luò)結(jié)構(gòu),即決定選擇多少層以及決定每層分別有多少個單元舷夺。

第一層的單元數(shù)即我們訓(xùn)練集的特征數(shù)量苦酱。

最后一層的單元數(shù)是我們訓(xùn)練集的結(jié)果的類的數(shù)量。

如果隱藏層數(shù)大于1给猾,確保每個隱藏層的單元個數(shù)相同疫萤,通常情況下隱藏層單元的個數(shù)越多越好。

我們真正要決定的是隱藏層的層數(shù)和每個中間層的單元數(shù)敢伸。

訓(xùn)練神經(jīng)網(wǎng)絡(luò):

  1. 參數(shù)的隨機初始化

  2. 利用正向傳播方法計算所有的h_{\theta}(x)

  3. 編寫計算代價函數(shù) J 的代碼

  4. 利用反向傳播方法計算所有偏導(dǎo)數(shù)

  5. 利用數(shù)值檢驗方法檢驗這些偏導(dǎo)數(shù)

  6. 使用優(yōu)化算法來最小化代價函數(shù)

9.8 自主駕駛

參考視頻: 9 - 8 - Autonomous Driving (7 min).mkv

在這段視頻中扯饶,我想向你介紹一個具有歷史意義的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的重要例子。那就是使用神經(jīng)網(wǎng)絡(luò)來實現(xiàn)自動駕駛池颈,也就是說使汽車通過學(xué)習(xí)來自己駕駛尾序。接下來我將演示的這段視頻是我從 Dean Pomerleau那里拿到的,他是我的同事躯砰,任職于美國東海岸的卡耐基梅隆大學(xué)每币。在這部分視頻中,你就會明白可視化技術(shù)到底是什么琢歇?在看這段視頻之前兰怠,我會告訴你可視化技術(shù)是什么梦鉴。

在下面也就是左下方,就是汽車所看到的前方的路況圖像痕慢。

在圖中你依稀能看出一條道路尚揣,朝左延伸了一點,又向右了一點掖举,然后上面的這幅圖快骗,你可以看到一條水平的菜單欄顯示的是駕駛操作人選擇的方向。就是這里的這條白亮的區(qū)段顯示的就是人類駕駛者選擇的方向塔次。比如:最左邊的區(qū)段方篮,對應(yīng)的操作就是向左急轉(zhuǎn),而最右端則對應(yīng)向右急轉(zhuǎn)的操作励负。因此藕溅,稍微靠左的區(qū)段,也就是中心稍微向左一點的位置继榆,則表示在這一點上人類駕駛者的操作是慢慢的向左拐巾表。

這幅圖的第二部分對應(yīng)的就是學(xué)習(xí)算法選出的行駛方向。并且略吨,類似的集币,這一條白亮的區(qū)段顯示的就是神經(jīng)網(wǎng)絡(luò)在這里選擇的行駛方向,是稍微的左轉(zhuǎn)翠忠,并且實際上在神經(jīng)網(wǎng)絡(luò)開始學(xué)習(xí)之前鞠苟,你會看到網(wǎng)絡(luò)的輸出是一條灰色的區(qū)段,就像這樣的一條灰色區(qū)段覆蓋著整個區(qū)域這些均稱的灰色區(qū)域秽之,顯示出神經(jīng)網(wǎng)絡(luò)已經(jīng)隨機初始化了当娱,并且初始化時,我們并不知道汽車如何行駛考榨,或者說我們并不知道所選行駛方向跨细。只有在學(xué)習(xí)算法運行了足夠長的時間之后,才會有這條白色的區(qū)段出現(xiàn)在整條灰色區(qū)域之中河质。顯示出一個具體的行駛方向這就表示神經(jīng)網(wǎng)絡(luò)算法扼鞋,在這時候已經(jīng)選出了一個明確的行駛方向,不像剛開始的時候愤诱,輸出一段模糊的淺灰色區(qū)域云头,而是輸出一條白亮的區(qū)段,表示已經(jīng)選出了明確的行駛方向淫半。

ALVINN (Autonomous Land Vehicle In a Neural Network)是一個基于神經(jīng)網(wǎng)絡(luò)的智能系統(tǒng)溃槐,通過觀察人類的駕駛來學(xué)習(xí)駕駛,ALVINN能夠控制NavLab科吭,裝在一輛改裝版軍用悍馬昏滴,這輛悍馬裝載了傳感器猴鲫、計算機和驅(qū)動器用來進行自動駕駛的導(dǎo)航試驗。實現(xiàn)ALVINN功能的第一步谣殊,是對它進行訓(xùn)練拂共,也就是訓(xùn)練一個人駕駛汽車。

然后讓ALVINN觀看姻几,ALVINN每兩秒將前方的路況圖生成一張數(shù)字化圖片宜狐,并且記錄駕駛者的駕駛方向,得到的訓(xùn)練集圖片被壓縮為30x32像素蛇捌,并且作為輸入提供給ALVINN的三層神經(jīng)網(wǎng)絡(luò)抚恒,通過使用反向傳播學(xué)習(xí)算法,ALVINN會訓(xùn)練得到一個與人類駕駛員操縱方向基本相近的結(jié)果络拌。一開始俭驮,我們的網(wǎng)絡(luò)選擇出的方向是隨機的,大約經(jīng)過兩分鐘的訓(xùn)練后春贸,我們的神經(jīng)網(wǎng)絡(luò)便能夠準確地模擬人類駕駛者的駕駛方向混萝,對其他道路類型,也重復(fù)進行這個訓(xùn)練過程萍恕,當網(wǎng)絡(luò)被訓(xùn)練完成后譬圣,操作者就可按下運行按鈕,車輛便開始行駛了雄坪。

每秒鐘ALVINN生成12次數(shù)字化圖片,并且將圖像傳送給神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練屯蹦,多個神經(jīng)網(wǎng)絡(luò)同時工作维哈,每一個網(wǎng)絡(luò)都生成一個行駛方向,以及一個預(yù)測自信度的參數(shù)登澜,預(yù)測自信度最高的那個神經(jīng)網(wǎng)絡(luò)得到的行駛方向阔挠。比如這里,在這條單行道上訓(xùn)練出的網(wǎng)絡(luò)將被最終用于控制車輛方向脑蠕,車輛前方突然出現(xiàn)了一個交叉十字路口购撼,當車輛到達這個十字路口時,我們單行道網(wǎng)絡(luò)對應(yīng)的自信度驟減谴仙,當它穿過這個十字路口時迂求,前方的雙車道將進入其視線,雙車道網(wǎng)絡(luò)的自信度便開始上升晃跺,當它的自信度上升時揩局,雙車道的網(wǎng)絡(luò),將被選擇來控制行駛方向掀虎,車輛將被安全地引導(dǎo)進入雙車道路凌盯。

這就是基于神經(jīng)網(wǎng)絡(luò)的自動駕駛技術(shù)付枫。當然,我們還有很多更加先進的試驗來實現(xiàn)自動駕駛技術(shù)驰怎。在美國阐滩,歐洲等一些國家和地區(qū),他們提供了一些比這個方法更加穩(wěn)定的駕駛控制技術(shù)县忌。但我認為掂榔,使用這樣一個簡單的基于反向傳播的神經(jīng)網(wǎng)絡(luò),訓(xùn)練出如此強大的自動駕駛汽車芹枷,的確是一次令人驚訝的成就衅疙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸳慈,隨后出現(xiàn)的幾起案子饱溢,更是在濱河造成了極大的恐慌,老刑警劉巖走芋,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绩郎,死亡現(xiàn)場離奇詭異,居然都是意外死亡翁逞,警方通過查閱死者的電腦和手機肋杖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挖函,“玉大人状植,你說我怎么就攤上這事≡勾” “怎么了津畸?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長必怜。 經(jīng)常有香客問我肉拓,道長,這世上最難降的妖魔是什么梳庆? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任暖途,我火速辦了婚禮,結(jié)果婚禮上膏执,老公的妹妹穿的比我還像新娘驻售。我一直安慰自己,他們只是感情好更米,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布芋浮。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纸巷。 梳的紋絲不亂的頭發(fā)上镇草,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音瘤旨,去河邊找鬼梯啤。 笑死,一個胖子當著我的面吹牛存哲,可吹牛的內(nèi)容都是我干的因宇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祟偷,長吁一口氣:“原來是場噩夢啊……” “哼察滑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起修肠,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贺辰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嵌施,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饲化,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年吗伤,在試婚紗的時候發(fā)現(xiàn)自己被綠了吃靠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡足淆,死狀恐怖巢块,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巧号,我是刑警寧澤族奢,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站裂逐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泣栈。R本人自食惡果不足惜卜高,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望南片。 院中可真熱鬧掺涛,春花似錦、人聲如沸疼进。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伞广。三九已至拣帽,卻和暖如春疼电,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背减拭。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工蔽豺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拧粪。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓修陡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親可霎。 傳聞我的和親對象是個殘疾皇子魄鸦,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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