吳恩達(dá)深度學(xué)習(xí)課程筆記(精華版)--1.網(wǎng)絡(luò)基礎(chǔ)和系統(tǒng)構(gòu)建

本系列是編者學(xué)習(xí)吳恩達(dá)deeplearning.ai 深度學(xué)習(xí)系列課程的筆記蚣驼。
編者有一定機(jī)器學(xué)習(xí)基礎(chǔ),也看過(guò)Andrew的機(jī)器學(xué)習(xí)課程。由于Andrew的課程非常通俗易懂姑食,筆記中會(huì)省略那些幫助理解的例子纱耻、圖形等芭梯,只把最終的觀點(diǎn)、解釋弄喘、結(jié)論和解決方案做整理玖喘,以供日后查看,另外編者也在某些地方蘑志,結(jié)合原版論文做出了一些批注和補(bǔ)充累奈,所以稱(chēng)之為精華版。
本篇是Course1+Course2+Course3卖漫,主要講述NN和DNN的宏觀概念费尽,以及激活函數(shù)、正則化羊始、優(yōu)化函數(shù)旱幼、參數(shù)調(diào)優(yōu)、性能評(píng)價(jià)突委、網(wǎng)絡(luò)構(gòu)建周期柏卤、構(gòu)建思路與處理辦法等廣泛適用于各種神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)技術(shù)冬三。

1 深度網(wǎng)絡(luò)和深度學(xué)習(xí)

1.1 深度學(xué)習(xí)簡(jiǎn)介

1.1.2 什么是神經(jīng)網(wǎng)絡(luò)

Example:房?jī)r(jià)預(yù)測(cè)

  • 輸入為:房屋大小,臥室數(shù)量缘缚,周邊富裕程度等
  • 隱藏單元:可以通過(guò)輸入組合得到家庭人口數(shù)量勾笆,周邊學(xué)校質(zhì)量,交通便利度等二級(jí)指標(biāo)
  • 輸出為房?jī)r(jià)

神經(jīng)網(wǎng)絡(luò)的實(shí)質(zhì)是一個(gè)精細(xì)的映射函數(shù)

1.1.3 用神經(jīng)網(wǎng)絡(luò)進(jìn)行有監(jiān)督學(xué)習(xí)

使用神經(jīng)網(wǎng)絡(luò)進(jìn)行有監(jiān)督學(xué)習(xí)的第一個(gè)問(wèn)題是要定義好模型的輸入和輸出桥滨。
根據(jù)不同的輸入數(shù)據(jù)類(lèi)型(特征類(lèi)型)(結(jié)構(gòu)化窝爪、非結(jié)構(gòu)、半結(jié)構(gòu)等)齐媒,選擇不同的網(wǎng)絡(luò)結(jié)構(gòu)蒲每。

1.1.4 為什么深度學(xué)習(xí)會(huì)興起

原因主要是數(shù)據(jù)量激增。

  • 當(dāng)標(biāo)簽數(shù)據(jù)集量不大時(shí)喻括,神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)模型很難分出優(yōu)劣邀杏,效果主要取決于算法細(xì)節(jié)和對(duì)數(shù)據(jù)的處理。
  • 當(dāng)數(shù)據(jù)量足夠大時(shí)唬血,復(fù)雜的大規(guī)模神經(jīng)網(wǎng)絡(luò)望蜡,具有相當(dāng)大的參數(shù)空間,可以訓(xùn)練出很強(qiáng)的非線性效果拷恨,因此效果穩(wěn)定比機(jī)器學(xué)習(xí)模型要好脖律。

另外一個(gè)原因是計(jì)算力增強(qiáng):包括效率加速、硬件加速挑随、算法加速(例如從sigmoid激活函數(shù)->Relu函數(shù)状您,可以加速梯度下降)等。

1.2 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)

1.2.18 logistic回歸代價(jià)函數(shù)的解釋

首先給出一個(gè)符號(hào)定義:\hat{y} = p(y=1|x)

  • 即給定x兜挨,預(yù)測(cè)y為1的概率為\hat{y}
  • 那么當(dāng)y=1時(shí):p(y|x) = \hat{y}
  • 當(dāng)y=0時(shí):p(y|x) = 1 - \hat{y}

整合一下膏孟,p(y|x) = \hat{y}^y(1-\hat{y})^{1-y}
如果各個(gè)數(shù)據(jù)點(diǎn)是獨(dú)立的,那么每次分類(lèi)都是準(zhǔn)的概率為
\prod_{i=1}^mp(y_i|x_i) = \prod_{i=1}^m\hat{y}_i^{y_i}(1-\hat{y}_i)^{1-y_i}
這變成了一個(gè)極大似然估計(jì)的問(wèn)題拌汇,即給定這么多(x_i,y_i)的樣本柒桑,想要把模型的參數(shù)求出來(lái),則需要對(duì)上式取最大值噪舀,這可以通過(guò)先取對(duì)數(shù)來(lái)簡(jiǎn)化魁淳,即
\sum_{i=1}^my_ilog\hat{y}_i + (1-y_i)log(1-\hat{y}_i)
這就是logistic回歸代價(jià)函數(shù)的相反數(shù)(因?yàn)橐∽钚≈担?br> 其中\hat{y}_i其實(shí)就是模型的輸出預(yù)測(cè)值h_\theta(x_i)

  • 另外補(bǔ)充一下,為什么MSE(均方差)代價(jià)函數(shù)不適用于logistic回歸与倡,主要是因?yàn)槠溆迷趌ogistic回歸中將產(chǎn)生非凸函數(shù)界逛,梯度下降用不了。MSE在回歸問(wèn)題中很好用纺座,但在分類(lèi)問(wèn)題中由于預(yù)測(cè)輸出是離散值息拜,就不太好用了。

1.3 淺層神經(jīng)網(wǎng)絡(luò)

