久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Step-by-step to Transformer:深入解析工作原理(以Pytorch机器翻译为例)

發(fā)布時(shí)間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Step-by-step to Transformer:深入解析工作原理(以Pytorch机器翻译为例) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大家好,我是青青山螺應(yīng)如是,大家可以叫我青青,工作之余是一名獨(dú)立攝影師。喜歡美食、旅行、看展,偶爾整理下NLP學(xué)習(xí)筆記,不管技術(shù)文還是生活隨感,都會(huì)分享本人攝影作品,希望文藝的技術(shù)青年能夠喜歡~~如果有想拍寫真的妹子也可以在個(gè)人公號(hào)【青影三弄】留言~

Photograhy?Sharing

拍攝參數(shù)? ?|? ?f2.8/ 190mm/ ISO1500

設(shè)備? ?|? ?Canon6D2 / 70-200mm f2.8L III USM? ?

先分享一張?jiān)诜鹆_倫薩的人文攝影~

今年去意呆的時(shí)候特別熱,每天都是白晃晃的大太陽,所以我總喜歡躲到附近的教堂,那里是“免費(fèi)的避暑勝地”。

“諸圣教堂”離我住處很近,當(dāng)時(shí)遇到神父禱告,他還緩緩唱了首歌,第一次覺得美聲如此動(dòng)人,怪不得意呆人那么熱愛歌劇,連我這種音樂小白都被感染到了~

喜歡“諸圣教堂”的另一個(gè)原因是這里埋葬著基爾蘭達(dá)約、波提切利和他愛慕的女神西蒙內(nèi)塔。生前“小桶”因她創(chuàng)作了《維納斯的誕生》,離開人世他又得償所愿和心愛之人共眠。情深如此,我能想到的中國式浪漫大概也只有“庭有枇杷樹,吾妻死之年所手植也,今已亭亭如蓋矣”相比了..


AI sharing

之前介紹過Seq2Seq+SoftAttention這種序列模型實(shí)現(xiàn)機(jī)器翻譯,那么拋棄RNN,全面擁抱attention的transformer又是如何實(shí)現(xiàn)的呢。

本篇介紹Transformer的原理及Pytorch實(shí)現(xiàn),包括一些細(xì)枝末節(jié)的trick和個(gè)人感悟,這些都是在調(diào)試代碼過程中深切領(lǐng)會(huì)的。網(wǎng)上查了很多文章,大部分基于哈佛那片論文注釋,數(shù)據(jù)集來源于tochtext自帶的英-德翻譯,但是本篇為了和上面攝影分享對(duì)應(yīng)以及靈活的自定義數(shù)據(jù)集,采用意大利-英語翻譯。

CONTENT

1、Transformer簡(jiǎn)介

2、模型概覽

3、數(shù)據(jù)加載及預(yù)處理

?? ? ?3.1原始數(shù)據(jù)構(gòu)造DataFrame

? ? ? 3.2自定義Dataset

? ? ? 3.3構(gòu)建字典

? ? ??3.4Iterator實(shí)現(xiàn)動(dòng)態(tài)批量化

? ? ??3.5生成mask

4、Embedding層

? ? ??4.1普通Embedding

? ? ??4.2位置PositionalEncoding

? ? ??4.3層歸一化

5、SubLayer子層組成

? ? ??5.1MulHeadAttention(self+context attention)

? ? ? ? ? ?self attention

? ? ? ? ? ?attention score:scaled dot product

? ? ? ? ? ?multi head

? ? ??5.2Position-wise Feed-forward前饋傳播

? ? ??5.3Residual Connection殘差連接

6、Encoder組合

7、Decoder組合

8、損失函數(shù)和優(yōu)化器

? ? ?8.1損失函數(shù)實(shí)現(xiàn)標(biāo)簽平滑

? ? ?8.2優(yōu)化器實(shí)現(xiàn)動(dòng)態(tài)學(xué)習(xí)率

9、模型訓(xùn)練Train

10、測(cè)試生成

11、注意力分布可視化

12、數(shù)學(xué)原理解釋transformer和rnn本質(zhì)區(qū)別

【資料索取】

公眾號(hào)回復(fù):Transformer

可獲取完整代碼

1.?Transfomer簡(jiǎn)介

《Attention Is All Your Need》是一篇Google提出全面使用self-Attention的論文。這篇論文中提出一個(gè)全新的模型,叫 Transformer,拋棄了以往深度學(xué)習(xí)任務(wù)里面使用到的 CNN 和 RNN。目前大熱的Bert就是基于Transformer構(gòu)建的,這個(gè)模型廣泛應(yīng)用于NLP領(lǐng)域,例如機(jī)器翻譯,問答系統(tǒng),文本摘要和語音識(shí)別等等方向。

眾所周知RNN雖然模型設(shè)計(jì)小巧精妙,但是其線性序列模型決定了無法實(shí)現(xiàn)并行,從兩個(gè)任意輸入和輸出位置獲取依賴關(guān)系都需要大量的運(yùn)算,運(yùn)算量嚴(yán)重受到距離的制約;而且距離不但影響性能也影響效果,隨著記憶時(shí)序的拉長,記憶削弱,導(dǎo)致學(xué)習(xí)能力削弱。

為了拋棄RNN step by step線性時(shí)序,Transformer使用了可以biself-attention,不依靠順序和距離就能獲得兩個(gè)位置(實(shí)質(zhì)是key和value)的依賴關(guān)系(hidden)。這種計(jì)算成本減少到一個(gè)固定的運(yùn)算量,雖然注意力加權(quán)會(huì)減少有效的resolution表征力,但是使用多頭multi-head attention可以彌補(bǔ)平均注意力加權(quán)帶來的損失。

自注意力是一種關(guān)注自身序列不同位置的注意力機(jī)制,能計(jì)算序列的表征representation。

和之前分享的Seq2Seq+SoftAttention相比,Transformer不僅關(guān)注encoder和decoder之間的attention,也關(guān)注encoder和decoder各自內(nèi)部自己的attention。也就是說前者的hidden是靠lstm來實(shí)現(xiàn),而transformer的encoder或者decoder的hidden是靠self-attention來實(shí)現(xiàn)。

2.?模型概覽

Transformer結(jié)構(gòu)和Seq2Seq模型是一樣的,也采用了Encoder-Decoder結(jié)構(gòu),但Transformer更復(fù)雜。

2.1宏觀組成

Encoder由6個(gè)EncoderLayer構(gòu)成,Decoder由6個(gè)DecoderLayer構(gòu)成:

對(duì)應(yīng)的代碼邏輯如下,make_model包含EncoderDecoder模塊,可以看到N=6表示Encoder和Decoder的子層數(shù)量,d_ff是前饋神經(jīng)網(wǎng)絡(luò)的中間隱層維度,h=代表的是注意力層的頭數(shù)。

后面還規(guī)定了初始化的策略,如果每層參數(shù)維度大于1,那么初始化服從均勻分布init.xavier_uniform

def make_model(src_vocab, tgt_vocab, N=6, d_model=512, d_ff=2048, h=8, dropout=0.1):c = copy.deepcopyattn = MultiHeadedAttention(h, d_model)ff = PositionwiseFeedForward(d_model, d_ff, dropout)position = PositionalEncoding(d_model, dropout)model = EncoderDecoder(Encoder(EncoderLayer(d_model, c(attn), c(ff), dropout), N),Decoder(DecoderLayer(d_model, c(attn), c(attn), c(ff), dropout), N), nn.Sequential(Embeddings(d_model, src_vocab), c(position)),nn.Sequential(Embeddings(d_model, tgt_vocab), c(position)),Generator(d_model, tgt_vocab))for p in model.parameters():if p.dim() > 1:nn.init.xavier_uniform(p)return model

EncoderDecoder里面除了Encoder和Decoder兩個(gè)模塊,還包含embed和generator。Embed層是對(duì)對(duì)輸入進(jìn)行初始化,詞嵌入包含普通的Embeddings和位置標(biāo)記PositionEncoding;Generator作用是對(duì)輸出進(jìn)行full linear+softmax

其中可以看到Decoder輸入的memory就是來自前面Encoder的輸出,memory會(huì)分別喂入Decoder的6個(gè)子層。

class EncoderDecoder(nn.Module): def __init__(self, encoder, decoder, src_embed, tgt_embed, generator):super(EncoderDecoder, self).__init__()self.encoder = encoderself.decoder = decoderself.src_embed = src_embedself.tgt_embed = tgt_embedself.generator = generatordef forward(self, src, tgt, src_mask, tgt_mask):return self.decode(self.encode(src, src_mask), src_mask, tgt, tgt_mask)def encode(self, src, src_mask):return self.encoder(self.src_embed(src), src_mask)def decode(self, memory, src_mask, tgt, tgt_mask):return self.decoder(self.tgt_embed(tgt), memory, src_mask, tgt_mask) class Generator(nn.Module):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)

2.2內(nèi)部結(jié)構(gòu)

上面是Transformer宏觀上的結(jié)構(gòu),那Encoder和Decoder內(nèi)部都有哪些不同于Seq2Seq的技術(shù)細(xì)節(jié)呢:

(1)Encoder的輸入序列經(jīng)過word embedding和positional encoding后,輸入到encoder。

(2)在EncoderLayer里面先經(jīng)過8個(gè)頭的self-attention模塊處理source序列自身。這個(gè)模塊目的是求得序列的hidden,利用的就是自注意力機(jī)制,而非之前RNN需要step by step算出每個(gè)hidden。然后經(jīng)過一些norm和drop基本處理,再使用殘差連接模塊,目的是為了避免梯度消失問題。(后面代碼實(shí)現(xiàn)和上圖在實(shí)現(xiàn)順序上有一點(diǎn)出入)
(3)在EncoderLayer里面再進(jìn)入Feed-Forward前饋神經(jīng)網(wǎng)絡(luò),實(shí)際上就是做了兩次dense,linear2(activation(linear1))。然后同上經(jīng)過一些norm和drop基本處理,再使用殘差連接模塊。

(4)Decoder的輸入序列處理方式同上

(5)在DecoderLayer里面也要經(jīng)過8個(gè)頭的self-attentention模塊處理target序列自身。不同于Encoder層,這里只需要關(guān)注輸入時(shí)刻t之前的部分,目的是為了符合decoder看不到未來信息的邏輯,所以這里的mask是融合了pad-mask和sequence-mask兩種。同Encoder,這個(gè)模塊目的也是為了求得target序列自身的hidden,然后經(jīng)過一些norm和drop基本處理,再使用殘差連接模塊。

(6)在DecoderLayer里面再進(jìn)入src-attention模塊,這個(gè)模塊也是相比Encoder增加的注意力層。其實(shí)注意力結(jié)構(gòu)都是相似的,只是(query,key,value)不同,對(duì)于self-attention這三個(gè)值都是一致的,對(duì)于src-attention,query來自decoder的hidden,key和value來自encoder的hidden

(7)在DecoderLayer里面最后進(jìn)入Feed-Forward前饋神經(jīng)網(wǎng)絡(luò),同上。

介紹完Transformer整體結(jié)構(gòu),下面從數(shù)據(jù)集處理到各層代碼實(shí)現(xiàn)細(xì)節(jié)進(jìn)行詳細(xì)說明~

3.?數(shù)據(jù)加載及預(yù)處理

GPU環(huán)境使用Google Colab 單核16g,數(shù)據(jù)集eng-ita.txt,普通的英意翻譯對(duì)的文本數(shù)據(jù)。數(shù)據(jù)集預(yù)處理使用的是torchtext+spacy工具,他使用的整體思路是構(gòu)造Dataset,字典、Iterator實(shí)現(xiàn)批量化、對(duì)矩陣進(jìn)行mask pad。

數(shù)據(jù)預(yù)處理非常重要,這里涉及很多提高訓(xùn)練性能的trick。下面具體看一下如何使用自定義數(shù)據(jù)集來完成這些預(yù)處理步驟。

3.1原始數(shù)據(jù)構(gòu)造DataFrame

先加載文本,并將source和target兩列轉(zhuǎn)換為兩個(gè)獨(dú)立的list:

corpus = open('./dataset/%s-%s.txt' % ('eng', 'ita') , 'r', encoding='utf-8').readlines() random.shuffle(corpus) def prepare_data(lang1_name, lang2_name, reverse=False):print("Reading lines...")input_lang, output_lang = [], [] # rawfor parallel in corpus:so,ta = parallel[:-1].split('\t') #一行實(shí)際是英文和法文對(duì)兒 用tab來分割if so.strip() == "" or ta.strip() == "":continueinput_lang.append(so)output_lang.append(ta)if reverse:return output_lang,input_langelse:return input_lang,output_lang input_lang, output_lang = prepare_data('eng', 'ita', True)

因?yàn)閠orchtext的dataset的輸入需要DataFrame格式,所以這里先利用上面的source和target list構(gòu)造DataFrame。訓(xùn)練集、驗(yàn)證集、測(cè)試集按照實(shí)際要求進(jìn)行劃分:

train_list=corpus[:-3756] valid_list=corpus[-1622:] test_list=corpus[-3756:-1622] c_train={'src':input_lang[:-3756],'trg':output_lang[:-3756]} train_df=pd.DataFrame(c_train) c_valid={'src':input_lang[-1622:],'trg':output_lang[-1622:]} valid_df=pd.DataFrame(c_valid) c_test={'src':input_lang[-3756:-1622],'trg':output_lang[-3756:-1622]} test_df=pd.DataFrame(c_test)

3.2構(gòu)造Dataset

這里主要包含分詞、指定起止符和補(bǔ)全字符以及限制序列最大長度。

因?yàn)閠orchtext的Dataset是由example組成,example的含義就是一條翻譯對(duì)記錄。

# 分詞 spacy_it = spacy.load('it') spacy_en = spacy.load('en') def tokenize_it(text):return [tok.text for tok in spacy_it.tokenizer(text)] def tokenize_en(text):return [tok.text for tok in spacy_en.tokenizer(text)] # 定義FIELD配置信息 # 主要包含以下數(shù)據(jù)預(yù)處理的配置信息,比如指定分詞方法,是否轉(zhuǎn)成小寫,起始字符,結(jié)束字符,補(bǔ)全字符以及詞典等等 BOS_WORD = '<s>' EOS_WORD = '</s>' BLANK_WORD = "<blank>" SRC = data.Field(tokenize=tokenize_it, pad_token=BLANK_WORD) TGT = data.Field(tokenize=tokenize_en, init_token=BOS_WORD, eos_token=EOS_WORD, pad_token=BLANK_WORD) # get_dataset構(gòu)造并返回Dataset所需的examples和fields def get_dataset(csv_data, text_field, label_field, test=False):fields = [('id', None), ('src', text_field), ('trg', label_field)]examples = []if test:for text in tqdm(csv_data['src']): # tqdm的作用是添加進(jìn)度條examples.append(data.Example.fromlist([None, text, None], fields))else:for text, label in tqdm(zip(csv_data['src'], csv_data['trg'])):examples.append(data.Example.fromlist([None, text, label], fields))return examples, fields # 得到構(gòu)建Dataset所需的examples和fields train_examples, train_fields = get_dataset(train_df, SRC, TGT) valid_examples, valid_fields = get_dataset(valid_df, SRC, TGT) test_examples, test_fields = get_dataset(test_df, SRC, None, True) 構(gòu)建Dataset數(shù)據(jù)集 # 構(gòu)建Dataset數(shù)據(jù)集 # 這里的ita最大長度也就56 MAX_LEN = 100 train = data.Dataset(train_examples,train_fields,filter_pred=lambda x: len(vars(x)['src'])<= MAX_LEN and len(vars(x)['trg']) <= MAX_LEN) valid = data.Dataset(valid_examples, valid_fields,filter_pred=lambda x: len(vars(x)['src']) <= MAX_LEN and len(vars(x)['trg']) <= MAX_LEN) test = data.Dataset(test_examples, test_fields,filter_pred=lambda x: len(vars(x)['src']) <= MAX_LEN)

