一文看懂四種基本的神經(jīng)網(wǎng)絡(luò)架構(gòu)

原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/

更多干貨就在我的個人博客 http://blackblog.tech 歡迎關(guān)注

剛剛?cè)腴T神經(jīng)網(wǎng)絡(luò)蜕乡,往往會對眾多的神經(jīng)網(wǎng)絡(luò)架構(gòu)感到困惑凤价,神經(jīng)網(wǎng)絡(luò)看起來復雜多樣牡属,但是這么多架構(gòu)無非也就是三類,前饋神經(jīng)網(wǎng)絡(luò)孝治,循環(huán)網(wǎng)絡(luò),對稱連接網(wǎng)絡(luò),本文將介紹四種常見的神經(jīng)網(wǎng)絡(luò),分別是CNN薛耻,RNN营罢,DBN赏陵,GAN。通過這四種基本的神經(jīng)網(wǎng)絡(luò)架構(gòu)饲漾,我們來對神經(jīng)網(wǎng)絡(luò)進行一定的了解蝙搔。

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

神經(jīng)網(wǎng)絡(luò)是機器學習中的一種模型,是一種模仿動物神經(jīng)網(wǎng)絡(luò)行為特征考传,進行分布式并行信息處理的算法數(shù)學模型吃型。這種網(wǎng)絡(luò)依靠系統(tǒng)的復雜程度,通過調(diào)整內(nèi)部大量節(jié)點之間相互連接的關(guān)系僚楞,從而達到處理信息的目的勤晚。
一般來說,神經(jīng)網(wǎng)絡(luò)的架構(gòu)可以分為三類:

前饋神經(jīng)網(wǎng)絡(luò):
這是實際應(yīng)用中最常見的神經(jīng)網(wǎng)絡(luò)類型泉褐。第一層是輸入赐写,最后一層是輸出。如果有多個隱藏層膜赃,我們稱之為“深度”神經(jīng)網(wǎng)絡(luò)挺邀。他們計算出一系列改變樣本相似性的變換。各層神經(jīng)元的活動是前一層活動的非線性函數(shù)跳座。

循環(huán)網(wǎng)絡(luò):
循環(huán)網(wǎng)絡(luò)在他們的連接圖中定向了循環(huán)端铛,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態(tài)疲眷,使其很難訓練禾蚕。他們更具有生物真實性。
循環(huán)網(wǎng)絡(luò)的目的使用來處理序列數(shù)據(jù)狂丝。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型中换淆,是從輸入層到隱含層再到輸出層,層與層之間是全連接的美侦,每層之間的節(jié)點是無連接的产舞。但是這種普通的神經(jīng)網(wǎng)絡(luò)對于很多問題卻無能無力。例如菠剩,你要預測句子的下一個單詞是什么易猫,一般需要用到前面的單詞,因為一個句子中前后單詞并不是獨立的具壮。
循環(huán)神經(jīng)網(wǎng)路准颓,即一個序列當前的輸出與前面的輸出也有關(guān)哈蝇。具體的表現(xiàn)形式為網(wǎng)絡(luò)會對前面的信息進行記憶并應(yīng)用于當前輸出的計算中,即隱藏層之間的節(jié)點不再無連接而是有連接的攘已,并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出炮赦。

對稱連接網(wǎng)絡(luò):
對稱連接網(wǎng)絡(luò)有點像循環(huán)網(wǎng)絡(luò),但是單元之間的連接是對稱的(它們在兩個方向上權(quán)重相同)样勃。比起循環(huán)網(wǎng)絡(luò)吠勘,對稱連接網(wǎng)絡(luò)更容易分析。這個網(wǎng)絡(luò)中有更多的限制峡眶,因為它們遵守能量函數(shù)定律剧防。沒有隱藏單元的對稱連接網(wǎng)絡(luò)被稱為“Hopfield 網(wǎng)絡(luò)”。有隱藏單元的對稱連接的網(wǎng)絡(luò)被稱為玻爾茲曼機辫樱。

