擴(kuò)散模型原理解析

去年寫的文章,從notion的博客搬到這邊來(lái)發(fā)一下(本來(lái)想搬到微信公眾號(hào)的耸彪,但是那個(gè)格式真的反人類就作罷了)鳍侣,原文請(qǐng)到這里看mewimpetus.以后文章都會(huì)再這邊先發(fā)抡医。

引言

擴(kuò)散模型是今年AI領(lǐng)域最熱門的研究方向英融。由其引發(fā)的AI繪畫的產(chǎn)業(yè)變革正在如火如荼的進(jìn)行癣防,大有淘汰一大票初中級(jí)畫師的勢(shì)頭趴俘,目前主流的(諸如OpenAI的DALL-E 2;Google的ImageGen;以及已經(jīng)商業(yè)化的MidJourney;注重二次元的NovelAI寥闪;開源引爆這波熱潮的stable-diffusion)圖像生成模型效果已經(jīng)讓人驚艷太惠,若是再發(fā)展幾年,它帶來(lái)的影響將不可估量疲憋,可以說(shuō)整個(gè)繪畫產(chǎn)業(yè)正在經(jīng)歷著一場(chǎng)百年未有之大變局凿渊。而這些功能強(qiáng)大的繪畫模型,無(wú)疑都與Denoising Diffusion Probabilistic Models 擺脫不了關(guān)系缚柳,它的原始論文由Google Brain在2020年發(fā)表埃脏。 這篇博文主要帶大家一起來(lái)探究一下DDPM的工作原理和實(shí)現(xiàn)細(xì)節(jié)。

擴(kuò)散模型的基本流程

其實(shí)擴(kuò)散模型的基本思路同GAN以及VAE并無(wú)二致秋忙,都是試圖從一個(gè)簡(jiǎn)單分布的隨機(jī)噪聲出發(fā)彩掐,經(jīng)過(guò)一系列的轉(zhuǎn)換,轉(zhuǎn)變成類似于真實(shí)數(shù)據(jù)的數(shù)據(jù)樣本翰绊。

它主要包含前向加噪聲和反向去噪聲兩個(gè)過(guò)程:

  • 從真實(shí)的數(shù)據(jù)分布中隨機(jī)采樣一個(gè)圖片佩谷,然后通過(guò)一個(gè)固定的過(guò)程逐步往上面添加高斯隨機(jī)噪聲,直到圖片變成一個(gè)純粹的噪聲
  • 構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)监嗜,去學(xué)習(xí)一個(gè)去噪的過(guò)程谐檀,從一個(gè)純粹的噪聲出發(fā),逐步還原回一個(gè)真實(shí)的圖像裁奇。

接下來(lái)我們用數(shù)學(xué)形式來(lái)表達(dá)上面的兩個(gè)過(guò)程桐猬。

前向擴(kuò)散

我們將真實(shí)數(shù)據(jù)的分布定義為q(x),然后可以從這個(gè)分布中隨機(jī)采樣一個(gè)”真圖“ x_0 \sim q(x)刽肠,于是我們就可以定義一個(gè)前向擴(kuò)散的遞推過(guò)程q(x_t|x_{t-1})為每個(gè)時(shí)間步t添加少量高斯噪聲并執(zhí)行T步溃肪。DDPM作者將q(x_t|x_{t-1})定義為這樣一個(gè)條件高斯分布(其中的\{\beta_t \in (0, 1)\}_{t=1}^T是一個(gè)既定的遞增表):

q(\mathbf{x}*t|\mathbf{x}*{t-1})=\mathcal{N}(\mathbf{x}*t;\sqrt{1-\beta_t}\mathbf{x}*{t-1},\beta_tI)

