梯度下降法(Gradient Descent)

轉(zhuǎn)載-劉建平Pinard-www.cnblogs.com/pinard/p/5970503.html

在求解機(jī)器學(xué)習(xí)算法的模型參數(shù),即無(wú)約束優(yōu)化問(wèn)題時(shí)励背,梯度下降(Gradient Descent)是最常采用的方法之一,另一種常用的方法是最小二乘法平斩。這里就對(duì)梯度下降法做一個(gè)完整的總結(jié)恼策。

1. 梯度

在微積分里面,對(duì)多元函數(shù)的參數(shù)求?偏導(dǎo)數(shù)企孩,把求得的各個(gè)參數(shù)的偏導(dǎo)數(shù)以向量的形式寫(xiě)出來(lái)锭碳,就是梯度。比如函數(shù)f(x,y), 分別對(duì)x,y求偏導(dǎo)數(shù)勿璃,求得的梯度向量就是(?f/?x,??f/?y)T,簡(jiǎn)稱grad f(x,y)或者▽f(x,y)擒抛。對(duì)于在點(diǎn)(x0,y0)的具體梯度向量就是(?f/?x0,??f/?y0)T.或者▽f(x0,y0),如果是3個(gè)參數(shù)的向量梯度补疑,就是(?f/?x,??f/?y歧沪,?f/?z)T,以此類推。

那么這個(gè)梯度向量求出來(lái)有什么意義呢莲组?他的意義從幾何意義上講诊胞,就是函數(shù)變化增加最快的地方。具體來(lái)說(shuō)锹杈,對(duì)于函數(shù)f(x,y),在點(diǎn)(x0,y0)撵孤,沿著梯度向量的方向就是(?f/?x0,??f/?y0)T的方向是f(x,y)增加最快的地方迈着。或者說(shuō)邪码,沿著梯度向量的方向寥假,更加容易找到函數(shù)的最大值。反過(guò)來(lái)說(shuō)霞扬,沿著梯度向量相反的方向糕韧,也就是 -(?f/?x0,??f/?y0)T的方向,梯度減少最快喻圃,也就是更加容易找到函數(shù)的最小值萤彩。

2. 梯度下降與梯度上升

在機(jī)器學(xué)習(xí)算法中,在最小化損失函數(shù)時(shí)斧拍,可以通過(guò)梯度下降法來(lái)一步步的迭代求解雀扶,得到最小化的損失函數(shù),和模型參數(shù)值肆汹。反過(guò)來(lái)愚墓,如果我們需要求解損失函數(shù)的最大值,這時(shí)就需要用梯度上升法來(lái)迭代了昂勉。

梯度下降法和梯度上升法是可以互相轉(zhuǎn)化的浪册。比如我們需要求解損失函數(shù)f(θ)的最小值,這時(shí)我們需要用梯度下降法來(lái)迭代求解岗照。但是實(shí)際上村象,我們可以反過(guò)來(lái)求解損失函數(shù) -f(θ)的最大值,這時(shí)梯度上升法就派上用場(chǎng)了攒至。

下面來(lái)詳細(xì)總結(jié)下梯度下降法厚者。

3. 梯度下降法算法詳解

3.1 梯度下降的直觀解釋

首先來(lái)看看梯度下降的一個(gè)直觀的解釋。比如我們?cè)谝蛔笊缴系哪程幬恢闷韧拢捎谖覀儾恢涝趺聪律娇夥疲谑菦Q定走一步算一步,也就是在每走到一個(gè)位置的時(shí)候志膀,求解當(dāng)前位置的梯度熙宇,沿著梯度的負(fù)方向,也就是當(dāng)前最陡峭的位置向下走一步梧却,然后繼續(xù)求解當(dāng)前位置梯度奇颠,向這一步所在位置沿著最陡峭最易下山的位置走一步败去。這樣一步步的走下去放航,一直走到覺(jué)得我們已經(jīng)到了山腳。當(dāng)然這樣走下去圆裕,有可能我們不能走到山腳广鳍,而是到了某一個(gè)局部的山峰低處荆几。