3.3構(gòu)造字典

MIN_FREQ = 2 #統(tǒng)計(jì)字典時(shí)要考慮詞頻 SRC.build_vocab(train.src, min_freq=MIN_FREQ) TGT.build_vocab(train.trg, min_freq=MIN_FREQ)

3.4構(gòu)造Iterator

torchtext的Iterator主要負(fù)責(zé)把Dataset進(jìn)行批量劃分、字符轉(zhuǎn)數(shù)字、矩陣pad。

這里有個(gè)很重要的點(diǎn)就是批量化,本例使用的是動(dòng)態(tài)批量化,即每個(gè)batch的批大小是不同的,是以每個(gè)batch的token數(shù)量作為統(tǒng)一劃分標(biāo)準(zhǔn),也就是說每個(gè)batch的token數(shù)基本一致,這個(gè)機(jī)制是通過batch_size_fn來實(shí)現(xiàn)的,比如batch1[16,20],batch2是[8,40],兩者的批大小是不同的分別是16和8,但是token總數(shù)是一樣的都是320。

采取這種方式的特點(diǎn)就是他會(huì)把長度相同序列的聚集到一起,然后進(jìn)行pad,從而減少了pad的比例,為什么要減少pad呢:

(1)padding是對(duì)計(jì)算資源的浪費(fèi),pad越多訓(xùn)練耗費(fèi)的時(shí)間越長。

(2)padding的計(jì)算會(huì)引入噪聲,nsformer 中,LayerNorm 會(huì)使 padding 位置的值變?yōu)榉?,這會(huì)使每個(gè) padding 都會(huì)有梯度,引起不必要的權(quán)重更新。

下圖是隨意組織pad的batch(paddings)和長度相近原則組織pad的batch(baseline)

實(shí)現(xiàn)代碼部分,可以看到這里MyIterator實(shí)現(xiàn)了data.Iterator的create_batch()函數(shù),其實(shí)真正起作用的是里面的torchtext.data.batch()函數(shù)部分,他的功能是把原始的字符數(shù)據(jù)按照batch_size_fn算法來進(jìn)行batch并且shuffle,沒有做數(shù)字化也沒有做pad。

class MyIterator(data.Iterator):def create_batches(self):if self.train:def pool(d, random_shuffler):for p in data.batch(d, self.batch_size * 100):p_batch = data.batch(sorted(p, key=self.sort_key),self.batch_size, self.batch_size_fn)for b in random_shuffler(list(p_batch)):yield bself.batches = pool(self.data(), self.random_shuffler)else:self.batches = []for b in data.batch(self.data(), self.batch_size,self.batch_size_fn):self.batches.append(sorted(b, key=self.sort_key)) global max_src_in_batch, max_tgt_in_batch def batch_size_fn(new, count, sofar):global max_src_in_batch, max_tgt_in_batchif count == 1:max_src_in_batch = 0max_tgt_in_batch = 0max_src_in_batch = max(max_src_in_batch, len(new.src))max_tgt_in_batch = max(max_tgt_in_batch, len(new.trg) + 2)src_elements = count * max_src_in_batchtgt_elements = count * max_tgt_in_batchreturn max(src_elements, tgt_elements)

那么什么時(shí)候?qū)atch進(jìn)行數(shù)字化和pad呢,看了下源碼,實(shí)際這些操作封裝在data.Iterator.__iter__的torchtext.data.Batch這個(gè)類中。

這里還有一個(gè)問題,BATCH_SIZE這個(gè)參數(shù)設(shè)置多少合適呢,這個(gè)參數(shù)在這里的含義代表每個(gè)batch的token總量,我測(cè)試了下單核16G的colabGPU訓(xùn)練環(huán)境需要6000,如果超過這個(gè)數(shù)值,內(nèi)存容易爆。

BATCH_SIZE = 6000 train_iter = MyIterator(train, batch_size=BATCH_SIZE, device=0, repeat=False,sort_key=lambda x: (len(x.src), len(x.trg)),batch_size_fn=batch_size_fn, train=True) valid_iter = MyIterator(valid, batch_size=BATCH_SIZE, device=0, repeat=False,sort_key=lambda x: (len(x.src), len(x.trg)),batch_size_fn=batch_size_fn, train=False)

3.5生成mask

我們知道整個(gè)模型的輸入就是src,src_mask,tgt,tgt_mask,現(xiàn)在src和tgt已經(jīng)比較明確了,那mask部分呢,總的來說mask就是對(duì)上面的pad部分做一個(gè)統(tǒng)計(jì)行程對(duì)應(yīng)的mask矩陣。

但是前面在講整體結(jié)構(gòu)的時(shí)候提到,Decoder的mask比Encoder的mask多一層含義,就是sequence_mask,下面說下這兩類mask。

(1)padding mask

Seq2Seq+SoftAttention里面計(jì)算的mask就是padding mask。每個(gè)批次輸入序列長度是不一樣的,要對(duì)輸入序列進(jìn)行對(duì)齊。具體來說,就是給在較短的序列后面填充0。因?yàn)檫@些填充的位置,其實(shí)是沒什么意義的,所以我們的attention機(jī)制不應(yīng)該把注意力放在這些位置上,所以我們需要進(jìn)行一些處理。具體的做法是,把這些位置的值機(jī)上一個(gè)非常大的復(fù)數(shù),經(jīng)過softmax這些位置就會(huì)接近0。而我們的padding mask實(shí)際上是一個(gè)張量,每個(gè)值都是一個(gè)Bool,值為False的地方就是我們要進(jìn)行處理的地方。

(2)sequence mask

自然語言生成(例如機(jī)器翻譯,文本摘要)是auto-regressive的,在推理的時(shí)候只能依據(jù)之前的token生成當(dāng)前時(shí)刻的token,正因?yàn)樯僧?dāng)前時(shí)刻的token的時(shí)候并不知道后續(xù)的token長什么樣,所以為了保持訓(xùn)練和推理的一致性,訓(xùn)練的時(shí)候也不能利用后續(xù)的token來生成當(dāng)前時(shí)刻的token。這種方式也符合人類在自然語言生成中的思維方式。

那么具體怎么做呢,也很簡(jiǎn)單,產(chǎn)生一個(gè)上三角矩陣,上三角的值全為1,下三角的值全為0,對(duì)角線也是0。把這個(gè)矩陣作用在每一個(gè)序列上,就達(dá)到我們的目的。如圖:

總結(jié)一下transformer里面的mask使用情況:

* encoder里的self-attention使用的是padding mask

* decoder里面的self-attention使用的是padding mask+sequence mask;context-attention使用的是padding mask

下面看代碼來實(shí)現(xiàn)上面兩種mask,其中make_std_mask里面實(shí)現(xiàn)了pad mask+sequence mask;

除了mask,代碼還對(duì)target部分做了處理,self.trg表示輸入,self.trg表示最終loss里面標(biāo)簽角色,比self.trg往后挪一列。

class BatchMask:def __init__(self, src, trg=None, pad=0):self.src = srcself.src_mask = (src != pad).unsqueeze(-2)if trg is not None:self.trg = trg[:, :-1]self.trg_y = trg[:, 1:]self.trg_mask = \self.make_std_mask(self.trg, pad)self.ntokens = (self.trg_y != pad).data.sum()@staticmethoddef make_std_mask(tgt, pad):tgt_mask = (tgt != pad).unsqueeze(-2)tgt_mask = tgt_mask & Variable(subsequent_mask(tgt.size(-1)).type_as(tgt_mask.data))return tgt_mask def subsequent_mask(size):attn_shape = (1, size, size)subsequent_mask = np.triu(np.ones(attn_shape), k=1).astype('uint8')return torch.from_numpy(subsequent_mask) == 0 def batch_mask(pad_idx, batch):src, trg = batch.src.transpose(0, 1), batch.trg.transpose(0, 1)return BatchMask(src, trg, pad_idx) pad_idx = TGT.vocab.stoi["<blank>"]

4. Embedding層

這一部分針對(duì)輸入模型的數(shù)據(jù)的詞嵌入處理,主要包含三個(gè)過程:普通詞嵌入word Embeddings、位置編碼PositionalEncoding、層歸一化LayerNorm。

(word Embedding是對(duì)詞匯本身編碼;Positional encoding是對(duì)詞匯的位置編碼)

4.1普通Embedding

初始化embedding matrix,通過embedding lookup將Inputs映射成token embedding,大小是[batch size, max seq length, embedding size],然后乘以embedding size的開方。那么這里為什么要乘以√dmodel ? ?論文并沒有講為什么這么做,我看了代碼,猜測(cè)是因?yàn)閑mbedding matrix的初始化方式是xavier init,這種方式的方差是1/embedding size,因此乘以embedding size的開方使得embedding matrix的方差是1,在這個(gè)scale下可能更有利于embedding matrix的收斂。

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_modeldef forward(self, x):return self.lut(x) * math.sqrt(self.d_model)

4.2位置編碼PositionalEncoding

我們知道RNN使用了step by step這種時(shí)序算法保持了序列本有的順序特征,但缺點(diǎn)是無法串行降低了性能,transformer的主要思想self-attention在本質(zhì)上拋棄了rnn這種時(shí)序特征,也就拋棄了所謂的序列順序特征,如果缺失了序列順序這個(gè)重要信息,那么結(jié)果就是所有詞語都對(duì)了,但是就是無法組成有意義的語句。那么他是怎么彌補(bǔ)的呢?

為了處理這個(gè)問題,transformer給encoder層和decoder層的輸入添加了一個(gè)額外的向量Positional Encoding,就是位置編碼,維度和embedding的維度一樣,這個(gè)向量采用了一種很獨(dú)特的方法來讓模型學(xué)習(xí)到這個(gè)值,這個(gè)向量能決定當(dāng)前詞的位置,或者說在一個(gè)句子中不同的詞之間的距離。

這個(gè)位置向量的具體計(jì)算方法有很多種,論文中的計(jì)算方法如下sinusoidal version,這里的2i就是指的d_model這個(gè)維度上的,和pos不是一回事,pos就是可以自己定義1-5000的序列,每個(gè)數(shù)字代表一個(gè)序列位置:

上式右端表達(dá)式中pos下面的除數(shù)如果使用exp來表示的話,手寫推導(dǎo)如下:

代碼表示:

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)

其中pos是指當(dāng)前詞在句子中的位置,i是指向量d_model中每個(gè)值的index,可以看出,在d_model偶數(shù)位置index,使用正弦編碼,在奇數(shù)位置,使用余弦編碼。上面公式的dmodel就是模型的維度,論文默認(rèn)是512。

這個(gè)編碼的公式的意思就是:給定詞語的位置pos,我們可以把它編碼成dmodel維的向量,也就是說位置編碼的每個(gè)維度對(duì)應(yīng)正弦曲線,波長構(gòu)成了從2π到10000*2π的等比序列。上面的位置編碼是絕對(duì)位置編碼,但是詞語的相對(duì)位置也非常重要,這就是論文為什么使用三角函數(shù)的原因。

正弦函數(shù)能夠表達(dá)相對(duì)位置信息。主要數(shù)學(xué)依據(jù)是以下兩個(gè)公式,對(duì)于詞匯之間的位置偏移k,PE(pos+k)可以表示成PE(pos)和PE(k)的組合形式,這就是表達(dá)相對(duì)位置的能力:

可視化位置編碼效果如下,橫軸是位置序列seq_len這個(gè)維度,豎軸是d_model這個(gè)維度:

代碼中加入了dropout,具體實(shí)現(xiàn)如下。self.register_buffer可以將tensor注冊(cè)成buffer,網(wǎng)絡(luò)存儲(chǔ)時(shí)也會(huì)將buffer存下,當(dāng)網(wǎng)絡(luò)load模型是,會(huì)將存儲(chǔ)模型的buffer也進(jìn)行賦值,buffer在forward中更新而不再梯度下降中更新,optim.step只能更新nn.Parameter類型參數(shù)。

class PositionalEncoding(nn.Module):def __init__(self, d_model, dropout, max_len=5000):super(PositionalEncoding, self).__init__()self.dropout = nn.Dropout(p=dropout)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)

4.3層歸一化

層歸一化layernorm是一種基礎(chǔ)數(shù)據(jù)里手段,作用于輸入和輸出,那么本例都什么時(shí)候用到呢,一個(gè)是source和target數(shù)據(jù)經(jīng)過詞嵌入后進(jìn)入子層前要進(jìn)行層歸一化;另一個(gè)就是encoder和decoder模塊輸出的時(shí)候要進(jìn)行層歸一化。

layernorm不同于batchnorm,他是在d_model這個(gè)維度上計(jì)算平均值和方差,公式如下:

可以看到這里引入了參數(shù)α和β,所以可以使用torch里面的nn. Parameter,他的作用就是初始化一個(gè)可進(jìn)行訓(xùn)練優(yōu)化的參數(shù),并將這個(gè)參數(shù)綁定到module里面。

代碼如下:

class LayerNorm(nn.Module):def __init__(self, features, eps=1e-6):super(LayerNorm, self).__init__()self.a_2 = nn.Parameter(torch.ones(features))self.b_2 = nn.Parameter(torch.zeros(features))self.eps = epsdef forward(self, x):mean = x.mean(-1, keepdim=True)std = x.std(-1, keepdim=True)return self.a_2 * (x - mean) / (std + self.eps) + self.b_2

5. SubLayer子層組成

這里的sublayer存在于每個(gè)encoderlayer和decoderlayer中,是公用的部分,encoderlayer里面有兩個(gè)子層(mulhead-self attention/feed-forward)靠殘差層連接;decoderlayer里面有三個(gè)子層(mulhead-self attention/mulhad-context attention/feed-forward)。

這里的mulhead-self attention和mulhad-context attention是整個(gè)transformer最核心的部分。前者是自注意力機(jī)制,出現(xiàn)在encoder或decoder內(nèi)部序列自身學(xué)習(xí)hidden;后者上下文注意力機(jī)制,相當(dāng)于之前分享文章里的Seq2Seq+softattention,是encoder和decoder之間的注意力為了學(xué)習(xí)context。這兩種注意力機(jī)制結(jié)構(gòu)實(shí)際上是相同的,不同的在于輸入部分(query,key,value):self-attention的三個(gè)數(shù)值都是一致的;而contex-attention的query來自decoder,key和value來自encoder。

5.1多頭MuHead Attention(self+context attention)

由于之前分享的文章詳細(xì)講解過context-attention(相當(dāng)于soft-attention),所以這里詳細(xì)說明self-attention和multi-head兩種機(jī)制。

(1)self-attention

我們看個(gè)例子:

The animal didn't cross the street because it was too tired

這里的 it 到底代表的是 animal 還是 street 呢,對(duì)于人來說能很簡(jiǎn)單的判斷出來,但是對(duì)于機(jī)器來說,是很難判斷的,self-attention就能夠讓機(jī)器把 it 和 animal 聯(lián)系起來,接下來我們看下詳細(xì)的處理過程。

首先,self-attention會(huì)計(jì)算出三個(gè)新的向量,在論文中,向量的維度是512維,我們把這三個(gè)向量分別稱為Query、Key、Value,這三個(gè)向量是用embedding向量與一個(gè)參數(shù)矩陣W相乘得到的結(jié)果,這個(gè)矩陣是隨機(jī)初始化的。

計(jì)算self-attention的分?jǐn)?shù)值,該分?jǐn)?shù)值決定了當(dāng)我們?cè)谀硞€(gè)位置encode一個(gè)詞時(shí),對(duì)輸入句子的其他部分的關(guān)注程度。這個(gè)分?jǐn)?shù)值的計(jì)算方法是Query與Key做點(diǎn)成,以下圖為例,首先我們需要針對(duì)Thinking這個(gè)詞,計(jì)算出其他詞對(duì)于該詞的一個(gè)分?jǐn)?shù)值,首先是針對(duì)于自己本身即q1·k1,然后是針對(duì)于第二個(gè)詞即q1·k2。