顯然,當(dāng)t-1時(shí)刻的圖像為x_{t-1}的條件下音五,t時(shí)刻的圖像X_t服從一個(gè)均值\mu_t=\sqrt{1-\beta_t}x_{t-1}惫撰,方差\sigma^2=\beta_tI的各項(xiàng)同性高斯分布。我們?cè)儆^察一下這個(gè)遞推式躺涝,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=1-%5Cbeta" alt="1-\beta" mathimg="1">和\beta都小于1厨钻,顯然x_t的均值會(huì)比x_t-1更加趨向于0,方差也更趨向于I,因此如果設(shè)計(jì)合適的\beta_t序列,最終的X_T將趨近于標(biāo)準(zhǔn)的高斯分布\mathcal{N}(0,I)夯膀。根據(jù)高斯分布的性質(zhì)1:

如果X \sim \mathcal{N}(\mu, \sigma^2)ab都是實(shí)數(shù)诗充,那么aX+b \sim \mathcal{N}(a\mu+b,(a\sigma)^2)

上述的條件高斯分布顯然可以通過(guò)從標(biāo)準(zhǔn)高斯分布的線性變換得到诱建,我們定義\epsilon_t\sim \mathcal{N}(0, I),那么只要讓\mathbf{x}*t=\sqrt{\beta_t}\epsilon_t +\sqrt{1-\beta_t}\mathbf{x}*{t-1},那么第t個(gè)時(shí)間步的圖像\mathbf{x}_t\sim \mathcal{N}(\mathbf{x}*t;\sqrt{1-\beta_t}\mathbf{x}*{t-1},\beta_tI)蝴蜓。

為了更好的計(jì)算任意時(shí)刻t的條件分布,我們根據(jù)上面的遞推式逐步推導(dǎo)到x_0,為了方便推導(dǎo)俺猿,我們令\alpha_t=1-\beta_t 茎匠, \overline\alpha_t=\prod^t_{i=1}\alpha_i則有了推導(dǎo)1

\begin{aligned}\mathbf{x}*t &= \sqrt{1-\alpha_t}\epsilon_t + \sqrt{\alpha_t}\mathbf{x}*{t-1} \\&=\sqrt{1-\alpha_t}\epsilon_t +\sqrt{\alpha_t}(\sqrt{1-\alpha_{t-1}}\epsilon_t+\sqrt{\alpha_{t-1}}\mathbf{x}*{t-2}) \\&= \sqrt{1-\alpha_t}\epsilon_t+\sqrt{\alpha_t (1-\alpha*{t-1})} \epsilon_t + \sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}*{t-2} \\ &= \sqrt {1-\alpha_t\alpha*{t-1}}\epsilon_t + \sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2} \\&= ... \\&=\sqrt{1-\overline\alpha_t}\epsilon_t +\sqrt{\overline\alpha_t}\mathbf{x}_0\end{aligned}

上式中第3行到第4行的推導(dǎo)用到了上述的性質(zhì)1,以及高斯分布的另一個(gè)性質(zhì)2

如果X\sim\mathcal{N}(\mu_X,\sigma_X^2)Y \sim \mathcal{N}(\mu_Y,\sigma_Y^2) 是獨(dú)立統(tǒng)計(jì)的高斯隨機(jī)變量辜荠,那么汽抚,它們的和也滿足高斯分布X + Y \sim \mathcal{N}(\mu_X +\mu_Y, \sigma^2_X+\sigma^2_Y)

性質(zhì)1可知伯病,\sqrt{1-\alpha_t}\epsilon_t \sim\mathcal{N}(0,(1-\alpha_t)I),而\sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_t \sim \mathcal{N}(0, \alpha_t(1-\alpha_{t-1})I) ,再根據(jù)性質(zhì)2,就可得\sqrt{1-\alpha_t}\epsilon +\sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon \sim \mathcal{N}(0,(1-\alpha_t\alpha_{t-1})I), 再根據(jù)性質(zhì)1寫回到多項(xiàng)式的形式即得到推導(dǎo)的結(jié)果否过。

