Seq2Seq 模型及 Attention 機制

什么是 Seq2Seq 轮听?

Seq2Seq 是一個 Encoder-Decoder 結構的神經網絡,它的輸入是一個序列(Sequence),輸出也是一個序列(Sequence)蚕涤,因此而得名 “Seq2Seq”。在 Encoder 中铣猩,將可變長度的序列轉變?yōu)楣潭ㄩL度的向量表達揖铜,Decoder 將這個固定長度的向量轉換為可變長度的目標的信號序列。*

最基礎的 Seq2Seq模型 包含了三個部分(上圖有一部分沒有顯示的標明)剂习,即 Encoder蛮位、Decoder 以及連接兩者的中間狀態(tài)向量 C较沪,Encoder通過學習輸入鳞绕,將其編碼成一個固定大小的狀態(tài)向量 C(也稱為語義編碼),繼而將 C 傳給Decoder尸曼,Decoder再通過對狀態(tài)向量 C 的學習來進行輸出對應的序列们何。

Basic Seq2Seq 是有很多弊端的,首先 Encoder 將輸入編碼為固定大小狀態(tài)向量(hidden state)的過程實際上是一個“信息有損壓縮”的過程控轿。如果信息量越大冤竹,那么這個轉化向量的過程對信息造成的損失就越大。同時茬射,隨著 sequence length的增加鹦蠕,意味著時間維度上的序列很長,RNN 模型也會出現梯度彌散在抛。最后钟病,基礎的模型連接 Encoder 和 Decoder 模塊的組件僅僅是一個固定大小的狀態(tài)向量,這使得Decoder無法直接去關注到輸入信息的更多細節(jié)刚梭。由于 Basic Seq2Seq 的種種缺陷肠阱,隨后引入了 Attention 的概念以及 Bi-directional encoder layer 等,能夠取得更好的表現朴读。

基本的Attention原理屹徘。

https://zhuanlan.zhihu.com/p/137578323

單純的Encoder-Decoder 框架并不能有效的聚焦到輸入目標上,這使得像 seq2seq 的模型在獨自使用時并不能發(fā)揮最大功效衅金。比如說在上圖中噪伊,編碼器將輸入編碼成上下文變量 C,在解碼時每一個輸出 Y 都會不加區(qū)分的使用這個 C 進行解碼氮唯。而注意力模型要做的事就是根據序列的每個時間步將編碼器編碼為不同 C鉴吹,在解碼時,結合每個不同的 C 進行解碼輸出您觉,這樣得到的結果會更加準確拙寡,如下所示:

近幾年來,深度學習與視覺注意力機制結合的研究工作琳水,大多數是集中于使用掩碼(mask)來形成注意力機制肆糕。掩碼的原理在于

通過另一層新的權重般堆,將圖片數據中關鍵的特征標識出來,通過學習訓練诚啃,讓深度神經網絡學到每一張新圖片中需要關注的區(qū)域淮摔,也就形成了注意力。

這種思想始赎,進而演化成兩種不同類型的注意力和橙,一種是軟注意力(soft attention),另一種則是強注意力(hard attention)造垛。

軟注意力

的關鍵點在于魔招,這種注意力更關注區(qū)域[4]或者通道[5],
而且軟注意力是確定性的注意力五辽,學習完成后直接可以通過網絡生成办斑,
最關鍵的地方是軟注意力是可微的
,這是一個非常重要的地方杆逗∠绯幔可以微分的注意力就可以通過神經網絡算出梯度并且前向傳播和后向反饋來學習得到注意力的權重[6]。

強注意力[7]

與軟注意力不同點在于罪郊,首先強注意力是更加關注點蠕蚜,也就是圖像中的每個點都有可能延伸出注意力,
同時強注意力是一個隨機的預測過程悔橄,更強調動態(tài)變化
靶累。
當然,最關鍵是強注意力是一個不可微的注意力橄维,訓練過程往往是通過增強學習(reinforcement learning)來完成的尺铣。

