精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何直觀地理解條件隨機場,并通過PyTorch簡單地實現(xiàn)

開發(fā) 開發(fā)工具 后端
本文結(jié)合 PyTorch 從基本的概率定義到模型實現(xiàn)直觀地介紹了CRF的基本概念,有助于讀者進一步理解完整理論。

條件隨機場是一種無向圖模型,且相對于深度網(wǎng)絡(luò)有非常多的優(yōu)勢,因此現(xiàn)在很多研究者結(jié)合條件隨機場(CRF)與深度網(wǎng)絡(luò)獲得更魯棒和可解釋的模型。本文結(jié)合 PyTorch 從基本的概率定義到模型實現(xiàn)直觀地介紹了 CRF 的基本概念,有助于讀者進一步理解完整理論。

假設(shè)我們有兩個相同的骰子,但是其中的一個是公平的,每個點數(shù)出現(xiàn)的概率相同;另一個骰子則被做了手腳,數(shù)字 6 出現(xiàn)的概率為 80%,而數(shù)字 1-5 出現(xiàn)的概率都為 4%。如果我給你一個 15 次投擲骰子的序列,你能預(yù)測出我每次投擲用的是哪一枚骰子嗎?

[[229606]]

為了得到較高的準確率,一個簡單的模型是,每當「6」出現(xiàn)的時候,我們那就預(yù)測使用了有偏的骰子,而出現(xiàn)其他數(shù)字時則預(yù)測使用了公平的骰子。實際上,如果我們在每次投擲時等可能地使用任意一個骰子,那么這個簡單的規(guī)則就是你可以做到的***預(yù)測。

但是,設(shè)想一種情況:如果在使用了公平的骰子后,我們下一次投擲時使用有偏的骰子的概率為 90%,結(jié)果會怎樣呢?如果下一次投擲出現(xiàn)了一個「3」,上述模型會預(yù)測我們使用了公平的骰子,但是實際上我們使用有偏的骰子是一個可能性更大的選項。我們可以通過貝葉斯定理來進行驗證這個說法:

貝葉斯定理

其中隨機變量 y_i 是第 i 次投擲所用的骰子類型,x_i 是第 i 次投擲得到的點數(shù)。

我們的結(jié)論是,在每一步中作出可能性***的選擇只是可行策略之一,因為我們同時可能選擇其它的骰子。更有可能的情況是,以前對骰子的選擇情況影響了我未來會做出怎樣的選擇。為了成功地進行預(yù)測,你將不得不考慮到每次投擲之間的相互依賴關(guān)系。

條件隨機場(CRF)是一個用于預(yù)測與輸入序列相對應(yīng)標注序列的標準模型。目前有許多關(guān)于條件隨機場的教程,但是我所看到的教程都會陷入以下兩種情況其中之一:1)全都是理論,但沒有展示如何實現(xiàn)它們 2)為復(fù)雜的機器學習問題編寫的代碼缺少解釋,不能令讀者對代碼有直觀的理解。

之所以這些作者選擇寫出全是理論或者包含可讀性很差的代碼教程,是因為條件隨機場從屬于一個更廣更深的課題「概率圖模型」。所以要想深入涵蓋其理論和實現(xiàn)可能需要寫一本書,而不是一篇博文,這種情況也使得學習條件隨機場的知識比它原本所需要的更困難。

本教程的目標是涵蓋恰到好處的理論知識,以便你能對 CRF 有一個基本的印象。此外我們還會通過一個簡單的問題向你展示如何實現(xiàn)條件隨機場,你可以在自己的筆記本電腦上復(fù)現(xiàn)它。這很可能讓你具有將這個簡單的條件隨機場示例加以改造,用于更復(fù)雜問題所需要的直觀理解。

一、理論

我們對于理論的討論將分為三個部分:1)指定模型參數(shù) 2)如何估計這些參數(shù) 3)利用這些參數(shù)進行預(yù)測,這三大類適用于任何統(tǒng)計機器學習模型。因此從這個意義上說,條件隨機場并沒有什么特別的,但這并不意味著條件隨機場就和 logistic 回歸模型一樣簡單。我們會發(fā)現(xiàn),一旦我們要面對一連串的預(yù)測而不是單一的預(yù)測,事情就會變得更加復(fù)雜。