基于這個(gè)最終的推導(dǎo)結(jié)果午笛,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Calpha_t" alt="\alpha_t" mathimg="1">是事先已經(jīng)定義好的,我們只需要給出初始真實(shí)分布采樣x_0苗桂,即可以計(jì)算出任何第t步的樣本x_t 药磺,而不需要每次都從x_1開始一步步計(jì)算。

反向去噪

有了前向的過(guò)程煤伟,我們反過(guò)來(lái)想癌佩,既然前向擴(kuò)散是一個(gè)馬爾可夫過(guò)程,那么它的逆過(guò)程顯然也是馬爾可夫過(guò)程便锨,如果我們可以構(gòu)造一個(gè)相反的條件分布q(x_{t-1}|x_t),那不就可以從最終的x_T開始一步步地去噪围辙,從而反推回初始的x_0了嗎? 但是我們并不知道反向條件高斯分布的均值和方差放案。不過(guò)姚建,在這個(gè)深度學(xué)習(xí)的時(shí)代,我們可以從真實(shí)數(shù)據(jù)集X_0出發(fā)吱殉,通過(guò)前向過(guò)程生成一系列的x_0 \to x_T 的真實(shí)擴(kuò)散序列掸冤,然后設(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò)從這些序列中來(lái)近似學(xué)習(xí)一個(gè)分布p_\theta(x_{t-1}|x_t)使其接近真實(shí)的q(x_{t-1}|x_t),其中的\theta是這個(gè)神經(jīng)網(wǎng)絡(luò)需要學(xué)習(xí)的參數(shù)友雳,于是從x_T變換到x_0的概率可以表示成:

p_\theta(\mathbf{x}*{T:0}) = p(\mathbf{x}*T)\prod*{t=1}^Tp*\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)

當(dāng)我們前向過(guò)程所定義的\beta_t足夠小時(shí)稿湿,反向過(guò)程也滿足高斯分布,因此我們可以假設(shè)神經(jīng)網(wǎng)絡(luò)要學(xué)習(xí)的這個(gè)分布是高斯分布押赊,這意味著它需要去學(xué)習(xí)其均值\mu_\theta 和方差\Sigma_\theta ,換成與上述前向過(guò)程相同的表示則有遞推公式:

p_\theta(\mathbf{x}*{t-1}|\mathbf{x}*t) = \mathcal{N}(\mathbf{x}*{t-1};\mu*\theta(\mathbf{x}*t, t),\Sigma*\theta(\mathbf{x}_t, t))

借助這個(gè)公式饺藤,我們就可以完成去噪過(guò)程了,接下來(lái)的任務(wù)變成了如何訓(xùn)練這個(gè)神經(jīng)網(wǎng)絡(luò)。

如何訓(xùn)練

基本思路

不知大家又沒(méi)有覺(jué)得這個(gè)加噪聲和去噪聲的過(guò)程和VAE的編碼和解碼的過(guò)程十分類似策精,那么是否可以從VAE的訓(xùn)練方式中得到一些啟發(fā)呢舰始?實(shí)際上作者就是這么想的。

圖像前向擴(kuò)散及反向去噪的過(guò)程咽袜,正向概率已知丸卷,反向的轉(zhuǎn)移概率是我們希望得到的。

顯然询刹,如果直接使用\mathbf{x}*t{\mathbf{x}'}*{t}的對(duì)比誤差會(huì)導(dǎo)致模型過(guò)擬合成AE一樣的無(wú)生成能力的模型谜嫉。因此,我們使用與VAE類似的變分推斷的方法凹联,希望網(wǎng)絡(luò)輸出的{\mathbf{x}'}*{t-1}盡量接近由真實(shí)\mathbf{x}*0變化而來(lái)的\mathbf{x}*{t-1}的分布沐兰,即最小化似然p*\theta(\mathbf{x}*{t-1}|x*{t})與真實(shí)的q(\mathbf{x}*{t-1}|\mathbf{x}*{t}, \mathbf{x}*0)D*{KL}(q(\mathbf{x}*{t-1}|\mathbf{x}*{t}, \mathbf{x}*0))||p*\theta(\mathbf{x}*{t-1}|\mathbf{x}*{t})。于是每一個(gè)時(shí)間步驟\{t \in [1,T]\}的誤差可以定義為:

L_t=\left\{\begin{aligned}&-log~p_\theta(\mathbf{x}*0|\mathbf{x}*1) ~~~,when~ t=1\\&D*{KL}(q(\mathbf{x}*{t-1}|\mathbf{x}*{t}, \mathbf{x}*0))||p*\theta(\mathbf{x}*{t-1}|\mathbf{x}_{t}) ~ ~~,when~ t \in [2,T]\end{aligned}\right.

而當(dāng)t=1時(shí)蔽挠,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=q(%5Cmathbf%7Bx%7D*0)" alt="q(\mathbf{x}*0)" mathimg="1">是確定的住闯,因此可以忽略這部分,故而L_1 = -log~p*\theta(\mathbf{x}_0|\mathbf{x}_1),因此

于是整個(gè)去噪過(guò)程的誤差就是: L=\sum^{T}_{t=1}L_t 澳淑。實(shí)際訓(xùn)練時(shí)比原,我們并沒(méi)有使用整體的誤差L,而是通過(guò)均勻隨機(jī)選擇t 杠巡,來(lái)最小化 L_t 量窘。

目標(biāo)函數(shù)

要直接計(jì)算上面的KL散度是困難的,但是正如前面所說(shuō)的氢拥,q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) 是一個(gè)高斯分布蚌铜,于是根據(jù)貝葉斯公式有:

\begin{aligned} q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) &= q(\mathbf{x}*t \vert \mathbf{x}*{t-1}, \mathbf{x}*0) \frac{ q(\mathbf{x}*{t-1} \vert \mathbf{x}_0) }{ q(\mathbf{x}*t \vert \mathbf{x}*0) } \\ &\propto \exp \Big(-\frac{1}{2} \big(\frac{(\mathbf{x}*t - \sqrt{\alpha_t} \mathbf{x}*{t-1})^2}{\beta_t} + \frac{(\mathbf{x}*{t-1} - \sqrt{\bar{\alpha}*{t-1}} \mathbf{x}*0)^2}{1-\bar{\alpha}*{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}*t} \mathbf{x}*0)^2}{1-\bar{\alpha}*t} \big) \Big) \\ &= \exp \Big(-\frac{1}{2} \big(\frac{\mathbf{x}*t^2 - 2\sqrt{\alpha_t} \mathbf{x}*t {\color{blue}{\mathbf{x}*{t-1}}} + \alpha_t {\color{red}{\mathbf{x}*{t-1}^2}} }{\beta_t} + \frac{ {\color{red}{\mathbf{x}*{t-1}^2}} {- 2 \sqrt{\bar{\alpha}*{t-1}} \mathbf{x}*0} \color{blue}{\mathbf{x}*{t-1}}{+ \bar{\alpha}*{t-1} \mathbf{x}*0^2} }{1-\bar{\alpha}*{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}*t} \mathbf{x}*0)^2}{1-\bar{\alpha}*t} \big) \Big) \\ &= \exp\Big( -\frac{1}{2} \big( {\color{red}{(\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}*{t-1}})} \mathbf{x}*{t-1}^2} - \color{blue}{(\frac{2\sqrt{\alpha_t}}{\beta_t} \mathbf{x}*t + \frac{2\sqrt{\bar{\alpha}*{t-1}}}{1 - \bar{\alpha}*{t-1}} \mathbf{x}*0)} \mathbf{x}*{t-1}{ + {\color{green}{C(\mathbf{x}_t, \mathbf{x}_0)} }\big) \Big)} \end{aligned}

其中\color{green}{C(\mathbf{x}_t,\mathbf{x}*0)} 代表所有剩余與\mathbf{x}*{t-1}無(wú)關(guān)的項(xiàng)。

根據(jù)高斯分布的基本方程:

與上述的推導(dǎo)結(jié)果位置依次對(duì)應(yīng)可得其方差和均值為:

根據(jù)上面的推導(dǎo)1可得\mathbf{x}_0 = \frac{1}{\sqrt{\overline{\alpha}_t}}(\mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon_t}) ,帶入上式可得:

\boldsymbol\mu(\mathbf{x}_t,\mathbf{x}_0)= \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}\epsilon_t)

最小化上述的KL散度嫩海,可以轉(zhuǎn)化為計(jì)算神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)的均值方差與上述均值方差的L2損失:

\begin{aligned} L_t^{\Sigma} &= ||\Sigma(\mathbf{x}_t,\mathbf{x}*0)-\Sigma*\theta(\mathbf{x}_t,t)||^2 \\ L_t^{\mu} &=||\mu(\mathbf{x}_t,\mathbf{x}*0)-\mu*\theta(x_t,t))|| \\ &= ||\frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}{\color{red}\epsilon_t}) - \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}*t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}{\color{green}\epsilon*\theta(\mathbf{x}_t, t)})||^2 \end{aligned}

DDPM的論文作者在論文中說(shuō)他使用一個(gè)固定的方差取得了差不多的效果冬殃,因此他的神經(jīng)網(wǎng)絡(luò)只去學(xué)習(xí)了均值,而把方差設(shè)置成了\beta_t 或者是\frac{1-\bar a_{t-1}}{1-\bar a_t}\beta_t出革,因此我們接下來(lái)的推導(dǎo)也只考慮均值造壮。后來(lái)Improved diffusion models 這篇論文將其改進(jìn)后就讓神經(jīng)網(wǎng)絡(luò)同時(shí)去學(xué)習(xí)均值和方差了,有興趣的同學(xué)可以自行去了解骂束。

觀察上面的L_t^{\mu}耳璧,除了\epsilon_\theta,其余項(xiàng)均為固定值與\theta無(wú)關(guān),于是我們不妨將神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)目標(biāo)從高斯分布的均值轉(zhuǎn)變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cepsilon_%5Ctheta" alt="\epsilon_\theta" mathimg="1"> 展箱,即去預(yù)測(cè)每個(gè)事件步的噪聲量而非高斯分布的均值旨枯,因此我們最終的目標(biāo)函數(shù)就變成了:

\begin{aligned} L_t &= ||\epsilon - \epsilon_\theta(\mathbf{x}*t,t)||^2 \\ &=||\epsilon - \epsilon*\theta(\sqrt{1-\overline\alpha_t}\epsilon +\sqrt{\overline\alpha_t}\mathbf{x}_0,t)||^2 \end{aligned}

然后,整個(gè)訓(xùn)練算法便是這樣一個(gè)過(guò)程:

  1. 從真實(shí)的復(fù)雜未知分布q(x)隨機(jī)抽取一個(gè)樣本x_0
  2. 1T均勻采樣一個(gè)時(shí)間步t
  3. 從均值為**0**方差為I的標(biāo)準(zhǔn)高斯分布中隨機(jī)采樣一個(gè)\epsilon
  4. 計(jì)算隨機(jī)梯度\nabla_\theta ||\epsilon - \epsilon_\theta(\sqrt{1-\overline\alpha_t}\epsilon +\sqrt{\overline\alpha_t}\mathbf{x}_0,t)||^2 混驰,并通過(guò)隨機(jī)梯度下降優(yōu)化\theta
  5. 重復(fù)上述過(guò)程直到收斂

采樣生成

當(dāng)上述的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)好\epsilon_\theta , 就可以計(jì)算出均值\mu_\theta = \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}*t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}\epsilon*\theta) ,于是我們就可以從一個(gè)隨機(jī)高斯噪聲\mathbf{x}*T \sim \mathcal{N}(0,I) 攀隔,通過(guò)條件去噪概率p*\theta(\mathbf{x}*{t-1}|\mathbf{x}*{t}) = \mathcal{N}(\mu_\theta(\mathbf{x}_t,t),\sigma_t^2) 進(jìn)行采樣生成皂贩,逐步從\mathbf{x}_T\mathbf{x}_0