為了更清楚地介紹計算機視覺中的注意力機制,這篇文章將從注意力域(attention domain)的角度來分析幾種注意力的實現方法争舞。其中主要是三種注意力域凛忿,空間域(spatial domain),通道域(channel domain)竞川,混合域(mixed domain)店溢。還有另一種比較特殊的強注意力實現的注意力域,時間域(time domain)委乌,但是因為強注意力是使用reinforcement learning來實現的床牧,訓練起來有所不同,所以之后再詳細分析遭贸。

軟注意力的注意力域

每篇文章的介紹分為兩個部分戈咳,首先從想法上來介紹模型的設計思路,然后深入了解模型結構(architecture)部分。

3.1 空間域(Spatial Domain)
設計思路:
Spatial Transformer Networks(STN)模型[4]通過注意力機制著蛙,將原始圖片中的空間信息變換到另一個空間中并保留了關鍵信息删铃。
這篇文章的思想非常巧妙,因為卷積神經網絡中的池化層(pooling layer)直接用一些max pooling 或者average pooling 的方法踏堡,將圖片信息壓縮猎唁,減少運算量提升準確率。這篇文章認為之前pooling的方法太過于暴力顷蟆,直接將信息合并會導致關鍵信息無法識別出來诫隅,所以提出了一個叫空間轉換器(spatial transformer)的模塊,將圖片中的的空間域信息做對應的空間變換帐偎,從而能將關鍵的信息提取出來

與池化層不同逐纬,在池化層中,接收fields是固定的和局部的肮街,空間轉換器模塊是一種動態(tài)機制风题,可以通過為每個輸入樣本生成適當的變換來主動對圖像(或特征圖)進行空間變換。


(a)列是原始的圖片信息嫉父,其中第一個手寫數字7沒有做任何變換,第二個手寫數字5眼刃,做了一定的旋轉變化绕辖,而第三個手寫數字6,加上了一些噪聲信號擂红;
(b)列中的彩色邊框是學習到的spatial transformer的框盒(bounding box)仪际,每一個框盒其實就是對應圖片學習出來的一個spatial transformer;
(c)列中是通過spatial transformer轉換之后的特征圖昵骤,可以看出7的關鍵區(qū)域被選擇出來树碱,5被旋轉成為了正向的圖片,6的噪聲信息沒有被識別進入变秦。
最終可以通過這些轉換后的特征圖來預測出(d)列中手寫數字的數值成榜。

這是空間變換網絡(spatialtransformer network)中最重要的空間變換模塊,這個模塊可以作為新的層直接加入到原有的網絡結構蹦玫,比如ResNet中赎婚。
來仔細研究這個模型的輸入:U \in \mathbb{R}^{H \times W \times C}神經網絡訓練中使用的數據類型都是張量(tensor),H是上一層tensor的高度(height)樱溉,W是上一層tensor的寬度(width)挣输,而C代表tensor的通道(channel),比如圖片基本的三通道(RGB)福贞,或者是經過卷積層(convolutional layer)之后撩嚼,不同卷積核(kernel)都會產生不同的通道信息。 之后這個輸入進入兩條路線,一條路線是信息進入定位網絡(localisation net)完丽,另一條路線是原始信號直接進入采樣層(sampler)向瓷。其中定位網絡會學習到一組參數\theta,而這組參數就能夠作為網格生成器(grid generator)的參數舰涌,生成一個采樣信號猖任,這個采樣信號其實是一個變換矩陣\tau_\theta(G),與原始圖片相乘之后瓷耙,可以得到變換之后的矩陣V \in \mathbb{R}^{H^{\prime} \times W^{\prime} \times C}
V就是變換之后的圖片特征了朱躺,變換之后的矩陣大小是可以通過調節(jié)變換矩陣來形成縮放的。

