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

沒錯,純SQL查詢語句可以實現神經網絡

數據庫 深度學習
在這篇文章中,我們將純粹用SQL實現含有一個隱藏層(以及帶 ReLU 和 softmax 激活函數)的神經網絡。這些神經網絡訓練的步驟包含前向傳播和反向傳播,將在 BigQuery 的單個SQL查詢語句中實現。當它在 BigQuery 中運行時,實際上我們正在成百上千臺服務器上進行分布式神經網絡訓練。

[[229220]]

我們熟知的SQL是一種數據庫查詢語句,它方便了開發者在大型數據中執行高效的操作。但本文從另一角度嵌套SQL查詢語句而構建了一個簡單的三層全連接網絡,雖然由于語句的嵌套過深而不能高效計算,但仍然是一個非常有意思的實驗。

在這篇文章中,我們將純粹用SQL實現含有一個隱藏層(以及帶 ReLU 和 softmax 激活函數)的神經網絡。這些神經網絡訓練的步驟包含前向傳播和反向傳播,將在 BigQuery 的單個SQL查詢語句中實現。當它在 BigQuery 中運行時,實際上我們正在成百上千臺服務器上進行分布式神經網絡訓練。聽上去很贊,對吧?

也就是說,這個有趣的項目用于測試 SQL 和 BigQuery 的限制,同時從聲明性數據的角度看待神經網絡訓練。這個項目沒有考慮任何的實際應用,不過***我將討論一些實際的研究意義。

