機(jī)器學(xué)習(xí)算法:梯度下降法——原理篇

梯度下降法(Gradient Descent户敬,GD)是一種常用的求解無(wú)約束最優(yōu)化問(wèn)題的方法际长,在最優(yōu)化熙参、統(tǒng)計(jì)學(xué)以及機(jī)器學(xué)習(xí)等領(lǐng)域有著廣泛的應(yīng)用馍迄。本文將深入淺出的為讀者介紹梯度下降法的原理福也。

1.問(wèn)題明確

同大家一樣,作者在剛聽(tīng)聞梯度下降法這個(gè)專(zhuān)業(yè)名詞的時(shí)候也是心中一緊攀圈,發(fā)出奪命三連問(wèn):這是啥暴凑?這能干啥?這咋用白咐础现喳?上面已經(jīng)提到梯度下降法適用于求解無(wú)約束最優(yōu)化問(wèn)題,那么什么是無(wú)約束最優(yōu)化問(wèn)題呢犬辰?——不要怕嗦篱,我們先來(lái)看幾個(gè)你絕對(duì)能看懂的例子(當(dāng)然前提你得有一些統(tǒng)計(jì)學(xué)運(yùn)籌學(xué)基礎(chǔ)昂,小白先去補(bǔ)課;戏臁):

  • 形象的例子

引自UdacityGradient Descent - Problem of Hiking Down a Mountain

假設(shè)這樣一個(gè)場(chǎng)景:一個(gè)人需要從山的某處開(kāi)始下山灸促,盡快到達(dá)山底。在下山之前他需要確認(rèn)兩件事:

  1. 下山的方向
  2. 下山的距離

這是因?yàn)橄律降穆酚泻芏嗪眩仨毨靡恍┬畔⒃≡裕业綇脑撎庨_(kāi)始最陡峭的方向下山,這樣可以保證他盡快到達(dá)山底轿偎。此外典鸡,這座山最陡峭的方向并不是一成不變的,每當(dāng)走過(guò)一段規(guī)定的距離坏晦,他必須停下來(lái)萝玷,重新利用現(xiàn)有信息找到新的最陡峭的方向嫁乘。通過(guò)反復(fù)進(jìn)行該過(guò)程,最終抵達(dá)山底球碉。

下山過(guò)程簡(jiǎn)圖

這一過(guò)程形象的描述了梯度下降法求解無(wú)約束最優(yōu)化問(wèn)題的過(guò)程蜓斧,下面我們將例子里的關(guān)鍵信息與梯度下降法中的關(guān)鍵信息對(duì)應(yīng)起來(lái):山代表了需要優(yōu)化的函數(shù)表達(dá)式;山的最低點(diǎn)就是該函數(shù)的最優(yōu)值汁尺,也就是我們的目標(biāo);每次下山的距離代表后面要解釋的學(xué)習(xí)率多律;尋找方向利用的信息即為樣本數(shù)據(jù)痴突;最陡峭的下山方向則與函數(shù)表達(dá)式梯度的方向有關(guān),之所以要尋找最陡峭的方向狼荞,是為了滿(mǎn)足最快到達(dá)山底的限制條件辽装;細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn)上面還有一處加粗的詞組:某處——代表了我們給優(yōu)化函數(shù)設(shè)置的初始值,算法后面正是利用這個(gè)初始值進(jìn)行不斷的迭代求出最優(yōu)解相味。
看到這里大家應(yīng)該會(huì)發(fā)現(xiàn)這樣一個(gè)問(wèn)題:在選擇每次行動(dòng)的距離時(shí)拾积,如果所選擇的距離過(guò)大,則有可能偏離最陡峭的方向丰涉,甚至已經(jīng)到達(dá)了最低點(diǎn)卻沒(méi)有停下來(lái)拓巧,從而跨過(guò)最低點(diǎn)而不自知,一直無(wú)法到達(dá)山底一死;如果距離過(guò)小肛度,則需要頻繁尋找最陡峭的方向,會(huì)非常耗時(shí)投慈。要知道承耿,每次尋找最陡峭的方向是非常復(fù)雜的!同樣的伪煤,梯度下降法也會(huì)面臨這個(gè)問(wèn)題加袋,因此需要我們找到最佳的學(xué)習(xí)率,在不偏離方向的同時(shí)耗時(shí)最短抱既。

學(xué)習(xí)率(learning rate)對(duì)算法的影響
  • 統(tǒng)計(jì)學(xué)

