《李宏毅 - 深度學(xué)習(xí)》筆記

學(xué)習(xí)資源


視頻:李宏毅深度學(xué)習(xí)完整版

別人的中文筆記:
李宏毅機(jī)器學(xué)習(xí)筆記(LeeML-Notes)
李宏毅機(jī)器學(xué)習(xí)筆記(LeeML-Notes) - github地址
不這這個(gè)筆記跟我看的上面的視頻不是同一個(gè)寇僧,可能目錄排版有區(qū)別:
視頻:李宏毅《機(jī)器學(xué)習(xí)》

我是比較推薦看上面這份別人的筆記的摊腋,說(shuō)是筆記其實(shí)更像是視頻的文字版,視頻的錄音質(zhì)量很差婉宰,聲音忽大忽小歌豺,而且比較尖銳有點(diǎn)傷聽力推穷,所以我推薦直接看文字版更快更直接心包,有看不懂的再去找對(duì)應(yīng)視頻結(jié)合來(lái)看。

筆記


P1P1ML Lecture 1_ Regression - Case Study

第一節(jié)課非常重要馒铃。
Linear model 線性模型:y=b+\sum w_ix_i
w_i: weight蟹腾,權(quán)重
b: bias,偏置
w: an attribute of input x (feature特征)区宇,輸入的各種不同的屬性即特征娃殖。

Loss Function L:
Input: a function, output: how bad it is.
L(f)=L(w,b)\\=\sum_{n=1}^{10}(\hat{y}^n-(b+w\cdot x_{cp}^{n}))^2

\hat{y}表示正確的結(jié)果的值,
x_{cp}^{n}表示第n只寶可夢(mèng)的cp值议谷。
(b+w\cdot x_{cp}^{n})是我們預(yù)測(cè)出的值炉爆。
所以整個(gè)式子的意思就是把每一組的正確結(jié)果值與預(yù)測(cè)值的差算出平方,然后再把所有的正確與預(yù)測(cè)差的這個(gè)平方值加在一起。

然后我們要找到一個(gè)最好的Function:
f^*=arg\ \underset{f}{min}L(f)
arg\ min的意思是使后面這個(gè)式子達(dá)到最小值時(shí)的變量的取值芬首。
所以上式的意思就是找到一個(gè)function使Loss function最小赴捞。
fw,b決定,所以:
w^*,b^*=arg\ \underset{w,b}{min}L(w,b)
=arg\ \underset{w,b}{min}\sum_{n=1}^{10}(\hat{y}^n-(b+w\cdot x_{cp}^{n}))^2

使用Gradient Descent梯度下降來(lái)解上式方程:

\eta讀作eta郁稍。表示learning rate赦政,即學(xué)習(xí)率。

L(w,b)=\sum_{n=1}^{10}(\hat{y}^n-(b+w\cdot x_{cp}^{n}))^2
對(duì)上式使用微分的連鎖律公式:

連鎖律公式:
f^\prime(x)=ru^{r-1}*u^\prime

得到:
\frac{\partial L}{\partial w}=\sum_{n=1}^{10}2(\hat{y}^n-(b+w\cdot x_{cp}^{n}))(-x_{cp}^{n})
\frac{\partial L}{\partial b}=\sum_{n=1}^{10}2(\hat{y}^n-(b+w\cdot x_{cp}^{n}))(-1)

解析后面一項(xiàng):
對(duì)w微分時(shí):
(\hat{y}^n-(b+w\cdot x_{cp}^{n}))^\prime=0-0-w^\prime \cdot x_{cp}^{n} = -x_{cp}^{n}

對(duì)b微分時(shí)
(\hat{y}^n-(b+w\cdot x_{cp}^{n}))^\prime=0-b^\prime-0 = -1

\partial讀作partial耀怜,意思是偏導(dǎo)的意思恢着。

Overfitting: 過擬合。
Regularization: 正則:
做Regularization是為了得到更平滑的Function财破。
y=b+\sum w_ix_i
L=\sum_{n=1}^{10}(\hat{y}^n-(b+w_ix_i))^2+\lambda \sum(w_i)^2
\lambda讀作:lambda掰派。是個(gè)常數(shù)璧疗。

P2 P2ML Lecture 3-1_ Gradient Descent

Gradient Descent
\theta ^*=arg\ \underset{\theta}{min}L(\theta)
其中:L: loss\ function揪垄,\theta: \ parameters, 一組參數(shù)域醇。
做梯度下降的過程:

圖1

用原參數(shù)減去偏微分跟學(xué)習(xí)率的積得到新的參數(shù)图张,然后一直迭代牲平。
要小心調(diào)節(jié)學(xué)習(xí)率登舞,做梯度下降時(shí)可視化loss結(jié)果來(lái)輔助調(diào)節(jié)學(xué)習(xí)率且蓬。
通常學(xué)習(xí)率是隨著參數(shù)的更新越來(lái)越小会傲。
優(yōu)化方法AdaGrad:
每個(gè)參數(shù)都有不同的learning rate磅废,
讀作sigma纳像。是過去所有的微分值的root mean square即均方根誤差。
圖2

圖3

圖4

Stochastic Gradient Descent:
Stochastic: 隨機(jī)的意思拯勉。
正常的梯度下降是先求總的loss竟趾,再進(jìn)行梯度下降。
隨機(jī)梯度下降是每次隨機(jī)取一個(gè)example x^n計(jì)算loss后就進(jìn)行梯度下降宫峦。

圖5

Feature Scaling:
特征縮放岔帽。
dimension:維度。

**Taylor Series: **
泰勒級(jí)數(shù)导绷。

P3 P3ML Lecture 3-2_ Gradient Descent (Demo by AOE)

沒啥可看犀勒。以《帝國(guó)時(shí)代》地圖舉例,我們永遠(yuǎn)不知道找到的local minimize是不是最小的local minimize妥曲。


P4 P4ML Lecture 3-3_ Gradient Descent (Demo by Minecraft)

沒啥可看贾费。以《我的世界》舉例,梯度下降法在某個(gè)時(shí)間的loss不降反升檐盟。


P5 P5ML Lecture 1_ Regression - Demo

python例子做梯度下降褂萧。
這個(gè)例子對(duì)于理解上面的P1,P2課程內(nèi)容非常有幫助,需要仔細(xì)研究葵萎。
例子我增加了一些注釋导犹。
1. 未特制化learning rate的源碼:

import numpy as np
import matplotlib.pyplot as plt  # plt
 
# wbt解析:
# 調(diào)節(jié)縮小lr唱凯,一開始還是有用的,但是到后來(lái)會(huì)overfitting谎痢,所以請(qǐng)參看使用特制lr順利收斂的lhy1.2.py波丰。
# 特制lr的修改:
# 對(duì) b 和 w 給予特制化的Learning Rate:
# 學(xué)習(xí)率 lr 改為 1,lr_b = 0; lr_w = 0 ;
# 對(duì)b舶得、w定制化的學(xué)習(xí)率lr,采用Adagard
# b = b - lr / np.sqrt(lr_b) * b_grad  ;  w = w - lr / np.sqrt(lr_w) * w_grad


x_data = [338, 333, 328, 207, 226, 25, 179, 60, 208, 606]
y_data = [640, 633,619, 393, 428, 27, 193, 66, 226, 1591]
# ydata = b + w*xdata # 公式

# np.arange函數(shù)用于創(chuàng)建等差數(shù)組掰烟,參數(shù): 
# start:可忽略不寫,默認(rèn)從0開始;起始值
# stop:結(jié)束值沐批;生成的元素不包括結(jié)束值
# step:可忽略不寫纫骑,默認(rèn)步長(zhǎng)為1;步長(zhǎng)
# dtype:默認(rèn)為None九孩,設(shè)置顯示元素的數(shù)據(jù)類型

x = np.arange(-200, -100, 1) # bias
y = np.arange(-5, 5, 0.1) # weight
Z = np.zeros((len(x), len(y))) # 生成len(x)行l(wèi)en(y)列的零矩陣
# X,Y = np.meshgrid(x, y) # 生成網(wǎng)格點(diǎn)坐標(biāo)矩陣, 代碼其實(shí)沒用到先馆。

# Z用來(lái)畫等高線的
for i in range(len(x)):
    for j in range(len(y)):
        b = x[i]
        w = y[j]
        Z[j][i] = 0
        for n in range(len(x_data)):
            Z[j][i] = Z[j][i] + (y_data[n] - b - w*x_data[n])**2 
        Z[j][i] = Z[j][i]/len(x_data)
 
# ydata = b + w*xdata
b = -120 # intial b
w = -4 # intial w
lr = 0.0000001 # learning rate
iteration = 100000
 