1.3.6 激活函數(shù)

  • sigmoid函數(shù)是一種,即\frac{1}{1+e^{-z}}少欺,但基本上不怎么用喳瓣,只在做二元分類(lèi)時(shí)輸出層用起來(lái)比較方便。

    image.png

  • tanh(雙曲正切函數(shù))幾乎總是比sigmoid函數(shù)要好一些赞别,而且由于關(guān)于0對(duì)稱(chēng)畏陕,所以自帶數(shù)據(jù)歸一化的功能。
    \frac{e^z-e^{-z}}{e^z+e^{-z}}

    image.png

  • ReLU函數(shù)仿滔,是最常用的默認(rèn)激活函數(shù)惠毁。其好處主要在于導(dǎo)數(shù)比較大,尤其是在z比較大的范圍之內(nèi)堤撵,而關(guān)于z<0的部分仁讨,Andrew的解釋是神經(jīng)元較多,一般不會(huì)讓它小于0实昨。導(dǎo)數(shù)較大,意味著做梯度下降時(shí)速度快盐固。
    max(0,z)

    image.png

  • leaky ReLU函數(shù)荒给,是ReLU的一種變形,可以作為備選刁卜。
    max(0.01z,z)

    image.png

  • 總的來(lái)說(shuō)志电,根據(jù)Andrew的語(yǔ)氣,激活函數(shù)的選擇是一個(gè)比較玄學(xué)的事情蛔趴,主要是靠經(jīng)驗(yàn)來(lái)選擇挑辆,目前恐怕主要就是ReLU函數(shù)了。

1.3.7 為什么需要非線性激活函數(shù)

原因:如果是線性激活函數(shù)孝情,那么神經(jīng)網(wǎng)絡(luò)就是輸入的線性組合鱼蝉,訓(xùn)練不出來(lái)復(fù)雜的非線性關(guān)系。
唯一的可能使用的就是在輸出層箫荡,做回歸任務(wù)時(shí)魁亦,可能就用線性激活。

1.3.9 神經(jīng)網(wǎng)絡(luò)的梯度下降法

梯度下降本質(zhì)就是求導(dǎo)了羔挡,神經(jīng)網(wǎng)絡(luò)里求導(dǎo)(反向傳播)著重使用鏈?zhǔn)椒▌t洁奈,這里不多說(shuō)。
值得一說(shuō)的是绞灼,可以批量進(jìn)行梯度下降(mini-batch gradient descent)利术,只需將輸入和輸出都由向量變成矩陣即可〉桶考慮到代價(jià)函數(shù)對(duì)各個(gè)輸入的代價(jià)是取平均值的印叁,梯度下降時(shí)對(duì)應(yīng)的參數(shù)調(diào)整也要取平均保持一致。

1.3.11 隨機(jī)初始化

  • 為什么不能全初始化為0:如果全都初始化為0,所有隱藏單元全都在做一樣的事情喉钢,所以最后這些隱藏層都沒(méi)用姆打。
    所以一般是隨機(jī)初始化。另外初始化時(shí)一般都是非常小的隨機(jī)數(shù)肠虽,因?yàn)槿绻胹igmoid/tanh激活函數(shù)時(shí)幔戏,值太大會(huì)讓梯度下降很慢。
  • 這里涉及一個(gè)參數(shù)税课,將隨機(jī)生成的數(shù)字縮小一定的倍數(shù)闲延,比如較小的網(wǎng)絡(luò),這個(gè)數(shù)字可以是0.01.

1.4 深度神經(jīng)網(wǎng)絡(luò)

1.4.1 深度神經(jīng)網(wǎng)絡(luò)(DNN)

logistic回歸可以看做是一個(gè)單層的神經(jīng)網(wǎng)絡(luò)韩玩,之后加隱藏層成為一個(gè)淺層神經(jīng)網(wǎng)絡(luò)垒玲,再加隱藏層稱(chēng)為深度神經(jīng)網(wǎng)絡(luò)。

1.4.5 為什么使用深層表示

DNN奏效的原因可以通過(guò)一個(gè)例子來(lái)解釋?zhuān)?/p>

  • 比如一個(gè)人臉識(shí)別算法找颓,要構(gòu)造一個(gè)DNN合愈,輸入圖像信息,第一個(gè)隱藏層可以捕捉圖像中人臉的各種邊緣击狮,第二個(gè)隱藏層可以識(shí)別出小的組成部分佛析,第三個(gè)隱藏層就可以是一個(gè)整體。復(fù)雜的特征需要逐層去構(gòu)建彪蓬。

深層相對(duì)于淺層的好處是網(wǎng)絡(luò)的規(guī)拇缒可以得到控制:

  • 比如n個(gè)特征做異或,成對(duì)異或档冬,logn層的網(wǎng)絡(luò)就可以完成膘茎,神經(jīng)元個(gè)數(shù)為n;但是如果只用1個(gè)隱藏層酷誓,至少需要2^n個(gè)隱藏層神經(jīng)元才能枚舉全部可能披坏。

但是從分析問(wèn)題角度來(lái)講,一定是由淺入深的:先看看logistic回歸是否奏效呛牲,然后逐步增加隱藏層數(shù)刮萌。

1.4.6 超參數(shù)

DNN的超參數(shù)其實(shí)很多:學(xué)習(xí)率,隱藏層數(shù)娘扩,各隱藏層神經(jīng)元數(shù)着茸,迭代次數(shù),正則化參數(shù)等等等等琐旁,這些超參會(huì)影響最終學(xué)習(xí)的結(jié)果涮阔。

  • 但是如何把這些參數(shù)調(diào)到最好的值呢?只有試灰殴。通過(guò)一些intuition和調(diào)試手段敬特,這個(gè)過(guò)程在有經(jīng)驗(yàn)的ML eng. 手上會(huì)更快,但不會(huì)沒(méi)有。
  • 另外伟阔,如果數(shù)據(jù)是在變化的(很少有不變的)辣之,那么在前幾個(gè)月調(diào)成最優(yōu)的超參,很可能現(xiàn)在就不適用了皱炉,只能繼續(xù)調(diào)參怀估。

2 提升DNN:調(diào)參、正則化和優(yōu)化

2.1 神經(jīng)學(xué)習(xí)應(yīng)用

2.1.1 訓(xùn)練/驗(yàn)證/測(cè)試集

在大數(shù)據(jù)集和DNN的語(yǔ)境下合搅,驗(yàn)證集和測(cè)試集的比例一般會(huì)更小多搀。

  • 比如1M的數(shù)據(jù)集,可能驗(yàn)證集10k灾部,測(cè)試集10k康铭,就足以用來(lái)選擇、測(cè)試模型算法赌髓。
  • ML中一般是6:2:2从藤,或者7:3之類(lèi)的,在大數(shù)據(jù)集下不適用锁蠕。