從上面的解釋可以看出,梯度下降不一定能夠找到全局的最優(yōu)解赊时,有可能是一個(gè)局部最優(yōu)解吨铸。當(dāng)然,如果損失函數(shù)是凸函數(shù)祖秒,梯度下降法得到的解就一定是全局最優(yōu)解诞吱。



3.2?梯度下降的相關(guān)概念

在詳細(xì)了解梯度下降的算法之前,我們先看看相關(guān)的一些概念竭缝。

1. 步長(zhǎng)(Learning rate):步長(zhǎng)決定了在梯度下降迭代的過(guò)程中房维,每一步沿梯度負(fù)方向前進(jìn)的長(zhǎng)度。用上面下山的例子抬纸,步長(zhǎng)就是在當(dāng)前這一步所在位置沿著最陡峭最易下山的位置走的那一步的長(zhǎng)度咙俩。

2.特征(feature):指的是樣本中輸入部分,比如樣本(x0,y0),(x1,y1),則樣本特征為x湿故,樣本輸出為y阿趁。

3. 假設(shè)函數(shù)(hypothesis function):在監(jiān)督學(xué)習(xí)中,為了擬合輸入樣本坛猪,而使用的假設(shè)函數(shù)脖阵,記為hθ(x)。比如對(duì)于樣本(xi,yi)(i=1,2,...n),可以采用擬合函數(shù)如下:?hθ(x) =?θ0+θ1x墅茉。

4. 損失函數(shù)(loss function):為了評(píng)估模型擬合的好壞独撇,通常用損失函數(shù)來(lái)度量擬合的程度。損失函數(shù)極小化躁锁,意味著擬合程度最好纷铣,對(duì)應(yīng)的模型參數(shù)即為最優(yōu)參數(shù)。在線性回歸中战转,損失函數(shù)通常為樣本輸出和假設(shè)函數(shù)的差取平方搜立。比如對(duì)于樣本(xi,yi)(i=1,2,...n),采用線性回歸,損失函數(shù)為:

\(J(\theta_0, \theta_1) = \sum\limits_{i=1}^{m}(h_\theta(x_i) - y_i)^2\)

其中\(zhòng)(x_i\)表示樣本特征x的第i個(gè)元素槐秧,\(y_i\)表示樣本輸出y的第i個(gè)元素啄踊,\(h_\theta(x_i)\)為假設(shè)函數(shù)。

3.3?梯度下降的詳細(xì)算法

梯度下降法的算法可以有代數(shù)法和矩陣法(也稱向量法)兩種表示刁标,如果對(duì)矩陣分析不熟悉颠通,則代數(shù)法更加容易理解。不過(guò)矩陣法更加的簡(jiǎn)潔膀懈,且由于使用了矩陣顿锰,實(shí)現(xiàn)邏輯更加的一目了然。這里先介紹代數(shù)法,后介紹矩陣法硼控。

3.3.1?梯度下降法的代數(shù)方式描述

1. 先決條件: 確認(rèn)優(yōu)化模型的假設(shè)函數(shù)和損失函數(shù)刘陶。

比如對(duì)于線性回歸,假設(shè)函數(shù)表示為?\(h_\theta(x_1, x_2, ...x_n) = \theta_0 +?\theta_{1}x_1 + ... +?\theta_{n}x_{n}\), 其中\(zhòng)(\theta_i \) (i = 0,1,2... n)為模型參數(shù)牢撼,\(x_i \) (i = 0,1,2... n)為每個(gè)樣本的n個(gè)特征值匙隔。這個(gè)表示可以簡(jiǎn)化,我們?cè)黾右粋€(gè)特征\(x_0 = 1 \) 熏版,這樣\(h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i}\)纷责。

同樣是線性回歸,對(duì)應(yīng)于上面的假設(shè)函數(shù)撼短,損失函數(shù)為:

\(J(\theta_0, \theta_1..., \theta_n) = \frac{1}{2m}\sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2\)

