国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

10分鐘帶你深入理解Transformer原理及實(shí)現(xiàn)

共 16667字,需瀏覽 34分鐘

 ·

2021-08-01 12:19

點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

重磅干貨,第一時間送達(dá)

本文轉(zhuǎn)自|深度學(xué)習(xí)這件小事
基于 Transformer《Attention Is All You Need》構(gòu)建的模型(比如 Bert ),在多個自然語言處理任務(wù)上都取得了革命性的效果,目前已取代 RNN 成為默認(rèn)選項,可見 Transformer 的厲害之處。

結(jié)合 Harvard 的代碼《Annotated Transformer》分享一下這個 encoder-decoder 與 attention 機(jī)制結(jié)合的方法。代碼鏈接:The Annotated Transformer。
目錄:
  • 整體架構(gòu)描述

  • Input & Output Embedding

    • OneHot Encoding

    • Word Embedding

    • Positional Embedding

    • Input short summary

  • Encoder

    • Encoder Sub-layer 1: Multi-Head Attention Mechanism

      • Step 1

      • Step 2

      • Step 3

    • Encoder Sub-layer 2: Position-Wise fully connected feed-forward

    • Encoder short summary

  • Decoder

    • Diff_1:“masked” Multi-Headed Attention

    • Diff_2:encoder-decoder multi-head attention

    • Diff_3:Linear and Softmax to Produce Output Probabilities

      • greedy search

      • beam search

      • Scheduled Sampling

0.模型架構(gòu)

今天的示例任務(wù)為中譯英:中文輸入為“我愛你”,通過 Transformer 翻譯為 “I Love You”。
Transformer 中對應(yīng)的超參數(shù)包括:
這些也是函數(shù) make_model(src_vocal, tgt_vocab, N=6, d_model=512, d_ff = 2048, h=8, dropout=0.1) 使用的超參數(shù)。
整個架構(gòu)猛一看是挺嚇人的,首先還是需要將整個 Transformer 拆分進(jìn)行描述:
  • Embedding 部分

  • Encoder 部分

  • Decoder 部分

1. 對 Input 和 Output 進(jìn)行 representation

1.1 對 Input 的 represent

首先用常用來表達(dá) categorical 特征的方法即one-hot encoding 對句子進(jìn)行表達(dá)。one-hot 指的是一個向量只有一個元素是1,其余的都為0。很直接的,vector 的長度就是由詞匯表 vocabulary 的長度決定的。如果想要表達(dá)10000個word,那么就需要10000維的向量。

1.2 word embedding

但我們不直接給 Transformer 輸入簡單的one-hot vector,原因包括這種表達(dá)方式的結(jié)果非常稀疏,非常大,且不能表達(dá) word 與 word 之間的特征。所以這里對詞進(jìn)行 embedding,用較短的向量表達(dá)這個 word 的屬性。一般在 Pytorch 中,我們都是用 nn.Embedding 來做,或者直接用 one-hot vector 與權(quán)重矩陣 W 相乘得到。
nn.Embedding 包含一個權(quán)重矩陣 W,對應(yīng)的 shape 為 ( num_embeddings,embedding_dim )。num_embeddings 指的是詞匯量,即想要翻譯的 vocabulary 的長度。embedding_dim 指的是想用多長的 vector 來表達(dá)一個詞,可以任意選擇,比如64,128,256,512等。在 Transformer 論文中選擇的是512(即 d_model =512)。
其實(shí)可以形象地將 nn.Embedding 理解成一個 lookup table,里面對每一個 word 都存了向量 vector 。給任意一個 word,都可以從表中查出對應(yīng)的結(jié)果。
處理 nn.Embedding 權(quán)重矩陣有兩種選擇:
  • 使用 pre-trained 的 embeddings 并固化,這種情況下實(shí)際就是一個 lookup table。

  • 對其進(jìn)行隨機(jī)初始化(當(dāng)然也可以選擇 pre-trained 的結(jié)果),但設(shè)為 trainable。這樣在 training 過程中不斷地對 embeddings 進(jìn)行改進(jìn)。

Transformer 選擇的是后者。
在 Annotated Transformer 中,class “Embeddings“ 用來生成 word 的embeddings,其中用到 nn.Embedding。具體實(shí)現(xiàn)見下:
   
class Embeddings(nn.Module):
def __init__(self, d_model, vocab):
super(Embeddings, self).__init__()
self.lut = nn.Embedding(vocab, d_model)
self.d_model = d_model

def forward(self, x):
return self.lut(x) * math.sqrt(self.d_model)

1.3 Positional Embedding

我們對每一個 word 進(jìn)行 embedding 作為 input 表達(dá)。但是還有問題,embedding 本身不包含在句子中的相對位置信息。
那 RNN 為什么在任何地方都可以對同一個 word 使用同樣的向量呢?因?yàn)?RNN 是按順序?qū)渥舆M(jìn)行處理的,一次一個 word。但是在 Transformer 中,輸入句子的所有 word 是同時處理的,沒有考慮詞的排序和位置信息。
對此,Transformer 的作者提出了加入 ”positional encoding“ 的方法來解決這個問題。”positional encoding“ 使得 Transformer 可以衡量 word 位置有關(guān)的信息。
positional encoding 與 word embedding 相加就得到 embedding with position。

那么具體 ”positional encoding“ 怎么做?為什么能表達(dá)位置信息呢?作者探索了兩種創(chuàng)建 positional encoding 的方法:
  • 通過訓(xùn)練學(xué)習(xí) positional encoding 向量

  • 使用公式來計算 positional encoding向量

試驗(yàn)后發(fā)現(xiàn)兩種選擇的結(jié)果是相似的,所以采用了第2種方法,優(yōu)點(diǎn)是不需要訓(xùn)練參數(shù),而且即使在訓(xùn)練集中沒有出現(xiàn)過的句子長度上也能用。
計算 positional encoding 的公式為:
在這個公式中:
  • pos 指的是這個 word 在這個句子中的位置

  • i指的是 embedding 維度。比如選擇 d_model=512,那么i就從1數(shù)到512

