神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)WU Week2

神經(jīng)網(wǎng)絡(luò)基礎(chǔ)

1. 二分分類

  • 例子:識(shí)別圖片中是否有貓搀缠,有輸出1否則輸出0奠伪。

  • 計(jì)算機(jī)儲(chǔ)存圖片通過RGB铝宵,即用三個(gè)矩陣分別儲(chǔ)存red、green和blue的像素值看成,以常見64*64為例君编,從而用一個(gè)64*64*3的矩陣儲(chǔ)存一張圖片。

    計(jì)算機(jī)對(duì)圖片的儲(chǔ)存

    如何用一個(gè)特征向量 x(列向量)來表示這個(gè)像素矩陣川慌?按照視頻中的說明吃嘿,先讀取red矩陣的像素祠乃,逐行讀取,以上圖為例兑燥,讀為[\color {red}{255,231,42,22,123,94,...,194,202}]^T亮瓷,接著讀取green矩陣的像素,仍是逐行讀取贪嫂,從而矩陣為 [\color {red} {255,231,42,22,123,94,...,194,202},\color {green}{255,134,202,22,...,94}]^T寺庄,最后讀取blue矩陣的像素,所以整個(gè)圖片存儲(chǔ)為一個(gè)列向量[\color {red}{255,231,42,22,123,94,...,194,202},\color {green}{255,134,202,22,...,94}, \color {blue}{255,134,93,22,...,142}]^T力崇。
    即表示成如下:
    圖片的儲(chǔ)存矩陣

  • 符號(hào)約定
    (x,y):一個(gè)樣本斗塘,x \in R^{n_x}為輸入,y \in \{0,1\}為輸出亮靴。
    m個(gè)訓(xùn)練樣本: {(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...(x^{(m)},y^{(m)})}
    訓(xùn)練集的樣本數(shù): m_{train}m
    測(cè)試集的樣本數(shù):m_{test}
    矩陣X:每一列是一個(gè)樣本馍盟,從而是n_x \times m維的。

    樣本的矩陣表示

    • 對(duì)應(yīng)python命令X.shape輸出X的維數(shù)n_x \times m

    同樣的茧吊,輸出y也表示為一個(gè)1\times m維向量(y^{(1)},y^{(2)},...y^{(m)})贞岭。python命令Y.shape會(huì)輸出1\times m

2. Logistic回歸

  • \hat{y}:對(duì)輸出y的預(yù)測(cè)值搓侄,在二分類問題中就是y取1的概率P(y=1|x)瞄桨。
  • 參數(shù):w \in R^{n_x}b \in R
  • 給出輸入變量x和參數(shù)w,b讶踪,如何得到預(yù)測(cè)值\hat{y}?
    線性回歸是\hat{y}=w^T *x+b芯侥,但并不是一個(gè)很好的二分分類方法,因?yàn)槲覀兿M?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Chat%7By%7D" alt="\hat{y}" mathimg="1">是個(gè)介于0和1之間的數(shù)以表示概率乳讥,而w^T *x+b可以取任何值甚至是負(fù)數(shù)柱查,為克服這個(gè)困難將輸出做一個(gè)sigmoid函數(shù)變換\hat{y}=\sigma(w^T *x+b),其中sigmoid函數(shù)為\sigma(z)= \frac{1}{1+e^{-z}}云石,其函數(shù)圖像為
    sigmoid函數(shù)圖像

    可以看到:
    • 當(dāng)z取相當(dāng)大的數(shù)時(shí)唉工,e^{-z}趨向于0,從而\sigma(z)趨向于1
    • 而當(dāng)z取相當(dāng)大的負(fù)數(shù)時(shí)汹忠,e^{-z}趨向于+\infty淋硝,從而\sigma(z)趨向于0
    • 當(dāng)z=0時(shí),\sigma(z)=\frac{1}{2}
      所以\sigma(z)取值位于0和1之間宽菜。