第二點(diǎn)就是三個(gè)子集的數(shù)據(jù)來(lái)源應(yīng)該是同分布的:

  • Andrew舉了一個(gè)例子呛哟,訓(xùn)練集都是高分辨率的攝影網(wǎng)站上的貓咪照片,驗(yàn)證集和測(cè)試集用用戶(hù)自己的隨手拍匿沛,會(huì)導(dǎo)致效果很差。

2.1.2 偏差/方差

在訓(xùn)練集和驗(yàn)證集取自同分布给赞,且基本誤差(人類(lèi)誤差)較小的情況下:

  • 訓(xùn)練集誤差明顯小于驗(yàn)證集誤差:高方差(過(guò)擬合)
  • 訓(xùn)練集誤差和驗(yàn)證集誤差都很大:高偏差(欠擬合)
  • 訓(xùn)練集誤差和驗(yàn)證集誤差都很大且訓(xùn)練集誤差明顯小于驗(yàn)證集誤差:既高方差又高偏差(有些數(shù)據(jù)區(qū)域偏差高萝喘,即像線性分類(lèi)器蜈首,有些數(shù)據(jù)區(qū)域方差又高,像過(guò)擬合的復(fù)雜曲線抡笼。尤其在高維情況下容易出現(xiàn))

2.1.3 優(yōu)化方案

  • 高偏差(訓(xùn)練集):

    1. 用一個(gè)更大的網(wǎng)絡(luò)是一個(gè)穩(wěn)妥的方案
    2. 多訓(xùn)練一段時(shí)間,但未必會(huì)奏效
    3. 換網(wǎng)絡(luò)結(jié)構(gòu)黄鳍,這個(gè)甚至有可能變差
  • 當(dāng)解決了高偏差問(wèn)題推姻,如果出現(xiàn)了高方差(驗(yàn)證集)的問(wèn)題:

    1. 多搞一些數(shù)據(jù),如果可以
    2. 正則化
    3. 換網(wǎng)絡(luò)結(jié)構(gòu)框沟,這是一個(gè)需要嘗試的事情藏古。

優(yōu)化就是這兩個(gè)部分的來(lái)回迭代,先搞好訓(xùn)練集(bias)忍燥,然后看驗(yàn)證集(variance)拧晕,有任何修正,需要重新從訓(xùn)練集開(kāi)始再來(lái)一次梅垄,直到兩個(gè)數(shù)據(jù)子集上都質(zhì)量合格厂捞,任務(wù)就完成了。

  • 一個(gè)誤會(huì):在deep learning早期經(jīng)常有偏差和方差做trade-off的思想,那是數(shù)據(jù)量不夠的時(shí)候靡馁,現(xiàn)在只要通過(guò)延長(zhǎng)訓(xùn)練復(fù)雜度欲鹏,增加數(shù)據(jù)量等方式,還是可以改善一個(gè)而不影響另一個(gè)臭墨。

2.1.4 正則化

正則化就是在正常的代價(jià)函數(shù)后面再加一項(xiàng)關(guān)于參數(shù)向量的代價(jià)赔嚎,\lambda為正則化參數(shù)。

  • L2正則化(最常見(jiàn)):加參數(shù)向量/矩陣的L2范數(shù)*\lambda裙犹,即到原點(diǎn)的歐式距離尽狠。
    • 用于矩陣時(shí),就是對(duì)神經(jīng)網(wǎng)絡(luò)引入正則化叶圃,其中袄膏,參數(shù)矩陣僅為最后一個(gè)隱藏層到輸出層的參數(shù)矩陣
    • 矩陣的L2范數(shù)稱(chēng)為Frobenius norm (F)
    • 這種正則化也被稱(chēng)為權(quán)重衰退,因?yàn)樵谇髮?dǎo)(反向傳播)之后掺冠,權(quán)重矩陣每個(gè)更新沉馆,相比于沒(méi)有正則化時(shí),會(huì)首先將原參數(shù)矩陣縮小至原來(lái)的(1-\frac{\alpha\lambda}{m})德崭,然后再減去原來(lái)的反向傳播項(xiàng)斥黑。
  • L1正則化:加參數(shù)向量/矩陣的L1范數(shù)*\lambda

2.1.5 為什么正則化可以減少過(guò)擬合

代價(jià)函數(shù)中存在一個(gè)\lambda眉厨,會(huì)讓參數(shù)矩陣普遍偏小锌奴,那么算出來(lái)的z值(激勵(lì)前值)就會(huì)偏小,假設(shè)用tanh激活函數(shù)憾股,其在z值于0附近時(shí)鹿蜀,幾乎是一個(gè)線性函數(shù),而用線性函數(shù)做激勵(lì)最多只能反映一個(gè)線性關(guān)系服球。

  • 注意在調(diào)試學(xué)習(xí)曲線的時(shí)候茴恰,把這個(gè)正則項(xiàng)拿掉。

2.1.6 Dropout正則化

可以翻譯為隨機(jī)失活正則化斩熊,其主要思想是訓(xùn)練過(guò)程中往枣,隨機(jī)剔除一些神經(jīng)元,使得網(wǎng)絡(luò)變得更簡(jiǎn)單粉渠,趨向于欠擬合分冈。

  • 具體來(lái)說(shuō),執(zhí)行訓(xùn)練之前渣叛,對(duì)每個(gè)訓(xùn)練樣本丈秩,每個(gè)需要正則化的層中的每個(gè)神經(jīng)元,我們都隨機(jī)生成一個(gè)數(shù)(0或1淳衙,1的概率為超參keep_prob)蘑秽。
  • 在訓(xùn)練過(guò)程中饺著,需要dropout的層在計(jì)算激勵(lì)值之后,和生成的隨機(jī)數(shù)乘一下肠牲,干掉那些需要忽略的神經(jīng)元的輸出幼衰。
  • 最后將剩下的激勵(lì)值都除以keep_prob,以確保在對(duì)下一層的輸入沒(méi)有Scale上的改變缀雳。
  • 在測(cè)試集上就不需要搞keep_prob渡嚣,直接用已有的參數(shù)做測(cè)試就可以了。
  • 這種方式稱(chēng)為inverted dropout