經(jīng)典的回歸分析思想是尋找一個(gè)回歸方程式(也就是自變量x的線(xiàn)性組合)职烧,能夠最小化平方損失函數(shù):
\underset{\beta }{min}\, \, L\left ( y, f\left ( x ; \beta \right ) \right )=\sum_{i=1}^{n} \left ( y-f\left ( x; \beta \right ) \right )^{2}
上式可以看作一個(gè)典型的無(wú)約束最優(yōu)化問(wèn)題,自變量x與因變量y均由數(shù)據(jù)給出防泵,n為樣本個(gè)數(shù)阳堕,\beta為待估參數(shù)(既回歸系數(shù))。最小二乘法是求解回歸系數(shù)最常用的方法之一择克,系數(shù)\beta的解析解為(矩陣表達(dá)):
\hat{\beta }=\left ( X^{\top } X \right )^{-1}X^{ \top }Y
注意恬总,在上面的表達(dá)式中需要對(duì)矩陣求逆,而只有當(dāng)一個(gè)矩陣是非奇異矩陣(既可逆矩陣)時(shí)才存在逆運(yùn)算肚邢。當(dāng)矩陣\left ( X^{\top } X \right )是奇異矩陣壹堰,常規(guī)的最小二乘法便會(huì)失效拭卿。另外要說(shuō)的是,一般情況下我們所用的數(shù)據(jù)都不是嚴(yán)格的方陣贱纠,讀者還應(yīng)掌握更為一般化的廣義逆矩陣(也稱(chēng)為偽逆)概念峻厚。然而,即使有了廣義逆矩陣谆焊,當(dāng)自變量x的個(gè)數(shù)(既所選特征的個(gè)數(shù))大于樣本個(gè)數(shù)n時(shí)惠桃,最小二乘法仍會(huì)失效。
這時(shí)辖试,梯度下降法是一個(gè)不錯(cuò)的求解策略辜王。

  • 機(jī)器學(xué)習(xí)

眾所周知,感知機(jī)(Perceptron)是支持向量機(jī)與神經(jīng)網(wǎng)絡(luò)等機(jī)器學(xué)習(xí)方法的基礎(chǔ)罐孝。對(duì)于分類(lèi)問(wèn)題呐馆,其基本學(xué)習(xí)策略是尋找一條分類(lèi)直線(xiàn)(高維數(shù)據(jù)時(shí)為超平面):\left ( w\times x+b \right ),最小化誤分類(lèi)點(diǎn)到該分類(lèi)直線(xiàn)(超平面)之間的距離之和:
\underset{w,b}{min} \, \,-\frac{1}{\left \| w \right \|}\sum_{x_{i}\in M}^{ }y_{i}\left ( w\times x_{i}+b \right )
忽略\frac{1}{\left \| w \right \|}后莲兢,便得到感知機(jī)的損失函數(shù):
\underset {w,b}{min} \, \, L\left ( w,b \right )=-\sum_{x_{i}\in M}^{ }y_{i}\left ( w\times x_{i}+b \right ) ?
上式中M為誤分類(lèi)點(diǎn)的集合汹来,自變量x與分類(lèi)標(biāo)簽y均由數(shù)據(jù)給出,w與b為分類(lèi)直線(xiàn)(超平面)中的待估參數(shù)改艇。
顯然最小化該損失函數(shù)也是一個(gè)無(wú)約束最優(yōu)化問(wèn)題收班,可以用梯度下降法進(jìn)行求解。

看過(guò)上面幾個(gè)例子谒兄,我們將其歸納為一般的問(wèn)題進(jìn)行描述:首先闺阱,找到一個(gè)連續(xù)可微的函數(shù)作為待優(yōu)化的函數(shù),利用梯度下降法進(jìn)行參數(shù)迭代估計(jì)舵变,使可微函數(shù)在估計(jì)的參數(shù)處最優(yōu)值達(dá)到最小酣溃。

2.概念理解

  • 微分

我們所要優(yōu)化的函數(shù)必須是一個(gè)連續(xù)可微的函數(shù),可微纪隙,既可微分赊豌,意思是在函數(shù)的任意定義域上導(dǎo)數(shù)存在。如果導(dǎo)數(shù)存在且是連續(xù)函數(shù)绵咱,則原函數(shù)是連續(xù)可微的碘饼。在中學(xué)時(shí)我們便知道,函數(shù)的導(dǎo)數(shù)(近似于函數(shù)的微分)可以有以下兩種理解:

  • 函數(shù)在某點(diǎn)切線(xiàn)的斜率即為函數(shù)在該點(diǎn)處導(dǎo)數(shù)值悲伶。
  • 函數(shù)在某點(diǎn)的導(dǎo)數(shù)值反映函數(shù)在該處的變化率艾恼,導(dǎo)數(shù)值越大,原函數(shù)函數(shù)值變化越快麸锉。