3. Logistic 回歸——cost function(成本函數(shù)/代價(jià)函數(shù))

  • 為了訓(xùn)練wb需要定義cost function谣膳,用來衡量算法效果。
  • 回顧:Logistic回歸
    \hat{y}=\sigma(w^T*x+b)赋焕,其中\sigma(z)=\frac{1}{1+e^{-z}}参歹,給定訓(xùn)練集\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...(x^{(m)},y^{(m)})\},希望有\hat{y} :=(\hat{y}^{(1)},\hat{y}^{(2)},...\hat{y}^{(m)}) \approx y:=(y^{(1)},y^{(2)},...y^{(m)})隆判。
  • 先定義針對(duì)單個(gè)樣本的Loss (Error) Function L(\hat{y},y):度量預(yù)測(cè)值\hat{y}與實(shí)際值y之間有多接近犬庇。
    • 例如僧界,可以定義L(\hat{y},y)=\frac{1}{2}(y-\hat{y})^2,事實(shí)上并不這樣應(yīng)用臭挽,因?yàn)檫@樣會(huì)導(dǎo)致函數(shù)非凸從而有多個(gè)局部最優(yōu)解捂襟,所以使用梯度下降法時(shí)無法找到最優(yōu)解(\color{red}{不太明白這句話,因?yàn)槎魏瘮?shù)本來就是凸函數(shù)啊})欢峰。
    • 在Logistic回歸中會(huì)定義一個(gè)凸的損失函數(shù):
      L(\hat{y},y)=-[ylog(\hat{y})+(1-y)log(1-\hat{y})]
      • y=1葬荷,則L(\hat{y},y)=-log(\hat{y}),讓損失函數(shù)盡可能小纽帖,從而log(\hat{y})盡可能大宠漩,從而\hat{y}盡可能大,而\hat{y}是sigmoid函數(shù)的輸出懊直,最大就是1扒吁,所以此時(shí)是要讓\hat{y}=1;
      • y=0,則L(\hat{y},y)=-log(1-\hat{y})室囊,讓損失函數(shù)盡可能小雕崩,從而log(1-\hat{y})盡可能大,從而1-\hat{y}盡可能大融撞,即\hat{y}盡可能小盼铁,而\hat{y}是sigmoid函數(shù)的輸出,最小就是0尝偎,所以此時(shí)是要讓\hat{y}=0
  • cost function(成本函數(shù)):度量在訓(xùn)練集上的整體表現(xiàn)饶火。
    J(w,b)=\frac{1}{m}\sum\limits_{i=1}^mL(\hat{y},y)=-\frac{1}{m}\sum\limits_{i=1}^m[y^{(i)}log(\hat{y}^{(i)})+(1-y^{(i)})log(1-\hat{y}^{(i)})]
  • 注:\color{red}{Loss funciton:單個(gè)樣本;} \color{red}{Cost function: 訓(xùn)練集上所有樣本的整體表現(xiàn)冬念。}

4.梯度下降法

  • 用來訓(xùn)練或?qū)W習(xí)訓(xùn)練集上的參數(shù)w,b趁窃。

  • 回顧:
    J(w,b)=\frac{1}{m}\sum\limits_{i=1}^mL(\hat{y},y)=-\frac{1}{m}\sum\limits_{i=1}^m[y^{(i)}log(\hat{y}^{(i)})+(1-y^{(i)})log(1-\hat{y}^{(i)})]

  • 梯度下降法就是給定初始的(w,b)牧挣,找到當(dāng)前下降最快的方向走一步急前,再找當(dāng)前下降最快的方向走一步,一直到找到最優(yōu)解為止瀑构,因?yàn)槲覀兩厦娑x的Loss Function是凸函數(shù)裆针,所以肯定能找到全局最優(yōu)解。如下圖所示寺晌。

    梯度下降法示意圖

    • Logistic回歸基本上任意初始化方法都好用世吨,一般初始化為0。
  • 其具體過程為呻征,針對(duì)參數(shù)w耘婚,迭代為w:=w-\alpha\frac{\partial L(w,b)}{\partial w}

    • 其中\alpha是學(xué)習(xí)率,可以控制每次迭代或者說梯度下降法中的步長(zhǎng)陆赋。
    • 編程時(shí)就用\mathrmbm17w1qw表示對(duì)w的偏導(dǎo)數(shù)沐祷。
    • J(w,b)是凸函數(shù)嚷闭,因此,若\mathrmgqg1dhg w >0赖临,w迭代后向著減小的方向步進(jìn)胞锰,圖上來看就是向左迭代;若\mathrmpufirvv w <0兢榨,w迭代后向著增大的方向步進(jìn)嗅榕,圖上來看就是向右迭代,無論哪種情況吵聪,都會(huì)找到全局最優(yōu)解凌那,如下圖所示。
      w迭代示意圖
  • 類似的吟逝,b的迭代為:b:=b-\alpha\frac{\partial L(w,b)}{\partial b}