# store initial values for plotting
b_history = [b]
w_history = [w]
 
# iterations
for i in range(iteration): #進(jìn)行10萬(wàn)次迭代
 
    b_grad = 0.0
    w_grad = 0.0
    # 計(jì)算所有l(wèi)oss,并且把所有l(wèi)oss相加
    for n in range(len(x_data)):
        # 2.0*(y_data[n] - b - w*x_data[n])*1.0 套用使用微分連鎖律公式后的結(jié)果計(jì)算loss
        # b_grad -躺彬, 使用減號(hào)是因?yàn)楹竺嬖臼?1.0煤墙,把負(fù)號(hào)提取出來(lái)到前面了
        b_grad = b_grad - 2.0*(y_data[n] - b - w*x_data[n])*1.0 
        # 2.0*(y_data[n] - b - w*x_data[n])*x_data[n] 套用使用微分連鎖律公式后的結(jié)果計(jì)算loss
        # b_grad -, 使用減號(hào)是因?yàn)楹竺嬖臼?x_data[n]宪拥,把負(fù)號(hào)提取出來(lái)到前面了
        w_grad = w_grad - 2.0*(y_data[n] - b - w*x_data[n])*x_data[n]
 
    # 更新參數(shù): P2 P2ML Lecture 3-1_ Gradient Descent筆記的圖1的公式
    # update parameters
    b = b - lr*b_grad
    w = w - lr*w_grad
 
    # store parameters for plotting
    b_history.append(b)
    w_history.append(w)
 
# plot the figure
#plt.contourf: 填充等高線
plt.contourf(x, y, Z, 50, alpha=0.5, cmap=plt.get_cmap('jet'))

# 李宏毅課程原代碼為markeredeweight=3,無(wú)法運(yùn)行仿野,改為了marker=3。
# ms和marker分別代表指定點(diǎn)的長(zhǎng)度和寬度她君。
plt.plot([-188.4], [2.67], 'x', ms=6, marker=6, color='orange') # 目標(biāo)點(diǎn)

plt.plot(b_history, w_history, 'o-', ms=3, lw=1.5, color='black')# 梯度下降的路線圖
plt.xlim(-200, -100)
plt.ylim(-5, 5)
plt.xlabel(r'$b$', fontsize=16)
plt.ylabel(r'$w$', fontsize=16)
plt.show()

2. 特制化learning rate后順利收斂的源碼:

import numpy as np
import matplotlib.pyplot as plt  # plt
 
# wbt解析:
# 特制lr的修改:
# 對(duì) b 和 w 給予特制化的Learning Rate:
# 學(xué)習(xí)率 lr 改為 1脚作,lr_b = 0; lr_w = 0 ;
# 對(duì)b、w定制化的學(xué)習(xí)率lr,采用Adagard
# b = b - lr / np.sqrt(lr_b) * b_grad  ;  w = w - lr / np.sqrt(lr_w) * w_grad


x_data = [338, 333, 328, 207, 226, 25, 179, 60, 208, 606]
y_data = [640, 633,619, 393, 428, 27, 193, 66, 226, 1591]
# ydata = b + w*xdata # 公式

# np.arange函數(shù)用于創(chuàng)建等差數(shù)組缔刹,參數(shù): 
# start:可忽略不寫球涛,默認(rèn)從0開始;起始值
# stop:結(jié)束值;生成的元素不包括結(jié)束值
# step:可忽略不寫校镐,默認(rèn)步長(zhǎng)為1亿扁;步長(zhǎng)
# dtype:默認(rèn)為None,設(shè)置顯示元素的數(shù)據(jù)類型

x = np.arange(-200, -100, 1) # bias
y = np.arange(-5, 5, 0.1) # weight
Z = np.zeros((len(x), len(y))) # 生成len(x)行l(wèi)en(y)列的零矩陣
# X,Y = np.meshgrid(x, y) # 生成網(wǎng)格點(diǎn)坐標(biāo)矩陣, 代碼其實(shí)沒用到鸟廓。

# Z用來(lái)畫等高線的
for i in range(len(x)):
    for j in range(len(y)):
        b = x[i]
        w = y[j]
        Z[j][i] = 0
        for n in range(len(x_data)):
            Z[j][i] = Z[j][i] + (y_data[n] - b - w*x_data[n])**2 
        Z[j][i] = Z[j][i]/len(x_data)
 