2. 算法相關(guān)參數(shù)初始化:主要是初始化\(\theta_0, \theta_1..., \theta_n\),算法終止距離\(\varepsilon\)以及步長(zhǎng)\(\alpha\)碰逸。在沒(méi)有任何先驗(yàn)知識(shí)的時(shí)候,我喜歡將所有的\(\theta\)初始化為0阔加, 將步長(zhǎng)初始化為1饵史。在調(diào)優(yōu)的時(shí)候再 優(yōu)化。

3. 算法過(guò)程:

1)確定當(dāng)前位置的損失函數(shù)的梯度胜榔,對(duì)于\(\theta_i\),其梯度表達(dá)式如下:

\(\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)\)

2)用步長(zhǎng)乘以損失函數(shù)的梯度胳喷,得到當(dāng)前位置下降的距離,即\(\alpha\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)\)對(duì)應(yīng)于前面登山例子中的某一步夭织。

3)確定是否所有的\(\theta_i\),梯度下降的距離都小于\(\varepsilon\)吭露,如果小于\(\varepsilon\)則算法終止,當(dāng)前所有的\(\theta_i\)(i=0,1,...n)即為最終結(jié)果尊惰。否則進(jìn)入步驟4.

4)更新所有的\(\theta\)讲竿,對(duì)于\(\theta_i\),其更新表達(dá)式如下弄屡。更新完畢后繼續(xù)轉(zhuǎn)入步驟1.

\(\theta_i =?\theta_i -?\alpha\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)\)

下面用線性回歸的例子來(lái)具體描述梯度下降题禀。假設(shè)我們的樣本是\((x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0),?(x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ...?(x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n)\),損失函數(shù)如前面先決條件所述:

\(J(\theta_0, \theta_1..., \theta_n) = \frac{1}{2m}\sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2\)。

則在算法過(guò)程步驟1中對(duì)于\(\theta_i\) 的偏導(dǎo)數(shù)計(jì)算如下:

\(\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)= \frac{1}{m}\sum\limits_{j=0}^{m}(h_\theta(x_0^{j}, x_1^{j}, ...x_n^{j}) - y_j)x_i^{j}\)

由于樣本中沒(méi)有\(zhòng)(x_0\)上式中令所有的\(x_0^{j}\)為1.

步驟4中\(zhòng)(\theta_i\)的更新表達(dá)式如下:

\(\theta_i =?\theta_i -?\alpha\frac{1}{m}\sum\limits_{j=0}^{m}(h_\theta(x_0^{j}, x_1^{j}, ...x_n^{j}) - y_j)x_i^{j}\)

從這個(gè)例子可以看出當(dāng)前點(diǎn)的梯度方向是由所有的樣本決定的膀捷,加\(\frac{1}{m}\) 是為了好理解迈嘹。由于步長(zhǎng)也為常數(shù),他們的乘機(jī)也為常數(shù)全庸,所以這里\(\alpha\frac{1}{m}\)可以用一個(gè)常數(shù)表示秀仲。

在下面第4節(jié)會(huì)詳細(xì)講到的梯度下降法的變種,他們主要的區(qū)別就是對(duì)樣本的采用方法不同壶笼。這里我們采用的是用所有樣本神僵。

3.3.2 梯度下降法的矩陣方式描述

這一部分主要講解梯度下降法的矩陣方式表述,相對(duì)于3.3.1的代數(shù)法覆劈,要求有一定的矩陣分析的基礎(chǔ)知識(shí)保礼,尤其是矩陣求導(dǎo)的知識(shí)沛励。

1. 先決條件: 和3.3.1類似, 需要確認(rèn)優(yōu)化模型的假設(shè)函數(shù)和損失函數(shù)氓英。對(duì)于線性回歸侯勉,假設(shè)函數(shù)\(h_\theta(x_1, x_2, ...x_n) = \theta_0 +?\theta_{1}x_1 + ... +?\theta_{n}x_{n}\)的矩陣表達(dá)方式為:

\(h_\mathbf{\theta}(\mathbf{x}) =?\mathbf{X\theta}\) 鹦筹,其中铝阐, 假設(shè)函數(shù)\(h_\mathbf{\theta}(\mathbf{X})\)為mx1的向量,\(\mathbf{\theta}\)為nx1的向量,里面有n個(gè)代數(shù)法的模型參數(shù)铐拐。\(\mathbf{X}\)為mxn維的矩陣徘键。m代表樣本的個(gè)數(shù),n代表樣本的特征數(shù)遍蟋。

損失函數(shù)的表達(dá)式為:\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} -?\mathbf{Y})^T(\mathbf{X\theta} -?\mathbf{Y})\), 其中\(zhòng)(\mathbf{Y}\)是樣本的輸出向量吹害,維度為mx1.

2.?算法相關(guān)參數(shù)初始化: \(\theta\)向量可以初始化為默認(rèn)值,或者調(diào)優(yōu)后的值虚青。算法終止距離\(\varepsilon\)它呀,步長(zhǎng)\(\alpha\)和3.3.1比沒(méi)有變化。

3.?算法過(guò)程:

1)確定當(dāng)前位置的損失函數(shù)的梯度棒厘,對(duì)于\(\theta\)向量,其梯度表達(dá)式如下:

\(\frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta)\)

2)用步長(zhǎng)乘以損失函數(shù)的梯度纵穿,得到當(dāng)前位置下降的距離,即\(\alpha\frac{\partial}{\partial\theta}J(\theta)\)對(duì)應(yīng)于前面登山例子中的某一步奢人。

3)確定\(\mathbf\theta\)向量里面的每個(gè)值,梯度下降的距離都小于\(\varepsilon\)谓媒,如果小于\(\varepsilon\)則算法終止,當(dāng)前\(\mathbf\theta\)向量即為最終結(jié)果何乎。否則進(jìn)入步驟4.

4)更新\(\theta\)向量句惯,其更新表達(dá)式如下。更新完畢后繼續(xù)轉(zhuǎn)入步驟1.

\(\mathbf\theta=?\mathbf\theta -?\alpha\frac{\partial}{\partial\theta}J(\mathbf\theta)\)

還是用線性回歸的例子來(lái)描述具體的算法過(guò)程支救。

損失函數(shù)對(duì)于\(\theta\)向量的偏導(dǎo)數(shù)計(jì)算如下:

\(\frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta) = \mathbf{X}^T(\mathbf{X\theta} -?\mathbf{Y})\)

步驟4中\(zhòng)(\theta\)向量的更新表達(dá)式如下:\(\mathbf\theta=?\mathbf\theta -?\alpha\mathbf{X}^T(\mathbf{X\theta} -?\mathbf{Y})\)

對(duì)于3.3.1的代數(shù)法抢野,可以看到矩陣法要簡(jiǎn)潔很多。這里面用到了矩陣求導(dǎo)鏈?zhǔn)椒▌t各墨,和兩個(gè)矩陣求導(dǎo)的公式蒙保。

公式1:\(\frac{\partial}{\partial\mathbf{X}}(\mathbf{XX^T}) =2\mathbf{X}\)

公式2:\(\frac{\partial}{\partial\mathbf\theta}(\mathbf{X\theta}) =\mathbf{X^T}\)

如果需要熟悉矩陣求導(dǎo)建議參考張賢達(dá)的《矩陣分析與應(yīng)用》一書(shū)。

3.4?梯度下降的算法調(diào)優(yōu)

在使用梯度下降時(shí)欲主,需要進(jìn)行調(diào)優(yōu)邓厕。哪些地方需要調(diào)優(yōu)呢?