具體來(lái)說(shuō)Sampling是這樣一個(gè)過(guò)程:

  1. 隨機(jī)采樣一個(gè)\mathbf{x}_T \sim \mathcal{N}(0,I)

  2. t=T,…,1 昆汹,依次執(zhí)行:

    z \sim \mathcal{N}(0,I) \\ \\ \mathbf{x}*{t-1} = \mu*\theta(\mathbf{x}_t,t) + \sigma_t z

  3. 返回最終的\mathbf{x}_0

網(wǎng)絡(luò)結(jié)構(gòu)

雖然有了訓(xùn)練的方案明刷,但是如何來(lái)設(shè)計(jì)這個(gè)神經(jīng)網(wǎng)絡(luò)\epsilon_\theta才能讓我們這個(gè)擴(kuò)散和反擴(kuò)散的過(guò)程取得較好的效果呢?DDPM的作者選擇了U-Net 满粗,并且在實(shí)驗(yàn)中取得了很好的效果辈末。

這個(gè)用于學(xué)習(xí)\epsilon_\theta的U-Net網(wǎng)絡(luò)十分復(fù)雜,由一系列的諸如下采樣映皆、上采樣挤聘、殘差、位置Embedding捅彻、ResNet/ConvNeXT block组去、注意力模塊、Group Normalization等組件組合而成步淹,為了讓大家了解整個(gè)網(wǎng)絡(luò)各個(gè)組件的具體結(jié)構(gòu)和連接方式从隆,我繪制了一個(gè)詳細(xì)的網(wǎng)絡(luò)圖:

DDPM 反向去噪神經(jīng)U-Net網(wǎng)絡(luò)結(jié)構(gòu)

根據(jù)這個(gè)圖,我們可以用tensorflow或者pytorch非常輕松的實(shí)現(xiàn)這個(gè)網(wǎng)絡(luò)贤旷。不過(guò)顯然這個(gè)網(wǎng)絡(luò)很大广料,特別是圖片很大時(shí)占用的顯存會(huì)很高,而且采樣步驟多推理也很慢幼驶,因此后面有很多對(duì)于DDPM的改進(jìn),篇幅關(guān)系韧衣,關(guān)于對(duì)DDPM的改進(jìn)我們下篇文章再講盅藻。

參考資料

  1. What are Diffusion Models?
  2. Understanding Diffusion Models: A Unified Perspective
  3. Denoising Diffusion Probabilistic Models
  4. Understanding Variational Autoencoders (VAEs)
  5. 正態(tài)分布- 維基百科,自由的百科全書 - Wikipedia
  6. U-Net: Convolutional Networks for Biomedical Image Segmentation
最后編輯于
?著作權(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)店門谍失,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)眶俩,“玉大人,你說(shuō)我怎么就攤上這事快鱼〉哂。” “怎么了纲岭?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)线罕。 經(jīng)常有香客問(wèn)我止潮,道長(zhǎng),這世上最難降的妖魔是什么钞楼? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任喇闸,我火速辦了婚禮,結(jié)果婚禮上窿凤,老公的妹妹穿的比我還像新娘仅偎。我一直安慰自己,他們只是感情好雳殊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布橘沥。 她就那樣靜靜地躺著,像睡著了一般夯秃。 火紅的嫁衣襯著肌膚如雪座咆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天仓洼,我揣著相機(jī)與錄音介陶,去河邊找鬼。 笑死色建,一個(gè)胖子當(dāng)著我的面吹牛哺呜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箕戳,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼某残,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了陵吸?” 一聲冷哼從身側(cè)響起玻墅,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壮虫,沒(méi)想到半個(gè)月后澳厢,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一檩咱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胯舷,春花似錦刻蚯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至逃顶,卻和暖如春讨便,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背以政。 一陣腳步聲響...
    開封第一講書人閱讀 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

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