5.計(jì)算圖(前向傳播)及其導(dǎo)數(shù)計(jì)算(后向傳播)

5.1 計(jì)算圖

  • 計(jì)算圖感覺像高數(shù)里的函數(shù)復(fù)合過程用圖表示出來案怯。
  • toy example
    J(a,b,c) = 3(a+bc),其復(fù)合與計(jì)算過程如下圖
    toy example的復(fù)合和計(jì)算過程

5.2 計(jì)算圖的導(dǎo)數(shù)計(jì)算

從右向左推導(dǎo)出復(fù)合函數(shù)的鏈?zhǔn)角髮?dǎo)法則澎办。


復(fù)合函數(shù)的鏈?zhǔn)角髮?dǎo)法則示例

6.Logistic回歸中的梯度下降

6.1 單個(gè)樣本的情況

  • 回顧Logistic回歸
    • 公式:
      \begin{array}{l}{z=w^{T} x+b} \\ {\hat{y}=a=\sigma(z)} \\ {L(a, y)=-(y \log (a)+(1-y) \log (1-a))}\end{array}
    • 計(jì)算步驟(前向嘲碱,計(jì)算loss function):
      假設(shè)有兩個(gè)特征(x_1,x_2)^T,從而所需參數(shù)為w_1,w_2,b
      • Step1:計(jì)算z = w_1 *x_1+w_2*x_2+b;
      • Step2:計(jì)算\hat{y} = a = \sigma(z)局蚀,其中\sigma()是sigmoid函數(shù)\sigma(z)=\frac{1}{1+e^{-z}};
      • Step3:計(jì)算loss function:L(a,y)=-[ylog(a)+(1-y)log(1-a)]麦锯。
        即輸入?yún)?shù)w_1,w_2,b計(jì)算損失函數(shù)最小。如圖所示琅绅。
        單個(gè)樣本的logistic流程圖
    • 計(jì)算步驟(后向扶欣,計(jì)算偏導(dǎo)數(shù))
      • Step1:\mathrmrxnwl7aa=\frac{\partial L(a,y)}{\partial a}=-\frac{y}{a}+\frac{1-y}{1-a}
      • Step2:\frac{\mathrmuvfohhqa}{\mathrm31a7owkz}=\frac{e^{-z}}{[1+e^{(-z)}]^2}=\frac{1}{1+e^{-z}} \bullet \frac{e^{-z}}{1+e^{-z}}=a(1-a)。所以有
        \mathrmbqkmw12z = \frac{\partial L(a,y)}{\partial z}=\frac{\partial L(a,y)}{\partial a} \bullet \frac{\mathrmr2mxhlga}{\mathrmf7jodyhz}
        =(-\frac{y}{a}+\frac{1-y}{1-a})a(1-a)=(a-1)y+a(1-y)
        =a-y千扶;
      • Step3. \mathrm5kl6fojw_1 = \frac{\partial L(a,y)}{\partial a} \bullet \frac{\mathrmvrpl9f3a}{\mathrm2hvakfaz} \bullet \frac{\partial z}{\partial w_1} = x_1(a-y)
        \mathrmppes15hw_2 = \frac{\partial L(a,y)}{\partial a} \bullet \frac{\mathrmhsliwbfa}{\mathrmio5zvv5z} \bullet \frac{\partial z}{\partial w_2} = x_2(a-y)
        \mathrmbg2ryxbb = \frac{\partial L(a,y)}{\partial a} \bullet \frac{\mathrmyds5quua}{\mathrmfwmvgsbz} \bullet \frac{\partial z}{\partial b} = (a-y)
      • Step4.迭代公式:
        w_1 = w_1 -\alpha\mathrm3cwfuclw_1
        w_2 = w_2 -\alpha\mathrmwyrbkpkw_2
        b = b -\alpha\mathrmef2hmhlb