1. 算法的步長(zhǎng)選擇扁瓢。在前面的算法描述中详恼,我提到取步長(zhǎng)為1,但是實(shí)際上取值取決于數(shù)據(jù)樣本引几,可以多取一些值昧互,從大到小挽铁,分別運(yùn)行算法,看看迭代效果敞掘,如果損失函數(shù)在變小叽掘,說(shuō)明取值有效,否則要增大步長(zhǎng)玖雁。前面說(shuō)了更扁。步長(zhǎng)太大,會(huì)導(dǎo)致迭代過(guò)快赫冬,甚至有可能錯(cuò)過(guò)最優(yōu)解浓镜。步長(zhǎng)太小,迭代速度太慢劲厌,很長(zhǎng)時(shí)間算法都不能結(jié)束膛薛。所以算法的步長(zhǎng)需要多次運(yùn)行后才能得到一個(gè)較為優(yōu)的值。

2. 算法參數(shù)的初始值選擇补鼻。?初始值不同哄啄,獲得的最小值也有可能不同,因此梯度下降求得的只是局部最小值风范;當(dāng)然如果損失函數(shù)是凸函數(shù)則一定是最優(yōu)解咨跌。由于有局部最優(yōu)解的風(fēng)險(xiǎn),需要多次用不同初始值運(yùn)行算法乌企,關(guān)鍵損失函數(shù)的最小值虑润,選擇損失函數(shù)最小化的初值。

3.歸一化加酵。由于樣本不同特征的取值范圍不一樣拳喻,可能導(dǎo)致迭代很慢,為了減少特征取值的影響猪腕,可以對(duì)特征數(shù)據(jù)歸一化冗澈,也就是對(duì)于每個(gè)特征x,求出它的期望\(\overline{x}\)和標(biāo)準(zhǔn)差std(x)陋葡,然后轉(zhuǎn)化為:

\(\frac{x - \overline{x}}{std(x)}\)

這樣特征的新期望為0亚亲,新方差為1,迭代次數(shù)可以大大加快腐缤。

4. 梯度下降法大家族(BGD捌归,SGD,MBGD)

4.1 批量梯度下降法(Batch Gradient Descent)

批量梯度下降法岭粤,是梯度下降法最常用的形式惜索,具體做法也就是在更新參數(shù)時(shí)使用所有的樣本來(lái)進(jìn)行更新,這個(gè)方法對(duì)應(yīng)于前面3.3.1的線性回歸的梯度下降算法剃浇,也就是說(shuō)3.3.1的梯度下降算法就是批量梯度下降法巾兆。

\(\theta_i =?\theta_i -?\alpha\sum\limits_{j=0}^{m}(h_\theta(x_0^{j}, x_1^{j}, ...x_n^{j}) - y_j)x_i^{j}\)

由于我們有m個(gè)樣本猎物,這里求梯度的時(shí)候就用了所有m個(gè)樣本的梯度數(shù)據(jù)。

4.2?隨機(jī)梯度下降法(Stochastic Gradient Descent)

隨機(jī)梯度下降法角塑,其實(shí)和批量梯度下降法原理類似蔫磨,區(qū)別在與求梯度時(shí)沒(méi)有用所有的m個(gè)樣本的數(shù)據(jù),而是僅僅選取一個(gè)樣本j來(lái)求梯度圃伶。對(duì)應(yīng)的更新公式是:

\(\theta_i =?\theta_i -?\alpha (h_\theta(x_0^{j}, x_1^{j}, ...x_n^{j}) - y_j)x_i^{j}\)

隨機(jī)梯度下降法堤如,和4.1的批量梯度下降法是兩個(gè)極端,一個(gè)采用所有數(shù)據(jù)來(lái)梯度下降留攒,一個(gè)用一個(gè)樣本來(lái)梯度下降煤惩。自然各自的優(yōu)缺點(diǎn)都非常突出嫉嘀。對(duì)于訓(xùn)練速度來(lái)說(shuō)炼邀,隨機(jī)梯度下降法由于每次僅僅采用一個(gè)樣本來(lái)迭代,訓(xùn)練速度很快剪侮,而批量梯度下降法在樣本量很大的時(shí)候拭宁,訓(xùn)練速度不能讓人滿意。對(duì)于準(zhǔn)確度來(lái)說(shuō)瓣俯,隨機(jī)梯度下降法用于僅僅用一個(gè)樣本決定梯度方向杰标,導(dǎo)致解很有可能不是最優(yōu)。對(duì)于收斂速度來(lái)說(shuō)彩匕,由于隨機(jī)梯度下降法一次迭代一個(gè)樣本腔剂,導(dǎo)致迭代方向變化很大,不能很快的收斂到局部最優(yōu)解驼仪。

