你真的了解 Batch Normalization 么敞临?

Date: 2020/01/25

Author: CW

前言:

如果你希望對(duì)Batch Normalization有更深入的理解态辛,還請(qǐng)耐心閱讀本文。CW會(huì)一步步為大家解析Batch Normalization挺尿,由淺至深奏黑,并且引出在具體使用中的一些關(guān)鍵點(diǎn),供各位網(wǎng)友參考學(xué)習(xí)编矾,如有不當(dāng)之處熟史,歡迎大家交流與指正,謝謝窄俏!


Outline

i). Why:為什么需要 Batch Normalization蹂匹?

ii). What:Batch Normalization 是什么東東?

iii). How:Batch Normalization 干了什么凹蜈?具體是怎么做的限寞?

iv). Key Point:關(guān)于 Batch Normalization,這些細(xì)節(jié)你都了解嗎仰坦?

v). Summary:Batch Normalization 起到了什么作用履植?


Why:為什么需要 Batch Normalization?

Original From:http://gradientscience.org/batchnorm

上圖表示的是神經(jīng)網(wǎng)絡(luò)每層的權(quán)重和激活函數(shù)悄晃,每層權(quán)重的更新其實(shí)是在假定其輸入不變的情況下根據(jù)loss結(jié)合反向傳播過程來進(jìn)行的玫霎。但實(shí)際情況是,每層的輸入是前面層的輸出妈橄,而前面層的權(quán)重更新會(huì)導(dǎo)致它的輸出變化庶近,即當(dāng)前層的輸入數(shù)據(jù)就會(huì)跟著變化了,本來上次權(quán)重的更新對(duì)輸入適應(yīng)得不錯(cuò)了眷蚓,但是由于輸入分布又變化了鼻种,于是權(quán)重又得繼續(xù)調(diào)整,而根據(jù)反向傳播過程溪椎,前面層的權(quán)重也會(huì)更新普舆,這樣當(dāng)前層的輸入分布又再次變化恬口,于是當(dāng)前層的權(quán)重在下次更新時(shí)又需根據(jù)新的分布重新調(diào)整...你們說累不累校读?

在此沼侣,順便引入一個(gè)概念——Internal Covariate Shift,即內(nèi)部協(xié)轉(zhuǎn)移歉秫,它是指深層網(wǎng)絡(luò)中由于參數(shù)變化而引起的內(nèi)部數(shù)據(jù)分布變化蛾洛,這會(huì)帶來以下問題:

i). 深層的網(wǎng)絡(luò)需不斷調(diào)整來適應(yīng)淺層網(wǎng)絡(luò)引起的數(shù)據(jù)分布變化,從而影響模型收斂雁芙;

ii). 由于激活函數(shù)的存在轧膘,模型容易在訓(xùn)練過程中陷入梯度飽和區(qū)域。

那么兔甘,如何減緩/規(guī)避這樣的問題呢谎碍?

以往機(jī)器學(xué)習(xí)的傳統(tǒng)做法可以使用如PCA/ZCA這樣的白化操作,但如果用在深度神經(jīng)網(wǎng)絡(luò)中洞焙,計(jì)算成本就太高了蟆淀,傷不起!另外澡匪,反向傳播時(shí)熔任,白化操作還不一定可導(dǎo)。同時(shí)唁情,由于這類操作改變了原數(shù)據(jù)分布疑苔,因而本身數(shù)據(jù)的表達(dá)能力被改變了,低層網(wǎng)絡(luò)學(xué)習(xí)到的參數(shù)信息會(huì)被白化操作丟棄掉甸鸟。

于是惦费,why batch normalization? cuz' we need it!

Batch Normalization 就破蛋而出了。


What:Batch Normalization 是什么東東抢韭?

通過上一節(jié)我們知道薪贫,隨著網(wǎng)絡(luò)深度加深,輸入分布會(huì)逐漸發(fā)生偏移和變動(dòng)篮绰,于是激活函數(shù)的輸入分布很容易處于線性飽和區(qū)域(即這時(shí)激活函數(shù)的輸出值在向其取值區(qū)間的上下限兩端靠近)后雷,從而后向傳播淺層網(wǎng)絡(luò)的梯度逐漸消失,進(jìn)而導(dǎo)致模型收斂變慢吠各。

Sigmoid函數(shù)曲線

