百面機(jī)器學(xué)習(xí)|第九章前向神經(jīng)網(wǎng)絡(luò)知識(shí)點(diǎn)(一)

前言

如果你能找到這里稽莉,真是我的幸運(yùn)~這里是藍(lán)白絳的學(xué)習(xí)筆記邀跃,本集合主要針對(duì)《百面機(jī)器學(xué)習(xí)——算法工程師帶你去面試》這本書(shū)。主要記錄我認(rèn)為重要的知識(shí)點(diǎn)小槐,希望對(duì)大家有幫助拇派。

第九章 前向神經(jīng)網(wǎng)絡(luò)

引導(dǎo)語(yǔ)

從輸入到輸出的過(guò)程中不存在于模型自身的反饋連接的模型,此類模型被稱為“前饋”凿跳。
深度前饋網(wǎng)絡(luò)是一類網(wǎng)絡(luò)模型的統(tǒng)稱件豌,有多層感知機(jī)、自編碼器拄显、限制玻爾茲曼機(jī)苟径,以及卷積神經(jīng)網(wǎng)絡(luò)等。

1躬审、多層感知機(jī)與布爾函數(shù)

  1. 多層感知機(jī)表示異或邏輯時(shí)最少需要幾個(gè)隱藏層(僅考慮二元輸入)棘街?
    一個(gè)隱藏層即可計(jì)算異或函數(shù)
    0個(gè)隱藏層的情況(等同于邏輯回歸)無(wú)法精確學(xué)習(xí)出一個(gè)輸出為異或的模型表示承边。事實(shí)上遭殉,通用近似定理告訴我們,一個(gè)前饋神經(jīng)網(wǎng)絡(luò)如果具有線性輸出層和至少一層具有任何一種“擠壓”性質(zhì)的激活函數(shù)的隱藏層博助,當(dāng)給予網(wǎng)絡(luò)足夠數(shù)量的隱藏單元時(shí)险污,可以以任意精度近似任何從一個(gè)有限維空間到另一個(gè)有限維空間的波萊爾可測(cè)函數(shù)。我們常用的激活函數(shù)和目標(biāo)函數(shù)是通用近似定理使用的一個(gè)子集富岳,因此多層感知機(jī)的表達(dá)能力是非常強(qiáng)的蛔糯,關(guān)鍵是我們能否學(xué)習(xí)到對(duì)應(yīng)此表達(dá)式的模型參數(shù)。
  2. 如果只使用一個(gè)隱藏層窖式,需要多少隱節(jié)點(diǎn)能夠?qū)崿F(xiàn)包含n元輸入的任意布爾函數(shù)蚁飒?
    2^{n-1}個(gè)隱節(jié)點(diǎn)。
  3. 考慮多隱層的情況萝喘,實(shí)現(xiàn)包含n元輸入的任意布爾函數(shù)最少需要多少個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)和網(wǎng)絡(luò)層淮逻?
    n元異或函數(shù)需要包括3(n-1)個(gè)節(jié)點(diǎn)(包括最終輸出節(jié)點(diǎn))琼懊。可以發(fā)現(xiàn)爬早,多隱層結(jié)構(gòu)可以將隱節(jié)點(diǎn)的數(shù)目從指數(shù)級(jí)O(2^{n-1})直接減少至線性級(jí)O(3(n-1))哼丈。
    需要的最少網(wǎng)絡(luò)層數(shù)為2\log_2N(向上取整)。