6.2 m個(gè)樣本的訓(xùn)練集

  • 回顧:
    J(w,b)=\frac{1}{m}\sum\limits_{i=1}^mL(a^{(i)},y^{(i)})=-\frac{1}{m}\sum\limits_{i=1}^m[y^{(i)}log(a^{(i)})+(1-y^{(i)})log(1-a^{(i)})]
    其中
    a^{(i)} = \hat{y}^{(i)} = \sigma(z^{(i)})=\sigma(w^Tx^{(i)}+b)
  • 計(jì)算偏導(dǎo)數(shù)
    \mathrmb1677vpw_1 =\frac{\partial J(w,b)}{\partial w_1}=\frac{1}{m}\sum\limits_{i=1}^m\mathrmdej5dxxw_1^{(i)}=\frac{1}{m}\sum\limits_{i=1}^mx_1^{(i)}(a^{(i)}-y^{(i)})
    \mathrmietd16tw_2 =\frac{\partial J(w,b)}{\partial w_2}=\frac{1}{m}\sum\limits_{i=1}^m\mathrmliyib0xw_2^{(i)}=\frac{1}{m}\sum\limits_{i=1}^mx_2^{(i)}(a^{(i)}-y^{(i)})
    \mathrmy6dw72wb=\frac{\partial J(w,b)}{\partial b}=\frac{1}{m}\sum\limits_{i=1}^m\mathrmmisxiyxb^{(i)}=\frac{1}{m}\sum\limits_{i=1}^m(a^{(i)}-y^{(i)})
  • 偽代碼流程
# w料祠,b一次迭代的流程
dw_1=0,dw_2=0,db=0,J=0
for i in range(m):   #m個(gè)樣本
    z(i) = w^T*x(i)+b
    a(i) = \sigma(z(i))
    J+=-[y(i)log(a(i))+(1-y(i))log(1-a(i))]  
    dz(i) = a(i)-y(i)
    dw_1 += x_1(i)[a(i)-y(i)]
    dw_2 += x_2(i)[a(i)-y(i)]  #假設(shè)有2個(gè)特征,即n=n_x=2
    db += a(i)-y(i)
J/=m
dw_1/=m,dw_2/=m,db/=m
w_1 -=\alpha * dw_1
w_2 -=\alpha * dw_2
b -=\alpha * db
  • 說明:
    • 該流程有2個(gè)for循環(huán)澎羞,第一個(gè)是遍歷m個(gè)樣本點(diǎn)髓绽,第二個(gè)是遍歷2個(gè)特征。
    • 深度學(xué)習(xí)中有大量的數(shù)據(jù)妆绞,所以盡量避免使用顯式的for循環(huán)顺呕,從而引出vectorization。

7.Vectorizaion(向量化)

7.1 向量化

  • 只要有其他可能括饶,就不要用顯式for循環(huán)
    Whenever possible, avoid explicit for-loops株茶。
  • numpy模塊的內(nèi)置函數(shù)
np.exp()
np.log()
np.abs()
  • 利用向量化,前面的程序可以修改為
import numpy as np
# w图焰,b一次迭代的流程
dw=np.zeros((n_x,1)),db=0,J=0
for i in range(m):   #m個(gè)樣本
    z(i) = w^T*x(i)+b
    a(i) = \sigma(z(i))
    J+=-[y(i)log(a(i))+(1-y(i))log(1-a(i))]  
    dz(i) = a(i)-y(i)
    dw += x(i)[a(i)-y(i)]
    db += a(i)-y(i)
J/=m
dw /=m, db/=m
w_1 -=\alpha * dw_1
w_2 -=\alpha * dw_2
b -=\alpha * db

7.2 向量化Logistic回歸

  • 回顧:m個(gè)樣本的訓(xùn)練集
    z^{(1)}=w^T*x^{(1)}+b,a^{(1)}=\sigma(z^{(1)})
    z^{(2)}=w^T*x^{(2)}+b,a^{(2)}=\sigma(z^{(2)})
    ………
    z^{(m)}=w^T*x^{(m)}+b,a^{(m)}=\sigma(z^{(m)})
    X=[x^{(1)},x^{(2)},…,x^{(m)}],既每一列是一個(gè)樣本启盛,矩陣維數(shù)為n_x \times mz=[z^{(1)},z^{(2)},…,z^{(m)}]1\times m的行向量。從而上式可寫為z=w^T *X+[b,b,…,b]僵闯。A=[a{(1)},a{(2)},…,a{(m)}]笤闯。