以上兩個(gè)解釋可以讓我們對(duì)梯度下降法理解得更直觀(guān)形象钠绍,下面我們一起來(lái)看幾個(gè)連續(xù)可微函數(shù)求微分的例子:

  1. \frac {d\left ( x^{2} \right )}{dx}=2x
  2. \frac {d\left ( 5-\theta \right )^{2}}{d\theta }=-2\left ( 5-\theta \right )

上面這兩個(gè)例子高中生都會(huì),下面看看多元連續(xù)可微函數(shù)求微分的例子:

  1. \frac {\partial } {\partial x}\left ( x^{2}y^{2} \right )=2xy^{2}
  2. \frac {\partial } {\partial y}\left ( -2y^{5}+z^{2} \right )= -10y^{4}?
  3. \frac {\partial } {\partial \theta _{2}}\left [0.55-\left ( 5\theta _{1}+2\theta _{2}-12\theta _{3} \right ) \right ]=-2?
  • 梯度

學(xué)習(xí)梯度下降算法花沉,不知道什么是梯度可不行柳爽!

以二元函數(shù)z=f\left ( x,y \right )?為例媳握,假設(shè)其對(duì)每個(gè)變量都具有連續(xù)的一階偏導(dǎo)數(shù)\frac{\partial z} {\partial x}?\frac{\partial z} {\partial y}?,則這兩個(gè)偏導(dǎo)數(shù)構(gòu)成的向量\left [ \frac{\partial z} {\partial x},\frac{\partial z} {\partial y} \right ]?即為該二元函數(shù)的梯度向量磷脯,一般記作\triangledown f\left ( x,y \right )?蛾找,其中\triangledown?讀作“Nabla”。根據(jù)這個(gè)概念赵誓,我們來(lái)看幾個(gè)多元函數(shù)求梯度的例子:

  1. J\left ( \Theta \right )=0.55-\left ( 5\theta _{1} +2\theta _{2}-12\theta _{3}\right )?

\begin{array}{l} \nabla J(\Theta)=\left[\frac{\partial J} {\partial \theta_{1}}, \frac{\partial J} {\partial \theta_{2}}, \frac{\partial J}{\partial \theta_{3}}\right] \\ =[-5,-2,12] \end{array}

  1. J\left ( \Theta \right )=\frac{1}{2}\left [ 0.55-\left ( 5\theta _{1}+2\theta _{2}-12\theta _{3} \right ) \right ]^{2}?

\begin{array}{l} \nabla J(\Theta)=\left[\frac{\partial J}{\partial \theta_{1}}, \frac{\partial J}{\partial \theta_{2}}, \frac{\partial J}{\partial \theta_{3}}\right] \\ =\left[-5\left(0.55-\left(5 \theta_{1}+2 \theta_{2}-12 \theta_{3}\right)\right),-2\left(0.55-\left(5 \theta_{1}+2 \theta_{2}-12 \theta_{3}\right)\right), 12\left(0.55-\left(5 \theta_{1}+2 \theta_{2}-12 \theta_{3}\right)\right)\right] \end{array}

注意打毛,上面兩個(gè)例子中的\Theta=\left ( \theta_{1}, \theta_{2}, \theta_{3} \right )?

在一元函數(shù)中俩功,梯度其實(shí)就是微分幻枉,既函數(shù)的變化率,而在多元函數(shù)中绑雄,梯度變?yōu)榱讼蛄空勾牵瑯颖硎竞瘮?shù)變化的方向奥邮,從幾何意義來(lái)講万牺,梯度的方向表示的是函數(shù)增加最快的方向,這正是我們下山要找的“最陡峭的方向”的反方向洽腺!因此后面要講到的迭代公式中脚粟,梯度前面的符號(hào)為“-”,代表梯度方向的反方向蘸朋。在多元函數(shù)中核无,梯度向量的模(一般指二模)表示函數(shù)變化率,同樣的藕坯,模數(shù)值越大团南,變化率越快。

  • 學(xué)習(xí)率\alpha