2筛严、深度神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)

  1. 線性模型是機(jī)器學(xué)習(xí)領(lǐng)域中最基本也是最重要的工具醉旦,以邏輯回歸和線性回歸為例,無(wú)論通過(guò)閉解形式還是使用凸優(yōu)化脑漫,它們都能高效且可靠地?cái)M合數(shù)據(jù)髓抑。但我們往往會(huì)遇到線性不可分問(wèn)題(如XOR異或函數(shù)),需要非線性變換對(duì)數(shù)據(jù)分布進(jìn)行重新映射优幸,對(duì)于深度神經(jīng)網(wǎng)絡(luò),我們?cè)诿恳粚泳€性變換后疊加一個(gè)非線性激活函數(shù)褪猛,以避免多層網(wǎng)絡(luò)等效于單層線性函數(shù)网杆,從而獲得更強(qiáng)大的學(xué)習(xí)與擬合能力。
  2. 常用激活函數(shù)及其導(dǎo)數(shù):
    Sigmoid激活函數(shù)的形式為:f(z)=\frac{1}{1+exp(-z)}, f'(z)=f(z)(1-f(z)).Tanh激活函數(shù)的形式為:f(z)={\rm tanh}(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}, f'(z)=1-(f(z))^2.ReLU激活函數(shù)的形式為:f(z)=\max(0,z), f'(z)=\begin{cases} 1, &z>0; \\ 0, &z\leq0. \end{cases}
  3. Sigmoid和Tanh激活函數(shù)為什么會(huì)導(dǎo)致梯度消失的現(xiàn)象伊滋?
    Sigmoid和Tanh激活函數(shù)曲線如下圖所示:
    9-2 激活函數(shù)

    Sigmoid函數(shù)的導(dǎo)數(shù)f'(z)=f(z)(1-f(z))z很大或很小時(shí)都會(huì)趨近于0碳却,造成梯度消失,同樣Tanh函數(shù)的導(dǎo)數(shù)f'(z)=1-(f(z))^2z很大或很小時(shí)都會(huì)趨近于0笑旺,同樣造成梯度消失昼浦。
    實(shí)際上Tanh激活函數(shù)相當(dāng)于Sigmoid的平移:{\rm tanh}(x)=2{\rm sigmoid}(2x)-1.
  4. ReLU系列激活函數(shù)相對(duì)于Sigmoid和Tanh激活函數(shù)的優(yōu)點(diǎn)是什么?它們有什么局限性以及如何改進(jìn)筒主?
  • 優(yōu)點(diǎn):
    (1) 從計(jì)算的角度上关噪,Sigmoid和Tanh激活函數(shù)都需要計(jì)算指數(shù)函數(shù)復(fù)雜度高乌妙,而ReLU只需要一個(gè)閾值即可得到激活值使兔。
    (2) ReLU的非飽和性可以有效解決梯度消失的問(wèn)題,提供相對(duì)寬的激活邊界藤韵。
    (3) ReLU的單側(cè)抑制提供了網(wǎng)絡(luò)的稀疏表達(dá)能力虐沥。
  • 局限性:
    其訓(xùn)練過(guò)程中會(huì)導(dǎo)致神經(jīng)元死亡。函數(shù)f(z)=\max(0,z)導(dǎo)致負(fù)梯度在經(jīng)過(guò)ReLU單元時(shí)被置為0泽艘,且在之后也不被任何數(shù)據(jù)激活欲险,即流經(jīng)該神經(jīng)元的梯度永遠(yuǎn)為0,不對(duì)任何數(shù)據(jù)產(chǎn)生響應(yīng)匹涮。在實(shí)際訓(xùn)練中天试,如果學(xué)習(xí)率設(shè)置較大,會(huì)導(dǎo)致超過(guò)一定比例的神經(jīng)元不可逆死亡焕盟,進(jìn)而參數(shù)梯度無(wú)法更新秋秤,整個(gè)訓(xùn)練過(guò)程失敗宏粤。
    為了解決這個(gè)問(wèn)題,人們?cè)O(shè)計(jì)了Leaky ReLU(LReLU)灼卢,其形式表達(dá)式為f(z)=\begin{cases} z, &z>0; \\ az, &z\leq0. \end{cases}
    一般a為一個(gè)很小的正常數(shù)绍哎,LReLU既實(shí)現(xiàn)了單側(cè)抑制,又保留了部分負(fù)梯度信息以致信息不完全丟失鞋真。但是另一方面崇堰,a值的選擇增加了問(wèn)題難度,需要較強(qiáng)的人工先驗(yàn)或多次重復(fù)訓(xùn)練以確定合適的參數(shù)值涩咖。
    基于此海诲,參數(shù)化的PReLU(Parametric ReLU)將負(fù)軸部分斜率a作為網(wǎng)絡(luò)中一個(gè)可學(xué)習(xí)的參數(shù),進(jìn)行反向傳播訓(xùn)練檩互,與其他含參數(shù)網(wǎng)絡(luò)層聯(lián)合優(yōu)化特幔。
    RReLU(Random ReLU)增加了“隨機(jī)化”機(jī)制,在訓(xùn)練過(guò)程中闸昨,斜率a作為一個(gè)滿足某種分布的隨機(jī)采樣蚯斯;測(cè)試時(shí)再固定下來(lái),一定程度上能起到正則化的作用饵较。