z=np.dot(w.T,X)+b
a=\sigma(z)

7.3 向量化Logistic回歸的梯度計(jì)算

  • 回顧公式:
    \mathrmh7letojw_1 =\frac{\partial J(w,b)}{\partial w_1}=\frac{1}{m}\sum\limits_{i=1}^m\mathrmlyiw02ow_1^{(i)}=\frac{1}{m}\sum\limits_{i=1}^mx_1^{(i)}(a^{(i)}-y^{(i)})
    \mathrmfgz0favw_2 =\frac{\partial J(w,b)}{\partial w_2}=\frac{1}{m}\sum\limits_{i=1}^m\mathrmns7mff6w_2^{(i)}=\frac{1}{m}\sum\limits_{i=1}^mx_2^{(i)}(a^{(i)}-y^{(i)})
    \mathrmccjydyyb=\frac{\partial J(w,b)}{\partial b}=\frac{1}{m}\sum\limits_{i=1}^m\mathrmegv01ltb^{(i)}=\frac{1}{m}\sum\limits_{i=1}^m(a^{(i)}-y^{(i)})
  • 向量化
    A=[a^{(1)},a^{(2)},...,a^{(m)}]
    Y=[y^{(1)},y^{(2)},...,y^{(m)}]
    所以, \mathrmtvo5hgpz=A-Y.
    \mathrmyzk27azb = \frac{1}{m}\sum\limits_{i=1}^m(a^{(i)}-y^{(i)}) =np.sum(A-Y)
    \mathrmcdr7wf6w = \frac{1}{m}Xdz^T
    =\frac{1}{m}[x^{(1)},x^{(2)},...,x^{(m)}][\mathrmit2eoniz^{(1)},\mathrm8ixm5p2z^{(2)},...,\mathrml72czrmz^{(m)}]^T
    =\frac{1}{m}(x^{(1)}\mathrm8tigytxz^{(1)}+x^{(2)}\mathrm02d25fsz^{(2)}+...+x^{(m)}\mathrm2tib1nnz^{(m)})
  • Logistic回歸的向量化偽代碼
z = w^T*X + b = np.dot(w^T,X) + b
a = \sigma(z)
dz = A - Y
dw = 1/m*X*dz^T db = 1/m*np.sum(dz)
dw /=m, db/=m
w := w - \alpha * dw
b = b - \alpha * db

8. Python 中的Broadcasting

8.1 Broadcasting

Broadcasting是計(jì)算中對(duì)維數(shù)要求沒有那么嚴(yán)格,可以自己調(diào)整維度以適應(yīng)計(jì)算棍厂。

  • 例子


    示意矩陣

    問題:計(jì)算每種食物中各成分的占比

import numpy as np
A = np.array([[56,0,4.4,68],
             [1.2,104,52,8],
             [1.8,135,99,0.9]])
cal = A.sum(axis=0)
percentage = A/cal.reshape(1,4)
print(100 * percentage)

Broadcasting維度不必嚴(yán)格要求颗味,但是行或列必須有一個(gè)是相同的,python才能自己復(fù)制成合適維度的矩陣進(jìn)行計(jì)算牺弹。

  • MATLAB中類似的是bsxfun函數(shù)浦马。

8.2 編程小技巧

*盡量不要使用秩為1的數(shù)組

a = np.random.randn(5)

使用有明確維度的矩陣

a = np.random.randn(5,1)

可以使用reshape()來改變矩陣的維度

a.reshape(1,5)

可以使用assert()來聲明你希望的矩陣維度

assert(a.shape == (1,5))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市张漂,隨后出現(xiàn)的幾起案子晶默,更是在濱河造成了極大的恐慌,老刑警劉巖航攒,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磺陡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漠畜,警方通過查閱死者的電腦和手機(jī)币他,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔狞,“玉大人蝴悉,你說我怎么就攤上這事●遥” “怎么了拍冠?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)簇抵。 經(jīng)常有香客問我庆杜,道長(zhǎ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
  • 文/蒼蘭香墨 我猛地睜開眼陕靠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了脱茉?” 一聲冷哼從身側(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ú)居荒郊野嶺守林人離奇死亡榜田,尸身上長(zhǎng)有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
  • 正文 我出身青樓撕彤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親猛拴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喉刘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354