2.1.7 理解dropout

  • 由于每個(gè)神經(jīng)元都有可能被隨機(jī)抹除掉肥印,所以某個(gè)后層神經(jīng)元不能把所有權(quán)重都?jí)涸谇懊婺骋粋€(gè)神經(jīng)元上识椰,而是要分散權(quán)重都前一層的所有神經(jīng)元。
  • 這在事實(shí)上讓收縮了權(quán)重矩陣深碱,和L2正則化起到了類(lèi)似地作用腹鹉。(編者注:10^2 > 5^2 + 5^2,分散權(quán)重敷硅,F(xiàn)范數(shù)會(huì)小一些)
  • 各層的keep_prob也可以不同功咒,對(duì)于復(fù)雜的層,keep_prob可以大一些防止過(guò)擬合绞蹦;對(duì)于很簡(jiǎn)單的層力奋,比如輸出層,可以讓keep_prob直接=1幽七,即不采用此策略景殷。輸入層的keep_prob,一般就是1澡屡,即不刪輸入特征滨彻,如果一定要用Dropout,keep_prob也要接近1.
  • 本質(zhì)上dropout只是一個(gè)正則化手段:Andrew舉了一個(gè)例子挪蹭,在CV里面,特征非常多休偶,但數(shù)據(jù)量不夠梁厉,所以容易過(guò)擬合(編者:像線性回歸中組合了太多高次項(xiàng)),因此常用dropout正則化踏兜。但在其他問(wèn)題上词顾,如果沒(méi)有出現(xiàn)overfit,就別考慮dropout碱妆。
  • 缺點(diǎn):此時(shí)代價(jià)函數(shù)就沒(méi)有明確定義了肉盹,完全變成了一個(gè)概率上的事情,因此學(xué)習(xí)曲線也沒(méi)法畫(huà)了疹尾,所以一般是先把keep_prob全都設(shè)為1上忍,根據(jù)學(xué)習(xí)曲線確定代碼沒(méi)問(wèn)題骤肛,然后再開(kāi)dropout。

2.1.8 其它正則化方法

  • 對(duì)原始數(shù)據(jù)集做一些簡(jiǎn)單的變化窍蓝,也是一種擴(kuò)充數(shù)據(jù)量的辦法腋颠,可以作為一種正則化方法來(lái)使用。
  • 通過(guò)學(xué)習(xí)曲線吓笙,在訓(xùn)練到過(guò)擬合之前淑玫,就提前中止,前提是這個(gè)位置的錯(cuò)誤率你很滿意面睛。本質(zhì)上絮蒿,訓(xùn)練從初始的參數(shù)為隨機(jī)小參數(shù)到后來(lái)越來(lái)越大,我們提前中止叁鉴,實(shí)際上也是收縮了權(quán)重土涝,和L2正則化有類(lèi)似的作用。
  • 優(yōu)點(diǎn):運(yùn)行一次梯度下降看曲線就可以了亲茅,計(jì)算代價(jià)低回铛;而L2正則化就要經(jīng)常改變\lambda,觀察學(xué)習(xí)曲線克锣。
  • 缺點(diǎn):對(duì)于ML任務(wù)來(lái)說(shuō)茵肃,如果選定了模型,比如NN袭祟,后面的過(guò)程有兩個(gè)正交的組成部分验残,一個(gè)是讓代價(jià)更低,即學(xué)習(xí)過(guò)程巾乳,如梯度下降您没;另一個(gè)是給對(duì)應(yīng)的模型解決過(guò)擬合的問(wèn)題,例如用正則化胆绊。而提前中止會(huì)讓這兩個(gè)事情耦合在一起氨鹏,只能同時(shí)考慮一大坨超參,會(huì)讓思考復(fù)雜化压状。

2.1.9 輸入歸一化

主要是讓輸入特征的數(shù)據(jù)范圍大小一致仆抵,如果差的太多,它們對(duì)應(yīng)的參數(shù)范圍差的也會(huì)非常大种冬,代價(jià)函數(shù)會(huì)變得非沉统螅“狹長(zhǎng)”,不利于梯度下降娱两。歸一化后莺匠,參數(shù)范圍也差不多,代價(jià)函數(shù)更像一個(gè)均勻的碗十兢,有利于梯度下降趣竣。
Andrew給的歸一化方案是所有數(shù)據(jù)減均值除方差摇庙,在各個(gè)特征上都這樣做。

2.1.10 梯度消失和梯度爆炸

如果一個(gè)網(wǎng)絡(luò)層數(shù)非常非常多期贫,那么假設(shè)每個(gè)權(quán)重矩陣都為0.9I跟匆,I為單位矩陣,假設(shè)激活函數(shù)是a=z通砍,那么輸出層的激勵(lì)值將為0.9^L*x玛臂,由于指數(shù)爆炸,最后這個(gè)激勵(lì)值將變得非常小封孙。類(lèi)似地迹冤,如果權(quán)重矩陣是1.1I,激勵(lì)值又會(huì)非常大虎忌。同樣的泡徙,反向傳播中的各級(jí)導(dǎo)數(shù)(梯度)也有類(lèi)似地問(wèn)題。這就是深層網(wǎng)絡(luò)中的梯度消失和爆炸問(wèn)題膜蠢。

2.1.11 權(quán)重初始化

通過(guò)權(quán)重初始化可以改善梯度消失和梯度爆炸的問(wèn)題堪藐。之前我們說(shuō)權(quán)重初始化只需要設(shè)置為隨機(jī)小值即可。

  • 進(jìn)一步挑围,如果特征比較多礁竞,我們就希望每個(gè)特征的參數(shù)權(quán)值比較小,否則特征越多杉辙,激勵(lì)越高模捂。
  • Xavier初始化(tanh激勵(lì)函數(shù))
    • 形式上講,我們希望對(duì)于每一個(gè)單個(gè)神經(jīng)元蜘矢,輸入?yún)?shù)權(quán)值的方差為1/n狂男。注意到輸入?yún)?shù)的期望(均值)一般是0,就是標(biāo)準(zhǔn)正態(tài)的均值品腹;輸入越多岖食,方差越小,權(quán)值和0的距離也越小舞吭。
    • 編程上講县耽,每個(gè)權(quán)值被設(shè)置為標(biāo)準(zhǔn)正態(tài)分布的一個(gè)隨機(jī)量*\sqrt{1/n}
    • 在這種情況下镣典,如果輸入也被正則化了,那么激勵(lì)值也就大約在均值為0唾琼,方差為1的分布下產(chǎn)生兄春,這就解決了梯度消失和爆炸問(wèn)題。
  • 當(dāng)激勵(lì)函數(shù)用ReLU函數(shù)時(shí)锡溯,一般方差為2/n更為合適赶舆。\sqrt{\frac{2}{n^{[l-1]}+n^{[l]}}}也是一種選擇哑姚。