1. 指定模型參數(shù)

在這個簡單的問題中,我們需要擔心的唯一的參數(shù)就是與從一次投擲轉(zhuǎn)換到下一次投擲狀態(tài)的分布。我們有六種狀態(tài)需要考慮,因此我們將它們存儲在一個 2*3 的「轉(zhuǎn)移矩陣」中。

***列對應(yīng)于「從前一次投擲使用公平骰子的狀態(tài),轉(zhuǎn)換到當前使用公平骰子狀態(tài)的概率或成本(***行的值),或轉(zhuǎn)換到有偏骰子狀態(tài)的概率(第二行的值)」。因此,***列中的***個元素編碼了在給定我本次投擲使用了公平骰子的前提下,預(yù)測下一次投擲使用公平骰子的概率。如果數(shù)據(jù)顯示,我不太可能在連續(xù)使用公平骰子,模型會學習到這個概率應(yīng)該很低,反之亦然。同樣的邏輯也適用于第二列。

矩陣的***和第二列假設(shè)我們知道在前一次投擲中使用了哪個骰子,因此我們必須將***次投擲作為一個特例來對待。我們將把相應(yīng)的概率存儲在第三列中。

2. 參數(shù)估計

假設(shè)給定一個投擲的集合 X* *以及它們相應(yīng)的骰子標簽 Y。我們將會找到使整個訓練數(shù)據(jù)的負對數(shù)似然最小的轉(zhuǎn)移矩陣 T。我將會向你展示單個骰子投擲序列的似然和負對數(shù)似然是什么樣的。為了在整個數(shù)據(jù)集上得到它,你要對所有的序列取平均。

P(x_i | y_i) 是在給定當前的骰子標簽的前提條件下,觀測到一個給定骰子投擲點數(shù)的概率。舉例而言,如果 y_i 為公平骰子,則 P(x_i | y_i) = 1/6。另一項 T(y_i | y_{i-1}) 是從上一個骰子標簽轉(zhuǎn)換到當前投資標簽的概率,我們可以直接從轉(zhuǎn)移矩陣中讀取出這個概率。

請注意在分母中,我們是怎樣在所有可能標簽 y' 的序列上進行求和的。在傳統(tǒng)的二分類問題 logistic 回歸中,我們在分母中會有兩個項。但是現(xiàn)在,我們要處理的是標注序列,并且對于一個長度為 15 的序列來說,一共有 2^15 種可能的標簽序列,所以分母項是十分巨大的。條件隨機場的「秘密武器」是,它假定當前的骰子標簽僅僅只取決于之前的骰子標簽,來高效地計算這個大規(guī)模求和。

這個秘密武器被稱為「前向-后向算法」。對該算法的深入討論超出了這篇博文的范圍,因此這里不做詳細的解釋。

3. 序列預(yù)測

一旦我們估計出了我們的轉(zhuǎn)移矩陣,我們可以使用它去找到在給定一個投擲序列的條件下,最有可能的骰子標注序列。要做到這一點,最簡單的方法就是計算出所有可能的序列的似然,但這即使對于中等長度的序列也是十分困難的。正如我們在參數(shù)估計中所做的那樣,我們將不得不用一種特殊的算法高效地搜索可能性***的序列。這個算法與「向前-向后算法」很相近,它被稱為「維特比算法」。

二、代碼

PyTorch 是一個在 Python 語言環(huán)境下為訓練深度學習模型而編寫的深度學習庫。盡管我們在這里并不是要進行深度學習,但 PyTorch 的自動微分庫將幫助我們通過梯度下降算法訓練條件隨機場模型,而無需我們手動計算任何梯度。使用 PyTorch 會迫使我們實現(xiàn)「向前-向后算法」的前向部分以及「維特比算法」,這比我們直接使用專門的條件隨機場構(gòu)建的 Python 包更有指導意義。