# ydata = b + w*xdata
b = -120 # intial b
w = -4 # intial w
lr = 1 # 0.0000001 # learning rate
iteration = 100000
 
# store initial values for plotting
b_history = [b]
w_history = [w]

# 對(duì)b从祝、w定制化的學(xué)習(xí)率lr
lr_b = 0
lr_w = 0

# iterations
for i in range(iteration): #進(jìn)行10萬(wàn)次迭代
 
    b_grad = 0.0
    w_grad = 0.0
    # 計(jì)算所有l(wèi)oss,并且把所有l(wèi)oss相加
    for n in range(len(x_data)):
        # 2.0*(y_data[n] - b - w*x_data[n])*1.0 套用使用微分連鎖律公式后的結(jié)果計(jì)算loss
        # b_grad -肝箱, 使用減號(hào)是因?yàn)楹竺嬖臼?1.0哄褒,把負(fù)號(hào)提取出來(lái)到前面了
        b_grad = b_grad - 2.0*(y_data[n] - b - w*x_data[n])*1.0 
        # 2.0*(y_data[n] - b - w*x_data[n])*x_data[n] 套用使用微分連鎖律公式后的結(jié)果計(jì)算loss
        # b_grad -稀蟋, 使用減號(hào)是因?yàn)楹竺嬖臼?x_data[n]煌张,把負(fù)號(hào)提取出來(lái)到前面了
        w_grad = w_grad - 2.0*(y_data[n] - b - w*x_data[n])*x_data[n]
 
    # 更新參數(shù): P2 P2ML Lecture 3-1_ Gradient Descent筆記的圖1的公式
    # update parameters
    # b = b - lr*b_grad
    # w = w - lr*w_grad

    #Adagard公式參看:P2 P2ML Lecture 3-1_ Gradient Descent筆記的圖5
    # 對(duì)b、w定制化的學(xué)習(xí)率lr,采用Adagard
    lr_b = lr_b + b_grad ** 2
    lr_w = lr_w + w_grad ** 2
 
    # update parameters
    # 對(duì)b退客、w定制化的學(xué)習(xí)率lr,采用Adagard
    b = b - lr / np.sqrt(lr_b) * b_grad
    w = w - lr / np.sqrt(lr_w) * w_grad
 
    # store parameters for plotting
    b_history.append(b)
    w_history.append(w)
 
# plot the figure
#plt.contourf: 填充等高線
plt.contourf(x, y, Z, 50, alpha=0.5, cmap=plt.get_cmap('jet'))

# 李宏毅課程原代碼為markeredeweight=3,無(wú)法運(yùn)行骏融,改為了marker=3链嘀。
# ms和marker分別代表指定點(diǎn)的長(zhǎng)度和寬度。
plt.plot([-188.4], [2.67], 'x', ms=6, marker=6, color='orange') # 目標(biāo)點(diǎn)

plt.plot(b_history, w_history, 'o-', ms=3, lw=1.5, color='black')# 梯度下降的路線圖
plt.xlim(-200, -100)
plt.ylim(-5, 5)
plt.xlabel(r'$b$', fontsize=16)
plt.ylabel(r'$w$', fontsize=16)
plt.show()

看代碼進(jìn)一步了解到:
迭代的目的:
10萬(wàn)次迭代是為了不斷執(zhí)行梯度下降使bias, weight, learning rate不斷更新趨近目標(biāo)档玻。

P6 P6ML Lecture 0-2_ Why we need to learn machine learning_

沒啥可看怀泊,可以跳過。

P7 P7The Next Step for Machine Learning

可以不看也可以看看玩误趴。

P8 P8ML Lecture 2_ Where does the error come from_

這節(jié)課跟概率相關(guān)霹琼。
可以跟這篇一起看:理解Bias(偏差),Error(誤差)凉当,和Variance(方差)的區(qū)別和聯(lián)系枣申?