3拍嵌、多層感知機(jī)的反向傳播算法

  1. 在網(wǎng)絡(luò)訓(xùn)練中,前向傳播最終產(chǎn)生一個(gè)標(biāo)量損失函數(shù)循诉,反向傳播算法則將損失函數(shù)的信息沿網(wǎng)絡(luò)層向后傳播用以計(jì)算梯度横辆,達(dá)到優(yōu)化網(wǎng)絡(luò)參數(shù)的目的。
  2. 多層感知機(jī)的平方誤差和交叉熵?fù)p失函數(shù)的計(jì)算公式就不寫(xiě)了茄猫,還有各層參數(shù)更新的梯度計(jì)算公式推導(dǎo)也不寫(xiě)了狈蚤,網(wǎng)上有非常多資料。
  3. 平方誤差損失函數(shù)和交叉熵?fù)p失函數(shù)分別適用的場(chǎng)景:
    平方損失函數(shù):更適合輸出為連續(xù)募疮,并且最后一層不含Sigmoid或Softmax激活函數(shù)的神經(jīng)網(wǎng)絡(luò)炫惩;
    交叉熵?fù)p失函數(shù):更適合二分類多分類的場(chǎng)景。
  4. 為什么平方損失不適合最后一層含有Sigmoid或Softmax激活函數(shù)的神經(jīng)網(wǎng)絡(luò)阿浓?
    平方誤差損失函數(shù)相對(duì)于輸出層的導(dǎo)數(shù)\sigma^{(L)}=-(y-a^{(L)})f'(z^{(L)}),其中最后一項(xiàng)f'(z^{(L)})為激活函數(shù)的導(dǎo)數(shù)他嚷,當(dāng)激活函數(shù)為Sigmoid函數(shù)時(shí),如果z^{(L)}的絕對(duì)值較大芭毙,函數(shù)的梯度會(huì)趨于飽和筋蓖,即f'(z^{(L)})的絕對(duì)值非常小,導(dǎo)致\sigma^{(L)}取值也非常小退敦,使得基于梯度的學(xué)習(xí)速度非常緩慢粘咖。
    當(dāng)使用交叉熵?fù)p失函數(shù)時(shí),相對(duì)于輸出層的導(dǎo)數(shù)(也可以被認(rèn)為是殘差)為\sigma^{(L)}=a_k^{(L)}-y.此導(dǎo)數(shù)是線性的侈百,因此不會(huì)存在學(xué)習(xí)速度過(guò)慢的問(wèn)題瓮下。