2.2 優(yōu)化算法

2.2.2 mini-batch 梯度下降

用了mini-batch后,學(xué)習(xí)曲線的下降(代價(jià)函數(shù)值下降)將成為抖動(dòng)的芜茵,有噪聲的叙量。mini-batch size越小,噪聲越大九串;mini-batch size = 1時(shí)绞佩,就會(huì)退化為隨機(jī)梯度下降,噪聲是極大的猪钮。

2.2.3 指數(shù)加權(quán)平均

v_i = \beta v_{i-1} +(1-\beta)\theta_i
意思是說(shuō)品山,當(dāng)前預(yù)測(cè)值不僅和當(dāng)前觀測(cè)有關(guān),而且和之前的1/(1-\beta)次觀測(cè)有關(guān)烤低。beta越大肘交,考慮之前的權(quán)重就越大,預(yù)測(cè)曲線會(huì)越平穩(wěn)扑馁,對(duì)于峰值谷值會(huì)有更長(zhǎng)時(shí)間的滯后涯呻;beta越小,噪聲越大腻要,曲線會(huì)不平穩(wěn)复罐,但是和觀測(cè)值會(huì)很貼近。
beta一般取0.9,0.95,0.98等
(編者注:計(jì)算機(jī)網(wǎng)絡(luò)中闯第,印象中TCP協(xié)議中的延遲預(yù)測(cè)似乎也用過(guò)類(lèi)似的方案市栗,本質(zhì)上是一種簡(jiǎn)單的預(yù)測(cè)模型)

2.2.5 指數(shù)加權(quán)平均偏差修正

一般來(lái)說(shuō),v_0=0咳短,這樣當(dāng)\beta比較大時(shí)填帽,早期的預(yù)測(cè)值會(huì)非常小,為了減弱早期的誤差咙好,公式將輸出修正為\frac{v_i}{1 - \beta ^i}篡腌,這樣在i比較小時(shí),可以獲得較大補(bǔ)償勾效,i較大時(shí)嘹悼,補(bǔ)償基本就沒(méi)了。

2.2.6 動(dòng)量梯度下降(Momentum)

  • 動(dòng)量梯度下降就利用了指數(shù)加權(quán)平均的思想层宫,每次進(jìn)行梯度下降時(shí)杨伙,不將此次下降完全獨(dú)立于之前的梯度下降,而是借鑒一部分之前的梯度下降萌腿。
  • 具體來(lái)說(shuō)限匣,每次做梯度下降時(shí),算出的dW,db毁菱,不直接作用于當(dāng)前的W,b米死,首先計(jì)算v_{dW} = \beta v_{dW} + (1-\beta)dW锌历,然后讓W=W-\alpha v_{dW}, b也同理。Momentum不做偏差修正峦筒。
  • 為什么要借鑒之前的梯度呢究西?一個(gè)直觀的感覺(jué)就是抖動(dòng)。對(duì)于一個(gè)狹長(zhǎng)的代價(jià)函數(shù)物喷,如果在寬上來(lái)回抖動(dòng)卤材,會(huì)歪曲到達(dá)谷值的路徑,對(duì)之前若干次梯度的平均脯丝,基本可以抵消抖動(dòng)商膊,使得梯度直達(dá)谷值,加速優(yōu)化宠进。

2.2.7 RMSprop梯度下降(root mean square)

這個(gè)方法和Momentum有點(diǎn)類(lèi)似晕拆,intuition也是差不多的,只要找對(duì)了方向材蹬,學(xué)習(xí)率就可以放大一些实幕。
再具體公式上,RMSprop有一定差異堤器。
S_{dW} = \beta S_{dW} + (1-\beta)dW^2
W = W - \alpha \frac{dW}{\sqrt{S_{dW}}}

  • 可以看到昆庇,相比于Momentum,RMS為當(dāng)前梯度增加了平方項(xiàng)闸溃,然后在學(xué)習(xí)時(shí)又將其平方根作為分母整吆。
  • 這表示的含義是:假設(shè)仍然是一個(gè)狹長(zhǎng)的代價(jià)函數(shù),對(duì)于寬來(lái)說(shuō)辉川,少少移動(dòng)一段表蝙,就會(huì)導(dǎo)致較大的變化,所以梯度(dW)是較大的乓旗,那對(duì)應(yīng)的S_{dW}也是很大的府蛇,作為分母時(shí),整體的移動(dòng)步伐就比較小了屿愚。

2.2.8 Adam優(yōu)化算法(Adaptive moment estimation)

Adam基本就是把Momentum和RMSprop的結(jié)合汇跨。

  • 首先用Momentum算出v_{dW},然后用RMSprop算出S_{dW}
  • 然后分別用對(duì)應(yīng)的參數(shù)\beta_1,\beta_2做偏差修正
  • 最后用以下式子進(jìn)行學(xué)習(xí)W = W - \alpha \frac{v_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}} }
    編者:總結(jié)一下妆距,根據(jù)Andrew所說(shuō)穷遂,目前RMSprop和Adam是在各種網(wǎng)絡(luò)中都比較有效的。至于其中原因娱据,直覺(jué)上就是找對(duì)方向蚪黑,減小錯(cuò)誤方向抖動(dòng),提高學(xué)習(xí)率。但具體的證明和推導(dǎo)似乎比較缺乏祠锣,優(yōu)化算法這里更多的可能是實(shí)戰(zhàn)經(jīng)驗(yàn)給出的。Andrew也提到早期的優(yōu)化算法往往沒(méi)什么適用性咽安,所以人們對(duì)其信心也不高伴网,直到RMSprop和Adam算法出現(xiàn)。所以用的時(shí)候妆棒,直接撈二者之一用即可澡腾。

