論文筆記 | Learning Long-Term Dependencies with Gradient Descent is Difficult

作者

Yoshua Bengio, Patrice Simard, and Paolo Frasconi

以下介紹中,塊引用代表評論。

摘要

指出了 RNN 所面臨的問題: temporal contingencies present in the input/output sequences span intervals ,也就是所謂的長依賴問題(long-term dependencies)糊闽。接下來指出問題的原因是基于梯度的訓(xùn)練方法。這種方法中存在 trade-off bbetween efficient learning by gradient descent and latching on information for long periods 。

基于此提出的解決方法是使用 alternatives to standard gradient descent 斤讥,也就是標(biāo)準(zhǔn)梯度下降外的替代品。

即使作為反向傳播算法的提出者湾趾, Geoffrey Hinton 在 2017 年也對該算法提出了懷疑芭商。不過近期又發(fā)了一篇 Assessing the Scalability of Biologically-Motivated Deep Learning Algorithms and Architectures ,在一些需要特殊網(wǎng)絡(luò)結(jié)構(gòu)的數(shù)據(jù)集上比較了生物學(xué)啟發(fā)的多種訓(xùn)練算法搀缠,結(jié)果發(fā)現(xiàn)效果還是 BP 不好铛楣。這篇 1994 年的文章講了 BP 如何不適合解決序列問題中的長依賴。值得一讀艺普。

引言

序列任務(wù)中需要系統(tǒng)能夠存儲簸州、更新信息。從過去輸入中計算得到的信息歧譬,對于輸出是很有用的勿侯。 RNN 很適合這樣的任務(wù),因為其有內(nèi)部狀態(tài)(internal state)可以表示這樣的上下文信息(context information)缴罗。這種特性來自于結(jié)構(gòu)上的“循環(huán)”,靜態(tài)的神經(jīng)網(wǎng)絡(luò)祭埂,即使引入延遲(Time Delay Neural Networks)也只能將信息儲存特定時間長度面氓,而不能儲存不定時間長度。

RNN 的訓(xùn)練算法基于損失函數(shù)的梯度下降蛆橡。比如 back-propagation through time (BPTT) 算法舌界。 Forward propagation (FP) 算法計算代價更高,但可以在線學(xué)習(xí)泰演。另一個訓(xùn)練受限 RNN 的算法中呻拌,動態(tài)神經(jīng)元(dynamic neurons,只有向自己的一個反饋)和 FP 一樣在時間上只需要本地信息睦焕,但權(quán)重更新所需計算只正比于權(quán)值數(shù)(和 BP 一樣)藐握。但其對于一般序列的存儲能力有限,因此限制了其表示能力垃喊。

Long-term dependencies 的定義是在時間 t 的輸出依賴于一個更早時間的 \tau \ll t 猾普。盡管 RNN 的表現(xiàn)超過很多統(tǒng)計網(wǎng)絡(luò),但更難訓(xùn)練到最優(yōu)本谜。局部最優(yōu)的原因是次優(yōu)解將短期依賴納入了考慮初家,但沒有考慮長期依賴褐隆。 Mozer [19] 發(fā)現(xiàn)反向傳播很難發(fā)現(xiàn)長時間間隔的隨機事件椭更。本文從理論和實驗上解釋這個問題。

很慚愧只學(xué)過 BPTT ,對于另外兩個都沒有聽說過葬毫。

一個含參數(shù)的動力系統(tǒng)(parametric dynamic system)的三個基本要求如下:

  1. 能夠?qū)⑿畔Υ嫒我鈺r長
  2. 能夠?qū)乖肼?/li>
  3. 參數(shù)可訓(xùn)練(訓(xùn)練時間合理)

定義信息鎖存(information latching)為一個動力系統(tǒng)將特定比特的信息在狀態(tài)變量中的長期存儲。使用 hyperbolic attractor 的形式化定義將在 4.1 節(jié)給出吐咳。

hyperbolic attractor 本身的定義也將在第 4 節(jié)給出