通過這張轉換圖片搁痛,可以看出空間轉換器中產生的采樣矩陣是能夠將原圖中關鍵的信號提取出來长搀,(a)中的采樣矩陣是單位矩陣,不做任何變換鸡典,(b)中的矩陣是可以產生縮放旋轉變換的采樣矩陣
\left(\begin{array}{c}{x_{i}^{s}} \\ {y_{i}^{s}}\end{array}\right)=\mathcal{T}_{\theta}\left(G_{i}\right)=\mathrm{A}_{\theta}\left(\begin{array}{c}{x_{i}^{t}} \\ {y_{i}^{t}} \\ {1}\end{array}\right)=\left[\begin{array}{ccc}{\theta_{11}} & {\theta_{12}} & {\theta_{13}} \\ {\theta_{21}} & {\theta_{22}} & {\theta_{23}}\end{array}\right]\left(\begin{array}{c}{x_{i}^{t}} \\ {y_{i}^{t}} \\ {1}\end{array}\right)
最右邊式子左邊的θ矩陣就是對應的采樣矩陣源请。
這個模塊加進去最大的好處就是能夠對上一層信號的關鍵信息進行識別(attention),并且該信息矩陣是一個可以微分的矩陣彻况,因為每一個目標(target)點的信息其實是所有源(source)點信息的一個組合谁尸,這個組合可以是一個線性組合,復雜的變換信息也可以用核函數(kernel)來表示:
V_{i}^{c}=\sum_{n}^{H} \sum_{m}^{W} U_{n m}^{c} k\left(x_{i}^{s}-m ; \Phi_{x}\right) k\left(y_{i}^{s}-n ; \Phi_{y}\right) \forall i \in\left[1 \ldots H^{\prime} W^{\prime}\right] \forall c \in[1 \ldots C]
V是轉換后的信息纽甘,U是轉換前的信息良蛮,k是一個核函數。
理論上來說悍赢,這樣的模塊是可以加在任意層的决瞳,因為模塊可以同時對通道信息和矩陣信息同時處理。但是由于文章提出對所有的通道信息進行統(tǒng)一處理變換左权,我認為這種模塊其實更適用于原始圖片輸入層之后的變化皮胡,因為卷積層之后,每一個卷積核(filter)產生的通道信息赏迟,所含有的信息量以及重要程度其實是不一樣的屡贺,都用同樣的transformer其實可解釋性并不強。也由此瀑梗,我們可以引出第二種注意域的機制——通道域(channel domain)注意力機制烹笔。

3.2 通道域(Channel Domain)
通道域[5]的注意力機制原理很簡單,我們可以從基本的信號變換的角度去理解抛丽。信號系統(tǒng)分析里面谤职,任何一個信號其實都可以寫成正弦波的線性組合,經過時頻變換<一般是使用傅里葉變換亿鲜,也是卷積變化>之后允蜈,時域上連續(xù)的正弦波信號就可以用一個頻率信號數值代替了冤吨。


在卷積神經網絡中,每一張圖片初始會由(R饶套,G漩蟆,B)三通道表示出來,之后經過不同的卷積核之后妓蛮,每一個通道又會生成新的信號怠李,比如圖片特征的每個通道使用64核卷積,就會產生64個新通道的矩陣(H,W,64)蛤克,H,W分別表示圖片特征的高度和寬度捺癞。每個通道的特征其實就表示該圖片在不同卷積核上的分量,類似于時頻變換构挤,而這里面用卷積核的卷積類似于信號做了傅里葉變換髓介,從而能夠將這個特征一個通道的信息給分解成64個卷積核上的信號分量。
既然每個信號都可以被分解成核函數上的分量筋现,產生的新的64個通道對于關鍵信息的貢獻肯定有多有少唐础,如果我們給每個通道上的信號都增加一個權重,來代表該通道與關鍵信息的相關度的話矾飞,這個權重越大一膨,則表示相關度越高,也就是我們越需要去注意的通道了凰慈。
模型結構:
論文[5]中提出了一個非常重要的SENet的模型結構汞幢,靠著這個模型獲得了ImageNet的冠軍,這個模型是非常有創(chuàng)造力的設計微谓。