2.2.9 學(xué)習(xí)率衰退

核心思想是當(dāng)接近local optica時(shí)(已經(jīng)在谷底附近),較小的學(xué)習(xí)率能夠避免在這附近兜圈子糕珊。有很多算法會(huì)逐步調(diào)整學(xué)習(xí)率动分,一般的是在過(guò)一輪數(shù)據(jù)之后,降低一些红选,有多項(xiàng)式的澜公,指數(shù)的,甚至有手動(dòng)的喇肋,都可以坟乾,有用但不做為主要的超參來(lái)看待。

2.2.10 局部最優(yōu)的問(wèn)題

  • 很多人會(huì)質(zhì)疑梯度下降會(huì)不會(huì)收斂到local optica上蝶防。Andrew的解釋是甚侣,梯度為0的維度可能是極大值,也可能是極小值间学,如果維度非常多殷费,要找到一個(gè)全空間上的local optica概率極小,需要在全部維度上都是極小值才可以低葫。
  • 常見(jiàn)的情況是在一部分維度是極小值详羡,一部分維度是極大值,形成了鞍點(diǎn)氮采。
  • 鞍點(diǎn)的問(wèn)題是周邊的梯度都非常平緩殷绍,要快速走出去就需要更好的優(yōu)化算法,比如Adam等鹊漠。

2.3 調(diào)參和batch norm

2.3.1-2.3.3 調(diào)參

Andrew給超參的優(yōu)先級(jí)排了個(gè)序:

  1. 學(xué)習(xí)率\alpha
  2. Momentum 參數(shù)\beta主到,決定滯后度和平滑度;隱藏單元數(shù)躯概;mini-batch size
  3. 層數(shù)L登钥,學(xué)習(xí)率衰退
  4. Adam優(yōu)化算法中的其他參數(shù),基本不用調(diào)

至于具體的調(diào)參過(guò)程娶靡,Andrew給的建議是隨機(jī)取值(相比于grid取值)(在合適范圍內(nèi)牧牢,線性or對(duì)數(shù),根據(jù)含義定)+由粗到細(xì)的搜索高維參數(shù)空間。
調(diào)參有兩種過(guò)程塔鳍,一種要長(zhǎng)時(shí)間跟蹤一個(gè)模型伯铣,根據(jù)學(xué)習(xí)曲線變化,不斷調(diào)整超參轮纫,改善模型腔寡;另一種是先設(shè)置一大組超參,然后并行地訓(xùn)練模型掌唾,最后做出比較放前。肯定是后者更優(yōu)糯彬,但是要考慮算力是否足夠凭语。

2.3.4-2.3.7 batch norm

batch norm怎么做

batch norm的intuition是對(duì)輸入的正則化,對(duì)于DNN撩扒,每一層如果理解為一個(gè)logistic回歸似扔,那其實(shí)應(yīng)該對(duì)每一層的激勵(lì)值做正則化,但事實(shí)上還沒(méi)做却舀。
不過(guò)從習(xí)慣上來(lái)看(或者不知道的理由)虫几,正則化都是對(duì)激勵(lì)前的值z(mì)做的,而非激勵(lì)值挽拔。具體做法是先對(duì)各層的z值減均值除方差辆脸,像正常正交化一樣,得到z_{norm}螃诅,然后做下式變換:
\tilde{z} = \gamma z_{norm} + \beta

  • 可以看到啡氢,如果\gamma\beta取合適的值术裸,很有可能\tilde{z} = z倘是;
  • \gamma\beta已經(jīng)成為網(wǎng)絡(luò)的新參數(shù)(注意不是超參)袭艺,和w,b同等地位搀崭,同樣要通過(guò)優(yōu)化算法來(lái)求;
  • 另一方面猾编,如果對(duì)z統(tǒng)一減均值瘤睹,那b偏移參數(shù)就被消掉了,所以如果用batch norm答倡,b參數(shù)就不用訓(xùn)練了轰传。

batch norm為什么能加速優(yōu)化算法呢?

  • 第一個(gè)原因和輸入歸一化一樣瘪撇,能讓代價(jià)函數(shù)均勻點(diǎn)获茬,下降快些港庄;
  • 第二個(gè)原因是能讓各層的學(xué)習(xí)相對(duì)獨(dú)立,而不是參數(shù)學(xué)習(xí)都耦合在一起恕曲。因?yàn)樵诟鲗又g都有batch norm能夠做正則化鹏氧,把輸入(z值)規(guī)范到一定的分布上(\gamma,\beta),這樣對(duì)后續(xù)的影響就沒(méi)有那么大了佩谣。
    • 這里涉及到一個(gè)概念叫covariate shift:其意思表示訓(xùn)練集和測(cè)試集必須同來(lái)源度帮,同分布,如果不一致的話就不要期待有很高的準(zhǔn)確率了稿存。
    • 如果把網(wǎng)絡(luò)前層的激勵(lì)值看成輸入的話,如果這些輸入總是在不同分布上瞳秽,后面的網(wǎng)絡(luò)總是要做緩慢地調(diào)整(因?yàn)榭赡芎髮右呀?jīng)飽和瓣履,z值已經(jīng)比較大了)來(lái)適應(yīng)前層的學(xué)習(xí)結(jié)果,否則lose就會(huì)很高练俐,這稱(chēng)為internal covariate shift袖迎。
  • 由于batch norm是在mini-batch size上來(lái)做的,所以對(duì)z值做歸一化時(shí)的均值和方差都是不準(zhǔn)的腺晾,這樣就導(dǎo)致后層的輸入是有噪聲的燕锥,誤打誤撞和Dropout正則化有些類(lèi)似,也起到了一些正則化的作用悯蝉,但是別把它當(dāng)真的正則化來(lái)用(解決過(guò)擬合)归形。【編者注:batch norm論文作者認(rèn)為這可以減少對(duì)Dropout的需求鼻由,Andrew認(rèn)為這兩者可以結(jié)合用暇榴,目的不同。Andrew的理解應(yīng)該更客觀些蕉世“簦】

