聯(lián)接主義時序分類CTC的細(xì)致推導(dǎo)(二)

參考:Alex Graves,?Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks

模型的訓(xùn)練

數(shù)值穩(wěn)定的前向-后向算法

? ? ? ? 由于前向-后向算法中會出現(xiàn)連續(xù)的概率值乘法(0歼跟,1之間)前联,對長序列來說很容易造成浮點(diǎn)下溢擂找;作者使用了歸一化的前向-后向過程变屁。為了不使得各個變量的意義發(fā)生混淆我們作一些澄清:(原論文中這幾個變量含義模糊毡证,不益理解)

1)\alpha_t(s), t=1,...,T?始終表示通常意義下的前向變量筝尾;

2)\tilde{\alpha}_t(s), t=1,...,T?為歸一化的前向過程中每個時間步中未規(guī)范化的變量;

3)\hat{\alpha}_t(s), t=1,...,T?為歸一化的前向過程中每個時間步中對\tilde{\alpha}_t(s)規(guī)范化后的變量;

即呜呐,我們這樣定義歸一化的前向過程中的變量:

C_t = \sum_s \tilde{\alpha}_t(s)\quad ,\quad \hat{\alpha}_t(s) = \frac{\tilde \alpha_t(s)}{C_t} \quad ,\quad t \in [1,...,T], \ 1 \le s \le 2N+1

但是注意,當(dāng)t=1時悍募,有\tilde \alpha_1(s) = \alpha_1(s), 1\le s\le 2N+1成立蘑辑。

類似地,定義歸一化的后向過程變量:

D_t = \sum_s \tilde \beta_t(s)\quad ,\quad \hat{\beta}_t(s) = \frac{\tilde \beta_t(s)}{D_t}\quad ,\quad t \in [T,...,1], \ 1 \le s \le 2N+1

則給定輸入序列X的條件下坠宴,目標(biāo)字符串的對數(shù)概率可以簡單地用C_t表示為:

\log(p(\boldsymbol l|X)) = \sum_{t=1}^{T}\log(C_t) \quad \cdots (1)

這看起來不太明顯洋魂,我們一步步從最簡單的case捋一下:

\begin{aligned}&\hat{\alpha}_1(s) =\frac{ \tilde\alpha_1(s)}{C_1}=\frac{1}{C_1}  \alpha_1(s)\end{aligned}

\begin{aligned}&\hat{\alpha}_2(s) = \frac{ \tilde\alpha_2(s)}{C_2}=\frac{1}{C_2}  \{\sum_{k}\hat{\alpha}_1(k) y^2_{\boldsymbol l^{\prime}_{k}} \}=\frac{1}{C_2C_1}  \{\sum_{k}\alpha_1(k) y^2_{\boldsymbol l^{\prime}_{k}} \}=\frac{1}{C_2C_1}  \alpha_2(s)\end{aligned}

\begin{aligned}\hat{\alpha}_3(s) &= \frac{ \tilde\alpha_3(s)}{C_3}=\frac{1}{C_3}  \{\sum_{k}\hat{\alpha}_2(k) y^3_{\boldsymbol l^{\prime}_{k}} \}=\frac{1}{C_3}  \{\sum_{k} \frac{1}{C_2C_1}  \alpha_2(k) y^3_{\boldsymbol l^{\prime}_{k}}  \}=\frac{1}{C_3C_2C_1}  \alpha_3(s) \\&\ \ \vdots\end{aligned}

到此為止,這足以讓你相信我們有下面等式成立:

\begin{aligned}&\hat{\alpha}_t(s)=\frac{1}{\prod_{\tau=1}^{t}C_{\tau}}  \alpha_t(s)\end{aligned} \quad \cdots (2)

同理易證:

\begin{aligned}&\hat{\beta}_t(s)=\frac{1}{\prod_{\tau=t}^{T}D_{\tau}}  \beta_t(s)\end{aligned} \quad \cdots (3)

更嚴(yán)格點(diǎn)啄踊,可以用數(shù)學(xué)歸納法來完成證明忧设,不過這里我不打算這么啰嗦了。對上式兩邊求和颠通,并利用\hat{\alpha}_t(s)的歸一化性質(zhì)有:

\begin{aligned}&\sum_{s} \frac{1}{\prod_{\tau=1}^{T}C_{\tau}}  \alpha_T(s) =\sum_{s} \hat{\alpha}_T(s)= 1\end{aligned}

這等價于:

\begin{aligned}\sum_s \alpha_T(s) = \prod_{\tau=1}^{T}C_{\tau}\end{aligned}

進(jìn)而得到目標(biāo)等式:

\begin{aligned}\log(p(\boldsymbol l|X)) &= \log(\sum_s \alpha_T(s))\\&=\log( \prod_{\tau=1}^{T}C_{\tau})\\&=\sum_{t=1}^{T}\log(C_t)\\\end{aligned}


最大似然訓(xùn)練

由于每條數(shù)據(jù)(X, \boldsymbol l)之間是獨(dú)立的址晕,因此我們可以單獨(dú)對其求導(dǎo),若使用負(fù)對數(shù)似然下降法顿锰,則我們需要求:

-\frac{\partial \log(p(\boldsymbol l | X))}{\partial y^t_k} = -\frac{1}{p(\boldsymbol l | X)}\frac{\partial p(\boldsymbol l | X)}{\partial y^t_k} \quad \cdots (4)

由于p(\boldsymbol l | X)= \alpha_{T}(\boldsymbol l^{\prime}_N) +  \alpha_{T}(\boldsymbol l^{\prime}_{N-1})谨垃,我們已經(jīng)可以高效地計(jì)算出來了。下面來看右半邊硼控,由于:

\begin{aligned}\alpha_t(s)\beta_t(s) &=( \sum_{\begin{aligned}  &\mathcal B(\pi_{1:t})=\boldsymbol l_{1:r} \\ & \pi_t = \boldsymbol l^{\prime}_s \end{aligned}} \prod_{\tau=1}^{t} y^{\tau}_{\pi_{\tau}} )( \sum_{\begin{aligned} &\mathcal B(\pi_{t:T})=\boldsymbol l_{r:N} \\ & \pi_t=\boldsymbol l^{\prime}_s \end{aligned}} \prod_{\tau=t}^{T} y^{\tau}_{\pi_{\tau}}) \\&=\sum_{\begin{aligned} &\mathcal B(\pi_{1:T})=\boldsymbol l_{1:N} \\ & \quad \pi_t = \boldsymbol l^{\prime}_s \end{aligned}} y^t_{\pi_t} \prod_{\tau=1}^{T} y^{\tau}_{\pi_{\tau}}\\&= y^t_{\pi_t}  \sum_{\begin{aligned} &\mathcal B(\pi_{1:T})=\boldsymbol l_{1:N} \\ & \quad \pi_t = \boldsymbol l^{\prime}_s \end{aligned}}\prod_{\tau=1}^{T} y^{\tau}_{\pi_{\tau}}\\&= y^t_{\pi_t} p(\boldsymbol l, \pi_t=\boldsymbol l^{\prime}_s| X)\end{aligned}

注:其中的下標(biāo)r是未經(jīng)過\epsilon擴(kuò)展的長度為N的目標(biāo)字符序列中某個對應(yīng)的下標(biāo)刘陶。

我們來對上面的推導(dǎo)做一些說明:

1)由于展開式中的每一項(xiàng)都是由滿足\mathcal B(\pi_{1:t})=\boldsymbol l_{1:s} \ ,\ \mathcal B(\pi_{t:T})=\boldsymbol l_{s:N} 的兩項(xiàng)乘起來的,因此都是一條在時刻t經(jīng)過字符\boldsymbol l_s的完整路徑牢撼,且其概率為完整路徑的概率乘上一個多出來的項(xiàng)y^t_{\pi_t}匙隔;

2)由于任何一條滿足\mathcal B(\pi_{1:T}) = \boldsymbol l_{1:N}且在時刻t經(jīng)過字符\boldsymbol l_s的路徑都可以被分成\pi_{1:t}\ ,\  \pi_{t:T}兩部分,一部分在\mathcal B^{-1}(\boldsymbol l_{1:s})之中熏版,另一部分在\mathcal B^{-1}(\boldsymbol l_{s:N})之中纷责;所以上面的第一步展開式成立;

3)由于y^t_{\pi_t}是所有路徑的公因子撼短,因而在上面的第三步可以提到求和號外面再膳;

于是接著對上面公式變形:

\frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} =   p(\boldsymbol l, \pi_t=\boldsymbol l^{\prime}_s| X)

兩邊對下標(biāo)s求和得:

p(\boldsymbol l| X) = \sum_{s=1}^{2N+1} p(\boldsymbol l, \pi_t=\boldsymbol l^{\prime}_s| X) = \sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}}

????????為了對網(wǎng)絡(luò)輸出y^t_k求導(dǎo),進(jìn)而通過經(jīng)典的反向傳播優(yōu)化網(wǎng)絡(luò)參數(shù)曲横,我們需要考慮在t時刻喂柒,經(jīng)過字符\boldsymbol l_k所有的路徑(注意,我們把空白符放到了網(wǎng)絡(luò)輸出層的最后一個輸出單元,因而y^t_{1:N}就分別對應(yīng)著目標(biāo)字符序列\boldsymbol l_{1:N}t時刻的概率)灾杰。如下圖(為了簡潔蚊丐,省去了空白符):