為什么選擇 sin 和 cos ?positional encoding 的每一個維度都對應(yīng)著一個正弦曲線,作者假設(shè)這樣可以讓模型相對輕松地通過對應(yīng)位置來學(xué)習(xí)。
在 Annotated Transformer 中,使用 class ”Positional Encoding“ 來創(chuàng)建 positional encoding 并加入到 word embedding 中:
   
class PositionalEncoding(nn.Module):
"Implement the PE function."
def __init__(self, d_model, dropout, max_len=5000):
super(PositionalEncoding, self).__init__()
self.dropout = nn.Dropout(p=dropout)

# Compute the positional encodings once in log space.
pe = torch.zeros(max_len, d_model)
position = torch.arange(0, max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) *
-(math.log(10000.0) / d_model))
pe[:, 0::2] = torch.sin(position * div_term)
pe[:, 1::2] = torch.cos(position * div_term)
pe = pe.unsqueeze(0)
self.register_buffer('pe', pe)

def forward(self, x):
x = x + Variable(self.pe[:, :x.size(1)],requires_grad=False)
return self.dropout(x)
波的頻率和偏移對于每個維度是不同的:

1.4 Input 小總結(jié)

經(jīng)過 word embedding 和 positional embedding 后可以得到一個句子的 representation,比如”我愛你“這個句子,就被轉(zhuǎn)換成了三個向量,每個向量都包含 word 的特征和 word 在句子中的位置信息:
我們對輸出的結(jié)果做同樣的操作,這里即中英翻譯的結(jié)果 ”I Love You“。使用word embedding 和 positional encoding 對其進(jìn)行 represent。
Input Tensor 的 size 為 [nbatches, L, 512]:
  • nbatches 指的是定義的 batch_size

  • L 指的是 sequence 的長度,(比如“我愛你”,L = 3)

  • 512 指的是 embedding 的 dimension

目前完成了模型架構(gòu)的底層的部分:

2. Encoder

Encoder 相對 Decoder 會稍微麻煩一些。Encoder 由 6 個相乘的 Layer 堆疊而成(6并不是固定的,可以基于實(shí)際情況修改),看起來像這樣:

每個 Layer 包含 2 個 sub-layer:
  • 第一個是 ”multi-head self-attention mechanism“

  • 第二個是 ”simple,position-wise fully connected feed-forward network“

Annotated Transformer 中的 Encoder 實(shí)現(xiàn)代碼:
   
class Encoder(nn.Module):
"Core encoder is a stack of N layers"

def __init__(self, layer, N):
super(Encoder, self).__init__()
self.layers = clones(layer, N)
self.norm = LayerNorm(layer.size)

def forward(self, x, mask):
"Pass the input (and mask) through each layer in turn."
for layer in self.layers:
x = layer(x, mask)
return self.norm(x)

class EncoderLayer(nn.Module):
"Encoder is made up of self-attn and feed forward (defined below)"
def __init__(self, size, self_attn, feed_forward, dropout):
super(EncoderLayer, self).__init__()
self.self_attn = self_attn
self.feed_forward = feed_forward
self.sublayer = clones(SublayerConnection(size, dropout), 2)
self.size = size

def forward(self, x, mask):
"Follow Figure 1 (left) for connections."
x = self.sublayer[0](x, lambda x: self.self_attn(x, x, x, mask))
return self.sublayer[1](x, self.feed_forward)


  1. class “Encoder” 將 <layer> 堆疊N次。是 class “EncoderLayer” 的實(shí)例。

  2. “EncoderLayer” 初始化需要指定<size>,<self_attn>,<feed_forward>,<dropout>:

    1. <size> 對應(yīng) d_model,論文中為512

    2. <self_attn> 是 class MultiHeadedAttention 的實(shí)例,對應(yīng)sub-layer 1

    3. <feed_forward> 是 class PositionwiseFeedForward 的實(shí)例,對應(yīng)sub-layer 2

    4. <dropout> 對應(yīng) dropout rate

2.1 Encoder Sub-layer 1: Multi-Head Attention Mechanism

理解 Multi-Head Attention 機(jī)制對于理解 Transformer 特別重要,并且在 Encoder 和 Decoder 中都有用到。
概述:
我們把 attention 機(jī)制的輸入定義為 x。x 在 Encoder 的不同位置,含義有所不同。在 Encoder 的開始,x 的含義是句子的 representation。在 EncoderLayer 的各層中間,x 代表前一層 EncoderLayer 的輸出。
使用不同的 linear layers 基于 x 來計算 keys,queries和values:
  • key = linear_k(x)

  • query = linear_q(x)

  • value = linear_v(x)

linear_k, linear_q, linear_v 是相互獨(dú)立、權(quán)重不同的。
計算得到 keys(K), queries(Q)和values(V) 值之后,按論文中如下公式計算 Attention:
矩陣乘法表示:
這里的比較奇怪的地方是為啥要除以 sqrt(d_k) 對吧?
作者的解釋是說防止   增大時,   點(diǎn)積值過大,所以用   對其進(jìn)行縮放。引用一下原文”We suspect that for large values of dk, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients” 對  取 softmax 之后值都介于0到1之間,可以理解成得到了 attention weights。然后基于這個 attention weights 對 V 求 weighted sum 值 Attention(Q, K, V)。
詳細(xì)解釋:Annotated Transformer 中 Multi-Headed attention 的實(shí)現(xiàn)為
   
class MultiHeadedAttention(nn.Module):
def __init__(self, h, d_model, dropout=0.1):
"Take in model size and number of heads."
super(MultiHeadedAttention, self).__init__()
assert d_model % h == 0
# We assume d_v always equals d_k
self.d_k = d_model // h
self.h = h
self.linears = clones(nn.Linear(d_model, d_model), 4)
self.attn = None
self.dropout = nn.Dropout(p=dropout)

def forward(self, query, key, value, mask=None):
"Implements Figure 2"
if mask is not None:
# Same mask applied to all h heads.
mask = mask.unsqueeze(1)
nbatches = query.size(0)