首先最左邊是原始輸入圖片特征X,然后經過變換输钩,比如卷積變換F_{tr}豺型,產生了新的特征信號U。U有C個通道买乃,我們希望通過注意力模塊來學習出每個通道的權重姻氨,從而產生通道域的注意力。中間的模塊就是SENet的創(chuàng)新部分剪验,也就是注意力機制模塊肴焊。這個注意力機制分成三個部分:擠壓(squeeze)激勵(excitation)功戚,以及注意(attention)娶眷。
擠壓函數F_{sq}z_{c}=\mathbf{F}_{s q}\left(\mathbf{u}_{c}\right)=\frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} u_{c}(i, j)
很明顯這個函數做了一個全局平均值,把每個通道內所有的特征值相加再平均啸臀,也是全局平均池化(global average pooling)的數學表達式届宠。
激勵函數F_{ex}:
\mathbf{s}=\mathbf{F}_{e x}(\mathbf{z}, \mathbf{W})=\sigma(g(\mathbf{z}, \mathbf{W}))=\sigma\left(\mathbf{W}_{2} \delta\left(\mathbf{W}_{1} \mathbf{z}\right)\right)
\delta函數是ReLU,而\sigma是一個sigmoid激活函數。W1和W2的維度分別是\mathbf{W}_{1} \in \mathbb{R}^{\frac{C}{r} \times C} \mathbf{W}_{2} \in \mathbb{R}^{C \times \frac{C}{r}}
尺度函數F_{scale}:\widetilde{\mathbf{x}}_{c}=\mathbf{F}_{s c a l e}\left(\mathbf{u}_{c}, s_{c}\right)=s_{c} \cdot \mathbf{u}_{c}
這一步其實就是一個放縮的過程豌注,不同通道的值乘上不同的權重伤塌,從而可以增強對關鍵通道域的注意力。