4翰铡、神經(jīng)網(wǎng)絡(luò)訓(xùn)練技巧

  1. 解決過(guò)擬合的方法有:數(shù)據(jù)集增強(qiáng)、參數(shù)范數(shù)懲罰/正則化讽坏、模型集成等锭魔;其中Dropout是模型集成方法中最高效與常用的技巧。
    同時(shí)路呜,深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中涉及諸多手調(diào)參數(shù)迷捧,如學(xué)習(xí)率、權(quán)重衰減系數(shù)胀葱、Dropout比例等漠秋,這些參數(shù)的選擇會(huì)顯著影響模型最終的訓(xùn)練效果。批量歸一化(Batch Normalization抵屿,BN)方法有效規(guī)避了這些復(fù)雜參數(shù)對(duì)網(wǎng)絡(luò)訓(xùn)練產(chǎn)生的影響庆锦,在加速訓(xùn)練收斂的同時(shí)也提升了網(wǎng)絡(luò)的泛化能力
  2. 神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)是否可以將全部參數(shù)初始化為0晌该?
    不能肥荔。
    考慮全連接的深度神經(jīng)網(wǎng)絡(luò),同一層的神經(jīng)元都是同構(gòu)的朝群,擁有相同的輸入和輸出,如果再將參數(shù)全部初始化為相同的值中符,那么無(wú)論前向傳播還是反向傳播的取值都是相同的姜胖。學(xué)習(xí)過(guò)程將永遠(yuǎn)無(wú)法打破這種對(duì)稱性,最終同一個(gè)網(wǎng)絡(luò)層中的各個(gè)參數(shù)仍然是相同的淀散。
    因此需要隨機(jī)地初始化神經(jīng)網(wǎng)絡(luò)參數(shù)的值,以打破對(duì)稱性,簡(jiǎn)單來(lái)說(shuō)腐缤,我們可以初始化參數(shù)為(-\frac{1}{\sqrtxyrdsku},\frac{1}{\sqrt59esedn})的均勻分布搏明,其中d為神經(jīng)元接受的輸入維度,偏置可以被簡(jiǎn)單地設(shè)為0郭膛,并不會(huì)導(dǎo)致參數(shù)對(duì)稱的問(wèn)題晨抡。
  3. Dropout抑制過(guò)擬合的工作原理:Dropout隨機(jī)丟棄部分神經(jīng)元的機(jī)制,相當(dāng)于每次迭代都在訓(xùn)練不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)则剃。類比于Bagging方法耘柱,Dropout可以被認(rèn)為是一種實(shí)用的大規(guī)模深度神經(jīng)網(wǎng)絡(luò)的模型集成算法。這是由于傳統(tǒng)意義上的Bagging涉及多個(gè)模型的同時(shí)訓(xùn)練與測(cè)試評(píng)估棍现,當(dāng)網(wǎng)絡(luò)與參數(shù)規(guī)模龐大時(shí)调煎,這種集成方式需要消耗大量的運(yùn)算時(shí)間與空間。Dropout在小批量級(jí)別上的操作己肮,提供了一種輕量級(jí)的Bagging集成近似士袄,能夠?qū)崿F(xiàn)指數(shù)級(jí)數(shù)量神經(jīng)網(wǎng)絡(luò)的訓(xùn)練與評(píng)測(cè)悲关。
    對(duì)于包含N個(gè)神經(jīng)元節(jié)點(diǎn)的網(wǎng)絡(luò),在Dropout的作用下可以看作2^N個(gè)模型的集成娄柳。這2^N個(gè)模型可認(rèn)為是原始網(wǎng)絡(luò)的子網(wǎng)絡(luò)寓辱,它們共享部分權(quán)重,并且具有相同的網(wǎng)絡(luò)層數(shù)西土,而模型整體的參數(shù)數(shù)目不變讶舰,大大簡(jiǎn)化了運(yùn)算。對(duì)于任意神經(jīng)元需了,每次訓(xùn)練中都與一組隨機(jī)挑選的不同的神經(jīng)元集合共同進(jìn)行優(yōu)化跳昼,這個(gè)過(guò)程為減弱全體神經(jīng)元之間的聯(lián)合適應(yīng)性,減少過(guò)擬合的風(fēng)險(xiǎn)肋乍,增強(qiáng)泛化能力鹅颊。
  4. 批量歸一化的基本動(dòng)機(jī)與原理:神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程的本質(zhì)是學(xué)習(xí)數(shù)據(jù)分布,如果訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的分布不同將會(huì)大大降低網(wǎng)絡(luò)的泛化能力墓造,因此我們需要在訓(xùn)練開(kāi)始前對(duì)所有輸入數(shù)據(jù)進(jìn)行歸一化處理堪伍。然而隨著網(wǎng)絡(luò)訓(xùn)練的進(jìn)行,每個(gè)隱層的參數(shù)變化使得后一層的輸入發(fā)生變化觅闽,從而每一批訓(xùn)練數(shù)據(jù)的分布也隨之變化帝雇,致使網(wǎng)絡(luò)在每次迭代中都需要擬合不同的數(shù)據(jù)分布,增大訓(xùn)練的復(fù)雜度以及過(guò)擬合的風(fēng)險(xiǎn)蛉拙。
    批量歸一化方法是針對(duì)每一批數(shù)據(jù)尸闸,在網(wǎng)絡(luò)每一層輸入之間增加歸一化處理(均值為0,標(biāo)準(zhǔn)差為1)孕锄,將所有批數(shù)據(jù)強(qiáng)制性在同一的數(shù)據(jù)分布下吮廉。可以看作在每一層輸入和上一層輸出之間加入了一個(gè)新的計(jì)算層畸肆,對(duì)數(shù)據(jù)的分布進(jìn)行了額外的約束宦芦,從而增強(qiáng)模型的泛化能力。
    但是批量歸一化同時(shí)也降低了模型的擬合能力轴脐,歸一化之后的輸入分被強(qiáng)制為0均值和1標(biāo)準(zhǔn)差调卑,以Sigmoid激活函數(shù)為例,批量歸一化之后數(shù)據(jù)整體處于函數(shù)的非飽和區(qū)域豁辉,只包含線性變換令野,破壞了之前學(xué)習(xí)到的特征分布,為了恢復(fù)原始數(shù)據(jù)分布徽级,具體實(shí)現(xiàn)中加入了變換重構(gòu)以及可學(xué)習(xí)參數(shù)\gamma\betay^{(k)}=\gamma^{(k)}\hat{x}^{(k)}+\beta^{(k)},其中\gamma^{(k)}\beta^{(k)}分別為輸入數(shù)據(jù)分布的方差和偏差气破。
    對(duì)于一般的網(wǎng)絡(luò),不采用批量歸一化操作時(shí)餐抢,這兩個(gè)參數(shù)高度依賴前面網(wǎng)絡(luò)學(xué)習(xí)到的連接權(quán)重(對(duì)應(yīng)復(fù)雜的非線性)现使。而在批量歸一化操作中低匙,\gamma\beta變成了該層的學(xué)習(xí)參數(shù),僅用兩個(gè)參數(shù)就可以恢復(fù)最優(yōu)的輸入數(shù)據(jù)分布碳锈,與之前網(wǎng)絡(luò)層的參數(shù)解耦顽冶,從而更加有利于優(yōu)化的過(guò)程,提高模型的泛化能力售碳。

