精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

亚洲综合av影视| 日韩深夜影院| 97久久超碰福利国产精品…| 97久久亚洲| 精品久久久久av| 琪琪一区二区三区| 亚洲女同二女同志奶水| 亚洲第一网中文字幕| 国产精品高清乱码在线观看| 三区精品视频| av在线不卡电影| 亚洲精品国产无码| 久久久亚洲精品视频| 亚洲在线久久| √天堂中文官网8在线| 亚洲高清久久网| 一二三区不卡| 中文字幕日韩第一页| 久久久久久久一| 夜间精品视频| 一级日韩一级欧美| 成人性生交大片免费观看嘿嘿视频 | 黄色一级片在线看| 国产精品成人网| 亚洲日本在线播放| 日韩精品久久久免费观看| 国产麻豆精品在线| 超碰在线国产97| 国产视频自拍一区| 日韩欧美高清一区二区三区| 9191国产视频| 久久精品视频在线看| 亚洲av永久纯肉无码精品动漫| 精品国偷自产在线| 国产国产精品| 亚洲国产精品无码久久| 国产免费av在线| 免费毛片在线| 亚洲情侣在线| 日韩经典第一页| 全黄性性激高免费视频| 国产小视频免费在线观看| 成人av在线播放网址| 国模极品一区二区三区| 美国一级片在线观看| 成人激情久久| av网站免费线看精品| 91午夜在线播放| 青娱乐av在线| 精品国产一区二区三区2021| 国产女人水真多18毛片18精品视频| 欧美猛少妇色xxxxx| 欧美成人精品欧美一级乱| 国产午夜精品久久久久免费视| 狠狠干成人综合网| 日韩久久久久久| 黄网站色视频免费观看| 欧美自拍偷拍第一页| 在线中文一区| 精品国产欧美一区二区五十路| 天天综合天天添夜夜添狠狠添| 男同在线观看| 国产suv精品一区二区三区| 久久男人资源视频| 久草国产在线观看| 欧美日一区二区三区在线观看国产免| 亚洲黄页网在线观看| 国产成人亚洲精品无码h在线| 五月婷在线视频| 99国产精品国产精品久久| 欧美亚洲另类激情另类| 国产又大又粗又爽的毛片| 松下纱荣子在线观看| 91麻豆swag| 国产精品美女视频网站| 免费观看特级毛片| 一区二区三区四区高清视频| 亚洲二区在线观看| 欧美精品亚洲精品| 日本中文字幕在线| 日韩.com| 欧美精品久久一区| 精品丰满人妻无套内射| 性开放的欧美大片| 成人午夜在线免费| 国产一区二区在线免费视频| 日韩手机在线观看| 欧美中文字幕一区二区| 日韩精品一区二区三区蜜臀 | av片在线观看永久免费| www.在线成人| 国产日韩三区| 一本到在线视频| 亚洲夜间福利| 色小说视频一区| 91传媒理伦片在线观看| 三妻四妾完整版在线观看电视剧| 自拍偷拍欧美精品| 国产传媒欧美日韩| 高潮无码精品色欲av午夜福利| 亚洲大胆在线| 青青草原一区二区| 亚洲熟女www一区二区三区| 女仆av观看一区| 日韩亚洲欧美在线| 黄色一级大片在线观看| 日本在线一区二区| 一级做a爱片久久| 亚洲视频在线观看日本a| 日韩中文字幕免费观看| 国产亚洲精品aa| 91久久爱成人| 国产精品久久777777换脸| 亚洲电影在线| 日本三级久久久| 久青草免费视频| 欧美99久久| 免费av一区二区| 久艹在线观看视频| 欧美激情四色| 国产成人免费av电影| 国产探花在线播放| 香蕉亚洲视频| 欧美国产日韩一区二区三区| 日韩成人毛片视频| 久久久久久一区二区| 国产成人一区二区三区| www.com在线观看| 国产在线日韩欧美| 国产成人a亚洲精品| 亚洲AV无码精品国产| 国产精品―色哟哟| 精品久久免费观看| www视频在线免费观看| 亚洲欧美日韩久久| 神马午夜伦理影院| 91伊人久久| 欧美日韩一卡二卡三卡| 在线视频日韩一区| 成人性生交大片免费观看网站| 性感美女极品91精品| 屁屁影院ccyy国产第一页| 高清av在线| 欧美日韩国产限制| www黄色日本| 香蕉视频亚洲一级| 欧美日韩免费一区二区三区| 亚洲一二三av| 日韩精品影视| 国产精品国产福利国产秒拍| 一级特黄aaaaaa大片| 中文字幕成人网| 国产日韩第一页| aⅴ在线视频男人的天堂| 国产亚洲精品资源在线26u| 欧美日韩亚洲一| 欧美天堂视频| 亚洲男子天堂网| 国产综合精品久久久久成人av | 成人欧美一区二区三区在线湿哒哒| 亚洲AV成人无码一二三区在线| 综合自拍亚洲综合图不卡区| 精品亚洲视频在线| 亚洲精品在线观看91| 国产精品国产自产拍高清av水多| 女人偷人在线视频| 色久优优欧美色久优优| 99免费视频观看| 69堂精品视频在线播放| 亚洲一区免费在线观看| 欧美国产激情视频| 国产精品任我爽爆在线播放| 国产亚洲精品美女| 日本免费www| 日韩精品一级二级 | 全部毛片永久免费看| 欧美一区网站| 国产ts一区二区| 国产51人人成人人人人爽色哟哟 | 91精品国自产| 国产精品麻豆99久久久久久| 在线观看日本www| 日本亚洲不卡| 久久久亚洲精品视频| 人成在线免费视频| 亚洲人一二三区| 免费观看黄网站| 亚洲国产高清在线观看| 性欧美亚洲xxxx乳在线观看| 国产在线一二| 午夜精品福利一区二区蜜股av| 中文字幕av网址| 久久国产精品成人免费观看的软件| 成人精品福利视频| 成av人片在线观看www| 777a∨成人精品桃花网| 99久久国产精| 国产在线不卡| 欧美一区二区三区四区五区六区| 99在线视频影院| 欧美日韩成人在线一区| 一级片一级片一级片| a级高清视频欧美日韩| 九九九九免费视频| 久久久国产精品| 97热精品视频官网| 亚洲图片88| 日韩成人在线视频观看| 国产一区二区在线视频观看| 精品二区三区线观看| 亚洲精品第三页| 99国产精品视频免费观看一公开 | 久久久午夜精品| 精产国品一区二区三区| 日韩精品电影在线| 久久99中文字幕| 亚洲经典一区| 日韩欧美一区二区视频在线播放| 日韩一二三区| 国产精品丝袜视频| 国产黄色免费在线观看| 日韩免费观看高清完整版在线观看| 色老头一区二区| 成人爽a毛片一区二区免费| 污污动漫在线观看| 精品午夜电影| 欧美一级视频免费在线观看| 成人av福利| 一本一道久久a久久精品逆3p | 亚洲人体偷拍| 超碰97在线播放| 在线看福利影| 综合激情国产一区| 免费黄色小视频在线观看| 亚洲免费资源在线播放| 国产男女无遮挡| 激情综合自拍| 国产精品久久久对白| 奇米视频888| 亚洲丝袜另类动漫二区| 日韩大尺度视频| 欧美在线首页| 亚洲在线不卡| 精品久久久久久久| 7777精品久久久久久| 蜜桃免费在线| 日韩电影中文字幕在线观看| 超碰在线观看av| 欧美一级xxx| av 一区二区三区| 亚洲精品水蜜桃| 日本高清www| 日韩国产一区二区三区| 欧美日韩三区四区| 国产ts一区| 国产一区二区免费电影| 久久久久毛片免费观看| 亚洲综合日韩中文字幕v在线| 欧美aa视频| 欧美亚洲一区在线| 桃花岛tv亚洲品质| 国产精品久久久久久久久借妻 | 色婷婷综合久久久久| 91免费在线| 国产一区二区三区欧美| 你懂的视频在线| 亚洲视频免费一区| 97人妻人人澡人人爽人人精品| 色综合欧美在线视频区| 三上悠亚作品在线观看| 亚洲美女屁股眼交| 久久精品国产亚洲AV无码麻豆 | 国产精品一区二区免费看| 色妞ww精品视频7777| 国产精品免费一区二区三区四区 | 精品系列免费在线观看| 成人精品视频在线播放| 国语自产精品视频在线看8查询8| 福利视频一区二区三区四区| 亚洲激情网站| 成年人在线看片| 紧缚奴在线一区二区三区| 男生操女生视频在线观看| 国产成人aaaa| 亚洲午夜久久久久久久久红桃| 国产日韩av一区二区| 精品无码久久久久成人漫画| 亚洲成人午夜电影| 成年人视频在线免费看| 91国产精品成人| 99久久精品无免国产免费| 色噜噜狠狠色综合中国| 亚洲天堂免费av| 精品久久一二三区| 日本成人一级片| 欧美一区二区三区播放老司机| www亚洲视频| 欧美午夜精品理论片a级按摩| 激情小说中文字幕| 亚洲图片有声小说| 国产性生活视频| 欧美猛男gaygay网站| 秋霞视频一区二区| 中文日韩电影网站| a'aaa级片在线观看| 国产精品一二三视频| 国产欧美啪啪| 色综合久久av| 伊人精品视频| 一区二区三区韩国| 成人短视频下载| 性欧美13一14内谢| 亚洲国产三级在线| 精品国产www| 日韩精品视频三区| 在线观看h网| 国产成人午夜视频网址| 9999精品| 国产成人中文字幕| 超碰97久久| 在线码字幕一区| 久久中文字幕av| 免费亚洲一区二区| 粉嫩一区二区三区四区公司1| 国产综合18久久久久久| 亚洲综合自拍| 蜜臀一区二区三区精品免费视频| 国产精品1区2区3区| 欧美一区二区三区影院| 国产嫩草影院久久久久| avtt天堂在线| 欧美色精品天天在线观看视频| av 一区二区三区| 久久九九全国免费精品观看| 国模视频一区| 免费毛片一区二区三区久久久| 99国产精品自拍| 古装做爰无遮挡三级聊斋艳谭| 91在线观看下载| 九九热国产在线| 91精品国产91热久久久做人人| 91精品专区| 国产精品旅馆在线| 欧美一区三区| 污污网站免费看| 国产精品电影院| 无码久久精品国产亚洲av影片| 亚洲第一精品夜夜躁人人爽| 国产高清在线a视频大全| 欧美精品中文字幕一区| 日韩成人一区| 日本一区不卡| 久久一综合视频| 999在线观看| 国产精品欧美一区喷水| 在线观看国产区| 一本色道久久88综合日韩精品| 国产精品字幕| 日本视频一区在线观看| 日韩经典一区二区| yy6080午夜| 国产精品热久久久久夜色精品三区 | 欧美日韩成人免费视频| 日产国产欧美视频一区精品| 国产精品揄拍100视频| 欧美日韩国产专区| 欧美日韩视频精品二区| 国产精品久久电影观看| 久久网站免费观看| 久久久久久综合网| 亚洲精品高清在线| 久久精品99国产精| 欧美精品一区二区三区一线天视频 | 色哟哟一区二区在线观看| 久久天堂电影| 国产精品三级久久久久久电影| 99久久综合| 黑森林av导航| 中文字幕免费不卡| 国产精品久久久国产盗摄| 欧美日韩aaaa| 福利电影一区| av网址在线观看免费| 成人免费在线视频观看| 国产成人精品一区二区无码呦| 久久男人的天堂| 欧美日韩一二三四| 午夜激情视频网| 精品久久久久久| 国产 欧美 自拍| 国产一区二区精品丝袜| 99视频这里有精品| 欧美成人三级在线视频| 91污在线观看| 国产露脸国语对白在线| 456亚洲影院| 久久影院一区| 国产精品无码专区| 在线不卡a资源高清| 欧美a级在线观看|