Batch Normalization臀突,即“批次歸一化”,通常簡稱BatchNormBN贾漏,目前廣泛作為神經(jīng)網(wǎng)絡(luò)模型中的一個(gè)網(wǎng)絡(luò)層使用候学。顧名思義,它是基于一個(gè)個(gè)批次(相對(duì)的是全量數(shù)據(jù))的數(shù)據(jù)來進(jìn)行歸一化操作的纵散。它是這樣的一種手段——把網(wǎng)絡(luò)中每層各神經(jīng)元的輸入分布強(qiáng)行拉回到均值為0方差為1的分布(通常是正態(tài)/均勻分布)梳码,從而使激活函數(shù)的輸入落在非線性飽和區(qū)域隐圾,進(jìn)而避免梯度消失,最終使得模型可持續(xù)學(xué)習(xí)至收斂掰茶。

BN

HOW:Batch Normalization 干了什么暇藏?具體是怎么做的?

總的來說濒蒋,BN干以下兩件事情:

i). Normalization:即對(duì)每個(gè)批次的數(shù)據(jù)進(jìn)行歸一化操作盐碱,使其均值為0方差為1;

ii). (可選)Scale & Shift:設(shè)置兩個(gè)可學(xué)習(xí)參數(shù)\gamma \beta 沪伙,對(duì)歸一化后的每個(gè)批次數(shù)據(jù)進(jìn)行縮放和平移瓮顽,使其變?yōu)榱硪环N分布,均值為\beta 围橡,方差為\gamma ^2 暖混。

BN操作,其中是一個(gè)極小值翁授,如拣播,用于防止分母為0;以上和的下標(biāo)B代表是基于一個(gè)神經(jīng)元上的批次(Min-Batch)進(jìn)行計(jì)算的黔漂,即通常所說的第i個(gè)通道(在計(jì)算機(jī)視覺中诫尽,就是第i個(gè)feature map)

通過以上,你是否發(fā)現(xiàn)以下小秘密:

1炬守、\mu \sigma 為當(dāng)前批次的統(tǒng)計(jì)量牧嫉,不可學(xué)習(xí)

2减途、\gamma \beta 為待學(xué)習(xí)的縮放(scale)和平移(shift)參數(shù)酣藻,分別用于控制方差和均值,即無論x_{i}原本的均值和方差是多少鳍置,通過BN后均值和方差將分別變?yōu)?\beta ?和?\gamma ^2(若感到疑惑辽剧,動(dòng)動(dòng)小手自己推一推哈);

3税产、BN層中怕轿,不同神經(jīng)元(通道)的x_{i}之間不存在信息交流。注意哦辟拷,這代表它們的\mu撞羽、 \sigma、 \gamma衫冻、 \beta ?是分別計(jì)算和學(xué)習(xí)的

以上就是BN的具體操作了诀紊,這部分會(huì)發(fā)生在前向反饋過程中,那么你們不免會(huì)問隅俘,后向傳播呢邻奠?客觀稍坐片刻笤喳,CW這就為您上菜!

反向傳播過程涉及的偏導(dǎo)

根據(jù)反向傳播的順序碌宴,首先求取損失loss對(duì)BN層輸出y的偏導(dǎo)杀狡,然后是對(duì)可學(xué)習(xí)參數(shù)\gamma 、\beta 的偏導(dǎo)唧喉,用于對(duì)參數(shù)進(jìn)行更新捣卤。接著忍抽,繼續(xù)回傳上一層網(wǎng)絡(luò)八孝,于是需要求對(duì)該BN層輸入x的偏導(dǎo),從而用到對(duì)\mu 鸠项、\sigma ^2以及\hat{x} 的偏導(dǎo)干跛,最終根據(jù)鏈?zhǔn)椒▌t求它們對(duì)x的偏導(dǎo)。

BN的前向反饋&反向傳播

Key Point:關(guān)于 Batch Normalization祟绊,這些細(xì)節(jié)你都了解嗎楼入?

i). 預(yù)測階段如何使用BN?

我們知道牧抽,在訓(xùn)練過程中嘉熊,\mu 、\sigma 扬舒、\gamma 和\beta 都是變化的阐肤,而在預(yù)測階段,所有參數(shù)的取值都應(yīng)該是固定的讲坎,那么這時(shí)孕惜,我們?cè)撊绾问褂肂N?

對(duì)于\gamma \beta 晨炕,隨著訓(xùn)練結(jié)束衫画,兩者最終收斂,于是使用訓(xùn)練結(jié)束時(shí)的值即可瓮栗。

對(duì)于\mu \sigma 削罩,在訓(xùn)練階段時(shí)它們是當(dāng)前mini-batch的統(tǒng)計(jì)量,而在預(yù)測階段费奸,輸入數(shù)據(jù)可能只有1條弥激,那么這時(shí)\mu \sigma 該如何取值呢?可以采用訓(xùn)練至收斂的最后幾批mini-batch的 \mu \sigma ^2的期望作為這時(shí)的\mu和\sigma ^2