感知機

其實之前的帖子講過一些關(guān)于感知機的內(nèi)容峭拘,這里再復述一下。
首先還是這張圖
這是一個M-P神經(jīng)元


神經(jīng)元

一個神經(jīng)元有n個輸入狮暑,每一個輸入對應(yīng)一個權(quán)值w鸡挠,神經(jīng)元內(nèi)會對輸入與權(quán)重做乘法后求和,求和的結(jié)果與偏置做差搬男,最終將結(jié)果放入激活函數(shù)中拣展,由激活函數(shù)給出最后的輸出,輸出往往是二進制的止后,0 狀態(tài)代表抑制瞎惫,1 狀態(tài)代表激活。


感知機的輸出

感知機可以分為單層感知機译株,多層感知機瓜喇。
我們這里主要討論的是單層感知機。
而感知機由兩層神經(jīng)網(wǎng)絡(luò)組成歉糜,輸入層接收外界輸入信號后傳遞給輸出層乘寒,輸出層是 M-P神經(jīng)元,
感知機

可以把感知機看作是 n 維實例空間中的超平面決策面匪补,對于超平面一側(cè)的樣本伞辛,感知器輸出 1,對于另一側(cè)的實例輸出 0夯缺,這個決策超平面方程是 w?x=0蚤氏。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示踊兜。
與竿滨、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示于游,而異或并不是一個線性可分的問題毁葱,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了贰剥。

如果我們要訓練一個感知機倾剿,應(yīng)該怎么辦呢?
我們會從隨機的權(quán)值開始蚌成,反復地應(yīng)用這個感知機到每個訓練樣例前痘,只要它誤分類樣例就修改感知機的權(quán)值。重復這個過程笑陈,直到感知機正確分類所有的樣例际度。每一步根據(jù)感知機訓練法則來修改權(quán)值葵袭,也就是修改與輸入 xi 對應(yīng)的權(quán) wi涵妥,法則如下:

image

這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出坡锡,η 是一個正的常數(shù)稱為學習速率蓬网。學習速率的作用是緩和每一步調(diào)整權(quán)的程度,它通常被設(shè)為一個小的數(shù)值(例如 0.1)鹉勒,而且有時會使其隨著權(quán)調(diào)整次數(shù)的增加而衰減帆锋。

多層感知機,或者說是多層神經(jīng)網(wǎng)絡(luò)無非就是在輸入層與輸出層之間加了多個隱藏層而已禽额,后續(xù)的CNN锯厢,DBN等神經(jīng)網(wǎng)絡(luò)只不過是將重新設(shè)計了每一層的類型。感知機可以說是神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)脯倒,后續(xù)更為復雜的神經(jīng)網(wǎng)絡(luò)都離不開最簡單的感知機的模型实辑,

卷積神經(jīng)網(wǎng)絡(luò) CNN

談到機器學習,我們往往還會跟上一個詞語藻丢,叫做模式識別剪撬,但是真實環(huán)境中的模式識別往往會出現(xiàn)各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體悠反。很難判斷哪些部分屬于同一個對象残黑。對象的某些部分可以隱藏在其他對象的后面。
物體光照:像素的強度被光照強烈影響斋否。
圖像變形:物體可以以各種非仿射方式變形梨水。例如,手寫也可以有一個大的圓圈或只是一個尖頭茵臭。
情景支持:物體所屬類別通常由它們的使用方式來定義疫诽。例如,椅子是為了讓人們坐在上面而設(shè)計的,因此它們具有各種各樣的物理形狀踊沸。
卷積神經(jīng)網(wǎng)絡(luò)與普通神經(jīng)網(wǎng)絡(luò)的區(qū)別在于歇终,卷積神經(jīng)網(wǎng)絡(luò)包含了一個由卷積層和子采樣層構(gòu)成的特征抽取器。在卷積神經(jīng)網(wǎng)絡(luò)的卷積層中逼龟,一個神經(jīng)元只與部分鄰層神經(jīng)元連接评凝。在CNN的一個卷積層中,通常包含若干個特征平面(featureMap)腺律,每個特征平面由一些矩形排列的的神經(jīng)元組成奕短,同一特征平面的神經(jīng)元共享權(quán)值,這里共享的權(quán)值就是卷積核匀钧。卷積核一般以隨機小數(shù)矩陣的形式初始化翎碑,在網(wǎng)絡(luò)的訓練過程中卷積核將學習得到合理的權(quán)值。共享權(quán)值(卷積核)帶來的直接好處是減少網(wǎng)絡(luò)各層之間的連接之斯,同時又降低了過擬合的風險日杈。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式佑刷。子采樣可以看作一種特殊的卷積過程莉擒。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數(shù)瘫絮。
卷積神經(jīng)網(wǎng)絡(luò)由三部分構(gòu)成涨冀。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成麦萤。第三部分由一個全連結(jié)的多層感知機分類器構(gòu)成鹿鳖。
這里舉AlexNet為例:


image

·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個壮莹,每個GPU上48個翅帜。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個垛孔,每個GPU上128個藕甩。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接周荐,3*3的卷積核384個狭莱。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個概作,兩個GPU各192個腋妙。該層與上一層連接沒有經(jīng)過pooling層。
·第五層卷積:3×3的卷積核256個讯榕,兩個GPU上個128個骤素。
·第五層max-pooling:2×2的核匙睹。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量济竹,作為該層的輸入痕檬。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬于該類別的概率送浊。

卷積神經(jīng)網(wǎng)絡(luò)在模式識別領(lǐng)域有著重要應(yīng)用梦谜,當然這里只是對卷積神經(jīng)網(wǎng)絡(luò)做了最簡單的講解,卷積神經(jīng)網(wǎng)絡(luò)中仍然有很多知識袭景,比如局部感受野唁桩,權(quán)值共享,多卷積核等內(nèi)容耸棒,后續(xù)有機會再進行講解荒澡。

循環(huán)神經(jīng)網(wǎng)絡(luò)(遞歸神經(jīng)網(wǎng)絡(luò)) RNN

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)對于很多問題難以處理,比如你要預測句子的下一個單詞是什么与殃,一般需要用到前面的單詞单山,因為一個句子中前后單詞并不是獨立的。RNN之所以稱為循環(huán)神經(jīng)網(wǎng)路奈籽,即一個序列當前的輸出與前面的輸出也有關(guān)饥侵。具體的表現(xiàn)形式為網(wǎng)絡(luò)會對前面的信息進行記憶并應(yīng)用于當前輸出的計算中,即隱藏層之間的節(jié)點不再無連接而是有連接的衣屏,并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上辩棒,RNN能夠?qū)θ魏伍L度的序列數(shù)據(jù)進行處理狼忱。
這是一個簡單的RNN的結(jié)構(gòu),可以看到隱藏層自己是可以跟自己進行連接的一睁。


RNN

那么RNN為什么隱藏層能夠看到上一刻的隱藏層的輸出呢钻弄,其實我們把這個網(wǎng)絡(luò)展開來開就很清晰了。


image

這個網(wǎng)絡(luò)在t時刻接收到輸入Xt之后者吁,隱藏層的值是St,輸出值是Ot,關(guān)鍵一點是窘俺,的值不僅僅取決于Xt,還取決于St-1复凳。
image

式1是輸出層的計算公式瘤泪,輸出層是一個全連接層,也就是它的每個節(jié)點都和隱藏層的每個節(jié)點相連育八。V是輸出層的權(quán)重矩陣对途,g是激活函數(shù)。式2是隱藏層的計算公式髓棋,它是循環(huán)層实檀。U是輸入x的權(quán)重矩陣惶洲,W是上一次的值St-1作為這一次的輸入的權(quán)重矩陣,f是激活函數(shù)膳犹。

從上面的公式我們可以看出恬吕,循環(huán)層和全連接層的區(qū)別就是循環(huán)層多了一個權(quán)重矩陣 W。
如果反復把式2帶入到式1须床,我們將得到:


image

從上面可以看出币呵,循環(huán)神經(jīng)網(wǎng)絡(luò)的輸出值,是受前面歷次輸入值Xt侨颈、Xt-1余赢、Xt-2、X-3哈垢、X-4...影響的妻柒,這就是為什么循環(huán)神經(jīng)網(wǎng)絡(luò)可以往前看任意多個輸入值的原因。

深度信念網(wǎng)絡(luò) DBN

在講DBN之前耘分,我們需要對DBN的基本組成單位有一定的了解举塔,那就是RBM,受限玻爾茲曼機求泰。
首先什么是玻爾茲曼機央渣?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節(jié)點為隱層渴频,白色節(jié)點為輸入層芽丹。
玻爾茲曼機和遞歸神經(jīng)網(wǎng)絡(luò)相比,區(qū)別體現(xiàn)在以下幾點:
1卜朗、遞歸神經(jīng)網(wǎng)絡(luò)本質(zhì)是學習一個函數(shù)拔第,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在于學習一組數(shù)據(jù)的“內(nèi)在表示”场钉,因此其沒有輸出層的概念蚊俺。
2、遞歸神經(jīng)網(wǎng)絡(luò)各節(jié)點鏈接為有向環(huán)逛万,而玻爾茲曼機各節(jié)點連接成無向完全圖泳猬。

而受限玻爾茲曼機是什么呢?
最簡單的來說就是加入了限制宇植,這個限制就是將完全圖變成了二分圖得封。即由一個顯層和一個隱層構(gòu)成,顯層與隱層的神經(jīng)元之間為雙向全連接当纱。


RBM

h表示隱藏層呛每,v表示顯層
在RBM中,任意兩個相連的神經(jīng)元之間有一個權(quán)值w表示其連接強度坡氯,每個神經(jīng)元自身有一個偏置系數(shù)b(對顯層神經(jīng)元)和c(對隱層神經(jīng)元)來表示其自身權(quán)重晨横。
具體的公式推導在這里就不展示了

DBN是一個概率生成模型洋腮,與傳統(tǒng)的判別模型的神經(jīng)網(wǎng)絡(luò)相對,生成模型是建立一個觀察數(shù)據(jù)和標簽之間的聯(lián)合分布手形,對P(Observation|Label)和 P(Label|Observation)都做了評估啥供,而判別模型僅僅而已評估了后者,也就是P(Label|Observation)库糠。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成被济,一個典型的神經(jīng)網(wǎng)絡(luò)類型如圖所示危融。這些網(wǎng)絡(luò)被“限制”為一個可視層和一個隱層,層間存在連接,但層內(nèi)的單元間不存在連接轧叽。隱層單元被訓練去捕捉在可視層表現(xiàn)出來的高階數(shù)據(jù)的相關(guān)性叨襟。


DBN

生成對抗網(wǎng)絡(luò) GAN

生成對抗網(wǎng)絡(luò)其實在之前的帖子中做過講解斋射,這里在說明一下悠垛。
生成對抗網(wǎng)絡(luò)的目標在于生成,我們傳統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)往往都是判別模型野建,即判斷一個樣本的真實性属划。而生成模型能夠根據(jù)所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的候生。
GAN一般由兩個網(wǎng)絡(luò)組成同眯,生成模型網(wǎng)絡(luò),判別模型網(wǎng)絡(luò)唯鸭。
生成模型 G 捕捉樣本數(shù)據(jù)的分布须蜗,用服從某一分布(均勻分布,高斯分布等)的噪聲 z 生成一個類似真實訓練數(shù)據(jù)的樣本肿孵,追求效果是越像真實樣本越好唠粥;判別模型 D 是一個二分類器停做,估計一個樣本來自于訓練數(shù)據(jù)(而非生成數(shù)據(jù))的概率蛉腌,如果樣本來自于真實的訓練數(shù)據(jù)烙丛,D 輸出大概率河咽,否則忘蟹,D 輸出小概率媚值。
舉個例子:生成網(wǎng)絡(luò) G 好比假幣制造團伙褥芒,專門制造假幣锰扶,判別網(wǎng)絡(luò) D 好比警察坷牛,專門檢測使用的貨幣是真幣還是假幣漓帅,G 的目標是想方設(shè)法生成和真幣一樣的貨幣忙干,使得 D 判別不出來捐迫,D 的目標是想方設(shè)法檢測出來 G 生成的假幣施戴。
傳統(tǒng)的判別網(wǎng)絡(luò):