# 1) Do all the linear projections in batch from d_model => h x d_k
query, key, value = \
[l(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2)
for l, x in zip(self.linears, (query, key, value))]

# 2) Apply attention on all the projected vectors in batch.
x, self.attn = attention(query, key, value, mask=mask,
dropout=self.dropout)

# 3) "Concat" using a view and apply a final linear.
x = x.transpose(1, 2).contiguous() \
.view(nbatches, -1, self.h * self.d_k)
return self.linears[-1](x)
這個 class 進(jìn)行實(shí)例化時需要指定:
  • <h> = 8,即 “heads” 的數(shù)目。在 Transformer 的 base model 中有8 heads

  • <d_model> = 512

  • <dropout> = dropout rate = 0.1

keys 的維度 d_k 是基于   計算來的。在上面的例子中 d_k = 512 / 8 = 64。
下面分3步詳細(xì)介紹一下 MultiHeadedAttention 的 forward() 函數(shù):
從上面的代碼看出,forward 的 input 包括:query,key,values和mask。這里先暫時忽略 mask。query,key和value 是哪來的?實(shí)際上他們是 “x” 重復(fù)了三次得來的,x 或者是初始的句子 embedding或者是前一個 EncoderLayer 的輸出,見 EncoderLayer 的代碼黃色劃線部分,self.self_atttn 是 MultiHeadedAttention 的一個實(shí)例化:
“query” 的 shape 為 [nbatches, L, 512] ,其中:
  • nbatches 對應(yīng) batch size

  • L 對應(yīng) sequence length ,512 對應(yīng) d_mode

  • “key” 和 “value” 的 shape 也為 [nbatches, L, 512]

Step 1)
  1. 對 “query”,“key”和“value”進(jìn)行 linear transform ,他們的 shape 依然是[nbatches, L, 512]。

  2. 對其通過 view() 進(jìn)行 reshape,shape 變成 [nbatches, L, 8, 64]。這里的h=8對應(yīng) heads 的數(shù)目,d_k=64 是 key 的維度。

  3. transpose 交換 dimension1和2,shape 變成 [nbatches, 8, L 64]。

Step 2)
前面提到我們計算 attention 的公式:
Annotated Transformer 中的 attention() 代碼為:
   
def attention(query, key, value, mask=None, dropout=None):
"Compute 'Scaled Dot Product Attention'"
d_k = query.size(-1)
scores = torch.matmul(query, key.transpose(-2, -1)) \
/ math.sqrt(d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
p_attn = F.softmax(scores, dim = -1)
if dropout is not None:
p_attn = dropout(p_attn)
return torch.matmul(p_attn, value), p_attn
query 和 key.transpose(-2,-1) 相乘,兩者分別對應(yīng)的 shape 為 [nbatches, 8, L 64] 和 [nbatches, 8, 64, L]。這樣相乘得到的結(jié)果 scores 的 shape為[nbatches, 8, L, L]。
對 scores 進(jìn)行 softmax,所以 p_attn 的 shape 為 [nbatches, 8, L, L]。values的 shape 為 [nbatches, 8, L, 64]。所以最后 p_attn 與 values 相乘輸出的 result 的 shape 為 [nbatches, 8, L, 64]。
在我們的輸入與輸出中,有8個 heads 即 Tensor 中的 dimension 1,[ nbatches, 8, L, 64 ]。8個 heads 都進(jìn)行了不同的矩陣乘法,這樣就得到了不同的 “representation subspace”。這就是 multi-headed attention 的意義。
Step 3)
x的初始shape為 [ nbatches, 8, L, 64 ],x.transpose(1,2) 得到 [ nbatches,L, 8,64 ]。然后使用 view 進(jìn)行 reshape 得到 [ nbatches, L, 512 ]??梢岳斫鉃?個heads結(jié)果的 concatenate 。最后使用 last linear layer 進(jìn)行轉(zhuǎn)換。shape仍為 [ nbatches, L, 512 ]。與input時的shape是完全一致的。
可視化見論文中的圖例:

2.2 Encoder Sub-layer 2: Position-Wise fully connected feed-forward network

SubLayer-2 只是一個 feed-forward network。比較簡單。
在 Annotated Transformer 中對應(yīng)的實(shí)現(xiàn)為:
   
class PositionwiseFeedForward(nn.Module):
"Implements FFN equation."
def __init__(self, d_model, d_ff, dropout=0.1):
super(PositionwiseFeedForward, self).__init__()
self.w_1 = nn.Linear(d_model, d_ff)
self.w_2 = nn.Linear(d_ff, d_model)
self.dropout = nn.Dropout(dropout)

def forward(self, x):
return self.w_2(self.dropout(F.relu(self.w_1(x))))

2.3 Encoder short summary

Encoder 總共包含6個 EncoderLayers 。每一個 EncoderLayer 包含2個 SubLayer:
  • SubLayer-1 做 Multi-Headed Attention

  • SubLayer-2 做 feedforward neural network

3. The Decoder

Encoder 與 Decoder 的交互方式可以理解為:
Decoder 也是N層堆疊的結(jié)構(gòu)。被分為3個 SubLayer,可以看出 Encoder 與 Decoder 三大主要的不同:
  • Diff_1:Decoder SubLayer-1 使用的是 “masked” Multi-Headed Attention 機(jī)制,防止為了模型看到要預(yù)測的數(shù)據(jù),防止泄露。

  • Diff_2:SubLayer-2 是一個 encoder-decoder multi-head attention。

  • Diff_3:LinearLayer 和 SoftmaxLayer 作用于 SubLayer-3 的輸出后面,來預(yù)測對應(yīng)的 word 的 probabilities 。

3.1 Diff_1 : “masked” Multi-Headed Attention

mask 的目標(biāo)在于防止 decoder “seeing the future”,就像防止考生偷看考試答案一樣。mask包含1和0:
Attention 中使用 mask 的代碼中:
   
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
引用作者的話說, “We […] modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions. This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position i can depend only on the known outputs at positions less than i.”