接下來,把點(diǎn)成的結(jié)果除以一個(gè)常數(shù),這里我們除以8,這個(gè)值一般是采用上文提到的矩陣的第一個(gè)維度的開方即64的開方8,當(dāng)然也可以選擇其他的值,然后把得到的結(jié)果做一個(gè)softmax的計(jì)算。得到的結(jié)果即是每個(gè)詞對(duì)于當(dāng)前位置的詞的相關(guān)性大小,當(dāng)然,當(dāng)前位置的詞相關(guān)性肯定會(huì)會(huì)很大。

下一步就是把Value和softmax得到的值進(jìn)行相乘,并相加,得到的結(jié)果即是self-attetion在當(dāng)前節(jié)點(diǎn)的值。

在實(shí)際的應(yīng)用場(chǎng)景,為了提高計(jì)算速度,我們采用的是矩陣的方式,直接計(jì)算出Query, Key, Value的矩陣,然后把embedding的值與三個(gè)矩陣直接相乘,把得到的新矩陣 Q 與 K 相乘,乘以一個(gè)常數(shù),做softmax操作,最后乘上 V 矩陣。

這種通過 query 和 key 的相似性程度來確定 value 的權(quán)重分布的方法被稱為scaled dot-product attention。

結(jié)構(gòu)圖如下:

(2)attention score:scaled dot-product

那么這里Transformer為什么要使用scaled dot-product來計(jì)算attention score呢?論文的描述含義就是通過確定Q和K之間的相似度來選擇V,公式:

scaled dot-product attention和dot-product attention唯一的區(qū)別就是,scaled dot-product attention有一個(gè)縮放因子:

上面公式中的dk表示的k的維度,在論文里面默認(rèn)是64。為什么需要加上這個(gè)縮放因子呢,論文解釋:對(duì)于dk很大的時(shí)候,點(diǎn)積得到結(jié)果量級(jí)很大,方差很大,使得處于softmax函數(shù)梯度很小的區(qū)域。我們知道,梯度很小的情況,對(duì)反向傳播不利。下面簡(jiǎn)單的測(cè)試反映出不同量級(jí)對(duì),最大值的概率變化。

f?=?lambda?x:?exp(6*x)?/?(exp(2*x)+exp(2*x+1)+exp(3*x)+exp(4*x)+exp(5*x+4)+exp(6*x))

x?=?np.linspace(0,?30,?100)

y_3?=?[f(x_i)?for?x_i?in?x]

plt.plot(x,?y_3)

plt.show()

可以看到f是softmax的最大值6x的曲線,當(dāng)x處于1~50之間不同的量級(jí)的時(shí)候,所表示的概率,當(dāng)x量級(jí)在>7的時(shí)候,差不多其分配的概率就接近1了。也就是說輸入量級(jí)很大的時(shí)候,就會(huì)造成梯度消失。

為了克服這個(gè)負(fù)面影響,除以一個(gè)縮放因子可以一定程度上減緩這種情況。點(diǎn)積除以√dmodel ? ,將控制方差為1,也就有效的控制了梯度消失的問題。

注意部分的代碼表示:

def attention(query, key, value, mask=None, dropout=None):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)context = torch.matmul(p_attn, value)return context, p_attn

(3)multi-head

這篇論文另一個(gè)牛的地方是給attention加入另外一個(gè)機(jī)制——multi head,該機(jī)制理解起來很簡(jiǎn)單,就是說不僅僅只初始化一組Q、K、V的矩陣,而是初始化多組,tranformer是使用了8組,所以最后得到的結(jié)果是8個(gè)矩陣。

論文提到,他們發(fā)現(xiàn)將Q、K、V通過一個(gè)線性映射之后,分成h份,對(duì)每一份進(jìn)行scaled dot-product attention效果更好。然后,把各個(gè)部分的結(jié)果合并起來,再次經(jīng)過線性映射,得到最終的輸出。這就是所謂的multi-head attention。上面的超參數(shù)h就是heads數(shù)量。論文默認(rèn)是8。

下面是multi-head attention的結(jié)構(gòu)圖。可以看到QKV在輸入前后都有線性變換,總共有四次,上面dk=64=512/8

代碼表示:

class MultiHeadedAttention(nn.Module):def __init__(self, h, d_model, dropout=0.1):super(MultiHeadedAttention, self).__init__()assert d_model % h == 0self.d_k = d_model // hself.h = hself.linears = clones(nn.Linear(d_model, d_model), 4)self.attn = Noneself.dropout = nn.Dropout(p=dropout)def forward(self, query, key, value, mask=None):if mask is not None:mask = mask.unsqueeze(1)nbatches = query.size(0)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))]x, self.attn = attention(query, key, value, mask=mask, dropout=self.dropout)x = x.transpose(1, 2).contiguous().view(nbatches, -1, self.h * self.d_k)return self.linears[-1](x)

原論文中說到進(jìn)行Multi-head Attention的原因是將模型分為多個(gè)頭,形成多個(gè)子空間,可以讓模型去關(guān)注不同方面的信息,最后再將各個(gè)方面的信息綜合起來。其實(shí)直觀上也可以想到,如果自己設(shè)計(jì)這樣的一個(gè)模型,必然也不會(huì)只做一次attention,多次attention綜合的結(jié)果至少能夠起到增強(qiáng)模型的作用,也可以類比CNN中同時(shí)使用多個(gè)卷積核的作用,直觀上講,多頭的注意力有助于網(wǎng)絡(luò)捕捉到更豐富的特征/信息。

5.2Position-wise Feed-forward前饋傳播

這一層很簡(jiǎn)單,就是一個(gè)全連接網(wǎng)絡(luò),包含兩個(gè)線性變換和一個(gè)非線性函數(shù)Relu;

代碼:

class PositionwiseFeedForward(nn.Module):# 這里input和output都是d_model,中間層維度是d_ff,本例設(shè)置為2048def __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):# 兩次線性變換,第一次activation是relu,第二次沒有return self.w_2(self.dropout(F.relu(self.w_1(x))))

這個(gè)線性變換在不同的位置(encoder or decoder)都表現(xiàn)地一樣,并且在不同的層之間使用不同的參數(shù)。論文提到,這個(gè)公式還可以用兩個(gè)核大小為1的一維卷積來解釋,卷積的輸入輸出都是dmodel=512,中間層的維度是dff=2048

那么為什么要在multi-attention后面加一個(gè)fnn呢,類比cnn網(wǎng)絡(luò)中,cnn block和fc交替連接,效果更好。相比于單獨(dú)的multi-head attention,在后面加一個(gè)ffn,可以提高整個(gè)block的非線性變換的能力。

5.3殘差連接ResidualConnec

殘差連接其實(shí)很簡(jiǎn)單,在encoderlayer和decoderlayer里面都一樣,本文結(jié)構(gòu)如下:

那么殘差結(jié)構(gòu)有什么好處呢?顯而易見:因?yàn)樵黾恿艘豁?xiàng)x,那么該層網(wǎng)絡(luò)對(duì)x求偏導(dǎo)的時(shí)候,多了一個(gè)常數(shù)項(xiàng)1!所以在反向傳播過程中,梯度連乘,也不會(huì)造成梯度消失!

文章開始的transformer架構(gòu)圖中的Add & Norm中的Add也就是指的這個(gè)shortcut。

代碼如下:

class SublayerConnection(nn.Module):def __init__(self, size, dropout):super(SublayerConnection, self).__init__()self.norm = LayerNorm(size)self.dropout = nn.Dropout(dropout)def forward(self, x, sublayer): # 這里的x是指的輸入層src 需要對(duì)其進(jìn)行歸一化norm_x = self.norm(x)sub_x = sublayer(norm_x)sub_x = self.dropout(sub_x)return x + sub_x

6.?Encoder組合

EncoderLayer由上面兩個(gè)sublayer(multihead-selfattention和residualconnection)組成;Encoder由6個(gè)EncoderLayer組成。

代碼如下:

class EncoderLayer(nn.Module):def __init__(self, size, self_attn, feed_forward, dropout):super(EncoderLayer, self).__init__()self.self_attn = self_attnself.feed_forward = feed_forwardself.residual_conn = clones(SublayerConnection(size, dropout), 2)self.size = sizedef forward(self, x, mask):x = self.residual_conn[0](x, lambda x: self.self_attn(x, x, x, mask))return self.residual_conn[1](x, self.feed_forward) class Encoder(nn.Module):def __init__(self, layer, N):super(Encoder, self).__init__()self.layers = clones(layer, N)self.norm = LayerNorm(layer.size)def forward(self, x, mask):for layer in self.layers:x = layer(x, mask)return self.norm(x)

7. Decoder組合

DecoderLayer由上面三個(gè)sublayer(multihead-selfattention、multihead-contextattention和residualconnection)組成;Encoder由6個(gè)EncoderLayer組成。

代碼如下:

class DecoderLayer(nn.Module):def __init__(self, size, self_attn, src_attn, feed_forward, dropout):super(DecoderLayer, self).__init__()self.size = sizeself.self_attn = self_attnself.src_attn = src_attnself.feed_forward = feed_forwardself.residual_conn = clones(SublayerConnection(size, dropout), 3)def forward(self, x, memory, src_mask, tgt_mask):m = memoryx = self.residual_conn[0](x, lambda x: self.self_attn(x, x, x, tgt_mask))x = self.residual_conn[1](x, lambda x: self.src_attn(x, m, m, src_mask))return self.residual_conn[2](x, self.feed_forward) class Decoder(nn.Module):def __init__(self, layer, N):super(Decoder, self).__init__()self.layers = clones(layer, N)self.norm = LayerNorm(layer.size)def forward(self, x, memory, src_mask, tgt_mask):for layer in self.layers:x = layer(x, memory, src_mask, tgt_mask)return self.norm(x)

8. 損失函數(shù)和優(yōu)化器

Transfomer里的損失函數(shù)引入標(biāo)簽平滑的概念;梯度下降的優(yōu)化器引入了動(dòng)態(tài)學(xué)習(xí)率。下面詳細(xì)說明。

8.1損失函數(shù)實(shí)現(xiàn)標(biāo)簽平滑

Transformer使用的標(biāo)簽平滑技術(shù)屬于discount類型的平滑技術(shù)。這種算法簡(jiǎn)單來說就是把最高點(diǎn)砍掉一點(diǎn),多出來的概率平均分給所有人。

為什么要實(shí)現(xiàn)標(biāo)簽平滑呢,其實(shí)就是增加困惑度perplexity,每個(gè)時(shí)間步都會(huì)在一個(gè)分布集合里面隨機(jī)挑詞,那么平均情況下挑多少個(gè)詞才能挑到正確的那個(gè)呢。多挑幾次那么就意味著困惑度越高使得模型不確定性增加,但是這樣子的好處是提高了模型精度和BLEU score。

在實(shí)際實(shí)現(xiàn)時(shí),這里使用KL div loss實(shí)現(xiàn)標(biāo)簽平滑。沒有使用one-hot目標(biāo)分布,而是創(chuàng)建了一個(gè)分布,對(duì)于整個(gè)詞匯分布表,這個(gè)分布含有正確單詞度和剩余部分平滑塊的置信度。

代碼如下,簡(jiǎn)單解釋下,一般來說損失函數(shù)的輸入crit(x,target),標(biāo)簽平滑主要是在處理實(shí)際標(biāo)簽target

(1)先使用clone來把target構(gòu)造成和x一樣維度的矩陣

(2)然后使用fill_在上面的新矩陣?yán)锩嫣畛淦交蜃觭moothing

(3)然后使用scatter_把confidence(1-smoothing)填充到上面的矩陣中,按照target index數(shù)值,填充到維度對(duì)應(yīng)位置上。比如scatter_(1,(1,2,3),0.6) target新矩陣是(3,10) 那么就在10這個(gè)維度上找到index 1、2、3

(4)按照一定規(guī)則對(duì)target矩陣進(jìn)行pad mask

(5)最后使用損失函數(shù)KLDivLoss相對(duì)熵,他是求兩個(gè)概率分布之間的差異,size_averge=False損失值是sum類型,也就是說求得所有token的loss總量。

class LabelSmoothing(nn.Module):def __init__(self, size, padding_idx, smoothing=0.0):super(LabelSmoothing, self).__init__()self.criterion = nn.KLDivLoss(size_average=False)self.padding_idx = padding_idxself.confidence = 1.0 - smoothingself.smoothing = smoothingself.size = sizeself.true_dist = Nonedef forward(self, x, target):assert x.size(1) == self.sizetrue_dist = x.data.clone()true_dist.fill_(self.smoothing / (self.size - 2))true_dist.scatter_(1, target.data.unsqueeze(1), self.confidence)true_dist[:, self.padding_idx] = 0mask = torch.nonzero(target.data == self.padding_idx)if mask.dim() > 0:true_dist.index_fill_(0, mask.squeeze(), 0.0)self.true_dist = true_distreturn self.criterion(x, Variable(true_dist, requires_grad=False))

舉個(gè)簡(jiǎn)單的例子,可視化感受下標(biāo)簽平滑。深藍(lán)色的T形表示target被pad的部分,黃色部分是可信confidence部分,普藍(lán)色(顏色介于黃和深藍(lán))代表模糊區(qū)間。

crit?=?LabelSmoothing(5,?1,?0.5)

predict?=torch.FloatTensor([[0.25,?0,?0.25,?0.25,?0.25],

???????????????[0.4,?0,?0.2,?0.2,?0.2],?

???????????????[0.625,?0,?0.125,?0.125,?0.125],

???????????????[0.25,?0,?0.25,?0.25,?0.25],

???????????????[0.4,?0,?0.2,?0.2,?0.2],?

???????????????[0.625,?0,?0.125,?0.125,?0.125]])

v?=?crit(Variable(predict.log()),Variable(torch.LongTensor([1,2,0,3,2,0])))

那么平滑率到底對(duì)loss下降曲線有什么影響呢,舉個(gè)簡(jiǎn)單的例子看一下。可以看到當(dāng)smooth越大,也就是說confidence越小,也就是標(biāo)簽越模糊,loss下降效果反而更好。

crits?=?[LabelSmoothing(5,?0,?0.1),

?????LabelSmoothing(5,?0,?0.05),

?????LabelSmoothing(5,?0,?0),

?????nn.NLLLoss()

?????]

def?loss(x,crit):

????d?=?x?+?3?*?1

? ? predict?=?torch.FloatTensor([[0,?x/d,?1/d,?1/d,?1/d],])

? ? return?crit(Variable(predict.log()),Variable(torch.LongTensor([1]))).item()

plt.plot(np.arange(1,?100),?[[loss(x,crit)?for?crit?in?crits]?for?x?in?range(1,?100)])

plt.legend(["0.1","0.05","0","NLLoss"])

8.2優(yōu)化器實(shí)現(xiàn)動(dòng)態(tài)學(xué)習(xí)率

我們知道學(xué)習(xí)率是梯度下降的重要因素,隨著梯度的下降,使用動(dòng)態(tài)變化的學(xué)習(xí)率,往往取的較好的效果。

這里的算法實(shí)現(xiàn)的是先warmup增大學(xué)習(xí)率,達(dá)到摸個(gè)合適的step再減小學(xué)習(xí)率。公式如下。:

可以看出來在開始的warmup steps(本例是8000)的時(shí)候?qū)W習(xí)率隨著step線性增加,然后學(xué)習(xí)率隨著步數(shù)的導(dǎo)數(shù)平方根step_num^(-0.5)成比例的減小,8000就是那個(gè)轉(zhuǎn)折點(diǎn)。

代碼如下。除去step,learningrate還和d_model,factor,warmup有關(guān)。這個(gè)優(yōu)化器封裝了對(duì)lr的修改算法