傳統(tǒng)的判別網(wǎng)絡(luò)

生成對抗網(wǎng)絡(luò):


生成對抗網(wǎng)絡(luò)

在訓練的過程中固定一方雷则,更新另一方的網(wǎng)絡(luò)權(quán)重月劈,交替迭代猜揪,在這個過程中而姐,雙方都極力優(yōu)化自己的網(wǎng)絡(luò)钧萍,從而形成競爭對抗划煮,直到雙方達到一個動態(tài)的平衡(納什均衡)弛秋,此時生成模型 G 恢復了訓練數(shù)據(jù)的分布(造出了和真實數(shù)據(jù)一模一樣的樣本)蟹略,判別模型再也判別不出來結(jié)果挖炬,準確率為 50%意敛。

下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網(wǎng)絡(luò)

生成網(wǎng)絡(luò)

判別網(wǎng)絡(luò)

判別網(wǎng)絡(luò)

最終結(jié)果,使用MNIST作為初始樣本撩独,通過學習后生成的數(shù)字综膀,可以看到學習的效果還是不錯的剧劝。


生成網(wǎng)絡(luò)

小結(jié)

本文非常簡單的介紹了四種神經(jīng)網(wǎng)絡(luò)的架構(gòu),CNN,RNN拌禾,DBN闻蛀,GAN您市。當然也僅僅是簡單的介紹薪棒,并沒有深層次講解其內(nèi)涵俐芯。這四種神經(jīng)網(wǎng)絡(luò)的架構(gòu)十分常見吧史,應(yīng)用也十分廣泛贸营。當然關(guān)于神經(jīng)網(wǎng)絡(luò)的知識钞脂,不可能幾篇帖子就講解完,這里知識講解一些基礎(chǔ)知識肋层,幫助大家快速入(zhuang)門(bi)净薛。后面的帖子將對深度自動編碼器肃拜,Hopfield 網(wǎng)絡(luò)長短期記憶網(wǎng)絡(luò)(LSTM)進行講解。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市曼库,隨后出現(xiàn)的幾起案子毁枯,更是在濱河造成了極大的恐慌藐鹤,老刑警劉巖教藻,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍移,死亡現(xiàn)場離奇詭異蹂窖,居然都是意外死亡横媚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來问潭,“玉大人,你說我怎么就攤上這事。” “怎么了淑廊?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我旗闽,道長举瑰,這世上最難降的妖魔是什么汽畴? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任佑吝,我火速辦了婚禮炸客,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘开仰。我一直安慰自己,他們只是感情好脚乡,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辆飘,像睡著了一般良拼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天罪塔,我揣著相機與錄音养葵,去河邊找鬼征堪。 笑死,一個胖子當著我的面吹牛关拒,可吹牛的內(nèi)容都是我干的佃蚜。 我是一名探鬼主播庸娱,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谐算!你這毒婦竟也來了熟尉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤氯夷,失蹤者是張志新(化名)和其女友劉穎臣樱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腮考,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年玄捕,在試婚紗的時候發(fā)現(xiàn)自己被綠了踩蔚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡枚粘,死狀恐怖馅闽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馍迄,我是刑警寧澤福也,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站攀圈,受9級特大地震影響暴凑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赘来,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一现喳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧犬辰,春花似錦嗦篱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涵卵,卻和暖如春浴栽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缘厢。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工吃度, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贴硫。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓椿每,卻偏偏與公主長得像伊者,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子间护,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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