文章共 5 節(jié)蹂楣。第 2 節(jié)提出一個只有滿足上述條件的系統(tǒng)才能解決的最小任務(wù)。接下來展示一個 RNN 解法培遵,和一個負(fù)實驗結(jié)果浙芙,表明梯度下降連這個簡單任務(wù)都不適合。第 4 節(jié)的理論結(jié)果解釋了一個系統(tǒng)要么穩(wěn)定能夠抵抗噪音籽腕,要么能使用梯度下降法高效訓(xùn)練嗡呼,但不能同時達(dá)到。否則皇耗,在時間 t 的狀態(tài)對于時間 0 的狀態(tài)的導(dǎo)數(shù)將隨 t 增大而指數(shù)減小南窗。

因此,反向傳播(以及一般的梯度下降算法)對于長序列效率低郎楼,因此不滿足條件 3 万伤。第 5 節(jié)提出了新的算法,并將其與反向傳播的變體和模擬退火(simulated annealing)進(jìn)行比較呜袁。使用的是輸入輸出依賴可以控制的簡單任務(wù)敌买。

第 2 節(jié) 說明問題的最小任務(wù)

該任務(wù)是一個序列二分類問題,最終的類別只取決于前 L 個輸入值阶界。

也即類別 \mathcal{C}(u_1,\dots,u_T) = \mathcal{C}(u_1,\dots,u_L) 虹钮。而整個輸入序列可以具有任意長度 T \gg L

該任務(wù)中膘融,長度 L 之后的輸入都是不相關(guān)的噪聲芙粱。因此,模型需要有效地儲存信息才能解決這個問題氧映。本次實驗中春畔, L 之后的輸入是均值為 0 的高斯噪聲。

上面提到第 3 個標(biāo)準(zhǔn)是可學(xué)習(xí)性岛都,這里有兩個方面:第一律姨,處理前 L 步的輸入并正確分類。第二臼疫,將信息儲存在狀態(tài)變量中任意時長线召。在這個任務(wù)中,前面的分類和后面儲存的時長無關(guān)多矮,因此一個簡單的解決方法是使用一個鎖存子系統(tǒng)(latching subsystem)缓淹,接收前面分類子系統(tǒng)的信息作為輸入哈打。

由于我們希望結(jié)果不與特定的分類任務(wù)相關(guān)(也就是與分類子系統(tǒng)相獨立),因此我們只關(guān)注后面的鎖存系統(tǒng)讯壶。一個鎖存系統(tǒng)想要處理任意輸入序列料仗,就需要能將錯誤傳播回前面的系統(tǒng),并檢測到引發(fā)鎖存的事件伏蚊。(propagate error information to a module that feeds the latching subsystem and detects the events leading to latching)

因此立轧,我們將上面的任務(wù)修改如下:前 L 個輸入可供輸入算法調(diào)參(can be tuned by the learning algorithm), L 步之后的輸入是隨機的高斯噪聲躏吊。目標(biāo)函數(shù)是二分類(期望輸出值分別是 ±0.8)的平方誤差和氛改。

經(jīng)過改造后, h_t\ (t=1,\dots, L) 代表了類別信息的計算結(jié)果比伏。直接學(xué)習(xí) h_t 比從輸入中學(xué)習(xí)參數(shù) \theta 容易胜卤。而且如果 h_t 是對應(yīng)時間步的輸入 u_t 的帶參函數(shù)的話,也即 h_t(u_t, \theta) 赁项,代價函數(shù)對于 h_t 的導(dǎo)數(shù)是一樣的(BPTT 下)葛躏。如果因為梯度消失導(dǎo)致 h_t 不能被訓(xùn)練出來的話,那作為帶參函數(shù)同樣訓(xùn)練不出來悠菜。

研究鎖存子系統(tǒng)的方法十分巧妙舰攒。鎖存子系統(tǒng)想要達(dá)到預(yù)期的功能,至少要能將分類結(jié)果的正誤信息傳播回分類子系統(tǒng)悔醋。也即假設(shè)最后是 1 類摩窃,至少應(yīng)該有方法將其通知到分類子系統(tǒng)。而我們觀察其能否通知的方式芬骄,就是讓其在前 L 步輸入處還原最終的分類結(jié)果猾愿。對于原來的任務(wù)來說,我們通過訓(xùn)練參數(shù)讓這個結(jié)果最終在 L 步處出現(xiàn)德玫。而訓(xùn)練的依據(jù)就是在第 L 步我們接受到了鎖存子系統(tǒng)傳播回來的正確類別的信息。