3.3 混合域
了解前兩種注意力域的設計思路后轧铁,簡單對比一下每聪。首先,空間域的注意力是忽略了通道域中的信息齿风,將每個通道中的圖片特征同等處理药薯,這種做法會將空間域變換方法局限在原始圖片特征提取階段,應用在神經網絡層其他層的可解釋性不強聂宾。
而通道域的注意力是對一個通道內的信息直接全局平均池化果善,而忽略每一個通道內的局部信息,這種做法其實也是比較暴力的行為系谐。所以結合兩種思路巾陕,就可以設計出混合域的注意力機制模型[8]。
設計思路:
[8]這篇文章中提出的注意力機制是與深度殘差網絡(Deep Residual Network)相關的方法纪他,基本思路是能夠將注意力機制應用到ResNet中鄙煤,并且使網絡能夠訓練的比較深。
文章中注意力的機制是軟注意力基本的加掩碼(mask)機制茶袒,但是不同的是梯刚,這種注意力機制的mask借鑒了殘差網絡的想法,不只根據當前網絡層的信息加上mask薪寓,還把上一層的信息傳遞下來亡资,這樣就防止mask之后的信息量過少引起的網絡層數不能堆疊很深的問題。
正如之前說的向叉,[8]中提出的注意力mask锥腻,不僅僅只是對空間域或者通道域注意,這種mask可以看作是每一個特征元素(element)的權重母谎。通過給每個特征元素都找到其對應的注意力權重瘦黑,就可以同時形成了空間域和通道域的注意力機制。
很多人看到這里就會有疑問奇唤,這種做法應該是從空間域或者通道域非常自然的一個過渡幸斥,怎么做單一域注意力的人都沒有想到呢?原因有:

  • 如果你給每一個特征元素都賦予一個mask權重的話咬扇,mask之后的信息就會非常少甲葬,可能直接就破壞了網絡深層的特征信息;
  • 另外冗栗,如果你可以加上注意力機制之后演顾,殘差單元(Residual Unit)的恒等映射(identical mapping)特性會被破壞供搀,從而很難訓練。
    首先钠至,使用mask重復地從0到1的點產生會降低深層特征的值葛虐。其次,軟mask可能會破壞主干分支的良好特性棉钧,例如殘差單元的相同映射屿脐。
    所以該文章的注意力機制的創(chuàng)新點在于提出了殘差注意力學習(residual attention learning),不僅只把mask之后的特征張量作為下一層的輸入宪卿,同時也將mask之前的特征張量作為下一層的輸入的诵,這時候可以得到的特征更為豐富,從而能夠更好的注意關鍵特征佑钾。
    模型結構:

    文章中模型結構是非常清晰的西疤,整體結構上,是三階注意力模塊(3-stage attention module)休溶。每一個注意力模塊可以分成兩個分支(看stage2)代赁,上面的分支叫主分支(trunk branch),是基本的殘差網絡(ResNet)的結構兽掰。而下面的分支是軟掩碼分支(soft mask branch)芭碍,而軟掩碼分支中包含的主要部分就是殘差注意力學習機制。通過下采樣(down sampling)和上采樣(up sampling)孽尽,以及殘差模塊(residual unit)窖壕,組成了注意力的機制。
    模型結構中比較創(chuàng)新的殘差注意力機制是:
    H_{i, c}(x)=\left(1+M_{i, c}(x)\right) * F_{i, c}(x)
    H是注意力模塊的輸出杉女,F是上一層的圖片張量特征瞻讽,M是軟掩碼的注意力參數。這就構成了殘差注意力模塊熏挎,能將圖片特征和加強注意力之后的特征一同輸入到下一模塊中卸夕。F函數可以選擇不同的函數,就可以得到不同注意力域的結果:
    \begin{aligned} f_{1}\left(x_{i, c}\right) &=\frac{1}{1+\exp \left(-x_{i, c}\right)} \\ f_{2}\left(x_{i, c}\right) &=\frac{x_{i, c}}{\left\|x_{i}\right\|} \\ f_{3}\left(x_{i, c}\right) &=\frac{1}{1+\exp \left(-\left(x_{i, c}-\operatorname{mean}_{c}\right) / \operatorname{std}_{c}\right)} \end{aligned}
    f_{1}是對圖片特征張量直接sigmoid激活函數婆瓜,就是混合域的注意力;
    f_{2}是對圖片特征張量直接做全局平均池化(global average pooling)贡羔,所以得到的是通道域的注意力(類比SENet[5])廉白;
    f_{3}是求圖片特征張量在通道域上的平均值的激活函數,類似于忽略了通道域的信息乖寒,從而得到空間域的注意力猴蹂。

4 時間域注意力
這個概念其實比較大,因為計算機視覺只是單一識別圖片的話楣嘁,并沒有時間域這個概念磅轻,但是[7]這篇文章中,提出了一種基于遞歸神經網絡(Recurrent Neural Network,RNN)的注意力機制識別模型克伊。
RNN模型比較適合的場景是數據具有時序特征皮官,比如使用RNN產生注意力機制做的比較好的是在自然語言處理的問題上。因為自然語言處理的是文本分析撮躁,而文本產生的背后其實是有一個時序上的關聯性漱病,比如一個詞之后還會跟著另外一個詞,這就是一個時序上的依賴關聯性把曼。
而圖片數據本身杨帽,并不具有天然的時序特征,一張圖片往往是一個時間點下的采樣嗤军。但是在視頻數據中注盈,RNN就是一個比較好的數據模型,從而能夠使用RNN來產生識別注意力叙赚。
特意將RNN的模型稱之為時間域的注意力老客,是因為這種模型在前面介紹的空間域,通道域纠俭,以及混合域之上沿量,又新增加了一個時間的維度。這個維度的產生冤荆,其實是基于采樣點的時序特征朴则。
Recurrent Attention Model [7]中將注意力機制看成對一張圖片上的一個區(qū)域點的采樣,這個采樣點就是需要注意的點钓简。而這個模型中的注意力因為不再是一個可以微分的注意力信息乌妒,因此這也是一個強注意力(hard attention)模型。這個模型的訓練是需要使用增強學習(reinforcementlearning)來訓練的外邓,訓練的時間更長撤蚊。
這個模型更需要了解的并不是RNN注意力模型,因為這個模型其實在自然語言處理中介紹的更詳細损话,更需要了解的是這個模型的如何將圖片信息轉換成時序上的采樣信號的:


這個是模型中的關鍵點侦啸,叫Glimpse Sensor,我翻譯為掃視器丧枪,這個sensor的關鍵點在于先確定好圖片中需要關注的點(像素)光涂,這時候這個sensor開始采集三種信息,信息量是相同的拧烦,一個是非常細節(jié)(最內層框)的信息忘闻,一個是中等的局部信息,一個是粗略的略縮圖信息恋博。
這三個采樣的信息是在l_{t-1}位置中產生的圖片信息齐佳,而下一個時刻私恬,隨著t的增加,采樣的位置又開始變化炼吴,至于l隨著t該怎么變化本鸣,這就是需要使用增強學習來訓練的東西了。
有關RNN做attention的缺厉,還是應該去了解自然語言處理永高,如機器翻譯中的做法,這里就不再繼續(xù)深入介紹提针,想深入了解的命爬,推薦閱讀Attention模型方法綜述

\begin{aligned} \alpha_{t s} &=\frac{\exp \left(\operatorname{score}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right)\right)}{\sum_{s^{\prime}=1}^{S} \exp \left(\operatorname{score}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s^{\prime}}\right)\right)} \\ \boldsymbol{c}_{t} &=\sum_{s} \alpha_{t s} \overline{\boldsymbol{h}}_{s} \\ y_{2} &=f\left(\boldsymbol{c}_{t}, \boldsymbol{h}_{t}\right)=\tanh \left(\boldsymbol{W}_{c}\left[\boldsymbol{c}_{t} ; \boldsymbol{h}_{t}\right]\right) \end{aligned}

HAN的原理(Hierarchical Attention Networks)辐脖。

利用Attention模型進行文本分類饲宛。

https://zhuanlan.zhihu.com/p/31547842

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嗜价,隨后出現的幾起案子艇抠,更是在濱河造成了極大的恐慌,老刑警劉巖久锥,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件家淤,死亡現場離奇詭異,居然都是意外死亡瑟由,警方通過查閱死者的電腦和手機絮重,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歹苦,“玉大人青伤,你說我怎么就攤上這事∨故荩” “怎么了狠角?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚪腋。 經常有香客問我丰歌,道長,這世上最難降的妖魔是什么屉凯? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任动遭,我火速辦了婚禮,結果婚禮上神得,老公的妹妹穿的比我還像新娘。我一直安慰自己偷仿,他們只是感情好哩簿,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布宵蕉。 她就那樣靜靜地躺著,像睡著了一般节榜。 火紅的嫁衣襯著肌膚如雪羡玛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天宗苍,我揣著相機與錄音稼稿,去河邊找鬼。 笑死讳窟,一個胖子當著我的面吹牛让歼,可吹牛的內容都是我干的。 我是一名探鬼主播丽啡,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼谋右,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了补箍?” 一聲冷哼從身側響起改执,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坑雅,沒想到半個月后辈挂,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡裹粤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年终蒂,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛹尝。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡后豫,死狀恐怖,靈堂內的尸體忽然破棺而出突那,到底是詐尸還是另有隱情挫酿,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布愕难,位于F島的核電站早龟,受9級特大地震影響,放射性物質發(fā)生泄漏猫缭。R本人自食惡果不足惜葱弟,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猜丹。 院中可真熱鬧芝加,春花似錦、人聲如沸射窒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝌麸,卻和暖如春点寥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背来吩。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工敢辩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弟疆。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓戚长,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兽间。 傳聞我的和親對象是個殘疾皇子历葛,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容