class NoamOpt:def __init__(self, model_size, factor, warmup, optimizer):self.optimizer = optimizerself._step = 0self.warmup = warmupself.factor = factorself.model_size = model_sizeself._rate = 0def step(self):self._step += 1rate = self.rate()for p in self.optimizer.param_groups:p['lr'] = rateself._rate = rateself.optimizer.step()def rate(self, step=None):if step is None:step = self._stepreturn self.factor * \(self.model_size ** (-0.5) *min(step ** (-0.5), step * self.warmup ** (-1.5)))

下面把影響學(xué)習(xí)率變化的三個(gè)超參數(shù)model_size/factor/warmup進(jìn)行可視化:

opts?=?[NoamOpt(512,?1,?4000,?None),?

? ? ?NoamOpt(512,?2,?4000,?None),?

?????NoamOpt(512,?2,?8000,?None),

?????NoamOpt(512,?1,?8000,?None),

?????NoamOpt(256,?1,?4000,?None)]

plt.plot(np.arange(1,?20000),?[[opt.rate(i)?for?opt?in?opts]?for?i?in?range(1,?20000)])

plt.legend(["512:1:4000","512:2:4000","512:2:8000","512:1:8000",?"256:1:4000"])

可以看到,隨著step的增加,可以看到學(xué)習(xí)率隨著三個(gè)超參數(shù)的變化曲線:

(1)d_model越小,學(xué)習(xí)率峰值越大;

(2)factor越大,學(xué)習(xí)率峰值越大

(3)warmupsteps越大,學(xué)習(xí)率的峰值越往后推遲,且學(xué)習(xí)率峰值相對(duì)降低一些

【本文采取的超參數(shù)是512,2,8000】

8.3整合

SimpleLossCompute這個(gè)類包含了softmax+loss+optimizer三個(gè)功能。

(1)這里包含了三個(gè)功能先用generator計(jì)算linear+softmax

(2)利用criterion來計(jì)算loss?這里的loss?function是KLDivLoss?求得loss是個(gè)sum的形式?所以要根據(jù)ntokens數(shù)量來求平均loss

(3)優(yōu)化器是opt?也就是梯度下降算法?這個(gè)優(yōu)化器里面有對(duì)lr的算法

class SimpleLossCompute:def __init__(self, generator, criterion, opt=None):self.generator = generatorself.criterion = criterionself.opt = optdef __call__(self, x, y, norm):x = self.generator(x)loss = self.criterion(x.contiguous().view(-1, x.size(-1)), y.contiguous().view(-1)) / normloss.backward()if self.opt is not None:self.opt.step()self.opt.optimizer.zero_grad()return loss.item() * norm

9. 模型訓(xùn)練Train

因?yàn)槲抑皇窃赾olab上訓(xùn)練,所以就是單核16GPU,20個(gè)epoch,約10000次迭代,花費(fèi)了3個(gè)多小時(shí)。

訓(xùn)練模型中包含了時(shí)間計(jì)數(shù)、loss記錄、數(shù)據(jù)和model的cuda()、step計(jì)數(shù)、學(xué)習(xí)率記錄。

代碼如下:

USE_CUDA = torch.cuda.is_available() print_every = 50 plot_every = 100 plot_losses = [] def time_since(t):now = time.time()s = now - tm = math.floor(s / 60)s -= m * 60return '%dm %ds' % (m, s) def run_epoch(data_iter, model, loss_compute):"Standard Training and Logging Function"start_epoch = time.time()total_tokens = 0total_loss = 0tokens = 0plot_loss_total = 0plot_tokens_total = 0for i, batch in enumerate(data_iter):src = batch.src.cuda() if USE_CUDA else batch.srctrg = batch.trg.cuda() if USE_CUDA else batch.trgsrc_mask = batch.src_mask.cuda() if USE_CUDA else batch.src_masktrg_mask = batch.trg_mask.cuda() if USE_CUDA else batch.trg_maskmodel = model.cuda() if USE_CUDA else modelout = model.forward(src, trg, src_mask, trg_mask)trg_y = batch.trg_y.cuda() if USE_CUDA else batch.trg_yntokens = batch.ntokens.cuda() if USE_CUDA else batch.ntokensloss = loss_compute(out, trg_y, ntokens)total_loss += lossplot_loss_total += losstotal_tokens += ntokensplot_tokens_total += ntokenstokens += ntokensif i % print_every == 1:elapsed = time.time() - start_epochprint("Epoch Step: %3d Loss: %10f time:%8s Tokens per Sec: %6.0f Step: %6d Lr: %0.8f" %(i, loss / ntokens, time_since(start), tokens / elapsed,loss_compute.opt._step if loss_compute.opt is not None else 0,loss_compute.opt._rate if loss_compute.opt is not None else 0))tokens = 0start_epoch = time.time()if i % plot_every == 1:plot_loss_avg = plot_loss_total / plot_tokens_totalplot_losses.append(plot_loss_avg)plot_loss_total = 0plot_tokens_total = 0return total_loss / total_tokens model = make_model(len(SRC.vocab), len(TGT.vocab), N=6) criterion = LabelSmoothing(size=len(TGT.vocab), padding_idx=pad_idx, smoothing=0.1) model_opt = NoamOpt(model.src_embed[0].d_model, 2, 8000,torch.optim.Adam(model.parameters(), lr=0, betas=(0.9, 0.98), eps=1e-9))

訓(xùn)練結(jié)果:

start = time.time() for epoch in range(20):print('EPOCH',epoch,'--------------------------------------------------------------')model.train()run_epoch((batch_mask(pad_idx, b) for b in train_iter),model,SimpleLossCompute(model.generator, criterion, opt=model_opt))model.eval()loss=run_epoch((batch_mask(pad_idx, b) for b in valid_iter),model,SimpleLossCompute(model.generator, criterion, opt=None))print(loss)

? .....step達(dá)到8000后的訓(xùn)練情況

??.....最后epoch

保存模型:

state = {'model': model.state_dict(), 'optimizer': model_opt, 'epoch': epoch, 'loss': loss,'plot_losses': plot_losses} torch.save(state, 'mt_transformer_it&en%02d.pth.tar' % (epoch))

loss曲線:

10. 模型測(cè)試生成

測(cè)試生成部分利用的model.decode()函數(shù),采樣方式使用的貪婪算法,部分代碼:

def greedy_decode(model, src, src_mask, max_len, start_symbol):memory = model.encode(src, src_mask)ys = torch.ones(1, 1).fill_(start_symbol).type_as(src.data)for i in range(max_len - 1):out = model.decode(memory, src_mask, Variable(ys), Variable(subsequent_mask(ys.size(1)).type_as(src.data)))prob = model.generator(out[:, -1])_, next_word = torch.max(prob, dim=1)next_word = next_word.data[0]ys = torch.cat([ys, torch.ones(1, 1).type_as(src.data).fill_(next_word)], dim=1)return ys

輸出結(jié)果:

12.注意力分布可視化?

先隨機(jī)對(duì)valid驗(yàn)證集中某個(gè)句子進(jìn)行翻譯

for i, batch in enumerate(valid_iter):if i == 2:........out = greedy_decode(model, src, src_mask, max_len=70, start_symbol=TGT.vocab.stoi["<s>"])source = ""print("Source :", end="\t")for i in range(1, batch.src.size(0)):sym = SRC.vocab.itos[src[0, i]]if sym == "</s>" or sym == "<blank>": breakprint(sym, end=" ")source += sym + " "print("Target :", end="\t")for i in range(1, batch.trg.size(0)):sym = TGT.vocab.itos[trg[0, i]]if sym == "</s>": breakprint(sym, end=" ")trans = ""print("Translation :", end="\t")for i in range(1, out.size(1)):sym = TGT.vocab.itos[out[0, i]]if sym == "</s>": breakprint(sym, end=" ")trans += sym + " "print()

Source ? ? ?: non ho mai detto a nessuno che mio padre è in prigione . Target ? ? ?: I 've never told anyone that my father is in prison . Translation : I never told anyone that my father is in prison . ? ? ?

可視化:

tgt_sent = trans.split() # 翻譯數(shù)據(jù) sent = source.split() # 源數(shù)據(jù)src def draw(data, x, y, ax):seaborn.heatmap(data, xticklabels=x, square=True, yticklabels=y, vmin=0.0, vmax=1.0, cbar=False, ax=ax) for layer in range(1, 6, 2):fig, axs = plt.subplots(1, 8, figsize=(25, 15))print("Encoder Layer", layer + 1)for h in range(8):draw(model.encoder.layers[layer].self_attn.attn[0, h].data[:12, :12],sent, sent if h == 0 else [], ax=axs[h])plt.show() for layer in range(1, 6, 2):fig, axs = plt.subplots(1, 8, figsize=(25, 15))print("Decoder Self Layer", layer + 1)for h in range(8):draw(model.decoder.layers[layer].self_attn.attn[0, h].data[:len(tgt_sent), :len(tgt_sent)],tgt_sent, tgt_sent if h == 0 else [], ax=axs[h])plt.show()print("Decoder Src Layer", layer + 1)fig, axs = plt.subplots(1, 8, figsize=(25, 15))for h in range(8):draw(model.decoder.layers[layer].src_attn.attn[0, h].data[:len(tgt_sent), :len(sent)],sent, tgt_sent if h == 0 else [], ax=axs[h])plt.show()

可以看到8個(gè)頭在不同注意力層里分布情況,實(shí)際上在不同的子空間學(xué)習(xí)到了不同的信息。

13.數(shù)學(xué)原理解釋Transformer和RNN本質(zhì)區(qū)別

至此,大家應(yīng)該可以感受到Transformer之所以橫掃碾壓RNN,其實(shí)是多個(gè)機(jī)制大力出奇跡的成果,并不單單是attention的應(yīng)用。

但我們深一步思考下,Transformer可以把這么多機(jī)制組合在一起而性能沒有下降是為什么呢,我個(gè)人覺得還是attention的應(yīng)用大大提升了模型并行運(yùn)算,但是只是用attention精度可能并不如人意,所以attention省下的空間和時(shí)間可以把其他能提高精度的模塊(比如position encoding、residual、mask、multi-head等等)一起添加進(jìn)來。所以從這個(gè)角度來講,attention還是transformer最核心的部分,這個(gè)大家應(yīng)該沒有異議的。

再深入一下,不管是attention還是傳統(tǒng)的rnn,其實(shí)都是為了在計(jì)算序列的hidden,RNN使用gate(sigmoid)的概念,計(jì)算hidden的權(quán)重;而attention使用softmax來計(jì)算hidden的權(quán)重,無論RNN還是attention他們計(jì)算完權(quán)重都是為了共同的目標(biāo)——求得上下文context。

先看下RNN的數(shù)學(xué)公式。

再看下attention 相關(guān)數(shù)學(xué)公式:

大家有沒有發(fā)現(xiàn)呢?RNN求得各種門是不是很像softmax求得的權(quán)重分布?這里RNN里c<t-1>和c^(t)可以類比attention公式中的V,他們都是hidden的含義。

那么我們?cè)僮屑?xì)看下RNN的門和attention的權(quán)重,是不是也能很像,都是對(duì)(query,key)使用了非線性激活函數(shù),前者使用了sigmoid,后者使用了softmax,不管使用哪個(gè)激活函數(shù)activation,其實(shí)目的都是再尋找(query,key)之間的相似度,RNN使用了加性運(yùn)算(W(a,x)+b),而Transformer使用的是乘性運(yùn)算(QK^T)。

至此是不是恍然大悟呢,這兩個(gè)經(jīng)典模型追蹤溯源竟然只是sigmoid和softmax的區(qū)別。那么我們?cè)倩仡櫹逻@兩個(gè)函數(shù):

sigmod計(jì)算是標(biāo)量,而transformer計(jì)算的是向量,my god,這不正好符合rnn和transformer的特性么?

rnn使用的是step by step順序算法,每次都是計(jì)算當(dāng)前input(query)和上一個(gè)cell傳來的hidden(key)的關(guān)系,由于一次只能喂入一個(gè),所以自然使用sigmoid的標(biāo)量屬性;但是softmax不同,他針對(duì)的是一個(gè)向量,transformer里的key可不就是一個(gè)序列所有的值么,他們的和為1,計(jì)算這個(gè)序列向量的權(quán)重分布,也就是所謂的并行計(jì)算。

網(wǎng)上很多人探討兩者的區(qū)別,但總讓我有種隔靴搔癢的感覺,花了點(diǎn)時(shí)間從數(shù)學(xué)原理的角度感知了兩者底層的本質(zhì),讓我對(duì)(QUERY,KEY,VALUE)模式有了更深的理解,希望對(duì)大家也有所幫助~

END

總結(jié)