舉一個例子來說明椎麦。假設(shè)原來的任務(wù) L = 3 宰僧,接受到一個序列 101001... ,假設(shè)標(biāo)簽為第 1 類观挎。分類系統(tǒng)應(yīng)該在接受到 101 這三個時間步時就已經(jīng)得出分類標(biāo)簽為 1 這個結(jié)論了琴儿。接下來,鎖存系統(tǒng)將 1 這個結(jié)果儲存起來嘁捷,直至第 T 步輸出造成。

然而我們只希望關(guān)注鎖存子系統(tǒng)。在原任務(wù)中雄嚣,如果最終標(biāo)簽是 1 晒屎,鎖存子系統(tǒng)應(yīng)該能反向傳播到第 3 個時間步喘蟆,告訴分類子系統(tǒng)標(biāo)簽是 1 。因此鼓鲁,假如序列最終的標(biāo)簽是 1 蕴轨,我們希望無論前 3 個輸入是什么,都能得到這一標(biāo)簽骇吭。所以鎖存子系統(tǒng)只需要把真實標(biāo)簽傳播給前 3 步的分類系統(tǒng)即可橙弱。假如沒有分類系統(tǒng),我們就讓鎖存子系統(tǒng)在前 3 個位置還原最終的標(biāo)簽燥狰。

也就是棘脐,假設(shè)序列的最終標(biāo)簽是 1 (對應(yīng)目標(biāo)值 0.8),鎖存子系統(tǒng)應(yīng)該在前 3 步輸出 0.8, 0.8, 0.8 龙致,如果序列最終標(biāo)簽是 0 蛀缝,鎖存子系統(tǒng)應(yīng)該在前 3 步輸出 -0.8, -0.8, -0.8 。假如我們有真的分類子系統(tǒng)净当,它應(yīng)當(dāng)能在這里拿到真實的標(biāo)簽内斯,并據(jù)此將其與輸入序列聯(lián)系起來(通過調(diào)整帶參函數(shù)的參數(shù)),比如 101 或者 010 等等像啼。

個人感覺上面的切片測試方法不僅適合測試鎖存俘闯,應(yīng)該適合各種具有確定期望功能的子系統(tǒng)。舉例來說忽冻,假設(shè)一個子系統(tǒng)需要進(jìn)行 (+1) 這個運算真朗,應(yīng)當(dāng)有能力對于輸出 x 在輸入處還原期望的輸入 (x-1) ,這樣才能通知前面的系統(tǒng)僧诚,我需要 (x-1) 遮婶。

當(dāng)然這只是完成鎖存或其他功能的必要條件。

關(guān)于導(dǎo)數(shù)相同一段湖笨,這是因為假設(shè) h_t 僅取決于 u_t (而非其他時間步的輸入)旗扑,因此 h_t(u_t, \theta) 是一個 context-free 的函數(shù),根據(jù)求導(dǎo)的鏈?zhǔn)椒▌t慈省,對 h_t 的導(dǎo)數(shù)相同臀防,而不論它是變量還是另一個變量的函數(shù)。

關(guān)于為何選取目標(biāo)函數(shù)值為 0.8 边败,因為 tanh 函數(shù)值域為 (-1, 1) 袱衷,而下一層的輸入在 tanh(-1) = -0.76 到 tanh(1) = 0.76 之間。因此多個 tanh 單元疊加值域就在 (-0.8, 0.8) 之間笑窜。

第 3 節(jié) 一個簡單的 RNN 解決方案

見圖 Fig. 1a.

Fig 1

這是一個單一神經(jīng)元的 RNN 致燥,如果 w \gt 1 ,有兩個吸引子 \pm \bar{x} 排截,值取決于 w 嫌蚤。

假設(shè)初值 x_0 = -\bar{x} 辐益,文獻(xiàn) [7, 8] 表明存在 h^\star \gt 0 滿足:

  1. x_t maintains its sign if |h_t| \lt h^\star ,也即小于閾值的輸入不會改變狀態(tài)的符號搬葬。
  2. there exists a finite number of steps L_1 such that x_{L_1} \gt \bar{x} if h_t \gt h^\star \ \forall t \le L_1 荷腊。也即假如超過正向閾值的輸入持續(xù)了超過 L_1 步后,會在 L_1 步時將狀態(tài)轉(zhuǎn)到正向吸引子 \bar{x} 急凰。

對于初值為正的情況有相應(yīng)的對稱結(jié)論女仰。