學(xué)習(xí)率也被稱(chēng)為迭代的步長(zhǎng)炼彪,優(yōu)化函數(shù)的梯度一般是不斷變化的(梯度的方向隨梯度的變化而變化)吐根,因此需要一個(gè)適當(dāng)?shù)膶W(xué)習(xí)率約束著每次下降的距離不會(huì)太多也不會(huì)太少。讀者可參考上面講過(guò)的下山例子中下山距離的講解辐马,此處不再贅述拷橘。

3.梯度下降算法原理

在清楚我們要解決的問(wèn)題并明白梯度的概念后,下面開(kāi)始正式介紹梯度下降算法喜爷。根據(jù)計(jì)算梯度時(shí)所用數(shù)據(jù)量不同冗疮,可以分為三種基本方法:批量梯度下降法(Batch Gradient Descent, BGD)、小批量梯度下降法(Mini-batch Gradient Descent, MBGD)以及隨機(jī)梯度下降法(Stochastic Gradient Descent, SGD)檩帐。

這里首先給出梯度下降法的一般求解框架:

  1. 給定待優(yōu)化連續(xù)可微函數(shù)J\left ( \Theta \right)术幔、學(xué)習(xí)率\alpha以及一組初始值\Theta_{0}=\left ( \theta_{01}, \theta_{02}, \cdots, \theta_{0l}, \right )

  2. 計(jì)算待優(yōu)化函數(shù)梯度:\triangledown J\left ( \Theta _{0} \right )

  3. 更新迭代公式:\Theta^{0+1}=\Theta _{0}-\alpha \triangledown J\left ( \Theta _{0} \right )

  4. 計(jì)算\Theta^{0+1}處函數(shù)梯度\triangledown J\left ( \Theta _{0+1} \right)

  5. 計(jì)算梯度向量的模來(lái)判斷算法是否收斂:\left\| \triangledown J\left ( \Theta \right ) \right \|\leqslant \varepsilon

  6. 若收斂,算法停止湃密,否則根據(jù)迭代公式繼續(xù)迭代

注意:以上敘述只是給出了一個(gè)梯度下降算法的一般框架特愿,實(shí)際應(yīng)用過(guò)程中仲墨,還應(yīng)靈活變換該框架使其符合實(shí)際。例如揍障,可以更改迭代公式(例如學(xué)習(xí)率前面的符號(hào)目养,因?yàn)槿绻髆ax的話(huà),梯度的方向即為函數(shù)值上升最快的方向毒嫡,此時(shí)符號(hào)應(yīng)為“+”)癌蚁,還可以用其他指標(biāo)(例如KL散度、迭代前后優(yōu)化函數(shù)值的變化程度等)判斷算法的收斂性等等兜畸。

在下面的介紹中努释,為了便于理解,我們均假設(shè)待優(yōu)化函數(shù)為二模損失函數(shù):

J\left ( \Theta \right )=\frac{1}{2n}\sum_{i=1}^{n}\left ( h_{\theta } \left ( x^{\left ( i \right )}\right )-y^{\left ( i \right )} \right )^{2}?

其中咬摇,n為樣本個(gè)數(shù)伐蒂,也可以理解為參與計(jì)算的樣本個(gè)數(shù);\frac{1} {2}?是一個(gè)常數(shù)肛鹏,為了求偏導(dǎo)數(shù)時(shí)與平方抵消方便逸邦,不影響計(jì)算復(fù)雜度與計(jì)算結(jié)果;x^{\left ( i \right )}y^{\left ( i \right ) }為第i個(gè)樣本在扰;h_{ \theta } \left ( x^{\left ( i \right )}\right )=\theta _{0}+\theta _{1}x_{1}^{\left ( i \right )}+\cdots +\theta _{n}x_{n}^{\left ( i \right )}?缕减,x的下標(biāo)表示第i個(gè)樣本的各個(gè)分量。

  • 批量梯度下降法

批量梯度下降法在計(jì)算優(yōu)化函數(shù)的梯度時(shí)利用全部樣本數(shù)據(jù)

梯度計(jì)算公式:\frac{ \partial J\left ( \Theta \right )}{\partial \theta _{j}}=\frac{1}{n}\sum_{i=1}^{n}\left ( h_{\theta } \left ( x^{\left ( i \right )}\right )-y^{\left ( i \right )} \right )x_{j}^{\left (i \right )}

這里可以清楚地看到芒珠,批量梯度下降法計(jì)算梯度時(shí)桥狡,使用全部樣本數(shù)據(jù),分別計(jì)算梯度后除以樣本個(gè)數(shù)(取平均)作為一次迭代使用的梯度向量皱卓。