預(yù)測階段的均值和方差货邓,x表示需要預(yù)測的輸入數(shù)據(jù)秆撮,m表示訓(xùn)練過程最后幾批mini-batch的大小,其中采用的是無偏估計(jì)

從而换况,BN操作會(huì)時(shí)數(shù)據(jù)進(jìn)行如下轉(zhuǎn)換:

預(yù)測階段的BN操作:normalization, then scale & shift

ii). 配合卷積層如何使用BN职辨?

我們知道盗蟆,在卷積層中一個(gè)kernel(卷積核)對(duì)應(yīng)一個(gè)feature map(特征圖),為了保持卷積的性質(zhì)與效果舒裤,因此處于同一feature map中的不同元素應(yīng)當(dāng)被施與相同的BN操作(包括歸一化和縮放平移)喳资。這樣,同一feature map中的元素就應(yīng)該共享一對(duì)\gamma和\beta 參數(shù)腾供。于是仆邓,若卷積層有n個(gè)kernel,那么其后的BN層將有n對(duì)\gamma和\beta參數(shù)伴鳖。

總的來說节值,可以將BN理解為基于通道來操作的:

對(duì)于\gamma和\beta ,處于同一通道的數(shù)據(jù)它們的這兩個(gè)值是相同的榜聂;

對(duì)于\mu和\sigma ^2搞疗,處于同一通道并且是同一mini-batch的數(shù)據(jù)它們的這兩個(gè)值是相同的。

For convolutional layers, we additionally want the normalization to obey the convolutional property – so that different elements of the same feature map, at different locations, are normalized in the same way. To achieve this, we jointly normalize all the activations in a mini-batch, over all locations.

so for a mini-batch of size m and feature maps of size p × q, we use the effective mini-batch of size m′= |B| = m · pq. We learn a pair of parameters γ(k) and β(k) per feature map, rather than per activation.

—— Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

iii). 歸一化之后為何要縮放和平移须肆?scale & shift存在的必要性匿乃?

首先說明一點(diǎn),可以不進(jìn)行縮放和平移(在代碼中也可以通過參數(shù)進(jìn)行設(shè)置)豌汇,但網(wǎng)絡(luò)的表達(dá)能力會(huì)下降幢炸。

由開篇的論述我們可知,深層神經(jīng)網(wǎng)絡(luò)中拒贱,每層網(wǎng)絡(luò)的權(quán)重和輸入分布會(huì)通過前向和反向過程而相互協(xié)調(diào)宛徊,那么強(qiáng)制把數(shù)據(jù)歸一化到均值為0方差為1的分布并不一定是最好的選擇。使用可學(xué)習(xí)的參數(shù)\gamma和\beta 柜思,是為了讓模型通過訓(xùn)練來學(xué)習(xí)什么樣的分布才是合適的岩调,利于輸入分布和權(quán)重的相互協(xié)調(diào),同時(shí)避免數(shù)據(jù)因這種統(tǒng)一均為0方差為1的“強(qiáng)硬”歸一化而丟失過多原始信息赡盘,增強(qiáng)了網(wǎng)絡(luò)的表達(dá)能力号枕。

特別地,\gamma =1且\beta =0的情況下等價(jià)于僅進(jìn)行歸一化(normalization)操作陨享,不進(jìn)行縮放和平移葱淳;而\gamma=\sigma \beta=\mu的情況下等價(jià)于沒有使用BN操作(包括歸一化和縮放平移)。

iv). 為何說BN對(duì)網(wǎng)絡(luò)中的參數(shù)不那么敏感抛姑,具有更強(qiáng)的魯棒性(即學(xué)習(xí)過程更加穩(wěn)定)赞厕,并且可以放心使用大學(xué)習(xí)率進(jìn)行訓(xùn)練從而加速收斂悴势?

舉一例說明更形象生動(dòng):

假設(shè)現(xiàn)在對(duì)網(wǎng)絡(luò)中某層參數(shù)w進(jìn)行縮放掌呜,使其變?yōu)閍w,其中a為縮放系數(shù)嘹朗,x為當(dāng)前層的輸入。那么诲侮,在沒有進(jìn)行縮放時(shí)镀虐,該層輸出將是wx,記均值和方差將分別為\mu_{1}和\sigma _{1}^2沟绪;縮放后刮便,該層輸出將是(aw)x,記此時(shí)均值和方差分別為\mu_{2}和\sigma_{2}^2绽慈,則有:

\mu_{2}=a\mu_{1}恨旱、\sigma_{2}^2=a^2\sigma_{1}^2

忽略\epsilon 坝疼,記縮放前后的BN操作分別為BN[wx]和BN[(aw)x]搜贤,則有:

BN[(aw)x] = \gamma\frac{(aw)x-\mu_{2}}{\sqrt{\sigma_{2}^2}} + \beta

? ? ? ? ? ? ? ? = \gamma \frac{a(wx-\mu_{1})}{\sqrt{(a\sigma_{1})^2}} + \beta

? ? ? ? ? ? ? ? = \gamma \frac{wx-\mu_{1}}{\sqrt{\sigma_{1}^2}}+ \beta

? ? ? ? ? ? ? ? = BN[wx]

咦!系數(shù)縮放之后對(duì)于BN層操作來說居然沒有變化裙士!這說明即使前面的網(wǎng)絡(luò)層權(quán)重系數(shù)較之前進(jìn)行了縮放入客,但是在經(jīng)過BN層之后,數(shù)據(jù)的分布依舊穩(wěn)定在一定范圍內(nèi)腿椎。

同理,對(duì)于梯度夭咬,不難計(jì)算出以下關(guān)系:

\frac{dBN[(aw)x]}{dx} = \frac{dBN[wx]}{dx}啃炸;\frac{dBN[(aw)x]}{d(aw)} = \frac{1}{a} \times \frac{dBN[wx]}{dw}

于是,我們知道卓舵,對(duì)于輸入數(shù)據(jù)x在BN層的梯度計(jì)算沒有發(fā)生變化南用,同時(shí),縮放尺寸與權(quán)重的梯度更新成反比掏湾,可使得其梯度更新更穩(wěn)定裹虫。

綜上,BN抑制了參數(shù)微小變化隨著網(wǎng)絡(luò)加深而被放大的情況融击,從而允許設(shè)置較大學(xué)習(xí)率筑公,同時(shí)不易造成模型震蕩或不收斂,較大學(xué)習(xí)率訓(xùn)練意味著可以加速收斂尊浪。

v). 為何BN會(huì)具有一定的正則化效果匣屡,甚至可以不使用Dropout?

要知道拇涤,在BN中我們使用的是mini-batch的均值與方差作為對(duì)整體訓(xùn)練樣本均值與方差的估計(jì)捣作,盡管每個(gè)mini-batch中的數(shù)據(jù)都是從總體樣本中抽樣得到,但不同mini-batch的均值與方差會(huì)有所不同(mini-batch size越小差異可能越大)鹅士,這相當(dāng)于在網(wǎng)絡(luò)的學(xué)習(xí)過程中增加了隨機(jī)噪音券躁,與Dropout通過關(guān)閉神經(jīng)元帶來噪音的效果類似,因此在一定程度上起到了正則化的效果。

另外也拜,BN原paper的作者也通過實(shí)驗(yàn)證明網(wǎng)絡(luò)加入BN后丟棄Dropout旭贬,模型也同樣具有很好的泛化效果。

vi). BN應(yīng)該放在激活層(通常是ReLU)前面還是后面搪泳?

原paper作者建議將BN層放置在ReLU前稀轨,因?yàn)镽eLU激活函數(shù)的輸出非負(fù),不能近似為高斯分布岸军。

The goal of Batch Normalization is to achieve a stable distribution of activation values throughout training, and in our experiments we apply it before the nonlinearity since that is where matching the first and second moments is more likely to result in a stable distribution.

—— Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

但是奋刽,也有實(shí)驗(yàn)表明放在ReLU后效果更好,這相當(dāng)于對(duì)下一層的輸入作歸一化艰赞。

因此佣谐,BN應(yīng)該放在激活層前面還是后面,以及與其他變量如初始化方法等如何組合方妖,目前沒有同一定論狭魂,通常憑直覺和經(jīng)驗(yàn)性指導(dǎo),具體效果還是得實(shí)驗(yàn)結(jié)果說了算党觅。

vii). 為啥使用了BN雌澄,就可以不對(duì)上一層的網(wǎng)絡(luò)設(shè)置bias(對(duì)于卷積層conv,就是bias=0)杯瞻?

一句話:設(shè)不設(shè)置一個(gè)樣镐牺,再見。

開個(gè)玩笑魁莉,原因很簡單睬涧,因?yàn)锽N的歸一化操作會(huì)將這個(gè)偏置分量移除掉:

(x + b) - E(x + b) = x +b - [E(x) + b] = x - E(x)