當(dāng) w 固定, L_1 隨著 |h_t| 的增加而減小抡锈。

據(jù)此我們可以得到:

  1. 該系統(tǒng)可以儲存一個 bit 的信息疾忍。通過最終輸出的符號確定。
  2. 存儲是通過將足夠強(大于 |h^\star|)的輸入保持足夠長的時間實現(xiàn)的床三。
  3. 小的(小于 |h^\star|)噪聲不會影響輸出的符號一罩。無論持續(xù)時間有多長。

參數(shù) w 也是可訓(xùn)練的撇簿,更大的 w 對應(yīng)于更大的閾值 h^\star 聂渊,對抗噪聲的能力也就越強。

比如可以通過調(diào)整四瘫,使得 h^1_t \ge Hh^0_t \le H 汉嗽,其中 H \gt h^\star 來實現(xiàn)。

從上面的 Fig. 1b. 我們可以看到成功學(xué)習(xí)出來了加粗部分的前 3 個 h_t 找蜜。

下面看各參數(shù)的影響饼暑。

Fig 2

首先 Fig. 2a 是噪聲的標(biāo)準(zhǔn)差 s 和初始的權(quán)值 w_0 的影響。我們可以看到隨著 s 的增大和 w_0 的減小洗做,效果變差弓叛。

這很符合我們的直覺,噪聲越強诚纸,對抗噪聲的閾值越低撰筷,越容易丟失存儲。

Fig. 2b 展示了隨著 T 的增加畦徘,收斂性變差毕籽。這表明,梯度下降即使對于長時間存儲 1 位信息也很困難旧烧。

第 4 節(jié) 使用動力系統(tǒng)學(xué)習(xí)鎖存

本節(jié)以基于動力系統(tǒng)的實時識別器為例子影钉,說明 RNN 能夠按雙曲吸引子(hyperbolic attractors)的方式魯棒性地儲存信息的條件画髓,會導(dǎo)致梯度消失的問題掘剪。

非自動(non-autonomous)的離散時間的系統(tǒng),帶有額外的輸入:

a_t = M(a_{t-1}) + u_t

和自動系統(tǒng)(autonomous system):

a_t = M(a_{t-1})

其中奈虾, a_t 代表系統(tǒng)狀態(tài)夺谁, u_{t} 代表輸入廉赔。兩者是 n 維向量, M 代表非線性映射匾鸥。

不帶有額外輸入的自動系統(tǒng)蜡塌,可以通過引入額外狀態(tài)變量和對應(yīng)輸入的方式,轉(zhuǎn)變成非自動的系統(tǒng)勿负。

比如 a_t = N(a_{t-1}, u_{t-1})a_t 馏艾, u_t 分別為 n 維和 m 維向量)可以轉(zhuǎn)化為 a_t^\prime = N^\prime(a_{t-1}^\prime) + u_t^\prime ,其中 a_{t}^\prime = (a_t, y_t) 是一個 n+m 維向量奴愉, u_t^\prime = (0, u_t) 即前 n 個分量為 0 琅摩,N^\prime(a_t^\prime) = (N_t(a_{t-1}, y_{t-1}), 0) 即后 m 個分量為 0 。

最終锭硼,y_t = u_t 房资。

以上轉(zhuǎn)換相當(dāng)于將本來的內(nèi)部狀態(tài)變量當(dāng)做系統(tǒng)的額外輸入。使用映射計算出下面的 n 維狀態(tài)后檀头,就將剩下的 m 維分量丟棄轰异。再從外界輸入同樣的 m 維分量,組合在一起恢復(fù)內(nèi)部狀態(tài)暑始,作為下一次映射的輸入搭独。

注意到具有 N^\prime 形式的非自動系統(tǒng)也可以等價轉(zhuǎn)換為自動系統(tǒng)。因此蒋荚,不失一般性戳稽,我們只考慮非自動系統(tǒng)。

下面說明期升,當(dāng)使用雙曲吸引子進(jìn)行鎖存時惊奇,只有兩種情況會發(fā)生:要么對噪聲十分敏感,要么代價函數(shù)在 t 時刻對于 0 時刻的導(dǎo)數(shù)播赁,將隨 t 增加而指數(shù)下降颂郎。

4.1 分析