迭代公式為:\theta =\theta -\eta \cdot \triangledown _{\theta }J\left ( \theta \right )

偽代碼如下:

for i in range(max_iters):
    grad = evaluate_gradient(loss_functiion, data, initial_params)
    params = params - learning_rate * grad
  • 隨機(jī)梯度下降法

隨機(jī)梯度下降法在計(jì)算優(yōu)化函數(shù)的梯度時(shí)利用隨機(jī)選擇的一個(gè)樣本數(shù)據(jù)

梯度計(jì)算公式:\frac{\partial J\left ( \Theta \right )}{\partial \theta _{j}}=\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )}

SGD只是用一個(gè)樣本數(shù)據(jù)參與梯度計(jì)算裹芝,因此省略了求和以及求平均的過(guò)程,降低了計(jì)算復(fù)雜度娜汁,因此提升了計(jì)算速度嫂易。

迭代公式為:\theta =\theta -\eta \cdot \triangledown _{\theta }J\left ( \theta;x^{\left ( i \right )} ;y^{\left ( i \right )} \right )

偽代碼如下:

for i in range(max_iters):
    np.random.shuffle(data)
    for sample in data:
        grad = evaluate_gradient(loss_functiion, sample, initial_params)
        params = params - learning_rate * grad
  • 小批量梯度下降法

小批量梯度下降法在計(jì)算優(yōu)化函數(shù)的梯度時(shí)利用隨機(jī)選擇的一部分樣本數(shù)據(jù)

梯度計(jì)算公式:\frac{\partial J\left ( \Theta \right ) }{\partial \theta _{j}}=\frac{1}{k}\sum_{i}^{i+k}\left ( h_{\theta } \left ( x^{\left ( i \right )}\right )-y^{\left ( i \right )} \right )x_{j}^{\left (i \right )}

小批量梯度下降法使用一部份樣本數(shù)據(jù)(上式中為k個(gè))參與計(jì)算,既降低了計(jì)算復(fù)雜度存炮,又保證了解的收斂性炬搭。

迭代公式為:\theta =\theta -\eta \cdot \triangledown _{\theta }J\left ( \theta ;x^{\left ( i:i+k \right )};y^{\left ( i:i+k \right )} \right )

偽代碼如下(假設(shè)每次選取50個(gè)樣本參與計(jì)算):

for i in range(max_iters):
    np.random.shuffle(data)
    for batch in get batches(data, batch_size=50):
        grad = evaluate_gradient(loss_functiion, batch, initial_params)
        params = params - learning_rate * grad

三種方法優(yōu)缺點(diǎn)對(duì)比:

BGD(批量) SGD(隨機(jī)) MBGD(小批量)
優(yōu)點(diǎn) 非凸函數(shù)可保證收斂至全局最優(yōu)解 計(jì)算速度快 計(jì)算速度快,收斂穩(wěn)定
缺點(diǎn) 計(jì)算速度緩慢穆桂,不允許新樣本中途進(jìn)入 計(jì)算結(jié)果不易收斂宫盔,可能會(huì)陷入局部最優(yōu)解中

其實(shí),已經(jīng)有研究發(fā)現(xiàn)享完,當(dāng)逐漸減小SGD方法使用的學(xué)習(xí)率時(shí)灼芭,可以保證SGD解的收斂性旷档,但不一定保證收斂至全局最優(yōu)解治拿。此外,許多深度學(xué)習(xí)方法所使用的求解算法都是基于MBGD的,該方法一個(gè)算不上缺點(diǎn)的“缺點(diǎn)”就是需要找到合適的參與梯度計(jì)算的樣本規(guī)模靶端,對(duì)于超過(guò)2000個(gè)樣本的較大數(shù)據(jù)集而言衅檀,參與計(jì)算的樣本規(guī)模建議值為2^{6}2^{8}?蛾方。下面這張圖形象的顯示了三種梯度下降算法的收斂過(guò)程:

三種梯度下降算法的收斂過(guò)程
  • 簡(jiǎn)單實(shí)例

求:

函數(shù)f\left ( x \right )=f\left ( x_{1},x_{2}\right )=\frac{1}{3}x_{1}^{2}+\frac{1}{2}x_{2}^{2}?的極小值點(diǎn)艰争。

解:

設(shè)初始點(diǎn)為x_{1}=\left ( x_{1}^{\left ( 1 \right )},x_{2}^{\left ( 1 \right )} \right )^{\top }=\left ( 3,2 \right )^{\top },學(xué)習(xí)率設(shè)為\lambda猜旬。

初始點(diǎn)處梯度為g _{1}=g\left ( x _{1} \right )=\left ( 2,2 \right )^{\top }\neq 0脆栋,因此更新迭代公式帶入原函數(shù)中,得:

f\left( x_{2} \right )=f\left ( x_{1}-\lambda g_{1} \right )=\frac{10}{3}\lambda ^{2}-8\lambda +5洒擦,此時(shí)\lambda _{1}^{*}=\frac{6}{5}為函數(shù)極小點(diǎn)椿争,因此:

x_{2}=x_{1}-\lambda _{1}^{*}g_{1}=\left ( \frac{3}{5},-\frac{2}{5} \right )^{\top }?,一次迭代結(jié)束熟嫩。

再將x_{2}作為初始點(diǎn)秦踪,重復(fù)上面的迭代步驟,得到:x_{3}=\left ( \frac{3}{5^{2}},\frac{2}{5^{2}} \right )^{\top }掸茅。

根據(jù)規(guī)律顯然可知椅邓,x_{k}=\left(\frac{3}{5^{k-1}},\left ( -1 \right )^{k-1}\frac{2}{5^{k-1}} \right )^{\top }?

容易看出倦蚪,本例中目標(biāo)函數(shù)f\left ( x \right )是三維空間中的橢圓拋物面希坚,其投影至二維空間上的等高線(xiàn)是一簇橢圓(如下圖所示)边苹。f\left ( x \right )的極小點(diǎn)就是這簇橢圓的中心x^{*}=\left ( 0,0 \right )^{\top }陵且。我們求得的迭代公式\left \{ x_{k} \right \}是逐漸趨近于?x^{*}?的,算法正確有效个束。

梯度下降法的行進(jìn)路線(xiàn)

至此慕购,梯度下降法的原理部分就結(jié)束了。作者感覺(jué)本篇應(yīng)該是全網(wǎng)最清楚明白的講解之一了茬底,為了了解了大家的疑問(wèn)沪悲,在動(dòng)筆前參看了許多優(yōu)秀的博文以及留言,最終形成此文阱表。希望能對(duì)熱愛(ài)學(xué)習(xí)的你有所幫助殿如!
后續(xù)還有機(jī)器學(xué)習(xí)算法:梯度下降法的代碼篇(Python & R)以及拓展篇,敬請(qǐng)期待最爬!

4.參考文獻(xiàn)

  1. 鄧乃揚(yáng) 等 . 無(wú)約束最優(yōu)化計(jì)算方法[M]. 1982.
  2. Ruder S . An overview of gradient descent optimization algorithms[J]. 2016.
  3. Udacity . Gradient Descent - Problem of Hiking Down a Mountain
  4. @六尺帳篷 . 深入淺出--梯度下降法及其實(shí)現(xiàn). 簡(jiǎn)書(shū)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涉馁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爱致,更是在濱河造成了極大的恐慌烤送,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糠悯,死亡現(xiàn)場(chǎng)離奇詭異帮坚,居然都是意外死亡妻往,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)试和,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讯泣,“玉大人,你說(shuō)我怎么就攤上這事阅悍∨邪铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵溉箕,是天一觀(guān)的道長(zhǎng)晦墙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肴茄,這世上最難降的妖魔是什么晌畅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮寡痰,結(jié)果婚禮上抗楔,老公的妹妹穿的比我還像新娘。我一直安慰自己拦坠,他們只是感情好连躏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贞滨,像睡著了一般入热。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晓铆,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天勺良,我揣著相機(jī)與錄音,去河邊找鬼骄噪。 笑死尚困,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的链蕊。 我是一名探鬼主播事甜,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼滔韵!你這毒婦竟也來(lái)了逻谦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奏属,失蹤者是張志新(化名)和其女友劉穎跨跨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勇婴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年忱嘹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耕渴。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拘悦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橱脸,到底是詐尸還是另有隱情础米,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布添诉,位于F島的核電站屁桑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栏赴。R本人自食惡果不足惜蘑斧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望须眷。 院中可真熱鬧竖瘾,春花似錦、人聲如沸花颗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扩劝。三九已至庸论,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間今野,已是汗流浹背葡公。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工罐农, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留条霜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓涵亏,卻偏偏與公主長(zhǎng)得像宰睡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子气筋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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