以上是生活随笔為你收集整理的Step-by-step to Transformer:深入解析工作原理(以Pytorch机器翻译为例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产精品视频免费播放 | 国产熟女一区二区三区四区五区 | 人妻无码久久精品人妻 | 人妻少妇精品视频专区 | 丰满诱人的人妻3 | 日本一卡二卡不卡视频查询 | √天堂资源地址中文在线 | 久久久中文字幕日本无吗 | 动漫av一区二区在线观看 | 日韩av激情在线观看 | 国产sm调教视频在线观看 | 2020最新国产自产精品 | 2020久久超碰国产精品最新 | 免费看男女做好爽好硬视频 | 成人欧美一区二区三区黑人免费 | 精品无码国产一区二区三区av | 色欲综合久久中文字幕网 | 麻花豆传媒剧国产免费mv在线 | 秋霞成人午夜鲁丝一区二区三区 | 丰满妇女强制高潮18xxxx | 妺妺窝人体色www婷婷 | 全球成人中文在线 | 在线观看欧美一区二区三区 | 精品国产一区av天美传媒 | 亚洲gv猛男gv无码男同 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产色xx群视频射精 | 性生交大片免费看女人按摩摩 | 国产综合色产在线精品 | 久久午夜无码鲁丝片秋霞 | 综合人妻久久一区二区精品 | 国产综合久久久久鬼色 | 国产精品永久免费视频 | 午夜无码人妻av大片色欲 | 国产suv精品一区二区五 | 18禁止看的免费污网站 | 久久精品中文闷骚内射 | 国产精品人人爽人人做我的可爱 | 老熟女乱子伦 | 好男人社区资源 | 久久精品人人做人人综合 | 无遮无挡爽爽免费视频 | 欧美放荡的少妇 | 暴力强奷在线播放无码 | 人妻中文无码久热丝袜 | 亚洲综合无码一区二区三区 | 丰腴饱满的极品熟妇 | 97夜夜澡人人双人人人喊 | 亚洲色欲色欲天天天www | 中文字幕无码人妻少妇免费 | 亚洲の无码国产の无码影院 | 国产xxx69麻豆国语对白 | 无码国产色欲xxxxx视频 | 中文字幕乱码中文乱码51精品 | 欧美成人高清在线播放 | 任你躁在线精品免费 | 亚洲无人区一区二区三区 | 少妇久久久久久人妻无码 | 偷窥日本少妇撒尿chinese | 久久精品国产精品国产精品污 | 亚洲色大成网站www国产 | 久久综合色之久久综合 | 亚洲一区二区三区国产精华液 | 国产成人精品视频ⅴa片软件竹菊 | 人妻互换免费中文字幕 | 熟女俱乐部五十路六十路av | 扒开双腿疯狂进出爽爽爽视频 | 最新版天堂资源中文官网 | 内射后入在线观看一区 | 国产人妻大战黑人第1集 | 国产精品丝袜黑色高跟鞋 | 亚洲成av人综合在线观看 | 女人高潮内射99精品 | 成人女人看片免费视频放人 | 午夜福利试看120秒体验区 | 午夜免费福利小电影 | 久久精品国产日本波多野结衣 | 领导边摸边吃奶边做爽在线观看 | 国产乱人偷精品人妻a片 | 小鲜肉自慰网站xnxx | 亚洲精品国产精品乱码不卡 | 六月丁香婷婷色狠狠久久 | 国产69精品久久久久app下载 | 激情五月综合色婷婷一区二区 | 377p欧洲日本亚洲大胆 | 无码人妻少妇伦在线电影 | 牲欲强的熟妇农村老妇女 | 国产内射爽爽大片视频社区在线 | 成人片黄网站色大片免费观看 | 无遮无挡爽爽免费视频 | 国产情侣作爱视频免费观看 | 久久久久免费看成人影片 | 乱码午夜-极国产极内射 | 国产精品自产拍在线观看 | 亚洲精品无码国产 | 亚洲成av人片在线观看无码不卡 | 国产舌乚八伦偷品w中 | 国产精品无码mv在线观看 | 国产精品人人妻人人爽 | 99久久精品国产一区二区蜜芽 | 天天av天天av天天透 | 国内老熟妇对白xxxxhd | 色偷偷人人澡人人爽人人模 | 国产无遮挡又黄又爽免费视频 | 国产美女极度色诱视频www | 狂野欧美性猛交免费视频 | 精品久久久中文字幕人妻 | 成年美女黄网站色大免费视频 | 精品国精品国产自在久国产87 | 久久亚洲精品成人无码 | 99久久久无码国产精品免费 | 亚洲精品综合一区二区三区在线 | 亚洲成熟女人毛毛耸耸多 | 国产精品亚洲综合色区韩国 | 国产一精品一av一免费 | 久久综合色之久久综合 | 亚洲精品国产第一综合99久久 | 久久国产精品偷任你爽任你 | 中文字幕无码日韩欧毛 | 亚洲精品一区二区三区婷婷月 | 又大又紧又粉嫩18p少妇 | 国产精品无码成人午夜电影 | 少妇愉情理伦片bd | 少妇无码av无码专区在线观看 | 亚洲熟妇色xxxxx欧美老妇 | 国产人妖乱国产精品人妖 | 无套内射视频囯产 | 久久人人97超碰a片精品 | 久久综合给合久久狠狠狠97色 | 老熟妇仑乱视频一区二区 | 男女爱爱好爽视频免费看 | 日本www一道久久久免费榴莲 | 国产精品视频免费播放 | 一区二区三区乱码在线 | 欧洲 | 国产偷国产偷精品高清尤物 | 曰本女人与公拘交酡免费视频 | 亚洲乱码国产乱码精品精 | 国产av无码专区亚洲awww | 高潮毛片无遮挡高清免费视频 | 亚洲中文字幕无码中文字在线 | 日本一卡2卡3卡四卡精品网站 | 色欲久久久天天天综合网精品 | 伊人久久大香线蕉亚洲 | 香港三级日本三级妇三级 | 香港三级日本三级妇三级 | 成人一区二区免费视频 | 国产亚洲精品久久久久久 | 思思久久99热只有频精品66 | 国产精品亚洲专区无码不卡 | 性生交大片免费看l | 日日干夜夜干 | 国产精品高潮呻吟av久久 | 奇米影视7777久久精品人人爽 | 久久精品国产日本波多野结衣 | 精品无码国产自产拍在线观看蜜 | 男女性色大片免费网站 | 思思久久99热只有频精品66 | 国产午夜手机精彩视频 | 一本大道久久东京热无码av | 久久午夜无码鲁丝片秋霞 | 久久久国产精品无码免费专区 | 久久精品国产一区二区三区肥胖 | 欧美黑人性暴力猛交喷水 | 精品夜夜澡人妻无码av蜜桃 | 国产精品亚洲一区二区三区喷水 | 老子影院午夜精品无码 | 国产亚洲精品久久久闺蜜 | 国产超级va在线观看视频 | 国产av一区二区精品久久凹凸 | 性生交大片免费看女人按摩摩 | 久久综合香蕉国产蜜臀av | 丰满人妻一区二区三区免费视频 | 国产av一区二区三区最新精品 | 亚洲国产精品一区二区美利坚 | 精品久久久无码人妻字幂 | 免费人成在线观看网站 | 国产又粗又硬又大爽黄老大爷视 | 18禁黄网站男男禁片免费观看 | 两性色午夜视频免费播放 | 久久久中文字幕日本无吗 | 久久精品国产99精品亚洲 | 久久久国产精品无码免费专区 | 久久精品国产99久久6动漫 | 中文字幕无线码免费人妻 | 色综合天天综合狠狠爱 | av在线亚洲欧洲日产一区二区 | 日欧一片内射va在线影院 | 丰满肥臀大屁股熟妇激情视频 | 国产欧美亚洲精品a | 亚洲日韩精品欧美一区二区 | 国产熟妇高潮叫床视频播放 | 牛和人交xxxx欧美 | 国产欧美亚洲精品a | 野外少妇愉情中文字幕 | 中文字幕 人妻熟女 | 亚洲欧美综合区丁香五月小说 | 亚洲综合精品香蕉久久网 | 人妻无码αv中文字幕久久琪琪布 | 亚洲熟妇色xxxxx亚洲 | 国产xxx69麻豆国语对白 | 无码人妻丰满熟妇区五十路百度 | 夜夜影院未满十八勿进 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲精品国偷拍自产在线麻豆 | 日产精品99久久久久久 | 四虎永久在线精品免费网址 | 色婷婷综合激情综在线播放 | 亚洲乱码国产乱码精品精 | 久久亚洲中文字幕无码 | 久久精品人妻少妇一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 久久精品人妻少妇一区二区三区 | 久久99精品国产麻豆 | 成人亚洲精品久久久久软件 | 亚洲国产综合无码一区 | 男女下面进入的视频免费午夜 | 激情内射日本一区二区三区 | 激情五月综合色婷婷一区二区 | 日本免费一区二区三区最新 | 久久精品女人的天堂av | 国产亚洲精品久久久久久久久动漫 | 精品人人妻人人澡人人爽人人 | 婷婷丁香六月激情综合啪 | 欧美激情综合亚洲一二区 | 曰韩无码二三区中文字幕 | 日本在线高清不卡免费播放 | 国内精品一区二区三区不卡 | 99久久精品国产一区二区蜜芽 | 久久精品国产精品国产精品污 | 国产婷婷色一区二区三区在线 | 国产精品高潮呻吟av久久4虎 | 亚洲欧美日韩国产精品一区二区 | 欧美人与牲动交xxxx | 国产特级毛片aaaaaa高潮流水 | 国产超级va在线观看视频 | 久久婷婷五月综合色国产香蕉 | 国产午夜无码精品免费看 | 乱人伦中文视频在线观看 | 黑人巨大精品欧美黑寡妇 | 国产深夜福利视频在线 | 色噜噜亚洲男人的天堂 | 国产午夜福利亚洲第一 | 永久免费观看国产裸体美女 | 性生交大片免费看女人按摩摩 | 亚洲国产午夜精品理论片 | 久久精品人人做人人综合试看 | 国产精品无码一区二区三区不卡 | 激情五月综合色婷婷一区二区 | a在线亚洲男人的天堂 | 性史性农村dvd毛片 | 中文字幕无线码免费人妻 | 日韩少妇内射免费播放 | 蜜桃臀无码内射一区二区三区 | 亚洲精品中文字幕乱码 | 天堂久久天堂av色综合 | 少妇人妻大乳在线视频 | 亚洲国产精品久久人人爱 | 成人性做爰aaa片免费看 | 国产精品久久久久无码av色戒 | 国产亚洲精品久久久久久久久动漫 | 欧美 丝袜 自拍 制服 另类 | 国产成人久久精品流白浆 | 一区二区三区高清视频一 | 欧美熟妇另类久久久久久多毛 | a在线观看免费网站大全 | 午夜熟女插插xx免费视频 | 国产色在线 | 国产 | 中文字幕人妻无码一夲道 | 永久免费观看美女裸体的网站 | 亚洲欧美国产精品专区久久 | 国产极品美女高潮无套在线观看 | 国产性生大片免费观看性 | 秋霞成人午夜鲁丝一区二区三区 | 成人无码精品一区二区三区 | 国产无套内射久久久国产 | 国产精品久久久久7777 | 亚洲综合另类小说色区 | 国产精品久久久久久久9999 | 久久久久99精品成人片 | 国产另类ts人妖一区二区 | 无码av中文字幕免费放 | 一本久久伊人热热精品中文字幕 | 精品久久久久久人妻无码中文字幕 | 免费观看激色视频网站 | 在线观看免费人成视频 | 国产午夜亚洲精品不卡下载 | 亚洲成色www久久网站 | 欧美野外疯狂做受xxxx高潮 | 久久国产自偷自偷免费一区调 | 无码人妻精品一区二区三区下载 | 人人爽人人澡人人高潮 | 男女猛烈xx00免费视频试看 | 久久久久久国产精品无码下载 | 亚洲国产欧美国产综合一区 | 欧美刺激性大交 | 女人被爽到呻吟gif动态图视看 | 欧美xxxxx精品 | 妺妺窝人体色www在线小说 | 精品人妻中文字幕有码在线 | 中文字幕人成乱码熟女app | 狂野欧美性猛xxxx乱大交 | 国产av一区二区精品久久凹凸 | 欧美日本日韩 | 人妻少妇被猛烈进入中文字幕 | 久久久av男人的天堂 | 俺去俺来也www色官网 | 亚洲精品一区二区三区在线 | 麻豆蜜桃av蜜臀av色欲av | 熟妇人妻中文av无码 | 久久国产精品_国产精品 | 精品欧洲av无码一区二区三区 | 东京热男人av天堂 | 欧美人与牲动交xxxx | 一个人看的视频www在线 | 久久久久久久女国产乱让韩 | 一本久久a久久精品vr综合 | 精品久久久无码人妻字幂 | 嫩b人妻精品一区二区三区 | 无码人妻精品一区二区三区下载 | 国产精品成人av在线观看 | 亚洲精品中文字幕 | 麻豆国产人妻欲求不满 | 亚洲热妇无码av在线播放 | 久久五月精品中文字幕 | 高清不卡一区二区三区 | 亚洲欧美综合区丁香五月小说 | 在线观看欧美一区二区三区 | 天堂无码人妻精品一区二区三区 | 久久综合给合久久狠狠狠97色 | 精品久久久久久人妻无码中文字幕 | 午夜精品久久久内射近拍高清 | 欧美大屁股xxxxhd黑色 | 波多野结衣av一区二区全免费观看 | 国产精品久久久午夜夜伦鲁鲁 | 中文字幕乱码亚洲无线三区 | 欧美熟妇另类久久久久久多毛 | 日本在线高清不卡免费播放 | 国产成人精品视频ⅴa片软件竹菊 | 中文字幕无码免费久久9一区9 | 伊人久久大香线焦av综合影院 | 丝袜 中出 制服 人妻 美腿 | 老司机亚洲精品影院 | 国产亲子乱弄免费视频 | 国产免费无码一区二区视频 | 动漫av一区二区在线观看 | 国产精品无码mv在线观看 | 成 人 免费观看网站 | 丰腴饱满的极品熟妇 | 亚洲aⅴ无码成人网站国产app | 欧美日韩一区二区三区自拍 | 青青草原综合久久大伊人精品 | 又黄又爽又色的视频 | 国产偷国产偷精品高清尤物 | 国产sm调教视频在线观看 | 给我免费的视频在线观看 | 色偷偷人人澡人人爽人人模 | 极品嫩模高潮叫床 | 国产亚洲视频中文字幕97精品 | 久久99精品国产.久久久久 | 久久久久99精品国产片 | 亚洲天堂2017无码中文 | 国产精品无码成人午夜电影 | 久9re热视频这里只有精品 | 国产午夜手机精彩视频 | 中文字幕无码日韩欧毛 | 日韩人妻无码一区二区三区久久99 | 一本久久伊人热热精品中文字幕 | 中文字幕无码日韩欧毛 | 日日摸夜夜摸狠狠摸婷婷 | 国产在线精品一区二区高清不卡 | 亚洲国产精华液网站w | 呦交小u女精品视频 | 爆乳一区二区三区无码 | 亚洲国产精品一区二区第一页 | 久久精品国产亚洲精品 | 亚洲色成人中文字幕网站 | 纯爱无遮挡h肉动漫在线播放 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 久久亚洲中文字幕精品一区 | 国产成人无码午夜视频在线观看 | 人妻少妇精品无码专区二区 | 成人免费无码大片a毛片 | 亚洲精品国产第一综合99久久 | 亚洲精品久久久久中文第一幕 | 美女黄网站人色视频免费国产 | 老头边吃奶边弄进去呻吟 | 99精品视频在线观看免费 | 日本大香伊一区二区三区 | 精品熟女少妇av免费观看 | 国产精品久久精品三级 | 国产av无码专区亚洲a∨毛片 | 色一情一乱一伦 | 国产成人精品三级麻豆 | 亚洲小说图区综合在线 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产免费久久久久久无码 | 亚洲国产欧美日韩精品一区二区三区 | 中国女人内谢69xxxxxa片 | 国产午夜亚洲精品不卡下载 | 青青久在线视频免费观看 | 影音先锋中文字幕无码 | 精品国产成人一区二区三区 | 国产极品美女高潮无套在线观看 | 国产极品视觉盛宴 | 麻豆蜜桃av蜜臀av色欲av | 亚洲s色大片在线观看 | 日日躁夜夜躁狠狠躁 | 天天做天天爱天天爽综合网 | 国产免费无码一区二区视频 | 5858s亚洲色大成网站www | 日本大乳高潮视频在线观看 | 欧美午夜特黄aaaaaa片 | 亚洲熟妇色xxxxx欧美老妇 | 丰满肥臀大屁股熟妇激情视频 | 天堂а√在线中文在线 | 亚洲aⅴ无码成人网站国产app | 国产精品高潮呻吟av久久 | 最新国产麻豆aⅴ精品无码 | 免费无码午夜福利片69 | 国产亚洲精品久久久ai换 | 午夜不卡av免费 一本久久a久久精品vr综合 | 婷婷综合久久中文字幕蜜桃三电影 | 精品无码成人片一区二区98 | 日欧一片内射va在线影院 | 玩弄人妻少妇500系列视频 | 精品久久久无码人妻字幂 | 亚洲aⅴ无码成人网站国产app | 亚洲乱码国产乱码精品精 | 国产偷抇久久精品a片69 | 亚洲欧美日韩成人高清在线一区 | 国产成人综合在线女婷五月99播放 | 色情久久久av熟女人妻网站 | 国产一区二区三区精品视频 | 久久精品人人做人人综合 | 人人妻人人澡人人爽欧美精品 | 久久zyz资源站无码中文动漫 | 2019午夜福利不卡片在线 | 午夜男女很黄的视频 | 无遮无挡爽爽免费视频 | 国产凸凹视频一区二区 | 久久精品中文字幕一区 | 精品aⅴ一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽 | 十八禁视频网站在线观看 | 国产麻豆精品精东影业av网站 | 人人澡人人透人人爽 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 欧美野外疯狂做受xxxx高潮 | 国产高潮视频在线观看 | 亚洲乱码国产乱码精品精 | 无码一区二区三区在线 | 久久熟妇人妻午夜寂寞影院 | 夫妻免费无码v看片 | 色综合久久久久综合一本到桃花网 | 色欲综合久久中文字幕网 | 亚洲va欧美va天堂v国产综合 | 99久久久国产精品无码免费 | 少妇性l交大片 | 久久精品成人欧美大片 | a在线亚洲男人的天堂 | 亚洲性无码av中文字幕 | 欧美自拍另类欧美综合图片区 | 国产疯狂伦交大片 | 人人爽人人澡人人人妻 | 国产超碰人人爽人人做人人添 | 国产激情精品一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 十八禁真人啪啪免费网站 | 色一情一乱一伦一区二区三欧美 | 日韩人妻无码中文字幕视频 | 欧美阿v高清资源不卡在线播放 | 亚洲欧美综合区丁香五月小说 | 亚洲精品综合一区二区三区在线 | 黑人大群体交免费视频 | 中文字幕人妻无码一夲道 | 亚洲无人区一区二区三区 | 精品人人妻人人澡人人爽人人 | 日韩精品久久久肉伦网站 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲国精产品一二二线 | 久久精品人妻少妇一区二区三区 | 日日碰狠狠丁香久燥 | 久久久久亚洲精品中文字幕 | 亚洲精品一区二区三区四区五区 | 欧美野外疯狂做受xxxx高潮 | 久久精品国产日本波多野结衣 | 无码一区二区三区在线 | 国产精品亚洲一区二区三区喷水 | 少妇的肉体aa片免费 | 亚洲乱码中文字幕在线 | 国产精品久久久久9999小说 | 亚洲精品中文字幕久久久久 | 国产精品办公室沙发 | 内射欧美老妇wbb | 国产艳妇av在线观看果冻传媒 | 精品国偷自产在线 | 日本精品人妻无码免费大全 | 乌克兰少妇xxxx做受 | 97精品国产97久久久久久免费 | 国产后入清纯学生妹 | 久久99精品久久久久婷婷 | 2019午夜福利不卡片在线 | 精品人妻人人做人人爽夜夜爽 | 在线看片无码永久免费视频 | 国产av一区二区三区最新精品 | 强开小婷嫩苞又嫩又紧视频 | 夜夜躁日日躁狠狠久久av | 欧美亚洲日韩国产人成在线播放 | 国产舌乚八伦偷品w中 | 国产精品久久久久久久9999 | 漂亮人妻洗澡被公强 日日躁 | 国产亚av手机在线观看 | 亚洲一区二区三区香蕉 | 日本免费一区二区三区最新 | 性生交片免费无码看人 | 国产高清av在线播放 | 国内精品人妻无码久久久影院蜜桃 | 麻豆蜜桃av蜜臀av色欲av | 熟妇人妻中文av无码 | 97久久国产亚洲精品超碰热 | 日日躁夜夜躁狠狠躁 | 久久国产精品精品国产色婷婷 | 国精品人妻无码一区二区三区蜜柚 | 99久久99久久免费精品蜜桃 | 日欧一片内射va在线影院 | 久久久久免费精品国产 | 欧美一区二区三区 | 欧美精品一区二区精品久久 | 一本久久伊人热热精品中文字幕 | 欧美日韩色另类综合 | 中文字幕乱码中文乱码51精品 | 国产亚洲精品久久久闺蜜 | 久久人人爽人人爽人人片av高清 | 久久久久久久女国产乱让韩 | 人妻插b视频一区二区三区 | 台湾无码一区二区 | 97se亚洲精品一区 | 少妇无码一区二区二三区 | 国产精品人人妻人人爽 | 国产精品内射视频免费 | 亚洲日韩av一区二区三区四区 | 无遮挡啪啪摇乳动态图 | 老熟妇乱子伦牲交视频 | 国产精品毛片一区二区 | 午夜无码区在线观看 | 久久国产劲爆∧v内射 | 久久国产36精品色熟妇 | 国产精品va在线观看无码 | 东京无码熟妇人妻av在线网址 | 亚洲乱亚洲乱妇50p | 久久精品丝袜高跟鞋 | 成人欧美一区二区三区黑人免费 | 亚洲中文字幕无码中字 | 97资源共享在线视频 | 嫩b人妻精品一区二区三区 | 精品水蜜桃久久久久久久 | 欧美人与牲动交xxxx | 老太婆性杂交欧美肥老太 | 亚洲自偷自偷在线制服 | v一区无码内射国产 | 国产99久久精品一区二区 | 无套内射视频囯产 | 中国女人内谢69xxxxxa片 | 高清国产亚洲精品自在久久 | 国产人成高清在线视频99最全资源 | 奇米影视888欧美在线观看 | 永久免费精品精品永久-夜色 | 精品国产青草久久久久福利 | 国产精品毛片一区二区 | 伊人色综合久久天天小片 | 久久午夜无码鲁丝片秋霞 | 18精品久久久无码午夜福利 | 欧美真人作爱免费视频 | 国产成人综合在线女婷五月99播放 | 精品国产青草久久久久福利 | 成人欧美一区二区三区黑人免费 | 天天摸天天透天天添 | 国内少妇偷人精品视频免费 | 国产午夜手机精彩视频 | 亚洲无人区午夜福利码高清完整版 | 国产成人精品无码播放 | 欧美亚洲日韩国产人成在线播放 | 成人aaa片一区国产精品 | 亚洲中文字幕乱码av波多ji | 亚洲国产精品无码久久久久高潮 | 又黄又爽又色的视频 | 女高中生第一次破苞av | 亚洲欧美中文字幕5发布 | 国产精品亚洲五月天高清 | 国产精品香蕉在线观看 | 少妇一晚三次一区二区三区 | 久久久成人毛片无码 | 精品aⅴ一区二区三区 | 精品熟女少妇av免费观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 一本加勒比波多野结衣 | 四虎国产精品免费久久 | 欧美大屁股xxxxhd黑色 | 亚洲阿v天堂在线 | 精品人妻人人做人人爽夜夜爽 | 日本精品人妻无码77777 天堂一区人妻无码 | 精品亚洲韩国一区二区三区 | 国产亚洲人成在线播放 | 亚洲狠狠色丁香婷婷综合 | 国色天香社区在线视频 | 在线播放无码字幕亚洲 | 国产乱码精品一品二品 | 亚洲最大成人网站 | 国内少妇偷人精品视频免费 | 日韩人妻无码中文字幕视频 | 夜夜夜高潮夜夜爽夜夜爰爰 | 欧美精品无码一区二区三区 | 亚洲色偷偷偷综合网 | 亚洲国产精品无码一区二区三区 | 日韩精品无码免费一区二区三区 | 国产精品无码一区二区三区不卡 | 中文字幕无码免费久久99 | 久久亚洲中文字幕精品一区 | 欧美怡红院免费全部视频 | 97se亚洲精品一区 | 欧美自拍另类欧美综合图片区 | 最新国产乱人伦偷精品免费网站 | 国产亚洲欧美日韩亚洲中文色 | 日本xxxx色视频在线观看免费 | 精品 日韩 国产 欧美 视频 | 久久久久久亚洲精品a片成人 | 国产成人精品久久亚洲高清不卡 | 国产精品无码永久免费888 | 亚洲最大成人网站 | 国产成人综合色在线观看网站 | 国产欧美熟妇另类久久久 | 亚洲人成网站色7799 | 欧美黑人巨大xxxxx | 捆绑白丝粉色jk震动捧喷白浆 | 国产午夜亚洲精品不卡 | 欧美熟妇另类久久久久久不卡 | 青青久在线视频免费观看 | 中文精品久久久久人妻不卡 | 国产又粗又硬又大爽黄老大爷视 | 人妻有码中文字幕在线 | 欧美黑人乱大交 | 少妇高潮一区二区三区99 | 嫩b人妻精品一区二区三区 | 国产精品亚洲一区二区三区喷水 | 人妻天天爽夜夜爽一区二区 | 国产熟妇另类久久久久 | 无码人妻丰满熟妇区五十路百度 | 99精品国产综合久久久久五月天 | 在线欧美精品一区二区三区 | 亚洲第一无码av无码专区 | 亚洲中文字幕无码一久久区 | 午夜无码区在线观看 | 日韩av无码中文无码电影 | 亚洲呦女专区 | 国产午夜精品一区二区三区嫩草 | 国产精品人人爽人人做我的可爱 | 精品aⅴ一区二区三区 | 精品国产麻豆免费人成网站 | 国产欧美亚洲精品a | 亚洲精品国产精品乱码不卡 | 99久久无码一区人妻 | 丝袜人妻一区二区三区 | 中文字幕乱码亚洲无线三区 | 丝袜 中出 制服 人妻 美腿 | 久久精品无码一区二区三区 | 久久午夜无码鲁丝片 | 国产高潮视频在线观看 | 丰满人妻一区二区三区免费视频 | 人妻aⅴ无码一区二区三区 | 亚洲一区二区三区四区 | 亚洲の无码国产の无码步美 | 欧美精品无码一区二区三区 | 亚洲色在线无码国产精品不卡 | 国产精品亚洲综合色区韩国 | 久久午夜无码鲁丝片 | 成人欧美一区二区三区黑人免费 | 人妻插b视频一区二区三区 | 精品人人妻人人澡人人爽人人 | 亚洲一区二区三区在线观看网站 | 国产精品人妻一区二区三区四 | 黄网在线观看免费网站 | 欧美老妇交乱视频在线观看 | 国产在热线精品视频 | av小次郎收藏 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲一区二区三区含羞草 | 欧美人与善在线com | 日日碰狠狠躁久久躁蜜桃 | 无码国模国产在线观看 | 97精品国产97久久久久久免费 | 亚洲欧美日韩综合久久久 | 伊人久久大香线焦av综合影院 | 又大又硬又爽免费视频 | 色一情一乱一伦一视频免费看 | a在线观看免费网站大全 | 亚洲中文字幕成人无码 | 国产精品理论片在线观看 | 日韩少妇内射免费播放 | 精品无码成人片一区二区98 | 无码国产乱人伦偷精品视频 | 成人精品视频一区二区 | 国产成人综合在线女婷五月99播放 | 中文无码精品a∨在线观看不卡 | 鲁大师影院在线观看 | 青青草原综合久久大伊人精品 | 久久久精品456亚洲影院 | 中文字幕av伊人av无码av | 疯狂三人交性欧美 | 国产精品丝袜黑色高跟鞋 | 少妇高潮一区二区三区99 | 日韩精品a片一区二区三区妖精 | 激情内射亚州一区二区三区爱妻 | 人人妻人人澡人人爽欧美一区九九 | 东京热一精品无码av | 丰满少妇女裸体bbw | 免费人成在线观看网站 | 88国产精品欧美一区二区三区 | 国产午夜无码精品免费看 | 亚洲阿v天堂在线 | 伊人久久大香线蕉av一区二区 | 特大黑人娇小亚洲女 | 国产精品美女久久久久av爽李琼 | 在线欧美精品一区二区三区 | 亚洲乱码日产精品bd | 伊人久久大香线蕉亚洲 | 三上悠亚人妻中文字幕在线 | 男人扒开女人内裤强吻桶进去 | 国产在线无码精品电影网 | 大地资源网第二页免费观看 | 少妇性l交大片 | 国产成人综合在线女婷五月99播放 | 美女毛片一区二区三区四区 | 精品夜夜澡人妻无码av蜜桃 | 中国大陆精品视频xxxx | 日日噜噜噜噜夜夜爽亚洲精品 | 日韩精品成人一区二区三区 | 97资源共享在线视频 | 给我免费的视频在线观看 | 一本久久a久久精品亚洲 | 扒开双腿疯狂进出爽爽爽视频 | 99久久亚洲精品无码毛片 | 俄罗斯老熟妇色xxxx | 人人澡人人妻人人爽人人蜜桃 | 九九久久精品国产免费看小说 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 秋霞成人午夜鲁丝一区二区三区 | 欧美日本日韩 | 日本精品人妻无码免费大全 | 日本护士毛茸茸高潮 | 国产手机在线αⅴ片无码观看 | 亚洲第一无码av无码专区 | 亚洲精品美女久久久久久久 | 奇米影视7777久久精品 | 国产人妻人伦精品 | 在线观看国产午夜福利片 | 好男人www社区 | 爆乳一区二区三区无码 | 亚洲成a人片在线观看日本 | 亚洲色偷偷男人的天堂 | 国内少妇偷人精品视频免费 | 国产成人综合美国十次 | 久久久久久av无码免费看大片 | 久久亚洲a片com人成 | 又大又硬又黄的免费视频 | 曰韩少妇内射免费播放 | 欧美三级a做爰在线观看 | 老子影院午夜精品无码 | a在线亚洲男人的天堂 | 中文字幕乱码亚洲无线三区 | 久精品国产欧美亚洲色aⅴ大片 | 成人亚洲精品久久久久软件 | 十八禁视频网站在线观看 | 亚洲天堂2017无码中文 | 国产无套内射久久久国产 | 色综合视频一区二区三区 | 日日麻批免费40分钟无码 | 欧美日韩久久久精品a片 | 久久伊人色av天堂九九小黄鸭 | 亚洲成a人片在线观看无码 | 无码福利日韩神码福利片 | 国产真实乱对白精彩久久 | 亚洲精品一区二区三区婷婷月 | а√天堂www在线天堂小说 | 国产精华av午夜在线观看 | 精品久久综合1区2区3区激情 | 久久亚洲中文字幕无码 | 小泽玛莉亚一区二区视频在线 | 成人三级无码视频在线观看 | 一本久久a久久精品亚洲 | 国产精品无套呻吟在线 | 国产成人无码午夜视频在线观看 | 无码国产乱人伦偷精品视频 | 欧洲熟妇精品视频 | 国产精品亚洲专区无码不卡 | 99久久99久久免费精品蜜桃 | 人妻互换免费中文字幕 | 永久免费观看美女裸体的网站 | 亚洲精品www久久久 | 精品国产精品久久一区免费式 | 久久99精品国产麻豆 | 国产亲子乱弄免费视频 | 噜噜噜亚洲色成人网站 | 精品人妻人人做人人爽 | 精品水蜜桃久久久久久久 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 麻豆国产丝袜白领秘书在线观看 | 亚洲娇小与黑人巨大交 | 粗大的内捧猛烈进出视频 | 国内揄拍国内精品人妻 | 激情内射亚州一区二区三区爱妻 | 无码av免费一区二区三区试看 | 色妞www精品免费视频 | 国产精品人妻一区二区三区四 | 一本久久伊人热热精品中文字幕 | 欧美xxxx黑人又粗又长 | 99精品久久毛片a片 | 午夜精品久久久久久久久 | 日韩精品成人一区二区三区 | 精品熟女少妇av免费观看 | 鲁鲁鲁爽爽爽在线视频观看 | 久久久久人妻一区精品色欧美 | 人妻有码中文字幕在线 | 丝袜人妻一区二区三区 | 亚洲色偷偷男人的天堂 | 好屌草这里只有精品 | 欧美性猛交内射兽交老熟妇 | 亚洲日韩乱码中文无码蜜桃臀网站 | 无码中文字幕色专区 | 国产尤物精品视频 | 老熟妇乱子伦牲交视频 | 成人一区二区免费视频 | 亚洲精品成a人在线观看 | 久久视频在线观看精品 | 香港三级日本三级妇三级 | 亚洲午夜无码久久 | 天堂久久天堂av色综合 | 亚洲国产精品久久久天堂 | 高清不卡一区二区三区 | 图片小说视频一区二区 | 99久久久无码国产aaa精品 | 国产精品18久久久久久麻辣 | 大乳丰满人妻中文字幕日本 | 国产乱人伦av在线无码 | 沈阳熟女露脸对白视频 | 欧美日韩一区二区综合 | 国产精品久久国产精品99 | 久久综合给合久久狠狠狠97色 | 欧美精品国产综合久久 | 欧美freesex黑人又粗又大 | 国产精品办公室沙发 | 毛片内射-百度 | 国产精品亚洲а∨无码播放麻豆 | 性欧美疯狂xxxxbbbb | 丰满人妻翻云覆雨呻吟视频 | 综合网日日天干夜夜久久 | 台湾无码一区二区 | 乱人伦人妻中文字幕无码 | 日韩精品无码免费一区二区三区 | 四虎影视成人永久免费观看视频 | 国产九九九九九九九a片 | 亚洲精品欧美二区三区中文字幕 | 日韩精品成人一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 性色av无码免费一区二区三区 | 日韩人妻无码一区二区三区久久99 | 亚洲人成影院在线无码按摩店 | 国产偷自视频区视频 | 嫩b人妻精品一区二区三区 | 国产精品久久福利网站 | 国产sm调教视频在线观看 | 少妇性l交大片 | 国产激情无码一区二区 | 国产人妻人伦精品 | 18禁止看的免费污网站 | 蜜臀aⅴ国产精品久久久国产老师 | 人妻体内射精一区二区三四 | 精品国产青草久久久久福利 | 亚洲综合在线一区二区三区 | 亚洲中文字幕久久无码 | 亚洲人交乣女bbw | 377p欧洲日本亚洲大胆 | 无码国内精品人妻少妇 | 国内精品人妻无码久久久影院蜜桃 | 少妇性l交大片 | 精品国产一区二区三区四区 | 亚洲伊人久久精品影院 | 亚洲成色在线综合网站 | 曰韩无码二三区中文字幕 | 啦啦啦www在线观看免费视频 | 亚洲色欲久久久综合网东京热 | 精品国产成人一区二区三区 | 国产免费久久久久久无码 | 六十路熟妇乱子伦 | 国内少妇偷人精品视频 | 中文字幕无线码免费人妻 | 久久国语露脸国产精品电影 | 蜜臀av无码人妻精品 | 国产激情无码一区二区 | 亚洲国产精品久久人人爱 | 午夜精品久久久久久久 | 在线a亚洲视频播放在线观看 | 国产真人无遮挡作爱免费视频 | 5858s亚洲色大成网站www | 中文字幕av无码一区二区三区电影 | 国产美女极度色诱视频www | 日本乱偷人妻中文字幕 | 国产极品视觉盛宴 | 熟妇人妻无码xxx视频 | 性欧美熟妇videofreesex | 亚洲熟悉妇女xxx妇女av | www国产亚洲精品久久网站 | 国产精品人人爽人人做我的可爱 | 国产97在线 | 亚洲 | 国产精品久久久久久无码 | 丰满少妇高潮惨叫视频 | 国产卡一卡二卡三 | 2020久久超碰国产精品最新 | 黄网在线观看免费网站 | 亚洲一区av无码专区在线观看 | 亚洲国产精品无码一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 久久国产精品萌白酱免费 | 国内揄拍国内精品人妻 | 国产精品高潮呻吟av久久 | 亚洲欧美中文字幕5发布 | 精品无人区无码乱码毛片国产 | 人人妻人人澡人人爽精品欧美 | 在线观看欧美一区二区三区 | 国产成人av免费观看 | 无码一区二区三区在线观看 | 国产真实乱对白精彩久久 | 激情人妻另类人妻伦 | 欧美老妇交乱视频在线观看 | 内射老妇bbwx0c0ck | 欧美人与物videos另类 | 99久久久无码国产aaa精品 | 国产av剧情md精品麻豆 | 日韩精品久久久肉伦网站 | 性做久久久久久久免费看 | 国产乱子伦视频在线播放 | 2020最新国产自产精品 | 国产免费久久精品国产传媒 | 在线亚洲高清揄拍自拍一品区 | 国产一区二区三区影院 | 国产成人精品视频ⅴa片软件竹菊 | 狠狠色欧美亚洲狠狠色www | 国内综合精品午夜久久资源 | 亚洲第一无码av无码专区 | 永久黄网站色视频免费直播 | 日日摸天天摸爽爽狠狠97 | 免费观看黄网站 | 日本www一道久久久免费榴莲 | 亚洲成色www久久网站 | 日本一区二区三区免费播放 | 一本久久a久久精品亚洲 | 亚洲成色www久久网站 | 在线精品亚洲一区二区 | yw尤物av无码国产在线观看 | 无遮挡国产高潮视频免费观看 | 丝袜人妻一区二区三区 | 青青青爽视频在线观看 | 国产精品多人p群无码 | 国产成人精品一区二区在线小狼 | 亚洲精品午夜国产va久久成人 | 国产精品办公室沙发 | 成人精品视频一区二区三区尤物 | 狠狠cao日日穞夜夜穞av | 白嫩日本少妇做爰 | yw尤物av无码国产在线观看 | 色欲人妻aaaaaaa无码 | 国产成人人人97超碰超爽8 | 国产熟女一区二区三区四区五区 | 国精产品一区二区三区 | a在线观看免费网站大全 | 波多野结衣高清一区二区三区 | 无码人中文字幕 | 精品亚洲韩国一区二区三区 | 欧美日韩在线亚洲综合国产人 | 88国产精品欧美一区二区三区 | 亚洲中文无码av永久不收费 | 亚洲大尺度无码无码专区 | 大地资源网第二页免费观看 | av人摸人人人澡人人超碰下载 | 国产人妻人伦精品 | 婷婷六月久久综合丁香 | 丝袜美腿亚洲一区二区 | 亚洲熟熟妇xxxx | 国产精品久久久一区二区三区 | 精品无人区无码乱码毛片国产 | 日本一区二区更新不卡 | 欧美成人家庭影院 | 少妇太爽了在线观看 | 久久综合九色综合97网 | 久久人人爽人人人人片 | 国产特级毛片aaaaaaa高清 | 狠狠色丁香久久婷婷综合五月 | av无码久久久久不卡免费网站 | 精品一区二区三区无码免费视频 | 少妇激情av一区二区 | 欧洲熟妇精品视频 | 亚洲国产精品成人久久蜜臀 | 天堂久久天堂av色综合 | 国产热a欧美热a在线视频 | 少妇被粗大的猛进出69影院 | 特级做a爰片毛片免费69 | 精品人妻中文字幕有码在线 | 蜜桃无码一区二区三区 | 在线看片无码永久免费视频 | 免费无码的av片在线观看 | 国产亚洲欧美在线专区 | 久久国内精品自在自线 | 秋霞成人午夜鲁丝一区二区三区 | 中文字幕乱码人妻无码久久 | 午夜理论片yy44880影院 | 久久亚洲国产成人精品性色 | 久久国产劲爆∧v内射 | 日韩欧美成人免费观看 | 一个人看的视频www在线 | 亚洲精品www久久久 | 2020久久超碰国产精品最新 | 乱人伦人妻中文字幕无码 | 色妞www精品免费视频 | 日本一区二区三区免费高清 | 成人aaa片一区国产精品 | 麻豆国产丝袜白领秘书在线观看 | 日韩人妻少妇一区二区三区 | 四虎国产精品免费久久 | 在线a亚洲视频播放在线观看 | 精品成在人线av无码免费看 | 国产精品无码一区二区桃花视频 | 久久久av男人的天堂 | 中文无码成人免费视频在线观看 | 天天摸天天碰天天添 | 精品国产乱码久久久久乱码 | 少妇性l交大片欧洲热妇乱xxx | 欧美日韩亚洲国产精品 | 国精产品一品二品国精品69xx | 内射老妇bbwx0c0ck | 色窝窝无码一区二区三区色欲 | 97精品人妻一区二区三区香蕉 | 国产莉萝无码av在线播放 | 无码av免费一区二区三区试看 | 国内揄拍国内精品少妇国语 | 亚洲欧洲中文日韩av乱码 | 国产免费久久精品国产传媒 | 亚洲精品一区国产 | 日韩无套无码精品 | 亚洲日韩av一区二区三区中文 | 久久精品女人的天堂av | 荫蒂被男人添的好舒服爽免费视频 | 97资源共享在线视频 | 377p欧洲日本亚洲大胆 | 欧美成人午夜精品久久久 | 亚洲熟女一区二区三区 | 国产一区二区三区四区五区加勒比 | 乱中年女人伦av三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 日本大乳高潮视频在线观看 | 国产香蕉97碰碰久久人人 | 精品成在人线av无码免费看 | 精品厕所偷拍各类美女tp嘘嘘 | 精品一区二区不卡无码av | 乱码午夜-极国产极内射 | 少妇无码av无码专区在线观看 | 少妇太爽了在线观看 | 国产午夜亚洲精品不卡 | 99久久婷婷国产综合精品青草免费 | 在线精品亚洲一区二区 | 麻豆md0077饥渴少妇 | 国产亚洲精品精品国产亚洲综合 | 亚洲熟妇色xxxxx亚洲 | 综合网日日天干夜夜久久 | 爽爽影院免费观看 | 亚洲欧美日韩综合久久久 | 日日碰狠狠躁久久躁蜜桃 | 天堂а√在线中文在线 | 中文字幕无码免费久久99 | 亚无码乱人伦一区二区 | 亚洲综合久久一区二区 | 老熟妇仑乱视频一区二区 | 国产精品99爱免费视频 | 88国产精品欧美一区二区三区 | 亚洲成av人片在线观看无码不卡 | 无码国模国产在线观看 | 欧美老妇交乱视频在线观看 | 国内精品九九久久久精品 | 亚洲色欲色欲欲www在线 | 99久久婷婷国产综合精品青草免费 | 国产成人无码av在线影院 | 亚洲va欧美va天堂v国产综合 | 国产精品久久久久久久影院 | 丰满肥臀大屁股熟妇激情视频 | 国产成人久久精品流白浆 | 日本丰满护士爆乳xxxx | 中文无码成人免费视频在线观看 | 99精品视频在线观看免费 | 在线a亚洲视频播放在线观看 | 亚洲精品午夜无码电影网 | 国产农村妇女高潮大叫 | 亚洲日本va午夜在线电影 | 人妻少妇精品无码专区动漫 | 亚洲人成网站色7799 | 日韩无套无码精品 | 性生交大片免费看女人按摩摩 | 国产精品.xx视频.xxtv | 国产麻豆精品一区二区三区v视界 | 伊人久久大香线蕉亚洲 | 大肉大捧一进一出好爽视频 | 麻豆av传媒蜜桃天美传媒 | 久久久久国色av免费观看性色 | 国产亚洲精品久久久久久大师 | 国产国语老龄妇女a片 | 日日摸日日碰夜夜爽av | 日本熟妇人妻xxxxx人hd | 性生交片免费无码看人 | 国内精品九九久久久精品 | 3d动漫精品啪啪一区二区中 | 日韩在线不卡免费视频一区 | 人妻少妇被猛烈进入中文字幕 | 成人性做爰aaa片免费看不忠 | 亚洲男人av香蕉爽爽爽爽 | 中文字幕无码日韩专区 | 精品厕所偷拍各类美女tp嘘嘘 | 国产国产精品人在线视 | 日韩亚洲欧美精品综合 | 中国女人内谢69xxxxxa片 | 欧美精品免费观看二区 | 亚洲第一网站男人都懂 | 亚洲毛片av日韩av无码 | 无码免费一区二区三区 | 久久精品国产精品国产精品污 | аⅴ资源天堂资源库在线 | 国产一区二区不卡老阿姨 | 18禁止看的免费污网站 | 又湿又紧又大又爽a视频国产 | 乱码av麻豆丝袜熟女系列 | 日本精品少妇一区二区三区 | 一本久道久久综合婷婷五月 | 欧美激情综合亚洲一二区 | 免费人成网站视频在线观看 | 日韩无套无码精品 | 欧美亚洲日韩国产人成在线播放 | 亚洲国产精品久久人人爱 | 日本熟妇人妻xxxxx人hd | 国产亚洲欧美日韩亚洲中文色 | ass日本丰满熟妇pics | 国产亚洲日韩欧美另类第八页 | 六十路熟妇乱子伦 | 欧美一区二区三区视频在线观看 | 国产精品嫩草久久久久 | 日韩精品无码一区二区中文字幕 | 欧美午夜特黄aaaaaa片 | 精品人妻人人做人人爽夜夜爽 | 在线亚洲高清揄拍自拍一品区 | 亚洲 另类 在线 欧美 制服 | 双乳奶水饱满少妇呻吟 | 久在线观看福利视频 | 欧美激情内射喷水高潮 | 免费人成在线观看网站 | 久久久久av无码免费网 | 麻花豆传媒剧国产免费mv在线 | 中文字幕 亚洲精品 第1页 | 成人无码精品1区2区3区免费看 | 亚洲国产欧美日韩精品一区二区三区 | 国产精品久久久av久久久 | 国产成人亚洲综合无码 | 亚洲精品久久久久avwww潮水 | 国内揄拍国内精品少妇国语 | 综合网日日天干夜夜久久 | 精品一区二区三区无码免费视频 | 无码人妻av免费一区二区三区 | 亚洲成a人片在线观看无码 | 国产精品久久久一区二区三区 | 人妻少妇精品久久 | 亚洲热妇无码av在线播放 | a片在线免费观看 | 成人无码精品一区二区三区 | 无码乱肉视频免费大全合集 | 久久精品中文闷骚内射 | 日本一本二本三区免费 | 97色伦图片97综合影院 | 熟妇人妻无乱码中文字幕 | 精品人妻中文字幕有码在线 | 亚洲一区二区三区播放 | 日本爽爽爽爽爽爽在线观看免 | 国内精品一区二区三区不卡 | 麻花豆传媒剧国产免费mv在线 | 久久五月精品中文字幕 | 久久精品人妻少妇一区二区三区 | 国产av无码专区亚洲a∨毛片 | 久久亚洲精品中文字幕无男同 | 成人精品视频一区二区三区尤物 | 亚洲国产精品毛片av不卡在线 | 99麻豆久久久国产精品免费 | 桃花色综合影院 | 久久 国产 尿 小便 嘘嘘 | 久久精品人人做人人综合 | 香港三级日本三级妇三级 | 中文字幕人妻无码一夲道 | 国产亲子乱弄免费视频 | 人人超人人超碰超国产 | 亚洲国产av精品一区二区蜜芽 | 国产两女互慰高潮视频在线观看 | 国产亚av手机在线观看 | 老熟妇乱子伦牲交视频 | 成 人影片 免费观看 | 成 人 免费观看网站 | 国模大胆一区二区三区 | 狠狠色色综合网站 | 欧美熟妇另类久久久久久多毛 | 一本久久a久久精品亚洲 | 九九在线中文字幕无码 | 无码av免费一区二区三区试看 | 国产69精品久久久久app下载 | 国产精品18久久久久久麻辣 | 蜜桃臀无码内射一区二区三区 | 少妇被粗大的猛进出69影院 | 久久精品人人做人人综合 | 亚洲欧洲无卡二区视頻 | 激情亚洲一区国产精品 | 色一情一乱一伦 | 久久天天躁夜夜躁狠狠 | 久久久久久av无码免费看大片 | 亚洲一区二区三区在线观看网站 | 色一情一乱一伦一区二区三欧美 | 国产69精品久久久久app下载 | 中国女人内谢69xxxx | 乱码午夜-极国产极内射 | 亚洲自偷自拍另类第1页 | 蜜臀av无码人妻精品 | 欧美freesex黑人又粗又大 | 国产超碰人人爽人人做人人添 | 噜噜噜亚洲色成人网站 | 亚洲国产欧美日韩精品一区二区三区 | 国产熟妇另类久久久久 | 久久午夜无码鲁丝片秋霞 | 亚洲国产av精品一区二区蜜芽 | 狠狠色丁香久久婷婷综合五月 | 宝宝好涨水快流出来免费视频 | 亚洲欧美日韩综合久久久 | 国产激情一区二区三区 | √8天堂资源地址中文在线 | 内射老妇bbwx0c0ck | 国产激情一区二区三区 | 无码一区二区三区在线观看 | 国产精品永久免费视频 | 99久久精品国产一区二区蜜芽 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产精品高潮呻吟av久久 | 未满成年国产在线观看 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产午夜无码精品免费看 | 中国女人内谢69xxxx | 欧美人与动性行为视频 | 久久久久久九九精品久 | 久久久www成人免费毛片 | 成年美女黄网站色大免费全看 | 国産精品久久久久久久 | 老头边吃奶边弄进去呻吟 | 男人的天堂2018无码 | 国产亚洲精品久久久久久大师 | 中文毛片无遮挡高清免费 | 亚洲s色大片在线观看 | 亚洲中文字幕在线观看 | 蜜桃无码一区二区三区 | 国产精品美女久久久网av | 国产一区二区三区日韩精品 | 国产成人无码区免费内射一片色欲 | 亚洲欧美综合区丁香五月小说 | 强辱丰满人妻hd中文字幕 | 午夜成人1000部免费视频 | 性欧美疯狂xxxxbbbb | 四虎国产精品免费久久 | 亚洲精品午夜国产va久久成人 | 日本大香伊一区二区三区 | 人妻尝试又大又粗久久 | 蜜桃臀无码内射一区二区三区 | 日韩成人一区二区三区在线观看 | 一本无码人妻在中文字幕免费 | 夜夜夜高潮夜夜爽夜夜爰爰 | а天堂中文在线官网 | 99久久久国产精品无码免费 | 九九在线中文字幕无码 | 玩弄中年熟妇正在播放 | 人妻互换免费中文字幕 | 色欲av亚洲一区无码少妇 | 偷窥日本少妇撒尿chinese | 少妇太爽了在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产在线无码精品电影网 | 精品久久久中文字幕人妻 | 一本精品99久久精品77 | 日日橹狠狠爱欧美视频 | 国产人妻精品午夜福利免费 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产精品久久福利网站 | 亚洲码国产精品高潮在线 | 超碰97人人做人人爱少妇 | 色噜噜亚洲男人的天堂 | 国产肉丝袜在线观看 | 日本一卡二卡不卡视频查询 | 东京无码熟妇人妻av在线网址 | 人人妻人人澡人人爽精品欧美 | 欧美日韩视频无码一区二区三 | 欧洲vodafone精品性 | 久久久久99精品国产片 | 国产又粗又硬又大爽黄老大爷视 | 久久午夜夜伦鲁鲁片无码免费 | 久久99精品久久久久久动态图 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产9 9在线 | 中文 | 久久精品国产99精品亚洲 | 国产无遮挡又黄又爽免费视频 | 国产亚洲精品久久久久久久久动漫 | 国产精品嫩草久久久久 | 久久精品中文字幕大胸 | 久久久久国色av免费观看性色 | 永久免费精品精品永久-夜色 | 日日天干夜夜狠狠爱 | 色妞www精品免费视频 | 欧美放荡的少妇 | 国产美女精品一区二区三区 | √天堂中文官网8在线 | 国产精品第一国产精品 | 欧美xxxx黑人又粗又长 | 亚洲va欧美va天堂v国产综合 | 中文字幕av日韩精品一区二区 | 在线观看欧美一区二区三区 | 国产一精品一av一免费 | 欧美日韩一区二区三区自拍 | 国产精品亚洲综合色区韩国 | 丰满人妻被黑人猛烈进入 | 国产网红无码精品视频 | 国产精品久久久久久久影院 | 三级4级全黄60分钟 | 亚洲人成人无码网www国产 | 国产精品a成v人在线播放 | 精品成在人线av无码免费看 | 亚洲色欲久久久综合网东京热 | 国产无av码在线观看 | 2020久久香蕉国产线看观看 | 久久综合久久自在自线精品自 | 久久综合九色综合97网 | 国产超碰人人爽人人做人人添 | 免费网站看v片在线18禁无码 | 久久精品无码一区二区三区 | 中文久久乱码一区二区 | 亚洲小说春色综合另类 | 曰韩无码二三区中文字幕 | 日本一区二区更新不卡 | 人人澡人人妻人人爽人人蜜桃 | 巨爆乳无码视频在线观看 | 欧美成人午夜精品久久久 | 亚洲日韩一区二区 | 国产亚洲视频中文字幕97精品 | 好屌草这里只有精品 | 亚洲欧美综合区丁香五月小说 | 亚洲区欧美区综合区自拍区 | 亚洲第一无码av无码专区 | 色欲av亚洲一区无码少妇 | 免费无码一区二区三区蜜桃大 | 国产超级va在线观看视频 | 人人爽人人澡人人人妻 | 人妻互换免费中文字幕 | 国产内射爽爽大片视频社区在线 | 久久精品人人做人人综合试看 | 精品久久久中文字幕人妻 | 日韩成人一区二区三区在线观看 | 色噜噜亚洲男人的天堂 | 久久www免费人成人片 | 香蕉久久久久久av成人 | 亚洲综合精品香蕉久久网 | 亚洲日韩av一区二区三区四区 | 久久伊人色av天堂九九小黄鸭 | 成人综合网亚洲伊人 | 丰满少妇熟乱xxxxx视频 | 日韩av激情在线观看 | 国产成人精品一区二区在线小狼 | 亚洲成色在线综合网站 | 日日噜噜噜噜夜夜爽亚洲精品 | 蜜桃视频插满18在线观看 | 欧美成人午夜精品久久久 | 乱中年女人伦av三区 | 国产精品99久久精品爆乳 | 欧美xxxx黑人又粗又长 | 国产凸凹视频一区二区 | 四十如虎的丰满熟妇啪啪 | 国产午夜无码精品免费看 | 午夜免费福利小电影 | 亚洲区欧美区综合区自拍区 | 97无码免费人妻超级碰碰夜夜 | 久久99久久99精品中文字幕 | aⅴ在线视频男人的天堂 | 亚洲一区二区三区香蕉 | 综合网日日天干夜夜久久 | 日本精品少妇一区二区三区 | 亚洲人成无码网www | 影音先锋中文字幕无码 | 一本色道婷婷久久欧美 | 日欧一片内射va在线影院 | 成在人线av无码免观看麻豆 | 午夜精品一区二区三区的区别 | 国精品人妻无码一区二区三区蜜柚 | 内射白嫩少妇超碰 | 久精品国产欧美亚洲色aⅴ大片 | 久久97精品久久久久久久不卡 | 国产精品va在线观看无码 | 领导边摸边吃奶边做爽在线观看 | 亚洲狠狠色丁香婷婷综合 | 欧美三级a做爰在线观看 | 无码av免费一区二区三区试看 | 国产精品国产自线拍免费软件 | 无码人中文字幕 | 丰腴饱满的极品熟妇 | 少妇邻居内射在线 | 国产成人无码区免费内射一片色欲 | av人摸人人人澡人人超碰下载 | 成熟人妻av无码专区 | 欧美xxxxx精品 | 久久精品人妻少妇一区二区三区 | 黑人巨大精品欧美黑寡妇 | 人人妻人人澡人人爽欧美一区 | 国产精品资源一区二区 | 丰满少妇高潮惨叫视频 | 亚洲熟妇色xxxxx亚洲 | 亚洲精品久久久久avwww潮水 | 青青草原综合久久大伊人精品 | 久久综合激激的五月天 | 夫妻免费无码v看片 | 亚洲码国产精品高潮在线 | 国产高潮视频在线观看 | 内射欧美老妇wbb | 中文字幕色婷婷在线视频 | 纯爱无遮挡h肉动漫在线播放 | 樱花草在线社区www | 国产无套粉嫩白浆在线 | 亚洲熟熟妇xxxx | 国产人妻大战黑人第1集 | 日韩av无码中文无码电影 | 又大又紧又粉嫩18p少妇 | 亚洲狠狠婷婷综合久久 | 四虎4hu永久免费 | 精品厕所偷拍各类美女tp嘘嘘 | 国产乱人伦偷精品视频 | 成熟人妻av无码专区 | 少妇人妻大乳在线视频 | 人人爽人人澡人人高潮 | 国产在热线精品视频 | 国产三级久久久精品麻豆三级 | 日本乱人伦片中文三区 | 女人高潮内射99精品 | 精品午夜福利在线观看 | 无码精品人妻一区二区三区av | 三上悠亚人妻中文字幕在线 | 亚洲人成网站色7799 | 丁香花在线影院观看在线播放 | 国产精品亚洲综合色区韩国 | 久久久精品成人免费观看 | 亚洲va中文字幕无码久久不卡 | 伊人色综合久久天天小片 | 欧美丰满少妇xxxx性 | 欧美日韩视频无码一区二区三 | 婷婷丁香五月天综合东京热 | 爆乳一区二区三区无码 | 久久综合狠狠综合久久综合88 | 又黄又爽又色的视频 | 午夜福利试看120秒体验区 | 亚洲精品无码国产 | 欧美日韩视频无码一区二区三 | 婷婷色婷婷开心五月四房播播 | 99久久精品午夜一区二区 | 蜜桃臀无码内射一区二区三区 | 亚洲娇小与黑人巨大交 | yw尤物av无码国产在线观看 | 理论片87福利理论电影 | 波多野结衣高清一区二区三区 | 日韩 欧美 动漫 国产 制服 | 国产成人精品一区二区在线小狼 | 在线观看国产午夜福利片 | 久久精品一区二区三区四区 | 99久久久国产精品无码免费 | 免费无码肉片在线观看 | 全黄性性激高免费视频 | 性欧美熟妇videofreesex | 99精品国产综合久久久久五月天 | 国产明星裸体无码xxxx视频 | 日韩成人一区二区三区在线观看 | 成人试看120秒体验区 | 亚洲娇小与黑人巨大交 | 亚洲乱码国产乱码精品精 | 欧美喷潮久久久xxxxx | 内射老妇bbwx0c0ck | 亚洲国产欧美日韩精品一区二区三区 | www成人国产高清内射 | 久久精品人人做人人综合 | 亚洲乱码日产精品bd | 欧美日韩一区二区综合 | 国产精品第一国产精品 | 成人免费视频在线观看 | 99久久精品国产一区二区蜜芽 | 精品国产国产综合精品 | 久青草影院在线观看国产 | 国产sm调教视频在线观看 | 九九热爱视频精品 | 亚洲中文字幕成人无码 | 国产精品人人妻人人爽 | 国精产品一区二区三区 | 99视频精品全部免费免费观看 | aⅴ在线视频男人的天堂 | 成人精品视频一区二区三区尤物 | 正在播放东北夫妻内射 | 亚洲精品一区三区三区在线观看 | 精品无人区无码乱码毛片国产 | 国产区女主播在线观看 | 内射爽无广熟女亚洲 | 无码人妻av免费一区二区三区 | 国产舌乚八伦偷品w中 | 天天躁日日躁狠狠躁免费麻豆 | 国产福利视频一区二区 | 嫩b人妻精品一区二区三区 | 精品人妻人人做人人爽 | 国产成人av免费观看 | 熟妇人妻无乱码中文字幕 | 又紧又大又爽精品一区二区 | 亚洲精品一区二区三区在线观看 | 永久免费观看美女裸体的网站 | 亚洲综合伊人久久大杳蕉 | 香港三级日本三级妇三级 | 丁香花在线影院观看在线播放 | 日本一卡2卡3卡四卡精品网站 | 欧美熟妇另类久久久久久不卡 | 国产高清av在线播放 | 99麻豆久久久国产精品免费 | 精品久久8x国产免费观看 | 亚洲中文字幕无码中文字在线 | 国産精品久久久久久久 | 激情内射亚州一区二区三区爱妻 | 国产小呦泬泬99精品 | 又黄又爽又色的视频 | 亚洲精品一区二区三区四区五区 | 真人与拘做受免费视频 | 熟妇女人妻丰满少妇中文字幕 | 丰满人妻被黑人猛烈进入 | 欧美zoozzooz性欧美 | 特级做a爰片毛片免费69 | 成人精品天堂一区二区三区 | 亚洲爆乳无码专区 | 乌克兰少妇xxxx做受 | 六月丁香婷婷色狠狠久久 | 午夜福利不卡在线视频 | 特大黑人娇小亚洲女 | 毛片内射-百度 | 精品无码一区二区三区的天堂 | 丰满岳乱妇在线观看中字无码 | 国精产品一品二品国精品69xx | 亚洲精品国产a久久久久久 | 麻豆国产人妻欲求不满 | 少妇愉情理伦片bd | 动漫av网站免费观看 | 久久精品人妻少妇一区二区三区 | 亚洲色www成人永久网址 | 国产超碰人人爽人人做人人添 | 久久精品人人做人人综合试看 | 人人妻在人人 | 亚洲国产成人av在线观看 | 在线观看欧美一区二区三区 | 成在人线av无码免费 | 亚洲国产精品久久人人爱 | 国产香蕉尹人视频在线 | 色欲综合久久中文字幕网 | 亚洲综合色区中文字幕 | 亚洲毛片av日韩av无码 | 欧美成人午夜精品久久久 | 日韩精品乱码av一区二区 | 午夜性刺激在线视频免费 | 久热国产vs视频在线观看 | 无码成人精品区在线观看 | 成人精品一区二区三区中文字幕 | 国产亚洲视频中文字幕97精品 | 成人精品天堂一区二区三区 | 少妇性l交大片欧洲热妇乱xxx | 久久久久亚洲精品中文字幕 | 中文字幕+乱码+中文字幕一区 | 性做久久久久久久久 | 强辱丰满人妻hd中文字幕 | 中国女人内谢69xxxxxa片 | 亚洲午夜久久久影院 | 老熟女重囗味hdxx69 | 人妻aⅴ无码一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲国产精品一区二区美利坚 | 人妻尝试又大又粗久久 | 天下第一社区视频www日本 | 男人的天堂2018无码 | 久久综合给久久狠狠97色 | 亚洲日本在线电影 | 亚洲色偷偷男人的天堂 | av在线亚洲欧洲日产一区二区 | 亚洲乱亚洲乱妇50p | 国产午夜视频在线观看 | 亚洲伊人久久精品影院 | 国产日产欧产精品精品app | 色一情一乱一伦 | 精品国产一区av天美传媒 | 色婷婷久久一区二区三区麻豆 | 国产亚洲tv在线观看 | 亚洲a无码综合a国产av中文 | 国产高潮视频在线观看 | 精品国产青草久久久久福利 | 国产精品无套呻吟在线 | 亚洲国产精品毛片av不卡在线 | 一本久道高清无码视频 | 装睡被陌生人摸出水好爽 | 宝宝好涨水快流出来免费视频 | 欧美性猛交内射兽交老熟妇 | 国产亚洲日韩欧美另类第八页 | 久久午夜夜伦鲁鲁片无码免费 | 国产av无码专区亚洲awww | 国产精品美女久久久久av爽李琼 | 国产欧美精品一区二区三区 | 国产xxx69麻豆国语对白 | 国产疯狂伦交大片 | 未满成年国产在线观看 | 成人无码精品一区二区三区 | 免费无码一区二区三区蜜桃大 | 国产偷国产偷精品高清尤物 | 在线观看欧美一区二区三区 | 国产激情精品一区二区三区 | 少妇无套内谢久久久久 | 国产精品高潮呻吟av久久4虎 | 色综合视频一区二区三区 | 一本大道久久东京热无码av | 十八禁真人啪啪免费网站 | 亚洲a无码综合a国产av中文 | 久久久无码中文字幕久... | 日韩精品a片一区二区三区妖精 | 久久久av男人的天堂 | 婷婷五月综合激情中文字幕 | 国产精品久久久久久久影院 | 少妇一晚三次一区二区三区 | 国产精品久久福利网站 | 亚洲欧洲中文日韩av乱码 | 天天拍夜夜添久久精品大 | 天下第一社区视频www日本 | 久久久久免费看成人影片 | 国产亚洲精品久久久久久 | 99re在线播放 | 在线看片无码永久免费视频 | 欧美日韩一区二区三区自拍 | 2019nv天堂香蕉在线观看 | 国产猛烈高潮尖叫视频免费 | 亚洲日本va中文字幕 | 人妻无码αv中文字幕久久琪琪布 | 免费无码的av片在线观看 | 亚洲一区二区三区国产精华液 | 天海翼激烈高潮到腰振不止 | 青青青手机频在线观看 | 欧美日韩色另类综合 | 久久精品国产一区二区三区 | 免费视频欧美无人区码 | 少妇性l交大片 | 精品少妇爆乳无码av无码专区 | 国产精品亚洲lv粉色 | 特大黑人娇小亚洲女 | 久久久久se色偷偷亚洲精品av | 成 人 网 站国产免费观看 | 亚洲日韩av一区二区三区中文 | 两性色午夜免费视频 | 中文字幕无码av激情不卡 | 一本无码人妻在中文字幕免费 | 国产在线aaa片一区二区99 | 亚洲色欲久久久综合网东京热 | 欧美日韩视频无码一区二区三 | 欧美亚洲日韩国产人成在线播放 | 成人片黄网站色大片免费观看 | 理论片87福利理论电影 |