為了鎖存一位信息,希望將系統(tǒng)的活動 a_t 限制在定義域的一個子集 S 上容为。這樣能區(qū)分兩個狀態(tài):在 S 內(nèi)乓序,和不在 S 內(nèi)。為了使 a_t 保持在其中坎背,動力系統(tǒng)可以將其放在一個吸引子的吸引盆(basin of attraction)中替劈。(吸引子也可以是子流形或子空間的吸引子)。想要“擦除”這一位信息得滤,系統(tǒng)將 a_t 從吸引盆中推出陨献,可能放進(jìn)另一個吸引盆中。本節(jié)說明懂更,如果吸引盆是雙曲的(hyperbolic)眨业,或者可以轉(zhuǎn)化為雙曲的(比如周期穩(wěn)定吸引子 periodic stable attractor)急膀,那么對 t_0 輸入的導(dǎo)數(shù)會迅速消失。

定義 1 : E 是映射 M 的不動點龄捡,如果 E = M(E)

定義 2 : 不動點點集 X 是可微映射 M 的雙曲吸引子卓嫂,如果 \forall a \in X, \ M^\prime(a) 的特征值的絕對值小于 1 。

吸引子可能包含一個點(固定點吸引子聘殖, fixed point attractor)晨雳,有限個點(周期性吸引子, periodic attractor)或者無限個點(混沌吸引子奸腺, chaotic attractor)悍募。

一個穩(wěn)定的固定點吸引子,對于映射 M 是雙曲的洋机;一個穩(wěn)定的周期性的吸引子坠宴,設(shè)其周期為 l ,則對于映射 M^l 是雙曲的绷旗。

RNN 的吸引子的種類取決于權(quán)值矩陣喜鼓。對于 a_t = W\ \tanh(a_{t-1})+u_t ,如果 W 是對稱的衔肢,且其最小特征值大于 -1 的話庄岖,那么其所有吸引子都是固定點。如果行列式小于 1 或者系統(tǒng)是線性且穩(wěn)定的角骤,那么只有在原點處有一個固定點吸引子隅忿。

以上關(guān)于吸引子的知識全沒有接觸過。翻譯了一下邦尊。僅從直觀上進(jìn)行理解背桐。

定義 3 : 一個吸引子 X 的吸引盆 \beta(X) ,指映射 M 下收斂于 X 的點集蝉揍。即 \beta(x) = \{ a\ :\ \forall \epsilon, \exists l, \exists x \in X \text{ s.t. } ||M^l(a)|| \lt \epsilon\}

定義 4 : \Gamma(X) 是雙曲吸引子 X 吸引盆中的 reduced attracting set链峭,如果滿足 \forall l \ge 1(M^l)^\prime(y) 的所有特征值小于 1又沾。

根據(jù)定義有弊仪, X \subset \Gamma(X) \subset \beta(X)

reduced 應(yīng)該翻譯成“剩余”還是“減小”杖刷?不太確定励饵。這里只要求特征值小于 1 ,雙曲吸引子要求特征絕對值小于 1 滑燃,故雙曲吸引子是 Gamma(X) 的子集役听。直覺上,特征值小于 1 可能對應(yīng)上面“將其保持在吸引盆”中的要求。

定義 5 : 一個系統(tǒng)可以魯棒性地在 t_0 鎖存若干雙曲吸引子中的一個吸引子 X 禾嫉,如果 a_{t_0}X 對于定義自動系統(tǒng)的映射 M 的 reduced attracting set 中。

對于非自動動力系統(tǒng)蚊丐,只需 a_t \in \Gamma(X) \text{ for } t \gt t_0 熙参。接下來證明為什么使用 \Gamma(X) 來儲存具有魯棒性。

定理 1-3 及證明請查閱原文麦备。最終證明了如果在 beta(X) 中孽椰,代表不確定性的球體會越來越大,因此輸入的微小擾動可能將軌跡引導(dǎo)進(jìn)入一個錯誤的吸引盆凛篙,即系統(tǒng)無法對抗噪聲黍匾。相反,如果在 Gamma(X) 中呛梆,則能在輸入中找到一個界锐涯,保證 a_t 一直在 X 中的點的特定距離內(nèi)。因此是魯棒的填物。見 Fig. 3 纹腌。

Fig 3

定理 4 : 當(dāng)輸入 u_t 使得系統(tǒng)在時間 0 后保持在 X 上魯棒時,隨著 t 趨近于無窮滞磺,a_ta_0 的偏導(dǎo)趨近于 0 升薯。