3.2 Diff_2 : encoder-decoder multi-head attention

Annotated Transformer 中的 DecoderLayer 的實(shí)現(xiàn)為:
   
class DecoderLayer(nn.Module):
"Decoder is made of self-attn, src-attn, and feed forward (defined below)"
def __init__(self, size, self_attn, src_attn, feed_forward, dropout):
super(DecoderLayer, self).__init__()
self.size = size
self.self_attn = self_attn
self.src_attn = src_attn
self.feed_forward = feed_forward
self.sublayer = clones(SublayerConnection(size, dropout), 3)

def forward(self, x, memory, src_mask, tgt_mask):
m = memory
x = self.sublayer[0](x, lambda x: self.self_attn(x, x, x, tgt_mask))
x = self.sublayer[1](x, lambda x: self.src_attn(x, m, m, src_mask))
return self.sublayer[2](x, self.feed_forward)
重點(diǎn)在于 x = self.sublayer1 self.src_attn 是 MultiHeadedAttention 的一個實(shí)例。query = x,key = m, value = m, mask = src_mask,這里x來自上一個 DecoderLayer,m來自 Encoder的輸出。
到這里 Transformer 中三種不同的 Attention 都已經(jīng)集齊了:

3.3 Diff_3 : Linear and Softmax to Produce Output Probabilities

最后的 linear layer 將 decoder 的輸出擴(kuò)展到與 vocabulary size 一樣的維度上。經(jīng)過 softmax 后,選擇概率最高的一個 word 作為預(yù)測結(jié)果。
假設(shè)我們有一個已經(jīng)訓(xùn)練好的網(wǎng)絡(luò),在做預(yù)測時,步驟如下:
  1. 給 decoder 輸入 encoder 對整個句子 embedding 的結(jié)果 和一個特殊的開始符號 </s>。decoder 將產(chǎn)生預(yù)測,在我們的例子中應(yīng)該是 ”I”。

  2. 給 decoder 輸入 encoder 的 embedding 結(jié)果和 “</s>I”,在這一步 decoder 應(yīng)該產(chǎn)生預(yù)測 “Love”。

  3. 給 decoder 輸入 encoder 的 embedding 結(jié)果和 “</s>I Love”,在這一步 decoder 應(yīng)該產(chǎn)生預(yù)測 “China”。

  4. 給 decoder 輸入 encoder 的 embedding 結(jié)果和 “</s>I Love China”, decoder應(yīng)該生成句子結(jié)尾的標(biāo)記,decoder 應(yīng)該輸出 ”</eos>”。

  5. 然后 decoder 生成了 </eos>,翻譯完成。

但是在訓(xùn)練過程中,decoder 沒那么好時,預(yù)測產(chǎn)生的詞很可能不是我們想要的。這個時候如果再把錯誤的數(shù)據(jù)再輸給 decoder,就會越跑越偏:

這里在訓(xùn)練過程中要使用到 “teacher forcing”。利用我們知道他實(shí)際應(yīng)該預(yù)測的 word 是什么,在這個時候喂給他一個正確的結(jié)果作為輸入。
相對于選擇最高的詞 (greedy search),還有其他選擇是比如 “beam search”,可以保留多個預(yù)測的 word。Beam Search 方法不再是只得到一個輸出放到下一步去訓(xùn)練了,我們可以設(shè)定一個值,拿多個值放到下一步去訓(xùn)練,這條路徑的概率等于每一步輸出的概率的乘積,具體可以參考李宏毅老師的課程:

或者 “Scheduled Sampling”:一開始我們只用真實(shí)的句子序列進(jìn)行訓(xùn)練,而隨著訓(xùn)練過程的進(jìn)行,我們開始慢慢加入模型的輸出作為訓(xùn)練的輸入這一過程。
這部分對應(yīng) Annotated Transformer 中的實(shí)現(xiàn)為:
   
class Generator(nn.Module):
"Define standard linear + softmax generation step."
def __init__(self, d_model, vocab):
super(Generator, self).__init__()
self.proj = nn.Linear(d_model, vocab)

def forward(self, x):
return F.log_softmax(self.proj(x), dim=-1)
對著圖,再回顧一下 Encoder 與 Decoder 的結(jié)構(gòu)吧。



參考鏈接:
https://arxiv.org/pdf/1706.03762.pdf
https://glassboxmedicine.com/2019/08/15/the-transformer-attention-is-all-you-need/
https://jalammar.github.io/illustrated-transformer/


下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

下載2:Python視覺實(shí)戰(zhàn)項目52講
小白學(xué)視覺公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實(shí)戰(zhàn)項目,助力快速學(xué)校計算機(jī)視覺。

下載3:OpenCV實(shí)戰(zhàn)項目20講
小白學(xué)視覺公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項目20講,即可下載含有20個基于OpenCV實(shí)現(xiàn)20個實(shí)戰(zhàn)項目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

交流群


歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