Bias(偏差)反映的是模型在樣本上的輸出與真實(shí)值之間的誤差,即模型本身的精準(zhǔn)度看杭。
Variance(方差)反映的是模型每一次輸出結(jié)果與模型輸出期望之間的誤差忠藤,即模型的穩(wěn)定性。在概率論和統(tǒng)計(jì)學(xué)中方差是衡量隨機(jī)變量或一組數(shù)據(jù)時(shí)離散程度的度量楼雹。
一模孩、Bias和模型復(fù)雜度的關(guān)系:當(dāng)模型復(fù)雜度上升時(shí),Bias減小贮缅。當(dāng)模型復(fù)雜度降低時(shí)榨咐,Bias增加。(反比關(guān)系)
二谴供、Variance和模型復(fù)雜度的關(guān)系:當(dāng)模型復(fù)雜度低時(shí)祭芦,Variance更低,當(dāng)模型復(fù)雜度高時(shí)憔鬼,Variance更高龟劲。(正比關(guān)系)
實(shí)際情景中我們?cè)趺磁袛嘧约旱哪P褪荁ias大還是Variance大呢,這個(gè)就要看到底是你的模型無(wú)法盡量大的擬合你的樣本還是你的模型高度擬合你的樣本但是用測(cè)試數(shù)據(jù)算時(shí)誤差又很大轴或。前者就是應(yīng)該bias大導(dǎo)致的昌跌,也就是模型復(fù)雜度太低導(dǎo)致的。后者就是因?yàn)槟P蛷?fù)雜度高導(dǎo)致Variance高導(dǎo)致的照雁。

偏差Bias蚕愤,方差Variance:
Large Bias,Small Variance集中但偏離目標(biāo)饺蚊。欠擬合萍诱。
解決辦法:
1. 重寫model添加更多的參數(shù).
2. 更復(fù)雜的model。

Small Bias污呼,Large Variance離目標(biāo)近雖然不能都命中紅心但是平均后接近紅心裕坊。過擬合。
解決辦法:
1. 更多的數(shù)據(jù)燕酷,但是現(xiàn)實(shí)可能沒有那么多數(shù)據(jù)籍凝,可以根據(jù)對(duì)問題的理解自己模擬數(shù)據(jù)周瞎。
2. Regularization:使曲線更平滑。

Public Testing Set的err一般大于Private Testing Set饵蒂。
Training Set分成多份分組Traning Set和Validation声诸,然后計(jì)算出多個(gè)model的結(jié)果,取平均錯(cuò)誤最小的也就是最好的結(jié)果退盯。

P9 P9ML Lecture 4_ Classification

分類Classification彼乌。
使用高斯分布即正態(tài)分布。

P10 P10ML Lecture 5_ Logistic Regression

P11P11ML Lecture 6_ Brief Introduction of Deep Learning

P12P12ML Lecture 7_ Backpropagation

P13 P13Anomaly Detection (1_7)

P14 P13Anomaly Detection (2_7)

P15 P13Anomaly Detection (3_7)

P16 P13Anomaly Detection (4_7)

P17 P13Anomaly Detection (5_7)

P18 P13Anomaly Detection (6_7)

P19 P13Anomaly Detection (7_7)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渊迁,一起剝皮案震驚了整個(gè)濱河市囤攀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宫纬,老刑警劉巖焚挠,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漓骚,居然都是意外死亡蝌衔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門蝌蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)噩斟,“玉大人,你說(shuō)我怎么就攤上這事孤个√暝剩” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵齐鲤,是天一觀的道長(zhǎng)斥废。 經(jīng)常有香客問我,道長(zhǎng)给郊,這世上最難降的妖魔是什么牡肉? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮淆九,結(jié)果婚禮上统锤,老公的妹妹穿的比我還像新娘。我一直安慰自己炭庙,他們只是感情好饲窿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焕蹄,像睡著了一般逾雄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天嘲驾,我揣著相機(jī)與錄音,去河邊找鬼迹卢。 笑死辽故,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腐碱。 我是一名探鬼主播誊垢,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼症见!你這毒婦竟也來(lái)了喂走?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谋作,失蹤者是張志新(化名)和其女友劉穎芋肠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遵蚜,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帖池,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吭净。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡汹。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖寂殉,靈堂內(nèi)的尸體忽然破棺而出囚巴,到底是詐尸還是另有隱情,我是刑警寧澤友扰,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布彤叉,位于F島的核電站,受9級(jí)特大地震影響村怪,放射性物質(zhì)發(fā)生泄漏姆坚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一实愚、第九天 我趴在偏房一處隱蔽的房頂上張望兼呵。 院中可真熱鬧,春花似錦腊敲、人聲如沸击喂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)懂昂。三九已至,卻和暖如春没宾,著一層夾襖步出監(jiān)牢的瞬間凌彬,已是汗流浹背沸柔。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铲敛,地道東北人褐澎。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伐蒋,于是被迫代替她去往敵國(guó)和親工三。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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