也就是說對抗噪聲的代價是對過去事件的導(dǎo)數(shù)與近期事件相比會小很多。

4.2 對權(quán)重梯度的影響

\frac{\partial C_t}{\partial W} = \sum_{\tau \le t} \frac{\partial C_t}{\partial a_\tau}\frac{\partial a_\tau}{\partial W} = \sum_{\tau \le t} \frac{\partial C_t}{\partial a_t}\frac{\partial a_t}{\partial a_\tau} \frac{\partial a_\tau}{\partial W}

因此击困,相對于較近的事件涎劈,\tau \ll t 的前兩項的乘積較小,因此對最終的結(jié)果影響較小阅茶。也就是蛛枚,即使可能存在一個 W 使得 a_\tau 進(jìn)入一個更好的吸引盆,但對 W 的梯度不會反映這種可能性脸哀。

舉例來說坤候,假設(shè) A , B 兩個系統(tǒng)順次相接完成一項任務(wù)企蹭。且要求 B 使用 A 在 0 時刻檢測到事件的信息白筹,在遙遠(yuǎn)的 T 時刻使用該信息計算錯誤。(第 2 節(jié)定義的任務(wù)符合這個特征)谅摄。如果 B 訓(xùn)練不足徒河,不能將 A 的結(jié)果鎖存,那么 T 時刻的錯誤對 A 在 0 時刻產(chǎn)生的結(jié)果影響非常小送漠。相反顽照,如果 B 能夠?qū)⑿畔Υ婧荛L時間,正確的梯度會被傳播回去,但卻迅速消失成為小值代兵。因此尼酿, A 很難訓(xùn)練。

第 5 節(jié) 替代的方法

本節(jié)中給出了模擬退火等算法作為梯度下降的替代算法并在多個任務(wù)上測試了結(jié)果植影。每個任務(wù)上都有算法比反向傳播更佳裳擎。

第 6 節(jié) 結(jié)論

一個未進(jìn)行討論的點是類似的問題是否會在混沌吸引子中出現(xiàn)。

這個問題可能也會在深度前饋神經(jīng)網(wǎng)絡(luò)(feedforward network)中出現(xiàn)思币,因為 RNN 按時間展開就是一個共享權(quán)值的前饋神經(jīng)網(wǎng)絡(luò)鹿响。

本文研究并不意味著不能為特定任務(wù)訓(xùn)練神經(jīng)網(wǎng)絡(luò),相反谷饿,如果有先驗知識可以設(shè)置神經(jīng)網(wǎng)絡(luò)的權(quán)值共享和初值惶我,利用起來會提升效果。比如在 latch problem 和 parity problem 中博投,先使用短序列進(jìn)行訓(xùn)練可以讓系統(tǒng)迅速進(jìn)入正確的區(qū)域绸贡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毅哗,隨后出現(xiàn)的幾起案子恃轩,更是在濱河造成了極大的恐慌,老刑警劉巖黎做,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉跛,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒸殿,警方通過查閱死者的電腦和手機筷厘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宏所,“玉大人酥艳,你說我怎么就攤上這事∨乐瑁” “怎么了充石?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長霞玄。 經(jīng)常有香客問我骤铃,道長,這世上最難降的妖魔是什么坷剧? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任惰爬,我火速辦了婚禮,結(jié)果婚禮上惫企,老公的妹妹穿的比我還像新娘撕瞧。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布丛版。 她就那樣靜靜地躺著巩掺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪页畦。 梳的紋絲不亂的頭發(fā)上胖替,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音寇漫,去河邊找鬼。 笑死殉摔,一個胖子當(dāng)著我的面吹牛州胳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逸月,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼栓撞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碗硬?” 一聲冷哼從身側(cè)響起瓤湘,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恩尾,沒想到半個月后弛说,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡翰意,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年木人,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冀偶。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡醒第,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出进鸠,到底是詐尸還是另有隱情稠曼,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布客年,位于F島的核電站霞幅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏量瓜。R本人自食惡果不足惜蝗岖,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望榔至。 院中可真熱鬧抵赢,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至邢享,卻和暖如春鹏往,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骇塘。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工伊履, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人款违。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓唐瀑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親插爹。 傳聞我的和親對象是個殘疾皇子哄辣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348