瀏覽 71
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 狠狠狠操| 无码日逼视频| 亚洲免费在线观看视频| 日本欧美黄色| 亚洲无码一卡二卡| 麻豆www| 国产操逼免费看| 日韩AV电影在线观看| 成人啪啪网站| 国产精品不卡在线| 日韩一级免费观看| 亚洲日韩中文无码| 成人精品18| 蜜臀99久久精品久久久久久软件| 狠狠干在线观看| 男女啪啪啪网站| 樱桃码一区二区三区| 日韩欧美在线播放| 欧美一级婬片A片免费软件| 三级国产AV| 九色PORNY国产成人| 夜夜躁狠狠躁| 国产一级a毛一级a毛片视频黑人| 操比视频| 草逼的视频| 91在线无码精品秘国产-百度| 91热爆TS人妖系列| 亚洲天堂高清无码| av三级片在线播放| 男女啪啪网站| 午夜激情在线观看| 91精品国产综合久久久蜜臀九色 | 性久久久久久久久久| 亚洲精品日韩综合观看成人91| 亚洲国产另类精品| 男女日皮视频| 強姦婬片A片AAA毛片Mⅴ| 中文在线a√在线8| 国产三级片在线观看视频| www免费视频| 亚洲日本中文字幕在线| 吴梦梦一区二区三区| 日韩人妻无码精品| 日韩性爱网| AV网站在线播放| 三区在线| 高清亚洲| 日本爱爱免费播放视频| 一道本无码视频| 成人久操| 91无码一区二区三区在线| 制服.丝袜.亚洲.中文豆花| 久久小视频| 免费欧美性爱视频| 中文字幕福利视频| 中文字幕在线电影| 91精彩视频在线观看| 91亚洲国产成人精品一区二区三 | 亚洲人体视频| 黄色三级在线| 午夜褔利| 干老女人视频| ThePorn-成人网站入口| 日韩免费a| 色婷婷成人网| 国产丰满大乳无码免费播放 | 国产欧美一区二区三区国产幕精品 | 美女做爱在线观看| 国产激情都市一区二区三区欧美| 无码性爱视频| 少妇大战28厘米黑人| 青娱乐99| 韩国精品一区二区| 古装一级无遮挡A片| 久久久WWW成人免费精品| 成人免费视频国产在线观看| 日韩AV无码成人精品| 校园春色亚洲色图| 欧美日韩北条麻妃视频在线观看| 免费观看黄色网| 安徽妇搡BBBB搡BBB| 影音先锋av色| 青草成人在线视频| 精品中文字幕在线播放| 丝瓜视频污APP| 亚洲三级在线观看| 91在线精品视频| 午夜av在线| 人人澡人人澡| 99热99| 四川少妇BBB| 成人视频一区二区| 午夜操逼视频| 久操视频免费观看| 操毛| 国产久久这里只有精品视频| 成人做爰黄A片免费看陈冠| 国产成人免费在线| 亚洲日韩Av无码中文字幕美国 | 欧美中文字幕在线| 嫩草在线观看| 99热9| 日本A片| 色老板免费视频| 人妻第一页| 欧美成人黄色电影| 亚洲AV无码乱码精品| 婷婷久久综合久色| 成人h在线| 成人做爰A片一区二区| 欧美精品久久久久久| 黄色在线免费观看| 欧美成人精品AAA| 欧美成人精品AAA| 电影91久久久| 日本色综合| 97色色网| 国产黄片视频| 综合色国产精品欧美在线| 香蕉日逼| 开心色婷婷| 国产一级操逼| 91天天综合在线| 国产人妻精品一区二区三区不卡 | 日韩无码人妻一区二区三区| 亚洲午夜无码精品专区| 麻豆91精品91久久久停运原因| 3d动漫一区二区| 国产激情123区| 俺也去射| 中国熟睡妇BBwBBw| 色五月电影| 四虎www| 97人妻精品一区二区三区免| 日韩黄色小电影| 婷婷午夜精品久久久久久性色| 色天天干| 欧美肥臀| 亚洲人妻无码视频| 中出在线| 日韩国产高清无码| 中文字幕综合| 91福利在线观看| 最全av在线| 俺来也俺去也www色| 婷婷视频网站| 五月婷婷中文版| 2024男人天堂| 国产一级a免一级a免费| 中文字幕精品一区| 91无码秘蜜桃一区二区三区-百度| 亚洲AV无码国产综合专区| 91网站免费在线观看| 免费看一区二区三区| 国产精品国产精品国产专区不片| 爱爱无码| 五月天网址| 麻豆MD传媒MD0071| 亚洲伦理一区二区| 91嫖妓站街埯店老熟女| 日韩欧美一区在线| 国产午夜精品一区二区| 亚洲精品成AV人片天堂无码| 男人色天堂网| 一级黄色电影网站| 先锋影音资源站| 日韩性爱视屏| 欧美性爱无码在线| 国产又爽又黄网站免费观看| 豆花视频在线看| 国产黄色视频在线观看免费| 福利视频二区| 亚洲无码系列| 黄色视频| 性爱AV| 美女被操面费网站| 国产主播第一页| 欧美一级棒| 亚洲日韩一级片| 色婷婷大香蕉| 乱伦中文| 亚洲v欧美v| 日韩黄色免费网站| 狠狠操2019| 日韩中文在线播放| 超碰人人草| 久久蜜桃| 日韩三级在线免费观看| 粉嫩99国产精品久久久久久人妻| 黄色免费无码| 国产麻豆精品成人毛片| 俺来也俺也啪www色| 久久久精品人妻| 欧美大吊在线| 西西人体BBBBBB| 91高清无码视频| www.黄色com| 国产欧美一区二区三区视频在线观看 | 影音先锋婷婷| 激情爱爱网站| 亚洲偷拍网| 高清av在线| 大香蕉97| 日韩av中文字幕在线播放| 成人天堂一区二区三区| 日韩不卡AV| 中文字幕不卡在线| 久久蜜桃| 一本色道精品久久一区二区三区| 午夜性爱网址| 狠狠干网站| 九九精品国产| 中文字幕成人电影| 麻豆三级精品| 久久精品苍井空免费一区| 亚洲视频网站在线观看| 军人妓女院BD高清片在线播放| 爱搞搞就要搞| 91精品人妻人人爽| 五月婷在线视频| JlZZJLZZ亚洲美女18| 加勒比无码高清| 一区二区三区四区无码| 综合视频一区| 人妻av无码| 亚洲无码999| 99热这里只有精品9| 欧美aaaaaa| 人人综合网| 草逼国产| 日韩一级一级| 久久久人妻无码精品蜜桃| 一级a免一级a做免费线看内裤| 永久免费无码中文字幕| av高清| 亚洲精品中文字幕在线| 人妻国产| 国产精品无码ThePorn| 大香蕉精品视频在线| 男同人到爽无套狂欢| 狠狠干B| 精东影业AV无码精品| 91绿帽人妻-ThePorn| 欧美日韩国产尤物主播精品| 国产精品视频导航| 伊人色播| 一区二区三区电影高清电影免费观看| 久久久XXX| 操逼网址大全| 成人做爰A片免费看网站| 91蜜桃视频| 日屄视频免费看| 亚洲欲色| 成人免费在线观看| 高颜值呻吟给力| 日韩一区二区三区四区久久久精品有吗| 国产v在线观看| 92无码| 91视频美女内射| 六月综合网| 台湾一区二区| 欧美中文字幕在线| 天天色人人| 成人在线免费电影| 日韩人妻精品无码久久| 黄色网址五月天| 校园春色av| 亚洲一区二区三区在线| 黄色视频一区二区| 欧美日皮| 国产黄色小电影| 狠狠操狠狠操| 加勒比国产在线| AV日韩无码| 国产一级免费视频| A级片免费看| 国产AV影片| 亚洲av影院| 911国产视频| 中国黄色学生妹一级片| 精品视频一区二区三区| 亚洲av高清| 日韩AV小电影| 中文字幕在线观看免费视频| 色婷婷俺来也| 不卡三区| 国产成人亚洲日韩| 91视频入口| 另类老妇奶BBBBwBB| 精品无码在线观看| 日批视频免费观看| 成人看片黄a免费看视频| 国产美女精品久久AV爽| 一区二区经典| 国产成人精品视频免费| www.99免费视频| 少妇搡BBBB搡BBB搡AA| 亚洲中文字幕在线免费观看视频 | 中文字幕第12页| 亚洲成人性爱av| 黄色动漫在线免费观看| 色伊人| 久久影院三级片| 欧美一卡| 精品视频一区二区| 91精品视频在线免费观看| www.激情五月天| 91麻豆精品A片国产在线观看| 国产精品久久久久久久9999| 成人性爱视频在线观看| 精品久久久999| 天天操天天操天天操天天操| 国产精品123区| 91无码精品国产AⅤ| 肏屄视频在线| 成人AV在线一区二区| 久99久视频| 天天做天天爱天天高潮| 狠狠撸天天操| 国产成人无码区免费AV片在线| 免费在线观看中文字幕| 亚洲国产电影| 樱桃码一区二区三区| 在线播放一区二区三区| 99久久精品国产精品有折扣吗| 成人免看一级a一片| 操比视频在线观看| 亚洲精品日韩中文字幕| 自拍欧美亚洲| 日韩精品成人无码| 久久久偷拍视频| 亚洲中文字幕免费视频| 久久久精品电影91| 欧美久久大香蕉| 超碰9| 天天草视频| 囯产精品久久久久久久久久| 欧美日韩免费在线视频| 日本黄色视| 欧美激情性爱网站| 精品日韩一区二区三区| 手机不卡黄色视频在线| 国产毛片毛片| 丁香六月婷婷综合| 首屈一指视频在线观看| 日本黄色视频免费观看| 欧美精品一级| 香蕉91视频| 一区二区中文字幕| 99热在线观看精品免费| 影音先锋色站| 国产精品福利小视频| 开心色婷婷| 狠狠干天天日| 伊人久久狼人| 91精品国产乱码香蕉黄瓜草莓| 亚洲视频免费| 成人欧美精品| 操逼免费看| 日韩精品丰满无码一级A片∴| 亚洲AV无码成人精品| 色琪琪在线视频| 俺来也俺也啪www色| 亚洲AV电影天堂| 午夜成人毛片| jizz国产视频| 久草免费在线视频| www.操逼网| 婷婷五月香| 超碰人人搞| 青青青视频在线| 另类老妇奶性生BBwBBw偷拍| AA片免费网站| 极品久久久久| 亚洲www.| 国产熟女在线| 婷婷五月天久久| 可以看的毛片| 欧美A级视频| 超碰97老师| 久久三级视频| 香蕉视频成人在线| 日本一级特黄电影| 欧美成人在线免费视频| 最新中文字幕观看| 伊人大综合| 在线操B视频| 乱子伦国产精品视频| 欧美激情xxx| 男女啪啪动态图| 一本大道久久久久| 日韩午夜精品| 亚洲真人无码| 日韩黄色电影在线观看| 国内精品久久久久久久久98| 最新中文字幕在线观看| 国产精品高清无码| 亚洲天堂天天| 综合色婷婷一区二区亚洲欧美国产| 中文字幕视频在线免费观看| 欧美成人三级在线| 国产嫩草影院| 五月婷婷在线播放| 欧美性猛交ⅩXXX乱大交| 色婷婷久久综合久色| a无码视频在线观看| 懂色av| 97精品人妻一区二区三区在线| 中文无码Av| 国产在线无码视频| 黄色大片免费网站| 西西888WWW大胆无码| 国产人人爱| 你懂的在线视频| 懂色av懂色av粉嫩av无码 | 欧美猛男的大鷄巴| 婷婷久久网| 九九色色| 欧美精品一二三区| 波多野结衣操逼| 樱桃码一区二区三区| 97人人人人人人| 日韩AA视频| 国精产品秘成人一区二| www.蜜桃av| 久草福利在线观看| 免费无码国产在线55| 色色色色色欧美网| 人人摸人人色| 99国产高清| 黄色小电影在线观看| 日韩性爱小说| 日本三级AAA三级AAAA97| 天天摸夜夜操| 91在线无码精品秘入口电车| 黄色大片免费看| 成人精品一区二区区别解析| 久久久免费黄色视频| 欧美日韩在线一区| 亚洲淫秽视频| 柠檬福利第一导航| 天堂网2014| 久久国产一区二区| av解说| 精品综合| 中文字幕免费一区| 熟女人妻人妻の视频| 国产三级黄| 亚洲国产精品一区二区三区| 亚洲AV资源| 丁香五月婷婷基地| 大鸡巴黄色视频免费观看| 中文熟女| 亚洲加勒比久久88色综合| 99在线免费观看视频| 亚洲精品69| 日韩无码第四页| 日韩欧美黄色| 99黄片| 久久久综合网| 久草这里只有精品| 欧美性爱视频免费观看| 91亚洲在线观看| 91丨九色丨东北熟女| 成人无码免费视频| 俺也去com| 精精品人妻一区二区三区| 久久大陆| 中国熟女视频| 国产一区在线视频| 免费看黄的网站在线观看| 亚洲无码免费视频在线观看| 亚洲日韩国产AV无码无码精品| 免费在线观看视频黄| 国产精品久久久91| 久久久久成人片免费观看蜜芽| 午夜在线免费视频| 精品九九九九九九| 暖暖爱视频免费| 亚洲黄色视频网站在线观看| 一区二区三区高清不卡| www黄片| 中文字幕乱码中文字幕电视剧| 在线免费观看黄色网址| 日韩性爱网站| 色色色777| 国产99页| 国产人成视频免费观看| 一级A片| 色婷婷国产精品综合在线观看| 91视频免费在线看| 操逼黄色视频| 亚洲成人网在线| 经典三级在线视频| VA电影| 色哟哟av| 豆花视频免费观看| 亚洲精品无| 懂色中国闺密偷情懂色AV| 人人肏人人摸| 成人精品123| 亚洲视频在线观看播放| 毛片网站在线观看| 久久久久婷婷| 四季AV之日韩人妻无码| 国产欧美一级片| 久久99久久99久久99国内少妇精品 | 青娱乐国产av| 久久无码黄片| 国产精品v| 自拍偷拍av| 亚洲黄v| 伊人三区| 成人AV免费在线观看| wwwsesese| 黄色三级片视频| 极品小仙女69| 俺来也俺也去| 日本一区二区三区免费观看| 69综合| 免费av一区二区| 婷婷五月天久久| www| 国产精品美女毛片j酒店| 精品精品视频| 欧美色图15p| 亚洲一区AV| 国产午夜成人免费看片无遮挡| 噼里啪啦免费观看视频大全| 色色欧美视频| 伊人狠狠| av色色| 福利一区在线观看| 伊人久久大香线蕉| 亚洲黄色在线观看| a片网| 国产三级AV在线| 免费视频在线观看一区| 中文字幕69| 日韩在线一区二区| 亚洲香蕉| 成年人免费电影| 99精品自拍| 中文av网站| 一本一道久久综合狠狠躁牛牛影视 | 人人免费操| 日韩成人无码电影网站| www超碰在线| 欧美精产国品一二三区| 久久黄色网址| 天天操天天射天天日| 女人av天堂| 最好看2019中文在线播放电影| 亚洲欧美色图| 亚洲A视频| 国产日韩欧美一区二区| 亚洲高清视频免费| 3D精品啪啪一区二区免费| 国产又爽又黄免费| 亚洲最新无码视频| 91国产做爱| 免费性爱视频网站| 超碰九九| 99久久久精品| 国产三级黄色| 3D精品啪啪一区二区三区| 懂色av一区蜜桃| 国产乱婬AAAA片视频| 夜夜嗨AV一区二区三区| 精品人妻二区三区蜜桃| 日韩视频91| 人妻日日| 日韩三级在线免费观看| 日韩综合在线| 成人无码毛片| 国产午夜无码视频在线观看| 国产69精品久久久久久| 玖玖综合网| 操B视频在线播放| 国产精品久久久一区二区三区| 日韩人妻中文字幕| 大香蕉一级片| 亚洲欧美v| 高清成人无码| 中文字幕成人网站| 青春草在线视频免费观看| 国产高清在线免费观看AV片| 亚洲一区二区三区在线++中国| 亚洲视频第一页| 成人激情综合网| 亚洲欧洲免费| 三级片无码麻豆视频| 大香蕉最新视频| 中文一区在线观看| 嫩草99| 天天插在线视频| 91在线看| 成人黄片免费看| 亚洲高清av| 色色视频在线观看| 久热在线精品视频| 激情免费网站| 久久综合无码内射国产| 99在线观看视频在线高清| 亚洲精品一区中文字幕乱码| 色青草影院久久综合| 强伦轩一区二区三区四区播放方式 | 黄色一级片在线看| а√在线中文网新版地址在线 | 福利视频中文字幕| 成人A片在线播放| 午夜福利啪啪啪| 澳门黄片| 日韩三级毛片| 一起操在线观看| 老熟女露脸25分钟91秒| 精品久久久久久久久久久| 高清无码中文字幕在线观看| 伊人精品A片一区二区三区| 性综合网| 四虎91| 欧产日产国产swag| 亚洲日本中文字幕在线| 亚洲第一综合网| 欧美精品18videosex性欧美 | 欧美性爱在线观看| 中日韩欧美一级A片免费| 国产成人精品一区二区三区在线| 99热7| 爱操逼综合网| 国产精品免费观看视频| 国产精品揄拍500视频| 精品无码视频在线观看| 中国婬乱a| 黄色视频毛片一一| 亚洲三级无码在线| 国产精品999999| 中文字幕一二三四| 梁祝艳谭A级毛片| www.插逼| 老熟女--91XX| 亚洲天堂在线观看视频网站| 日本一区二区三区四区| 狠狠香蕉| 亚洲AV秘一区二区色盗战流出 | 亚洲综合婷婷| 天天日综合| 亚洲精品99| 国产一区无码| 亚洲无码在线电影| 日韩欧美成人电影| 婷婷五月香| 国产黄在线观看| 一本一道久久| 亚洲色情在线| 亚洲精品456| av日韩无码| av在线一区二区| 日本91视频| 护士小雪的yin荡高日记H视频 | 狠狠狠狠狠狠狠| 在线观看成年人视频| 亚洲精品不卡| 成人黄色av| 色汉综合| 2025av天堂网| 在线免费毛片| AV一区二区三区四区| 人成视频在线免费观看| 无码人妻精品一区二区三区99仓| 欧美中文日韩| 97视频在线观看免费| 亚洲欧美v| 草莓视频在线播放| 狠狠天天| 中文日韩欧美| 操逼网站免费看| 在线观看亚洲天堂| 成人无码区免费AV毛片| 操逼视频国产| 无码久久| 欧美午夜精品| 一纹A片免费观看| 久久午夜无码鲁片午夜精品男男| 翔田千里无码精品| 精品欧美激情精品一区| 青青热视频| 黄网91| 91精品91久久久中77777| 制服.丝袜.亚洲.中文.豆花| 97人妻一区| 亚洲第一成年人网站| www伊人| 一级a性色毛片| 成人A√| 国产无套内射视频| 人妻体内射精一区二区三区| 午夜福利剧场| 一级a一级a免费观看视频Al明星 | 一本道不卡色色| 国产午夜91人妻| 日本肏逼视频| 俺也去射| 麻豆www| 天天草视频| 91麻豆精品国产91久久久久久 | 黄色成人网站免费在线观看| 日韩精品网| 一级A片在线观看| 天天操天天日天天干| 国产精品久久| 91丨牛牛丨国产人妻| 天天干网址| 夜夜操天天| 一区无码高清| 三级91| 欧美黄色三级视频| a视频免费| 俄罗斯熟妇搡BBBB搡BBBB| 成人在线视频播放| 日本黄色视频在线观看| 免费视频一区二区| 久草视频在线资源| 亚洲欧洲久久| 天堂v视频| 中文字字幕在线| 99久久精品国产一区二区成人| 亚洲激情黄色| 国产亚洲精品久久久久动| 91在线精品一区二区| 黄色伊人| 综合欧美国产视频二区| 亚洲视频二| 操美女的网站| AV在线四季综合网站| 日韩无码精品一区二区三区| 五月天在线观看| 一级日逼| 狠狠撸在线| 丝袜人妻被操视频| 狠狠精品| 久久福利电影| 日本国产视频| 欧美A片网站| 日韩成人精品视频| 成人精品免费| 中文字幕免费| 日韩人妻无码网站| 国产伦精品一区二区三区妓女下载| 香蕉综合在线| 撸一撸AV| 日本黄色视频网址| 中文字幕久久无码| np高辣调教视频| 视频一区二区免费| 国精品无码A区一区二区| 中文字幕精品一区| 蜜桃av无码一区二区三区| 特黄aaaaaaaa真人毛片| 丁香激情五月天| 丁香五月激情中文字幕| 一级免费爱爱视频| 自拍偷拍激情视频| 亚洲成人AV无码| 久草热在线| 黃色一级一片免费播放| 北条麻妃无码一区三区| 五月天色色图| 亚洲高清电影| 久久538| 亚洲人体视频| 午夜成人福利| 51成人免费| 久草在在线| 中文字幕亚洲无码视频| 丰满人妻精品一区二区在线| 在线观看国产黄色| 中文字幕++中文字幕明步| 激情婷婷av| 中文字幕精品1| 日本一区二区三区在线播放| 在线观看你懂得| 大香蕉国产视频| 色丁香六月| 天天舔天天操| 91.www91成人影视在线观看91成人网址9 | 偷拍精品视频| 色婷婷视频在线播放| www.蜜桃| 牛牛影视一区二区| 亚洲无码乱码精品| eeuss一区二区| 午夜激情AV| 海滩AV黑人| 成人做爰黄级A片免费看土方| 先锋久久| 五月婷婷色综合| www黄色视频| 97人妻碰碰中文无码久热丝袜| 9一区二区三区| 91精品国产乱码香蕉黄瓜草莓| www.天天操| 青青草原av| 日韩无码一卡| 日韩久久高清| 黄色三级在线| 波多野结衣不卡| 先锋影音男人| 亚洲男同Gay一区二区| 色婷婷AV一区二区三区之e本道| 搡BBBB搡BBB搡五十| 亚洲综合p| 美女高潮网站| 日日操夜夜爽| 九九热精品视频在线播放| 黄色视频一区二区| 中文字幕乱码在线| 人人操人人骑| jizz99| 日韩无码专区电影| 日韩欧美三级在线| 无码人妻精品一区| 一级黄色电影网站| 91丝袜足交| 亚洲中文第一页| 中文最新天堂8√| 亚洲人人操| 久久久www成人免费毛片| 黄色无码在线观看| 18禁网站禁片免费观看| 爱操AV| 午夜人妻无码| 天天日天天操天天摸天天干天日射天天插 | 日韩中文字幕区| 国产农村妇女精品一二区| 久久黄片| 亚洲熟女一区二区三区妖精| 99久久亚洲精品日本无码| 国产成人无码AⅤ片免费播放| 久久伊人网站| 久久动图| 亚洲AV成人无码一区二区三区| 欧美中文在线观看| 国产三级片网站| 色噜噜狠狠一区二区三区300部| 中文字幕一二三区| 国产欧美自拍| 日逼导航| 国产农村妇女精品一二区| 久久国产精品网站| 五月无码视频| 日韩性爱av| 中文字幕国产精品| 丁月婷婷五香天日五月天| 国产精品囯产三级囯产AV野外| 新妺妺窝窝777777野外| 亚洲精品一区二区三区在线观看| 国产a毛一级,a毛一级| 亚洲视频在线免费看| 女人天堂av| 按摩性高湖婬AAA片A片中国| 黄色一级片免费观看| 国产A片视频| 国产AV一区二区三区四区五区| 日本一区二区视频在线| 日韩精品一二三区| 日韩99在线观看| 午夜福利电影AV| av中文字幕网| 日韩黄色电影在线免费观看| 69成人在线电影| 免费三级网站| 美女网站黄a| 四川少妇搡bbw搡bbbb| 黄色AV免费看| 99青青草| 精品无码蜜桃| 无码AV一区二区| 丁香婷婷五月综合影院| 亚洲精品国产成人AV在线 | 亚洲天堂一级片| 国产成人AV一区二区三区在线观看| 欧美囗交荫蒂AAAA| 亚洲欧美熟妇久久久久久久久| 人人干视频| 国产毛片一区二区三区| 老司机无码| ww毛片| www.大鸡巴| 三级片AAAA| 亚洲区成人777777精品| 欧美黄色电影在线观看| 18网站视频| 男女69视频| 亚洲中文无码第一页| 日韩性爱av| 欧美操操| 少妇三级| 99成人免费视频| 欧美一级a|