首先,讓我們先設(shè)想一下結(jié)果應(yīng)該是什么樣的。我們需要一種方法去計算給定骰子標簽時,對于任意投擲序列的對數(shù)似然度,下面我們給出一種可能的方法:

  1. def neg_log_likelihood(self, rolls, states): 
  2.  """Compute neg log-likelihood for a given sequence. 
  3.  
  4.  Input:  
  5.  rolls: numpy array, dim [1, n_rolls]. Integer 0-5 showing value on dice. 
  6.  states: numpy array, dim [1, n_rolls]. Integer 0, 1. 0 if dice is fair. 
  7.  """ 
  8.  loglikelihoods = self._data_to_likelihood(rolls) 
  9.  states = torch.LongTensor(states) 
  10.  
  11.  sequence_loglik = self._compute_likelihood_numerator(loglikelihoods, states) 
  12.  denominator = self._compute_likelihood_denominator(loglikelihoods) 
  13.  return denominator - sequence_loglik 

這個方法做了三件主要的事情:1)將骰子的值映射到一個似然函數(shù)上 2)計算對數(shù)似然項的分子 3)計算對數(shù)似然項的分母。

讓我們首先來處理「_data_to_likelihood」方法,它幫助我們?nèi)?zhí)行上面提到的步驟 1。我們將要做的是,創(chuàng)建一個維度為 6*2 的矩陣,其中***列是用公平骰子擲到 1-6 的似然度,第二列是用有偏骰子擲到 1-6 的似然度。這個問題中的矩陣的形式如下所示:

  1. array([[-1.79175947, -3.21887582], 
  2.  [-1.79175947, -3.21887582], 
  3.  [-1.79175947, -3.21887582], 
  4.  [-1.79175947, -3.21887582], 
  5.  [-1.79175947, -3.21887582], 
  6.  [-1.79175947, -0.22314355]]) 