測(cè)試集怎么做batch norm

由于在測(cè)試集上你不可能也做mini-batch,【編者注:測(cè)試集和用戶(hù)輸入類(lèi)似狠轻,你不能讓用戶(hù)一次只能輸入一大批奸例,用戶(hù)只會(huì)輸入一個(gè)樣本】,這樣batch norm中的第一步歸一化也沒(méi)法做了向楼,因?yàn)闆](méi)有均值查吊、方差。
解決方案就是要估計(jì)測(cè)試集的各層的\mu,\sigma^2蜜自,考慮到測(cè)試集菩貌、訓(xùn)練集同分布,那么仍然可以采用指數(shù)加權(quán)平均延續(xù)訓(xùn)練集mini-batch的\mu重荠,\sigma^2箭阶。

2.3.8-2.3.9 softmax回歸

softmax激勵(lì)函數(shù)

softmax是一個(gè)特殊的激勵(lì)函數(shù)虚茶,它輸入是一個(gè)向量,輸出是一個(gè)向量仇参。

  • 不同于之間的激勵(lì)函數(shù)輸入是標(biāo)量嘹叫,輸出是標(biāo)量。
  • 其計(jì)算方式為對(duì)每個(gè)元素做t_i = e^{z_i}诈乒, a_i = t_i/\sum t_i
  • 也就是說(shuō)要求輸出的向量求和為1
  • 主要用于多分類(lèi)器罩扇,表示各個(gè)分類(lèi)的概率,加和為1.

softmax回歸

  • softmax回歸是對(duì)logistic回歸的一種多分類(lèi)擴(kuò)展怕磨;當(dāng)分類(lèi)數(shù)只有2的時(shí)候喂饥,softmax回歸就退化成了logistic回歸。
  • softmax是對(duì)比與hardmax肠鲫,hardmax會(huì)把輸出的激勵(lì)向量员帮,只保留1個(gè)1,剩下均為0.
  • 損失函數(shù)為(C為分類(lèi)數(shù)):
    L = -\sum_{j=1}^Cy_jlog\hat{y_j}
    • 非當(dāng)前分類(lèi)的不計(jì)損失导饲,當(dāng)前分類(lèi)的按預(yù)測(cè)的log值計(jì)入損失
    • 代價(jià)函數(shù)為損失函數(shù)在各個(gè)樣本之和捞高。
    • 非常幸運(yùn),對(duì)于這個(gè)代價(jià)函數(shù)dz^{[L]} = Y-\hat{Y}

3 結(jié)構(gòu)化機(jī)器學(xué)習(xí)項(xiàng)目

3.1 機(jī)器學(xué)習(xí)系統(tǒng)優(yōu)化周期

  1. 首先是在訓(xùn)練集中把模型的準(zhǔn)確性做到和人類(lèi)專(zhuān)家接近渣锦∠醺冢【低偏差】
    • 一般來(lái)說(shuō),會(huì)把人類(lèi)專(zhuān)家組的錯(cuò)誤率當(dāng)做貝葉斯錯(cuò)誤率(理論上最低值)的一個(gè)很緊的上界袋毙。
    • 模型準(zhǔn)確率和人類(lèi)專(zhuān)家準(zhǔn)確率之間的差距稱(chēng)為可避免誤差型檀。
    • 可避免誤差優(yōu)化方法:
      1. 訓(xùn)練一個(gè)更大的網(wǎng)絡(luò);
      2. 梯度下降更久一些听盖,或者選用更高級(jí)的優(yōu)化算法(Momentum, RMSprop, Adam)
      3. 改善網(wǎng)絡(luò)結(jié)構(gòu)贱除;
      4. 搜索超參。
  2. 其次是讓訓(xùn)練集誤差和驗(yàn)證集誤差較低媳溺≡禄希【低方差】
    • 方差的優(yōu)化方法:
      1. 多搞一些數(shù)據(jù);
      2. 正則化(L2悬蔽,dropout扯躺,數(shù)據(jù)擴(kuò)充等)
      3. 改善網(wǎng)絡(luò)機(jī)構(gòu);
      4. 搜索超參蝎困。
  3. 如果訓(xùn)練集录语,驗(yàn)證集都沒(méi)問(wèn)題,但是測(cè)試集出了問(wèn)題禾乘,說(shuō)明出現(xiàn)了【驗(yàn)證集過(guò)擬合】澎埠。
    • 驗(yàn)證集過(guò)擬合的優(yōu)化方法:
      1. 擴(kuò)充驗(yàn)證集。

3.2 數(shù)據(jù)不匹配

3.2.1-3.2.5 定義與問(wèn)題識(shí)別

數(shù)據(jù)不匹配是說(shuō)訓(xùn)練的數(shù)據(jù)來(lái)源和分布始藕,與測(cè)試集的數(shù)據(jù)來(lái)源和分布不一致蒲稳。Andrew舉了一個(gè)例子氮趋,比如一個(gè)識(shí)別貓咪的分類(lèi)器,訓(xùn)練集中的數(shù)據(jù)都是網(wǎng)絡(luò)上的高清貓咪江耀,結(jié)果算法的實(shí)際輸入是普通用戶(hù)拍的高糊貓咪照剩胁,這就屬于分布不一致的問(wèn)題。
一般來(lái)說(shuō)祥国,很可能數(shù)據(jù)來(lái)源于兩個(gè)部分昵观,其中部分一易于收集、量大舌稀,通常用于訓(xùn)練集啊犬,部分二量少,不易于收集壁查,通常是用戶(hù)輸入椒惨。拿到這兩部分?jǐn)?shù)據(jù),如何訓(xùn)模型呢:

  • 方案1:全混一起潮罪,然后再分訓(xùn)練集、驗(yàn)證集领斥、測(cè)試集嫉到。主要問(wèn)題在于測(cè)試集和真實(shí)場(chǎng)景的用戶(hù)輸入的分布不太一樣。
  • 方案2:將部分二按2:1:1拆成3份月洛,一份進(jìn)訓(xùn)練集何恶,一份做驗(yàn)證集,一份做測(cè)試集嚼黔。這種方案是可以采納的细层。