我們先從一個基于神經網絡的簡單分類器開始。它的輸入尺寸為 2,輸出為二分類。我們將有一個維度為 2 的單隱層和 ReLU 激活函數。輸出層的二分類將使用 softmax 函數。我們在實現網絡時遵循的步驟將是在  Karpathy’s CS231n 指南(https://cs231n.github.io/neural-networks-case-study/)中展示的基于 SQL 版本的 Python 示例。

模型

該模型含有以下參數:

輸入到隱藏層

  • W: 2×2 的權重矩陣(元素: w_00, w_01, w_10, w_11)
  • B: 2×1 的偏置向量(元素:b_0, b_1)

隱藏到輸出層

  • W2: 2×2 的權重矩陣(元素: w2_00, w2_01, w2_10, w2_11)
  • B2: 2×1 的偏置向量(元素:b2_0, b2_1)

訓練數據存儲在 BigQuery 表格當中,列 x1 和 x2 的輸入和輸出如下所示(表格名稱:example_project.example_dataset.example_table)

如前所述,我們將整個訓練作為單個 SQL 查詢語句來實現。在訓練完成后,通過 SQL 查詢語句將會返回參數的值。正如你可能猜到的,這將是一個層層嵌套的查詢,我們將逐步構建以準備這個查詢語句。我們將會從最內層的子查詢開始,然后逐個增加嵌套的外層。

前向傳播

首先,我們將權重參數  W 和 W2 設為服從正態分布的隨機值,將權重參數 B 和 B2 設置為 0。 W 和 W2 的隨機值可以通過 SQL 本身產生。為了簡單起見,我們將從外部生成這些值并在 SQL 查詢中使用。用于初始化參數的內部子查詢如下: 

  1. SELECT *,     
  2.                -0.00569693  AS w_00,  
  3.                0.00186517  AS w_01,  
  4.                0.00414431  AS w_10,  
  5.                0.0105101  AS w_11,  
  6.                0.0  AS b_0, 
  7.                0.0  AS b_1, 
  8.                -0.01312284  AS w2_00, 
  9.                - 0.01269512  AS w2_01, 
  10.               0.00379152  AS w2_10,      
  11.               -0.01218354  AS w2_11, 
  12.               0.0  AS b2_0, 
  13.               0.0  AS b2_1 
  14.  FROM  `example_project.example_dataset.example_table` 

請注意,表格 example_project.example_dataset.example_table 已經包含了列  x1、 x2 和 y。模型參數將會被作為上述查詢結果的附加列添加。

接下來,我們將計算隱藏層的激活值。我們將使用含有元素 d0 和 d1 的向量 D 表示隱藏層。我們需要執行矩陣操作 D = np.maximum(0, np.dot(X, W) + B),其中 X 表示輸入向量(元素 x1 和 x2)。這個矩陣運算包括將權重 W 和輸入 X 相乘,再加上偏置向量 B。然后,結果將被傳遞給非線性 ReLU 激活函數,該函數將會把負值設置為 0。SQL 中的等效查詢為: 

  1. SELECT *,       
  2.            (CASE 
  3.             WHEN ((x1*w_00 + x2*w_10) + b_0) > 0.0 THEN ((x1*w_00 + x2*w_10) + b_0) 
  4.             ELSE 0.0 
  5.         ENDAS d0, 
  6.        (CASE 
  7.             WHEN ((x1*w_01 + x2*w_11) + b_0) > 0.0 THEN ((x1*w_01 + x2*w_11) + b_1) 
  8.             ELSE 0.0 
  9.         ENDAS d1 
  10. FROM {inner subquery} 

上面的查詢將兩個新列 d0 和 d1 添加到之前內部子查詢的結果當中。 上述查詢的輸出如下所示。

這完成了從輸入層到隱藏層的一次轉換。現在,我們可以執行從隱藏層到輸出層的轉換了。

首先,我們將計算輸出層的值。公式是:scores = np.dot(D, W2) + B2。然后,我們將對計算出來的值用 softmax 函數來獲得每個類的預測概率。SQL 內部的等價子查詢如下: 

  1. SELECT *, 
  2.        EXP(scores_0)/(EXP(scores_0) + EXP(scores_1)) AS probs_0, 
  3.        EXP(scores_1)/(EXP(scores_0) + EXP(scores_1)) AS probs_1 
  4. FROM   
  5. SELECT *,    
  6.                 ((d0*w2_00 + d1*w2_10) + b2_0) AS scores_0, 
  7.                 ((d0*w2_01 + d1*w2_11) + b2_1) AS scores_1 
  8.    FROM {INNER sub-query}) 

首先,我們將使用交叉熵損失函數來計算當前預測的總損失。首先,計算每個樣本中正確類預測概率對數的負值。交叉熵損失只是這些 X 和 Y 實例中數值的平均值。自然對數是一個遞增函數,因此,將損失函數定義為負的正確類預測概率對數很直觀。如果正確類的預測概率很高,損失函數將會很低。相反,如果正確類的預測概率很低,則損失函數值將很高。

為了減少過擬合的風險,我們也將同樣增加 L2 正則化。在整體損失函數中,我們將包含 0.5*reg*np.sum(W*W) + 0.5*reg*np.sum(W2*W2),其中 reg 是超參數。在損失函數中包括這一函數將會懲罰那些權重向量中較大的值。

在查詢當中,我們同樣會計算訓練樣本的數量(num_examples)。這對于后續我們計算平均值來說很有用。SQL 查詢中計算整體損失函數的語句如下: 

  1. SELECT *,    
  2.     (sum_correct_logprobs/num_examples) + 1e-3*(0.5*(w_00*w_00 + w_01*w_01 + w_10*w_10 + w_11*w_11) + 0.5*(w2_00*w2_00 + w2_01*w2_01 + w2_10*w2_10 + w2_11*w2_11)) AS loss 
  3. FROM   
  4.    (SELECT *,   
  5.                     SUM(correct_logprobs)  OVER ()  sum_correct_logprobs, 
  6.                                      COUNT(1)  OVER ()  num_examples 
  7.    FROM    
  8.       (SELECT *,   
  9.                      (CASE 
  10.                           WHEN y = 0 THEN -1*LOG(probs_0) 
  11.                           ELSE -1*LOG(probs_1) 
  12.                     ENDAS correct_logprobs 
  13.       FROM {inner subquery})) 

反向傳播

接下來,對于反向傳播,我們將計算每個參數對于損失函數的偏導數。我們使用鏈式法則從***一層開始逐層計算。首先,我們將通過使用交叉熵和 softmax 函數的導數來計算 score 的梯度。與此相對的查詢是: 

  1. SELECT *,    
  2.               (CASE 
  3.                          WHEN y = 0  THEN (probs_0–1)/num_examples            ELSE probs_0/num_examples 
  4.                END)  AS dscores_0, 
  5.              (CASE 
  6.                         WHEN y = 1 THEN (probs_1–1)/num_examples            ELSE probs_1/num_examples 
  7.               END)  AS dscores_1  
  8. FROM {inner subquery} 

在上文中,我們用  scores = np.dot(D, W2) + B2 算出了分數。因此,基于分數的偏導數,我們可以計算隱藏層 D 和參數 W2,B2 的梯度。對應的查詢語句是: 

  1. SELECT *, 
  2.        SUM(d0*dscores_0) OVER () AS dw2_00, 
  3.        SUM(d0*dscores_1) OVER () AS dw2_01,  
  4.        SUM(d1*dscores_0) OVER () AS dw2_10,  
  5.        SUM(d1*dscores_1) OVER () AS dw2_11,  
  6.        SUM(dscores_0) OVER () AS db2_0,  
  7.        SUM(dscores_1) OVER () AS db2_1,  
  8.        CASE  
  9.           WHEN (d0) <= 0.0  THEN 0.0  
  10.           ELSE (dscores_0*w2_00 + dscores_1*w2_01)  
  11.        END AS dhidden_0,  
  12.       CASE  
  13.           WHEN (d1) <= 0.0 THEN 0.0  
  14.           ELSE (dscores_0*w2_10 + dscores_1*w2_11)  
  15.       END AS dhidden_1  
  16. FROM {inner subquery} 

同理,我們知道  D = np.maximum(0, np.dot(X, W) + B)。因此,通過 D 的偏導,我們可以計算出 W 和 B 的導數。我們無須計算 X 的偏導,因為它不是模型的參數,且也不必通過其它模型參數進行計算。計算 W 和 B 的偏導的查詢語句如下: 

  1. SELECT *,  
  2.        SUM(x1*dhidden_0) OVER () AS dw_00,  
  3.        SUM(x1*dhidden_1) OVER () AS dw_01,  
  4.        SUM(x2*dhidden_0) OVER () AS dw_10,  
  5.        SUM(x2*dhidden_1) OVER () AS dw_11,  
  6.        SUM(dhidden_0) OVER () AS db_0,  
  7.        SUM(dhidden_1) OVER () AS db_1  
  8. FROM {inner subquery} 

***,我們使用 W、B、W2 及 B2 各自的導數進行更新操作。計算公式是 param = learning_rate * d_param ,其中learning_rate 是參數。為了體現 L2 正則化,我們會在計算 dW 和 dW2 時加入一個正則項 reg*weight。我們也去掉如  dw_00, correct_logprobs 等緩存的列,它們曾在子查詢時被創建,用于保存訓練數據(x1, x2 及 y 列) 和模型參數(權重和偏置項)。對應的查詢語句如下: 

  1. SELECT x1,  
  2.    x2, 
  3.        y,  
  4.        w_00 — (2.0)*(dw_00+(1e-3)*w_00) AS w_00,  
  5.        w_01 — (2.0)*(dw_01+(1e-3)*w_01) AS w_01,  
  6.        w_10 — (2.0)*(dw_10+(1e-3)*w_10) AS w_10,  
  7.        w_11 — (2.0)*(dw_11+(1e-3)*w_11) AS w_11,  
  8.        b_0 — (2.0)*db_0 AS b_0,  
  9.        b_1 — (2.0)*db_1 AS b_1, 
  10.        w2_00 — (2.0)*(dw2_00+(1e-3)*w2_00) AS w2_00,  
  11.        w2_01 — (2.0)*(dw2_01+(1e-3)*w2_01) AS w2_01, 
  12.        w2_10 — (2.0)*(dw2_10+(1e-3)*w2_10) AS w2_10,  
  13.        w2_11 — (2.0)*(dw2_11+(1e-3)*w2_11) AS w2_11,  
  14.        b2_0 — (2.0)*db2_0 AS b2_0,  
  15.        b2_1 — (2.0)*db2_1 AS b2_1  
  16. FROM {inner subquery} 

這包含了正向和反向傳播的一整個迭代過程。以上查詢語句將返回更新后的權重和偏置項。部分結果如下所示:

為了進行多次訓練迭代,我們將反復執行上述過程。用一個簡單 Python 函數足以搞定,代碼鏈接如下:https://github.com/harisankarh/nn-sql-bq/blob/master/training.py。

因為迭代次數太多,查詢語句嵌套嚴重。執行 10 次訓練迭代的查詢語句地址如下:

https://github.com/harisankarh/nn-sql-bq/blob/master/out.txt

因為查詢語句的多重嵌套和復雜度,在 BigQuery 中執行查詢時多項系統資源告急。BigQuery 的標準 SQL 擴展的縮放性比傳統 SQL 語言要好。即使是標準 SQL 查詢,對于有 100k 個實例的數據集,也很難執行超過 10 個迭代。因為資源的限制,我們將會使用一個簡單的決策邊界來評估模型,如此一來,我們就可以在少量迭代后得到較好的準確率。

我們將使用一個簡單的數據集,其輸入 X1、X2 服從標準正態分布。二進制輸出 y 簡單判斷   x1 + x2 是否大于 0。為了更快的訓練完 10 個迭代,我們使用一個較大的學習率 2.0(注意:這么大的學習率并不推薦實際使用,可能會導致發散)。將上述語句執行 10 個迭代得出的模型參數如下:

我們將使用 Bigquery 的函數 save to table 把結果保存到一個新表。我們現在可以在訓練集上執行一次推理來比較預測值和預期值的差距。查詢語句片段在以下鏈接中:

https://github.com/harisankarh/nn-sql-bq/blob/master/query_for_prediction.sql。

僅通過十個迭代,我們的準確率就可達 93%(測試集上也差不多)。

如果我們把迭代次數加到 100 次,準確率高達 99%。

優化

下面是對本項目的總結。我們由此獲得了哪些啟發?如你所見,資源瓶頸決定了數據集的大小以及迭代執行的次數。除了祈求谷歌開放資源上限,我們還有如下優化手段來解決這個問題。

創建中間表和多個 SQL 語句有助于增加迭代數。例如,前 10 次迭代的結果可以存儲在一個中間表中。同一查詢語句在執行下 10 次迭代時可以基于這個中間表。如此,我們就執行了 20 個迭代。這個方法可以反復使用,以應對更大的查詢迭代。

相比于在每一步增加外查詢,我們應該盡可能的使用函數的嵌套。例如,在一個子查詢中,我們可以同時計算 scores 和 probs,而不應使用 2 層嵌套查詢。

在上例中,所有的中間項都被保留直到***一個外查詢執行。其中有些項如 correct_logprobs 可以早些刪除(盡管 SQL 引擎可能會自動的執行這類優化)。

多嘗試應用用戶自定義的函數。如果感興趣,你可以看看這個 BigQuery 的用戶自定義函數的服務模型的項目(但是,無法使用 SQL 或者 UDFs 進行訓練)。

意義

現在,讓我們來看看基于深度學習的分布式 SQL 引擎的深層含義。 BigQuery、Presto  這類 SQL 倉庫引擎的一個局限性在于,查詢操作是在 CPU 而不是 GPU 上執行的。研究 blazingdb 和 mapd 等基于 GPU 加速的數據庫查詢結果想必十分有趣。一個簡單的研究方法就是使用分布式 SQL 引擎執行查詢和數據分布,并用 GPU 加速數據庫執行本地計算。

退一步來看,我們已經知道執行分布式深度學習很難。分布式 SQL 引擎在數十年內已經有了大量的研究工作,并產出如今的查詢規劃、數據分區、操作歸置、檢查點設置、多查詢調度等技術。其中有些可以與分布式深度學習相結合。如果你對這些感興趣,請看看這篇論文(https://sigmodrecord.org/publications/sigmodRecord/1606/pdfs/04_vision_Wang.pdf),該論文對分布式數據庫和分布式深度學習展開了廣泛的研究討論。 

原文鏈接:https://towardsdatascience.com/deep-neural-network-implemented-in-pure-sql-over-bigquery-f3ed245814d3 

責任編輯:龐桂玉 來源: 數據與算法之美
相關推薦

2025-02-25 14:13:31

2018-07-03 16:10:04

神經網絡生物神經網絡人工神經網絡

2021-12-20 09:00:00

深度學習神經元網絡安全

2017-04-26 08:31:10

神經網絡自然語言PyTorch

2020-07-22 18:11:07

神經網絡函數代碼

2010-10-21 10:28:13

SQL Server查

2018-10-18 10:27:15

機器學習神經網絡python

2022-02-15 23:38:22

Python機器學習算法

2019-07-25 08:20:37

代碼開發神經網絡

2017-09-10 07:07:32

神經網絡數據集可視化

2020-09-22 07:46:03

人工神經網絡人工智能AI

2023-10-09 08:00:00

ChatGPT人工智能

2017-03-13 14:45:51

Python神經網絡基礎

2017-07-18 10:20:30

Python神經網絡

2020-12-19 11:05:57

循環神經網絡PyTorch神經網絡

2020-09-08 13:02:00

Python神經網絡感知器

2024-04-30 14:54:10

2019-12-17 10:16:34

MySQLSQL優化數據庫

2019-05-07 19:12:28

機器學習神經網絡Python

2022-04-07 09:01:52

神經網絡人工智能
點贊
收藏

51CTO技術棧公眾號

亚洲18在线| www.中文字幕久久久| 韩国欧美一区| 亚洲精品一二区| www.色就是色| 中文字幕在线播放网址| 99久久久无码国产精品| 国产精品久久久91| 久草国产在线观看| 国内精品伊人久久久| 制服丝袜激情欧洲亚洲| 日韩av综合在线观看| 18免费在线视频| 成熟亚洲日本毛茸茸凸凹| 欧美亚洲成人xxx| 三级黄色录像视频| 欧美一区二区三区久久| 欧美撒尿777hd撒尿| 国产精品久久..4399| 日本视频在线| 91免费在线看| 91精品国产一区二区三区动漫| 九九九在线观看| 亚洲色图欧美| 在线观看精品自拍私拍| 欧美在线一级片| 免费观看性欧美大片无片| 色狠狠av一区二区三区| 精品少妇人欧美激情在线观看| 国产爆初菊在线观看免费视频网站| 国产激情91久久精品导航| 国产精品久久久久久久av电影| 日韩av片在线播放| 天天色天天射综合网| 亚洲欧美在线播放| 日本黄色免费观看| 亚洲国产高清在线观看| 欧美欧美欧美欧美首页| 人人干人人视频| 小早川怜子影音先锋在线观看| 亚洲国产精品嫩草影院| 黄色录像特级片| 成人三级网址| 亚洲色欲色欲www| 欧美国产一二三区| 五月天婷婷社区| www.欧美色图| 国产一区在线免费| 动漫av一区二区三区| 国产精品一区二区在线观看网站| 国产在线观看91精品一区| 亚洲天堂五月天| 三级欧美在线一区| 国产精品91久久久| 日韩人妻精品中文字幕| 亚洲一区二区成人| 日本sm极度另类视频| 天天操天天操天天操天天| 免费国产自线拍一欧美视频| 欧美中文字幕在线播放| 国产寡妇亲子伦一区二区三区四区 | 色婷婷av久久久久久久| 久久人妻精品白浆国产| 日韩欧美2区| 欧美日韩国产免费一区二区| 日本中文字幕精品—区二区| 91精品麻豆| 日韩一级大片在线| 秘密基地免费观看完整版中文| 9l视频自拍九色9l视频成人| 亚洲国产小视频在线观看| 国产精品久久无码| 国产精品三级| 日韩小视频在线| 1024手机在线视频| 亚洲毛片一区| 国产精品com| 国产又粗又大又黄| 丁香婷婷综合五月| 免费国产一区二区| 在线免费看黄网站| 一区二区在线观看av| 五十路熟女丰满大屁股| 欧美极品免费| 欧美一区午夜视频在线观看| 国产精品手机在线观看| 精品国产一区一区二区三亚瑟| 色噜噜狠狠狠综合曰曰曰88av | 亚洲自拍另类综合| aa在线免费观看| 国产精品4hu.www| 日韩精品资源二区在线| 30一40一50老女人毛片| 欧美成人milf| 久久久这里只有精品视频| 国产无遮挡又黄又爽| 午夜综合激情| 91亚洲精品一区二区| 天天综合网在线观看| 国产精品三级久久久久三级| 亚洲国产精品无码观看久久| 成人日韩在线| 精品剧情v国产在线观看在线| 中文字幕免费高清| 欧美精品一区二区三区久久久竹菊| 国产69精品久久久久久| 国产成人精品毛片| 国产欧美日韩精品在线| www.xxx麻豆| 欧美高清免费| 亚洲男人第一av网站| 欧美人妻精品一区二区三区| 日韩精品欧美精品| 国产精品二区三区四区| a√资源在线| 欧美性猛交xxxx乱大交3| 自拍一级黄色片| 精品美女视频| 欧美性受xxxx白人性爽| 二区三区在线视频| 18欧美乱大交hd1984| 大香煮伊手机一区| 欧美成人专区| 久久久久久亚洲精品中文字幕 | 美女100%一区| 亚洲国产成人91精品| 老湿机69福利| 麻豆高清免费国产一区| 日韩欧美一区二区视频在线播放| 国产精品电影| 亚洲成色777777在线观看影院| 搜索黄色一级片| 蜜桃精品在线观看| 图片区小说区区亚洲五月| 中文字幕资源网在线观看免费| 精品久久久久av影院| 91高清免费观看| 精品午夜一区二区三区在线观看| 亚洲精品成人自拍| 精品国模一区二区三区| 亚洲欧美日韩一区在线| 国产成人无码av| 91视频国产观看| 日韩av播放器| 精品大片一区二区| 国产精品www| www.亚洲免费| 欧美剧情电影在线观看完整版免费励志电影 | japanese国产精品| 国产成人一区二区在线| 成年人视频网站在线| 91黄色免费看| 国精产品视频一二二区| 久久成人18免费观看| 亚洲高清资源综合久久精品| 国产精品高潮久久| 中文字幕亚洲无线码a| 亚洲综合免费视频| 亚洲欧洲av在线| 91亚洲一区二区| 欧美视频亚洲视频| 国产乱码精品一区二区三区不卡| 岛国片av在线| 亚洲欧美激情精品一区二区| 波多野结衣在线电影| 亚洲国产精品黑人久久久| 亚洲第一狼人区| 在线一区电影| 国产精品制服诱惑| 亚洲播播91| 日韩亚洲欧美成人| 性少妇videosexfreexxx片| 亚洲mv在线观看| 免费视频91蜜桃| 国产曰批免费观看久久久| 成年人深夜视频| 亚洲成a人片77777在线播放| 国产精品女主播| 午夜成年人在线免费视频| 日韩av在线最新| 亚洲在线精品视频| 亚洲大尺度视频在线观看| 黄色a一级视频| 久久精品免费看| 拔插拔插海外华人免费| 成人在线免费小视频| 成人黄色在线免费观看| 日韩毛片免费观看| 久久亚洲私人国产精品va| 天天干天天爱天天操| 欧美日韩在线播放三区| 国产中文字幕免费| 欧美精彩视频一区二区三区| 日韩欧美中文视频| 久久亚洲不卡| 91亚洲精品国产| 精品久久久久久久久久久下田| 成人自拍视频网站| 国产一区二区三区四区五区3d| 欧美黄色免费网站| 在线观看a视频| 日韩精品一区二区视频| 国产婷婷在线视频| 91成人看片片| 欧美成人aaaaⅴ片在线看| 国产精品青草综合久久久久99| 国产a级黄色片| 国产乱色国产精品免费视频| 日日碰狠狠丁香久燥| 狠狠入ady亚洲精品| 一区二区在线观| 综合色就爱涩涩涩综合婷婷| 高清国产一区| 成人亚洲网站| 国产91免费观看| 久久久男人天堂| 欧美精品久久久久久久| 老司机精品影院| 在线播放亚洲激情| 欧美在线一卡| 亚洲精品99999| 亚洲毛片在线播放| 欧美一区中文字幕| 国产精品系列视频| 欧美精品乱码久久久久久| 亚洲 日本 欧美 中文幕| 精品久久久久久久大神国产| 久艹视频在线观看| 一区二区三区在线视频免费| 午夜国产福利视频| 国产日韩影视精品| 中文字幕网站在线观看| 久久蜜桃一区二区| 久久久久久久久久久国产精品| 成人免费看黄yyy456| 99久久综合网| 国产激情一区二区三区| 国产吃瓜黑料一区二区| 国产精品综合二区| 欧美69精品久久久久久不卡| 国产美女在线观看一区| 午夜激情视频网| 国产一区在线视频| 日韩精品视频网址| 国产成人精品三级| 中国男女全黄大片| 福利视频网站一区二区三区| 一二三区视频在线观看| 国产成a人亚洲| 91传媒理伦片在线观看| 北岛玲一区二区三区四区| 国产一卡二卡三卡四卡| 成人免费不卡视频| 在线观看av中文字幕| 91视频91自| www在线观看免费视频| 国产欧美一区二区三区在线老狼| 国产人妻大战黑人20p| 国产农村妇女精品| 色哟哟一一国产精品| 亚洲精品成人少妇| 国产无码精品在线观看| 疯狂做受xxxx欧美肥白少妇| 中文字幕xxxx| 欧美日本视频在线| 国产高潮流白浆喷水视频| 日韩欧美国产综合在线一区二区三区| 丰满肥臀噗嗤啊x99av| 精品视频www| av在线天堂| 成年人精品视频| 川上优av中文字幕一区二区| 日本欧美在线视频| 在线高清欧美| 国产一区二区三区奇米久涩| 国产麻豆精品久久| 超碰在线免费观看97| 亚洲欧洲一区| 99视频在线视频| 福利一区二区在线观看| 国产精品一二三区在线观看| 亚洲日本青草视频在线怡红院| 动漫精品一区一码二码三码四码| 日韩欧美在线观看视频| 国产一区二区在线视频聊天 | 国产精品专区一| 在这里有精品| 日韩电影免费观看高清完整| 一区二区影视| 韩国日本在线视频| 国产老女人精品毛片久久| 亚洲一区二区三区四区五区六区 | 亚洲精品国产suv| 免费人成在线观看播放视频| 欧美极品欧美精品欧美视频| 在线成人视屏| 精品乱子伦一区二区三区| 婷婷激情综合| 欧美综合在线观看视频| 国产激情偷乱视频一区二区三区| 成人国产精品久久久网站| 一区二区三区在线视频播放| 成人免费一级片| 国产视频在线一区二区| 午夜av在线免费观看| 国产精品999999| 日韩激情毛片| 18禁裸男晨勃露j毛免费观看| 蜜桃久久久久久| 中文字幕免费高清| 舔着乳尖日韩一区| www.国产欧美| 久久久97精品| 国产91在线播放精品| 麻豆精品视频| 日韩午夜激情| 国产人妻精品午夜福利免费| 综合分类小说区另类春色亚洲小说欧美 | 亚洲综合自拍| 91插插插插插插插插| 久久免费美女视频| 日本三级一区二区| 精品国产一区二区在线观看| 国产成人午夜| 成人免费看黄网站| 成人中文视频| 国产高清视频网站| 日本一区二区动态图| 在线天堂中文字幕| 日韩电影中文字幕在线观看| 黄色羞羞视频在线观看| 99re在线播放| 欧美日韩免费| 亚洲午夜精品在线观看| 亚洲精品你懂的| 正在播放木下凛凛xv99| 一区二区av在线| 高清av一区二区三区| 日本在线高清视频一区| 午夜在线观看免费一区| 少妇毛片一区二区三区| 色综合中文字幕| 国产精品99999| 国产精品成人播放| 日韩免费一区| 男生操女生视频在线观看| 中文字幕日韩精品一区| 国产美女自慰在线观看| 美女精品视频一区| 日韩成人久久| av女优在线播放| 91麻豆国产福利精品| 日本视频网站在线观看| 在线色欧美三级视频| 久久91视频| a级网站在线观看| 粉嫩高潮美女一区二区三区| 久久视频免费在线观看| 精品无人国产偷自产在线| 日韩免费电影| 中文字幕一区二区三区5566| 国产精品一区二区三区四区 | 麻豆系列在线观看| 国产一区二区在线免费视频| 亚洲综合专区| 亚洲精品乱码久久| 欧美自拍偷拍午夜视频| 黄色一级片在线观看| 成人动漫视频在线观看免费| 亚洲免费网址| 日韩精品123区| 亚洲精品国产精品国自产观看浪潮| 手机在线理论片| 在线观看亚洲视频啊啊啊啊| 国产91高潮流白浆在线麻豆| 97久久久久久久| 丝袜亚洲另类欧美重口| 国产精品一区二区三区美女| 无码人妻丰满熟妇区毛片18 | 日本少妇吞精囗交| 国产亚洲综合久久| 日韩在线观看中文字幕| 丰满爆乳一区二区三区| 国产精品剧情在线亚洲| 风流少妇一区二区三区91| 国产va免费精品高清在线观看| 97久久视频| 插吧插吧综合网| 91精品国产综合久久福利软件 | 999在线视频| 精品国产一区二区三区麻豆小说 | 91美女片黄在线观| 国产欧美精品久久| 亚洲波多野结衣| 日韩精品中文字幕在线观看| 日韩08精品| 色戒在线免费观看| 欧美视频精品一区| 日本大胆在线观看| 亚洲精品一区二区三区av|