那么掸犬,有沒(méi)有一個(gè)中庸的辦法能夠結(jié)合兩種方法的優(yōu)點(diǎn)呢?有绪爸!這就是4.3的小批量梯度下降法湾碎。

4.3?小批量梯度下降法(Mini-batch Gradient Descent)

小批量梯度下降法是批量梯度下降法和隨機(jī)梯度下降法的折衷,也就是對(duì)于m個(gè)樣本奠货,我們采用x個(gè)樣子來(lái)迭代介褥,1

\(\theta_i =?\theta_i - \alpha?\sum\limits_{j=t}^{t+x-1}(h_\theta(x_0^{j}, x_1^{j}, ...x_n^{j}) - y_j)x_i^{j}\)

5. 梯度下降法和其他無(wú)約束優(yōu)化算法的比較

在機(jī)器學(xué)習(xí)中的無(wú)約束優(yōu)化算法,除了梯度下降以外递惋,還有前面提到的最小二乘法柔滔,此外還有牛頓法和擬牛頓法。

梯度下降法和最小二乘法相比萍虽,梯度下降法需要選擇步長(zhǎng)睛廊,而最小二乘法不需要。梯度下降法是迭代求解贩挣,最小二乘法是計(jì)算解析解喉前。如果樣本量不算很大没酣,且存在解析解,最小二乘法比起梯度下降法要有優(yōu)勢(shì)卵迂,計(jì)算速度很快裕便。但是如果樣本量很大,用最小二乘法由于需要求一個(gè)超級(jí)大的逆矩陣见咒,這時(shí)就很難或者很慢才能求解解析解了偿衰,使用迭代的梯度下降法比較有優(yōu)勢(shì)。

梯度下降法和牛頓法/擬牛頓法相比改览,兩者都是迭代求解下翎,不過(guò)梯度下降法是梯度求解,而牛頓法/擬牛頓法是用二階的海森矩陣的逆矩陣或偽逆矩陣求解宝当。相對(duì)而言视事,使用牛頓法/擬牛頓法收斂更快。但是每次迭代的時(shí)間比梯度下降法長(zhǎng)庆揩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俐东,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子订晌,更是在濱河造成了極大的恐慌虏辫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锈拨,死亡現(xiàn)場(chǎng)離奇詭異砌庄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奕枢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)娄昆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人验辞,你說(shuō)我怎么就攤上這事稿黄。” “怎么了跌造?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵杆怕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我壳贪,道長(zhǎng)陵珍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任违施,我火速辦了婚禮互纯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘磕蒲。我一直安慰自己留潦,他們只是感情好只盹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拼余。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天茶鉴,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛菩鲜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惦积,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼接校,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了荣刑?” 一聲冷哼從身側(cè)響起馅笙,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伦乔,失蹤者是張志新(化名)和其女友劉穎厉亏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體烈和,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爱只,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了招刹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恬试。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疯暑,靈堂內(nèi)的尸體忽然破棺而出训柴,到底是詐尸還是另有隱情,我是刑警寧澤妇拯,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布幻馁,位于F島的核電站,受9級(jí)特大地震影響越锈,放射性物質(zhì)發(fā)生泄漏仗嗦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一甘凭、第九天 我趴在偏房一處隱蔽的房頂上張望稀拐。 院中可真熱鬧,春花似錦丹弱、人聲如沸德撬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜓洪。三九已至鸣驱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝠咆,已是汗流浹背踊东。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刚操,地道東北人闸翅。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像菊霜,于是被迫代替她去往敵國(guó)和親坚冀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355