仍然存在的問(wèn)題時(shí),如果按方案二進(jìn)行分割唬涧,驗(yàn)證集很難說(shuō)明問(wèn)題疫赎,因?yàn)轵?yàn)證集效果差有可能是算法高方差導(dǎo)致的,也有可能是數(shù)據(jù)不匹配導(dǎo)致的碎节。解決方案是從訓(xùn)練集中抽同分布的一小部分做訓(xùn)練驗(yàn)證集捧搞。

  • 如果訓(xùn)練驗(yàn)證集效果相比于訓(xùn)練集差,那就是高方差問(wèn)題狮荔;
  • 如果訓(xùn)練驗(yàn)證集效果還不錯(cuò)胎撇,但驗(yàn)證集效果差,那就是數(shù)據(jù)不匹配導(dǎo)致的殖氏。

3.2.6-3.2.10 數(shù)據(jù)不匹配解決方案

3.2.6 人工合成數(shù)據(jù)

人工合成數(shù)據(jù)使得訓(xùn)練集和測(cè)試集的數(shù)據(jù)分布更接近晚树,比如給數(shù)據(jù)加噪聲,但要注意噪聲的分布范圍也必須很大(至少和源數(shù)據(jù)一樣大)雅采,否則容易在局部噪聲上過(guò)擬合爵憎,這種過(guò)擬合人類(lèi)也很難分辨出來(lái)慨亲。

3.2.7 遷移學(xué)習(xí)

遷移學(xué)習(xí)是說(shuō),現(xiàn)有兩個(gè)任務(wù)A和B纲堵,它們有一定的相關(guān)性巡雨,比如A是從圖像中識(shí)別是否是一只貓,B是識(shí)別X光席函。遷移學(xué)習(xí)就是先把任務(wù)A訓(xùn)出來(lái)铐望,然后把網(wǎng)絡(luò)的輸出層換掉,然后在最后一層初始化權(quán)重茂附,其它層不變正蛙,再用B的數(shù)據(jù)集去訓(xùn)練最后一層權(quán)重。

  • 遷移學(xué)習(xí)主要解決的是任務(wù)標(biāo)簽樣本少的問(wèn)題营曼,其思路就是用一個(gè)很相關(guān)問(wèn)題(標(biāo)簽樣本很充足)的網(wǎng)絡(luò)做預(yù)訓(xùn)練(pre-training)乒验,然后在當(dāng)前問(wèn)題上做微調(diào)(fine-tuning)。
    • 其主要思想是蒂阱,在前面層學(xué)到的是比較初級(jí)的特征锻全,在圖像的例子里面,前層可能是輪廓录煤,局部特征抽取等等鳄厌,那這些知識(shí)用在X光圖片里面也可以用,所以遷移學(xué)習(xí)實(shí)際上是一種知識(shí)遷移妈踊。
    • 當(dāng)然如果當(dāng)前任務(wù)標(biāo)簽樣本足夠多了嚎,重新訓(xùn)練全部層全部參數(shù),也是可以的廊营。

3.2.8 多任務(wù)學(xué)習(xí)

多任務(wù)學(xué)習(xí)是在一個(gè)神經(jīng)網(wǎng)絡(luò)里面同時(shí)完成多項(xiàng)任務(wù)歪泳。一個(gè)最經(jīng)典的例子就是在圖像識(shí)別中同時(shí)識(shí)別多種物體,比如車(chē)露筒、行人呐伞、路面標(biāo)記、指示牌等慎式。相比之下荸哟,logistic回歸只能做二元分類(lèi),softmax回歸只能輸出某一種分類(lèi)(損失函數(shù)決定的瞬捕,只在最準(zhǔn)的分類(lèi)上有損失)鞍历,而多任務(wù)學(xué)習(xí)可以對(duì)一個(gè)樣本同時(shí)打多個(gè)標(biāo)簽。

  • 能進(jìn)行多任務(wù)學(xué)習(xí)的一個(gè)基礎(chǔ)是肪虎,這多個(gè)任務(wù)有很多低層的相似性劣砍。比如車(chē)、行人扇救、指示牌等都是圖像處理中的物體刑枝,底層都需要輪廓香嗓、拼接等。
  • 第二個(gè)就是多個(gè)任務(wù)的樣本量是差不多的装畅,這樣放在一起學(xué)習(xí)要比單獨(dú)學(xué)習(xí)的效果要好靠娱。
  • 代價(jià)函數(shù)就是多個(gè)標(biāo)簽都有損失。
  • 多任務(wù)學(xué)習(xí)需要一個(gè)比較大的網(wǎng)絡(luò)掠兄,如果網(wǎng)絡(luò)比較小像云,有可能不如分開(kāi)學(xué)習(xí)。

3.2.9-3.2.10 端到端的深度學(xué)習(xí)

端到端的深度學(xué)習(xí)是說(shuō)蚂夕,如果一個(gè)任務(wù)是由多個(gè)部分來(lái)完成的迅诬,舉個(gè)例子,一個(gè)語(yǔ)音識(shí)別系統(tǒng)婿牍,可能先要做音節(jié)切割侈贷,然后拼成單詞,然后拼成句子等脂,然后理解語(yǔ)義等等俏蛮,可以通過(guò)一個(gè)足夠復(fù)雜的DNN來(lái)直接從輸入做到輸出,即輸入一段話上遥,輸出語(yǔ)義搏屑。

  • 做end-to-end DL說(shuō)起來(lái)簡(jiǎn)單,但不是萬(wàn)金油露该,它需要及其大量的數(shù)據(jù),如果數(shù)據(jù)量非常充足第煮,那么確實(shí)是一種捷徑解幼,而且往往效果更好。
    • end-to-end DL會(huì)摒棄人類(lèi)對(duì)這個(gè)任務(wù)的理解包警,以機(jī)器的角度去學(xué)習(xí)理解這個(gè)任務(wù)撵摆,有可能得到更好的結(jié)果。當(dāng)然這也有可能成為一個(gè)弊端害晦,因?yàn)槿祟?lèi)的理解并不一定就是錯(cuò)的特铝。
    • 具體end-to-end如何應(yīng)用,應(yīng)用到何種地步壹瘟,主要是靠實(shí)際任務(wù)性質(zhì)和標(biāo)簽數(shù)據(jù)量來(lái)決定的鲫剿。
最后編輯于
?著作權(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

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