現(xiàn)在,如果我們看到一個投擲的點數(shù)為「4」,我們可以直接選擇矩陣中的第四行。這個向量中的***個元素是用公平骰子得到「4」的對數(shù)似然 log(1/6),而第二個元素是用有偏骰子得到「4」的對數(shù)似然 log(0.04)。代碼如下:

  1. def _data_to_likelihood(self, rolls): 
  2.  """Converts a numpy array of rolls (integers) to log-likelihood. 
  3.  self.loglikeligood is a matrix of 6 x 2 in our case.  
  4.  Input is one [1, n_rolls] 
  5.  """ 
  6.  log_likelihoods = self.loglikelihood[rolls] 
  7.  return Variable(torch.FloatTensor(log_likelihoods), requires_grad=False

接下來,我們將編寫計算對數(shù)似然分子和分母的方法。

  1. def _compute_likelihood_numerator(self, loglikelihoods, states): 
  2.  """Computes numerator of likelihood function for a given sequence. 
  3.  
  4.  We'll iterate over the sequence of states and compute the sum  
  5.  of the relevant transition cost with the log likelihood of the observed 
  6.  roll.  
  7.  Input: 
  8.  loglikelihoods: torch Variable. Matrix of n_obs x n_states.  
  9.  i,j entry is loglikelihood of observing roll i given state j 
  10.  states: sequence of labels 
  11.  Output: 
  12.  score: torch Variable. Score of assignment.  
  13.  """ 
  14.  prev_state = self.n_states 
  15.  score = Variable(torch.Tensor([0])) 
  16.  for index, state in enumerate(states): 
  17.  score += self.transition[state, prev_state] + loglikelihoods[index, state] 
  18.  prev_state = state 
  19.  return score 
  20.  
  21.  def _compute_likelihood_denominator(self, loglikelihoods): 
  22.  """Implements the forward pass of the forward-backward algorithm. 
  23.  
  24.  We loop over all possible states efficiently using the recursive 
  25.  relationship: alpha_t(j) = \sum_i alpha_{t-1}(i) * L(x_t | y_t) * C(y_t | y{t-1} = i) 
  26.  Input: 
  27.  loglikelihoods: torch Variable. Same input as _compute_likelihood_numerator. 
  28.  This algorithm efficiently loops over all possible state sequences 
  29.  so no other imput is needed. 
  30.  Output: 
  31.  torch Variable.  
  32.  """ 
  33.  
  34.  # Stores the current value of alpha at timestep t 
  35.  prev_alpha = self.transition[:, self.n_states] + loglikelihoods[0].view(1, -1) 
  36.  
  37.  for roll in loglikelihoods[1:]: 
  38.  alpha_t = [] 
  39.  
  40.  # Loop over all possible states 
  41.  for next_state in range(self.n_states): 
  42.  
  43.  # Compute all possible costs of transitioning to next_state 
  44.  feature_function = self.transition[next_state,:self.n_states].view(1, -1) +\ 
  45.  roll[next_state].view(1, -1).expand(1, self.n_states) 
  46.  
  47.  alpha_t_next_state = prev_alpha + feature_function 
  48.  alpha_t.append(self.log_sum_exp(alpha_t_next_state)) 
  49.  prev_alpha = torch.cat(alpha_t).view(1, -1) 
  50.  return self.log_sum_exp(prev_alpha) 

就是這樣!我們現(xiàn)在已經(jīng)擁有了學習轉(zhuǎn)移矩陣所需的全部代碼。但是,如果我們想要在訓練完模型之后作出預(yù)測,我們就必須編寫維特比算法:

  1. def _viterbi_algorithm(self, loglikelihoods): 
  2.  """Implements Viterbi algorithm for finding most likely sequence of labels. 
  3.  
  4.  Very similar to _compute_likelihood_denominator but now we take the maximum 
  5.  over the previous states as opposed to the sum.  
  6.  Input: 
  7.  loglikelihoods: torch Variable. Same input as _compute_likelihood_denominator. 
  8.  Output: 
  9.  tuple. First entry is the most likely sequence of labels. Second is 
  10.  the loglikelihood of this sequence.  
  11.  """ 
  12.  
  13.  argmaxes = [] 
  14.  
  15.  # prev_delta will store the current score of the sequence for each state 
  16.  prev_delta = self.transition[:, self.n_states].view(1, -1) +\ 
  17.  loglikelihoods[0].view(1, -1) 
  18.  
  19.  for roll in loglikelihoods[1:]: 
  20.  local_argmaxes = [] 
  21.  next_delta = [] 
  22.  for next_state in range(self.n_states): 
  23.  feature_function = self.transition[next_state,:self.n_states].view(1, -1) +\ 
  24.  roll.view(1, -1) +\ 
  25.  prev_delta 
  26.  most_likely_state = self.argmax(feature_function) 
  27.  score = feature_function[0][most_likely_state] 
  28.  next_delta.append(score) 
  29.  local_argmaxes.append(most_likely_state) 
  30.  prev_delta = torch.cat(next_delta).view(1, -1) 
  31.  argmaxes.append(local_argmaxes) 
  32.  
  33.  final_state = self.argmax(prev_delta) 
  34.  final_score = prev_delta[0][final_state] 
  35.  path_list = [final_state] 
  36.  
  37.  # Backtrack through the argmaxes to find most likely state 
  38.  for states in reversed(argmaxes): 
  39.  final_state = states[final_state] 
  40.  path_list.append(final_state) 
  41.  
  42.  return np.array(path_list), final_score 

我們實現(xiàn)的代碼還有很多,但我在這里僅僅只包含了我們在理論部分討論過的核心功能。

三、利用數(shù)據(jù)進行模型評價

我使用下面概率模擬得到的數(shù)據(jù),并對模型進行評價:

  • P(序列中的***個骰子為公平骰子)=0.5
  • P(當前為公平骰子|上一次為公平骰子)=0.8
  • P(當前為有偏骰子|上一次為有偏骰子)=0.35

請查看我編寫的 Notebook 去看看我是如何生成條件隨機場模型并且訓練它的。

Notebook 地址:

https://github.com/freddyalfonsoboulton/crf_tutorial/blob/master/crf_demo.ipynb

我們要做的***件事就是看看估計出的轉(zhuǎn)移矩陣是怎樣的。模型會學習如果在前一次使用了公平骰子,那么這一次更有可能使用公平骰子進行投擲(-1.38 < -0.87)。模型還學到在使用了有偏骰子后,我們更有可能使用公平骰子,但這和使用有偏投擲的可能性差別并不是很大(-1.38 < -0.87)。該模型在***次投擲時給兩種骰子分配相同的代價(0.51 ~ -0.54)。

  1. array([[-0.86563134, -0.40748784, -0.54984874], 
  2.  [-1.3820231 , -0.59524935, -0.516026 ]], dtype=float32

接下來,我們來看看對于一個特定的投擲序列的預(yù)測結(jié)果如何:

  1. # observed dice rolls 
  2. array([2, 3, 4, 5, 5, 5, 1, 5, 3, 2, 5, 5, 5, 3, 5]) 
  3. # corresponding labels. 0 means fair 
  4. array([0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1]) 
  5. # predictions 
  6. array([0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0]) 

模型識別出「6」的長序列(在上面的代碼中實際顯示為「5」,因為我們是從「0」開始的)來自于有偏的骰子,這是有意義的。請注意,模型并沒有將所有的「6」都分配給有偏的骰子,就像對第八次投擲的預(yù)測那樣。這是因為在這個「6」之前,我們很確信使用了公平骰子(我們擲出了一個「2」)并且從公平骰子狀態(tài)轉(zhuǎn)換到有偏骰子狀態(tài)的可能性較小。我認為這種錯誤是可以接受的,因此模型是很成功的。

結(jié)論

我向你展示了條件隨機場背后的一小部分理論知識,同時也展示了你如何才能實現(xiàn)一個用于簡單問題的條件隨機場。當然,相關(guān)的知識遠遠比我在這里所能夠涵蓋到的要多。所以我建議各位讀者查看更多相關(guān)的資源。

原文鏈接:

https://towardsdatascience.com/conditional-random-field-tutorial-in-pytorch-ca0d04499463

【本文是51CTO專欄機構(gòu)“機器之心”的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2022-08-07 23:52:10

Python模塊數(shù)據(jù)分析

2016-05-06 14:02:18

JavaScript原型鏈

2014-10-13 09:36:21

初志科技

2022-04-22 09:00:00

自然語言處理HMMCRF

2015-12-03 14:33:35

2017-09-05 10:20:30

PyTorchTensorPython

2019-09-16 09:23:34

高并發(fā)編程CountDownLaCyclicBarri

2022-03-18 06:32:43

遞歸Python算法

2020-06-01 11:01:28

智慧城市物聯(lián)網(wǎng)技術(shù)

2018-09-09 23:58:25

可視化神經(jīng)網(wǎng)絡(luò)模型

2015-09-23 15:33:44

2009-09-15 11:34:47

Linq多條件查詢

2020-11-02 08:51:57

中間件和洋蔥模型

2022-09-12 23:53:53

JavaScript條件判斷開發(fā)

2017-08-30 17:47:35

MySql索引

2021-05-12 22:07:43

并發(fā)編排任務(wù)

2012-06-05 14:19:50

2012地理信息開發(fā)者

2021-12-01 10:17:49

智能自動化遠程工作CIO

2016-09-19 13:44:54

vue翻頁組件Web

2018-12-10 14:59:20

代碼卷積模塊架構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號

欧美伊人久久大香线蕉综合69| 亚洲伦伦在线| 欧美三区免费完整视频在线观看| 日韩精品一区二区三区四区五区| 中文字幕无线码一区| 亚洲综合小说| 精品久久国产字幕高潮| 你懂的av在线| 日韩欧美小视频| 福利一区在线观看| 97在线观看免费高清| 亚洲av毛片基地| 免费观看亚洲视频大全| 欧美性生交xxxxx久久久| 亚洲国产高清国产精品| 国产视频在线一区| 日韩精品乱码免费| 久久中文字幕一区| 成人免费无码大片a毛片| 高清不卡一区| 欧美日韩精品在线视频| 伊人婷婷久久| 欧美日韩影视| 国产成人精品亚洲777人妖 | 99久久久精品免费观看国产| 日本三级免费看| 91精品国产福利在线观看麻豆| 亚洲成人aaa| 性chinese极品按摩| 黄频免费在线观看| 自拍偷拍国产精品| 亚洲免费成人av| 欧美亚洲成人网| 久久av红桃一区二区禁漫| 国产福利资源一区| 911国产精品| 国产精品少妇在线视频| 制服丝袜在线播放| 国产精品久久二区二区| 久久综合九色欧美狠狠| 国产高潮在线观看| 麻豆成人综合网| 91成人天堂久久成人| 日本黄色片免费观看| 久久97视频| 亚洲国模精品一区| 欧美激情 亚洲| 经典三级久久| 欧美日韩电影在线播放| 美女日批免费视频| 七七久久电影网| 亚洲一区电影777| 亚洲美女自拍偷拍| 欧美jizz18性欧美| 国产精品久久久久aaaa樱花 | 国产日韩欧美一区二区东京热| 日韩精品午夜视频| 日本精品性网站在线观看| 亚洲精品www久久久久久| 亚洲性感美女99在线| 美女福利精品视频| 久久嫩草捆绑紧缚| 婷婷激情综合| 北条麻妃在线一区二区| 日本免费www| 日本一区二区高清不卡| 国产一区二区美女视频| 欧美日韩高清丝袜| 成人激情开心网| 影音先锋日韩有码| 少妇太紧太爽又黄又硬又爽小说| 日韩av久操| 亚洲国产另类av| 色系列之999| 色欲AV无码精品一区二区久久| 欧美美女在线直播| 亚洲国产精品免费| 扒开jk护士狂揉免费| 亚洲自拍电影| 亚洲精品一区二区三区在线观看| 五月天激情小说| 久久99国产精品久久99大师| 亚洲成人黄色在线观看| 人妻熟女aⅴ一区二区三区汇编| 日韩电影不卡一区| 在线观看成人黄色| 国产一区在线观看免费| 国产高清一区二区| 久久天天躁狠狠躁夜夜躁| 中国毛片直接看| 亚洲小说欧美另类社区| 2019av中文字幕| 亚洲成熟少妇视频在线观看| 免费成人av资源网| 亚洲精品日产aⅴ| 日本黄色一区二区三区| 久久久美女毛片 | 99久久亚洲精品蜜臀| 欧美激情亚洲视频| 国产免费一区二区三区四区五区| 裸体素人女欧美日韩| 91精品在线一区| 人成网站在线观看| 日本一区二区三区dvd视频在线 | 欧美激情第8页| 91禁外国网站| 无码人妻精品一区二区| 国产一区二区美女| 精品久久久三级| 97最新国自产拍视频在线完整在线看| 亚洲男人都懂的| 毛片在线视频播放| av日韩一区| 亚洲精品一区av在线播放| 福利视频第一页| 亚洲欧美成人| 亚洲在线观看视频| 麻豆导航在线观看| 亚洲成在线观看| 亚洲一区二区三区四区五区xx| 亚洲一区二区免费在线观看| 在线播放精品一区二区三区 | 热久久这里只有| 国产日韩欧美精品在线观看| 丰满人妻一区二区三区无码av | 精品美女久久久久久免费| 欧美日韩怡红院| 思热99re视热频这里只精品 | 亚洲精品日产aⅴ| 高h视频在线| 亚洲成人一区在线| 午夜免费一级片| 日韩电影免费网址| 欧美一区二区三区四区久久| 中文字幕第4页| 国产精品一卡| 91嫩草视频在线观看| 国产视频二区在线观看| 图片区小说区区亚洲影院| 又黄又爽又色的视频| 日韩精品91| 日韩免费观看视频| 天天操天天射天天| 亚洲成人av一区二区| 国产精品久久久久久久av福利| 欧美日韩第一| 国产成人中文字幕| 无码精品视频一区二区三区 | 国产高清久久久久| 中文字幕精品一区日韩| 日韩高清成人| 在线成人一区二区| 亚洲欧美日韩一区二区三区四区| 国产99久久久久| 人妻无码一区二区三区四区| gogo大尺度成人免费视频| 色阁综合伊人av| 中文字幕乱码中文字幕| 国产视频一区不卡| 黄色片一级视频| 天堂99x99es久久精品免费| 欧美日韩999| 男人天堂综合网| 亚洲综合一二三区| 精品人妻一区二区三区日产| 在线欧美视频| 国产精品一区二| 蜜桃视频www网站在线观看| 精品91自产拍在线观看一区| 国产精品111| 99re免费视频精品全部| 国产一区二区在线视频播放| 久久99青青| 国产成人免费av在线| 国产精选在线观看91| 成人国产电影在线观看| 亚洲精品国产综合久久| 午夜毛片在线观看| 91在线精品一区二区| 亚洲中文字幕无码不卡电影| 日本妇女一区| 国产精品视频中文字幕91| 啊v视频在线| 777亚洲妇女| 免费一级片视频| 91年精品国产| 国产九九热视频| 国产91一区| 亚洲自拍av在线| 久久免费电影| 亚洲视频日韩精品| 91成人在线免费| 亚洲成av人片一区二区三区| 手机av免费看| 捆绑调教美女网站视频一区| 国产小视频免费| 欧美精品中文| 亚洲一区二区在线播放| 不卡视频观看| 在线精品播放av| 女人18毛片一区二区三区| 欧美性猛交xxxx富婆| 午夜黄色福利视频| 9色porny自拍视频一区二区| 国产福利视频在线播放| 亚洲成人最新网站| 国产原创精品| 中国色在线日|韩| 精品久久久av| 无码国产精品一区二区免费16| 欧美女孩性生活视频| 一级免费在线观看| 亚洲精品综合在线| 亚洲一区二区三区蜜桃| 成人免费视频播放| 一女二男3p波多野结衣| 国产人成亚洲第一网站在线播放 | 日本美女一级视频| 欧美日韩一区久久| 91久久久精品| 宅男网站在线免费观看| 国产亚洲视频中文字幕视频| 99久久国产免费| 91成人免费网站| 久久久无码精品亚洲国产| 26uuu久久天堂性欧美| 无人码人妻一区二区三区免费| 男女精品网站| av高清在线免费观看| 国产精品99久久精品| 性刺激综合网| 日本韩国欧美超级黄在线观看| 国产精品综合久久久| 激情亚洲影院在线观看| 91精品国产高清| 超碰资源在线| 欧美激情亚洲综合一区| 污污的网站在线免费观看| 中文字幕亚洲在线| 后进极品白嫩翘臀在线视频| 欧美一区二区视频在线观看2020 | 中文字幕在线观看二区| 国产日韩精品一区二区三区| 一区二区免费在线观看视频| 成人福利视频在线| www.偷拍.com| 国产自产高清不卡| 老司机午夜性大片| 青娱乐精品在线视频| www.xxx亚洲| 日韩黄色在线观看| 99热成人精品热久久66| 亚洲一区免费| 春日野结衣av| 另类亚洲自拍| 欧美少妇性生活视频| 免费在线日韩av| 国产激情在线观看视频| 久久九九电影| 9久久9毛片又大又硬又粗| 国产亚洲在线观看| 女性女同性aⅴ免费观女性恋| 国产视频亚洲| 毛片av免费在线观看| 久久一区视频| 熟女少妇精品一区二区| 日韩激情在线观看| 亚洲最大天堂网| 韩国欧美国产1区| 国产成人精品综合久久久久99| 国产成a人亚洲精| 欧美日韩精品欧美日韩精品一 | 91欧美视频在线| 国产尤物一区二区在线| 深夜福利网站在线观看| 不卡的av中国片| 国产特黄级aaaaa片免| 国产精品毛片高清在线完整版| 欧美性生给视频| 一区二区三区毛片| 天码人妻一区二区三区在线看| 色婷婷精品久久二区二区蜜臂av | 欧美精品第1页| 亚洲自拍第二页| 日韩三级.com| 四虎在线免费观看| 日韩在线资源网| 26uuu亚洲电影在线观看| 68精品国产免费久久久久久婷婷| 另类激情视频| 亚洲尤物视频网| 网曝91综合精品门事件在线| 日韩女优中文字幕| 狠狠综合久久| 毛片av免费在线观看| 国产很黄免费观看久久| 中文字幕一区二区久久人妻网站| 国产精品理伦片| 国产一级性生活| 欧美性黄网官网| 国产深喉视频一区二区| 日韩精品亚洲精品| 日韩专区在线| 91高清在线免费观看| 国产原创一区| 国产综合18久久久久久| 久久国产电影| 久久国产成人精品国产成人亚洲 | 黑人巨大猛交丰满少妇| 91影院在线观看| 久久久久久视频| 欧美日韩美女在线| 亚洲国产精品suv| 在线精品高清中文字幕| 秋霞伦理一区| 91免费版网站在线观看| 日韩av密桃| 女人扒开屁股爽桶30分钟| 久久精品久久久精品美女| 真人bbbbbbbbb毛片| 一区二区三区资源| 国产精品爽爽久久久久久| 亚洲精选中文字幕| av老司机在线观看| 91中文精品字幕在线视频| 超碰人人干人人| 中文字幕一区二区视频| 日韩av无码中文字幕| 日韩欧美一二三四区| 波多野结衣在线影院| 日本精品在线视频| 乱中年女人伦av一区二区| 久久99国产精品一区| 免费在线看一区| 能免费看av的网站| 色婷婷av久久久久久久| 欧美一区二区黄片| 欧美激情一区二区久久久| 91丨精品丨国产| youjizz.com亚洲| 麻豆精品在线视频| 成人免费视频入口| 色欧美片视频在线观看在线视频| 日本黄色三级视频| 国外成人在线直播| 91久久精品无嫩草影院| 污污污污污污www网站免费| 国产一区激情在线| 久久久99精品| 日韩一区二区电影在线| 18视频在线观看网站| 成人福利网站在线观看| 99久久婷婷这里只有精品| 乌克兰美女av| 亚洲手机成人高清视频| 亚洲香蕉在线视频| 不卡av在线播放| 日韩欧美中文在线观看| 欧美二区在线看| 日产欧产美韩系列久久99| 在线观看国产精品一区| 欧美日韩日日夜夜| 日本在线播放| 2014亚洲精品| 国产真实久久| wwwwxxxx国产| 欧美性生交片4| av香蕉成人| 96sao精品视频在线观看| 欧美激情综合色综合啪啪| 中文字幕乱码在线人视频| 最新高清无码专区| 国产99视频在线| 色综合久综合久久综合久鬼88| 国产成人高清精品免费5388| 亚洲不卡中文字幕无码| 国产嫩草影院久久久久| 91福利在线观看视频| 欧美精品做受xxx性少妇| 亚洲一区二区三区在线免费| 国产二区视频在线播放| 国产婷婷色一区二区三区 | 一卡二卡在线视频| 欧美高清在线观看| 久久狠狠久久| 国产精品视频中文字幕| 亚洲精品高清在线观看| 97人妻天天摸天天爽天天| 免费国产亚洲视频| 短视频在线观看| 51午夜精品国产| freexxx性亚洲精品| 亚洲 日韩 国产第一区| 国产黑丝在线一区二区三区| 亚洲欧美一二三区| 免费99精品国产自在在线| 香蕉视频一区| 天堂中文av在线| 色噜噜夜夜夜综合网| 国产黄大片在线观看画质优化|