這么聰明的你肯定早就知道了,還請(qǐng)不要鄙視我以上這波操作...


Summary:Batch Normalization 起到了什么作用旗唁?

(1)使數(shù)據(jù)分布處于激活函數(shù)的非線性飽和區(qū)域畦浓,從而避免梯度消失;

(2)如在歸一化的同時(shí)進(jìn)行了縮放和平移检疫,則將數(shù)據(jù)分布的均值與方差從淺層網(wǎng)絡(luò)的權(quán)重中解耦讶请,只需調(diào)整\gamma和\beta 兩個(gè)參數(shù),使得數(shù)據(jù)分布和網(wǎng)絡(luò)權(quán)重的相互協(xié)調(diào)變得更加容易电谣;

(3)對(duì)網(wǎng)絡(luò)權(quán)重初始化不再那么敏感秽梅,對(duì)參數(shù)、激活函數(shù)具有更強(qiáng)的魯棒性剿牺,一定程度上降低了調(diào)參和訓(xùn)練的復(fù)雜度企垦;

(4)允許設(shè)置較大學(xué)習(xí)率進(jìn)行訓(xùn)練,加速模型收斂晒来;

(5)訓(xùn)練過程中的方差與均值基于每個(gè)mini-batch進(jìn)行統(tǒng)計(jì)钞诡,相當(dāng)于引入隨機(jī)噪聲,一定程度上起到了正則化效果。


#彩蛋

耐心的你居然看到了這里荧降,我內(nèi)心真的十分感動(dòng)接箫!

品完這篇文,你對(duì)BN是否有了新的認(rèn)識(shí)呢(大牛的話就默默別出聲吧哈哈哈)朵诫?那么辛友,你是否有思考過,若使用GPU多卡訓(xùn)練剪返,BN會(huì)是怎樣的一波操作废累?

我們知道,BN的統(tǒng)計(jì)量是基于batch來計(jì)算的脱盲,在GPU多卡的情況下邑滨,一個(gè)batch會(huì)被分成即部分分配到不同卡上,每張卡會(huì)基于它所拿到的那部分進(jìn)行計(jì)算钱反。當(dāng) batch size較大時(shí)掖看,可能不會(huì)有什么不妥,但是對(duì)于像語義分割等之類的稠密估計(jì)(Dense Prediction)問題面哥,batch size通常都很小哎壳,那么每張卡計(jì)算得到的統(tǒng)計(jì)量可能與整體數(shù)據(jù)樣本具有較大差異,這...不就尷尬了嗎4敝瘛耳峦?

嘿嘿!不急不急焕毫,別方,先把這篇文中的內(nèi)容啃下去好好消化驶乾,下回CW再為您上菜邑飒!


參考:

http://www.reibang.com/p/b38e14c1f14d

https://blog.csdn.net/zhikangfu/article/details/53391840

https://www.cnblogs.com/makefile/p/batch-norm.html?utm_source=debugrun&utm_medium=referral

https://www.cnblogs.com/shine-lee/p/11989612.html#batch-normalization%E7%9A%84%E9%A2%84%E6%B5%8B%E9%98%B6%E6%AE%B5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者级乐。
  • 序言:七十年代末疙咸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子风科,更是在濱河造成了極大的恐慌撒轮,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贼穆,死亡現(xiàn)場離奇詭異题山,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)故痊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門顶瞳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事慨菱⊙媛纾” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵符喝,是天一觀的道長闪彼。 經(jīng)常有香客問我,道長协饲,這世上最難降的妖魔是什么畏腕? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮囱稽,結(jié)果婚禮上郊尝,老公的妹妹穿的比我還像新娘。我一直安慰自己战惊,他們只是感情好流昏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吞获,像睡著了一般况凉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上各拷,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天刁绒,我揣著相機(jī)與錄音,去河邊找鬼烤黍。 笑死知市,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的速蕊。 我是一名探鬼主播嫂丙,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼规哲!你這毒婦竟也來了跟啤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤唉锌,失蹤者是張志新(化名)和其女友劉穎隅肥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袄简,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腥放,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痘番。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捉片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡平痰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伍纫,到底是詐尸還是另有隱情宗雇,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布莹规,位于F島的核電站赔蒲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏良漱。R本人自食惡果不足惜舞虱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望母市。 院中可真熱鬧矾兜,春花似錦、人聲如沸患久。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋失。三九已至返帕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間篙挽,已是汗流浹背荆萤。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铣卡,地道東北人链韭。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像煮落,于是被迫代替她去往敵國和親梧油。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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