小結(jié)

這是本章的第一部分强重,整理了多層感知機(jī)實(shí)現(xiàn)異或函數(shù)、布爾函數(shù)贸人,深度神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)间景,梯度消失,損失函數(shù)艺智,Dropout倘要,批量歸一化等等。后一部分整理深度卷積神經(jīng)網(wǎng)絡(luò)和ResNet十拣。

結(jié)尾

如果您發(fā)現(xiàn)我的文章有任何錯(cuò)誤封拧,或?qū)ξ业奈恼掠惺裁春玫慕ㄗh,請(qǐng)聯(lián)系我夭问!如果您喜歡我的文章泽西,請(qǐng)點(diǎn)喜歡~*我是藍(lán)白絳,感謝你的閱讀缰趋!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尝苇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子埠胖,更是在濱河造成了極大的恐慌,老刑警劉巖淳玩,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件直撤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜕着,警方通過(guò)查閱死者的電腦和手機(jī)谋竖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)承匣,“玉大人蓖乘,你說(shuō)我怎么就攤上這事∪推” “怎么了嘉抒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)袍暴。 經(jīng)常有香客問(wèn)我些侍,道長(zhǎng)隶症,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任岗宣,我火速辦了婚禮蚂会,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耗式。我一直安慰自己胁住,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布刊咳。 她就那樣靜靜地躺著彪见,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芦缰。 梳的紋絲不亂的頭發(fā)上企巢,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音让蕾,去河邊找鬼浪规。 笑死,一個(gè)胖子當(dāng)著我的面吹牛探孝,可吹牛的內(nèi)容都是我干的笋婿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼顿颅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缸濒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起粱腻,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤庇配,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绍些,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體捞慌,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年柬批,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啸澡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氮帐,死狀恐怖嗅虏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情上沐,我是刑警寧澤皮服,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響冰更,放射性物質(zhì)發(fā)生泄漏产徊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一蜀细、第九天 我趴在偏房一處隱蔽的房頂上張望舟铜。 院中可真熱鬧,春花似錦奠衔、人聲如沸谆刨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痊夭。三九已至,卻和暖如春脏里,著一層夾襖步出監(jiān)牢的瞬間她我,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工迫横, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留番舆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓矾踱,卻偏偏與公主長(zhǎng)得像恨狈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呛讲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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