圖3,對y^t_{之}的梯度有貢獻(xiàn)的路徑

????????因此吭露,我們記lab(\boldsymbol l, k) = \{s: \boldsymbol l^{\prime}_s = k\}為標(biāo)注字符序列中那些等于網(wǎng)絡(luò)第k個輸出節(jié)點(diǎn)所代表的字符(如:上圖五角星對應(yīng)的縱坐標(biāo))吠撮;顯然不是每句話都包括所有的字,所以對某句話來說讲竿,集合lab(\boldsymbol l, k)僅僅對那些包含在這句話中的字符k才不為空。

????????我們來分析:\sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} 弄屡,由\alpha_t(s)\beta_t(s)的定義可知题禀,由于\alpha_t(s)\beta_t(s)的展開式中每條路徑在任一時刻只能處于L^{\prime}中的一種狀態(tài);但是膀捷,它們在t時刻的狀態(tài)已經(jīng)全部被鉗住為\boldsymbol l^{\prime}_s了迈嘹,所以當(dāng)s \notin lab(\boldsymbol l,k)時,\frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} 關(guān)于y^t_{k}為常數(shù)全庸,可以在求導(dǎo)中忽略秀仲。又在 \sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} 中,y^t_{\pi_t} = y^t_{\boldsymbol l^{\prime}_s} = y^t_{k}壶笼,所以下面我們直接使用y^t_k代替它們神僵。

? ? ? ? 令:\alpha_t(s)\beta_t(s) = \gamma_t(s) (y^t_k)^2,即我們將\alpha_t(s)\beta_t(s)中不包括y^t_k的部分單獨(dú)提出來記作\gamma_t(s)覆劈,因而有:

\begin{aligned}\frac{\partial \{ \alpha_t(s)\beta_t(s) / y^t_{\pi_t}\} } {  \partial y^t_k } &= \frac{ \partial \{\gamma_t(s) y^t_{\pi_t}\} } {  \partial y^t_k } \\&=\gamma_t(s)\\&= \frac{\alpha_t(s)\beta_t(s)}{(y^t_s)^2}\end{aligned}

進(jìn)而有:

\begin{aligned}\frac{\partial \ p(\boldsymbol l | X)}{\partial y^t_k}=  \sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{k})^2} \\\end{aligned}

最后多寫一步:

\frac{\partial \log(p(\boldsymbol l | X))}{\partial y^t_k} = \frac{1}{p(\boldsymbol l | X)}\frac{\partial p(\boldsymbol l | X)}{\partial y^t_k}=\frac{1}{\alpha_T(2N+1) + \alpha_T(2N)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{k})^2} \quad \cdots(5)


????????在經(jīng)典的深度學(xué)習(xí)中保礼,我們都知道corssentropy損失是softmax分類層的最佳伴侶:corssentropy對softmax層的輸入的梯度具有異常簡潔的形式。但是在這里會怎么樣呢责语?我們嘗試直接求CTC損失函數(shù)關(guān)于softmax輸入數(shù)據(jù)u^t_k的梯度炮障。

? ? ? ? 由基本函數(shù)的求導(dǎo)中得到的softmax關(guān)于其輸入的導(dǎo)數(shù)可知我們需要分兩種情況討論:

設(shè):y^t_1,...y^t_{|L^{\prime}|} = \text{softmax}(u^t_1,...,u^t_{|L^{\prime}|}),則:

\frac{\partial y^t_j}{ \partial u^t_k }= \begin{cases} -y^t_jy^t_k , &\text{if} \ j\neq k; \\y^t_k(1-y^t_k), &\text{if}\  j = k;\end{cases}

根據(jù)求導(dǎo)的鏈?zhǔn)椒▌t坤候,結(jié)合上面(5)式胁赢,有:

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &= \sum_{j=1}^{|L^{\prime}|} \frac{\partial \log(p(\boldsymbol l|X))}{y^t_j}\frac{\partial y^t_j}{\partial u^t_k}\\&=\sum_{j=1}^{|L^{\prime}|} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{j})^2} \}\frac{\partial y^t_j}{\partial u^t_k} \\\end{aligned}

在上面求和號中,當(dāng)j\neq k時:

\sum_{j\ne k} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{j})^2} \}(-y^t_jy^t_k) =-\sum_{j\ne k} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{j}} \}y^t_k

當(dāng)j = k時:

\{\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{k})^2} \} y^t_k(1-y^t_k)=\{\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}} \} (1-y^t_k)

綜合以上得:

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &= -\sum_{j\ne k} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{j}} \}y^t_k +\{\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}} \} (1-y^t_k) \\&=\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}}  -\sum_{j=1}^{|L^{\prime}|} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{j}} \}y^t_k\end{aligned}

注意雙重求和具有等價性(仔細(xì)看lab(\boldsymbol l, j)的定義):\sum_{j=1}^{|L^{\prime}|} \sum_{s \in lab(\boldsymbol l, j)} = \sum_{s=1}^{2N+1}白筹,事實(shí)上智末,比如“普通話識別”任務(wù)中,對大多數(shù)j來說lab(\boldsymbol l, j) = \emptyset遍蟋。

再考慮到p(\boldsymbol l| X) = \sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\boldsymbol l^{\prime}_s}} 吹害,因此上式可化為:(注意下標(biāo)變化)

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &=\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}}  - \frac{1}{p(\boldsymbol l|X)}\sum_{s =1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\boldsymbol l^{\prime}_s}} y^t_k\\ &=\frac{1}{p(\boldsymbol l|X)y^t_{k}} \{\sum_{s \in lab(\boldsymbol l, k)} \alpha_t(s)\beta_t(s) \} -y^t_k  \quad \cdots (6)\end{aligned}


實(shí)際中會使用歸一化的前向-后向算法:

將(2)(3)式代入p(\boldsymbol l| X) =\sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} ,并記Z_t(s) = \sum_{s=1}^{2N+1} \frac{\hat\alpha_t(s)\hat\beta_t(s)}{y^t_{\boldsymbol l^{\prime}_s}} 得:

\begin{aligned}p(\boldsymbol l| X) &=\sum_{s=1}^{2N+1} \frac{\hat\alpha_t(s)\hat\beta_t(s)\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau}}{y^t_{\pi_t}} \\&=\{\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau}\}\sum_{s=1}^{2N+1} \frac{\hat\alpha_t(s)\hat\beta_t(s)}{y^t_{\pi_t}} \\&=Z_t\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau} \quad \cdots (7)\end{aligned}

將(2)(3)(7)式代入(6)式虚青,由于\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau}這一項(xiàng)在分子和分母同時出現(xiàn)它呀,并且與求和下標(biāo)無關(guān),因而可以同時提出到求和號外面,并消去得:

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &= -y^t_k + \frac{1}{p(\boldsymbol l|X)y^t_{k}} \{\sum_{s \in lab(\boldsymbol l, k)} \hat\alpha_t(s)\hat\beta_t(s)\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau} \} \\&=-y^t_k + \frac{1}{Z_t y^t_k} \{\sum_{s \in lab(\boldsymbol l, k)} \hat\alpha_t(s)\hat\beta_t(s)\}\end{aligned}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載纵穿,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者下隧。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谓媒,隨后出現(xiàn)的幾起案子淆院,更是在濱河造成了極大的恐慌,老刑警劉巖句惯,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件土辩,死亡現(xiàn)場離奇詭異,居然都是意外死亡抢野,警方通過查閱死者的電腦和手機(jī)拷淘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來指孤,“玉大人启涯,你說我怎么就攤上這事∈研” “怎么了结洼?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叉跛。 經(jīng)常有香客問我松忍,道長,這世上最難降的妖魔是什么昧互? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任挽铁,我火速辦了婚禮,結(jié)果婚禮上敞掘,老公的妹妹穿的比我還像新娘叽掘。我一直安慰自己,他們只是感情好玖雁,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布更扁。 她就那樣靜靜地躺著,像睡著了一般赫冬。 火紅的嫁衣襯著肌膚如雪浓镜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天劲厌,我揣著相機(jī)與錄音膛薛,去河邊找鬼。 笑死补鼻,一個胖子當(dāng)著我的面吹牛哄啄,可吹牛的內(nèi)容都是我干的雅任。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼咨跌,長吁一口氣:“原來是場噩夢啊……” “哼沪么!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锌半,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤禽车,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刊殉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殉摔,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年冗澈,在試婚紗的時候發(fā)現(xiàn)自己被綠了钦勘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡亚亲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腐缤,到底是詐尸還是另有隱情捌归,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布岭粤,位于F島的核電站惜索,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏剃浇。R本人自食惡果不足惜巾兆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虎囚。 院中可真熱鬧角塑,春花似錦、人聲如沸淘讥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒲列。三九已至窒朋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝗岖,已是汗流浹背侥猩。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抵赢,地道東北人欺劳。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓唧取,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杰标。 傳聞我的和親對象是個殘疾皇子兵怯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

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