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

一文詳解神經網絡 BP 算法原理及 Python 實現

移動開發 開發 算法
關于反向傳播。

 最近這段時間系統性的學習了 BP 算法后寫下了這篇學習筆記,因為能力有限,若有明顯錯誤,還請指正。

什么是梯度下降和鏈式求導法則

假設我們有一個函數 J(w),如下圖所示。

 

函數 J(w)

梯度下降示意圖

現在,我們要求當 w 等于什么的時候,J(w) 能夠取到最小值。從圖中我們知道最小值在初始位置的左邊,也就意味著如果想要使 J(w) 最小,w的值需要減小。而初始位置的切線的斜率a > 0(也即該位置對應的導數大于0),w = w – a 就能夠讓 w 的值減小,循環求導更新w直到 J(w) 取得最小值。如果函數J(w)包含多個變量,那么就要分別對不同變量求偏導來更新不同變量的值。

所謂的鏈式求導法則,就是求復合函數的導數:

一文詳解神經網絡 BP 算法原理及 Python 實現

鏈式求導法則

放個例題,會更加明白一點:

一文詳解神經網絡 BP 算法原理及 Python 實現

鏈式求導的例子

神經網絡的結構

神經網絡由三部分組成,分別是最左邊的輸入層,隱藏層(實際應用中遠遠不止一層)和最右邊的輸出層。層與層之間用線連接在一起,每條連接線都有一個對應的權重值 w,除了輸入層,一般來說每個神經元還有對應的偏置 b。

 

神經網絡的結構圖

除了輸入層的神經元,每個神經元都會有加權求和得到的輸入值 z 和將 z 通過 Sigmoid 函數(也即是激活函數)非線性轉化后的輸出值 a,他們之間的計算公式如下

一文詳解神經網絡 BP 算法原理及 Python 實現

神經元輸出值 a 的計算公式

其中,公式里面的變量l和j表示的是第 l 層的第 j 個神經元,ij 則表示從第 i 個神經元到第 j 個神經元之間的連線,w 表示的是權重,b 表示的是偏置,后面這些符號的含義大體上與這里描述的相似,所以不會再說明。下面的 Gif 動圖可以更加清楚每個神經元輸入輸出值的計算方式(注意,這里的動圖并沒有加上偏置,但使用中都會加上)

一文詳解神經網絡 BP 算法原理及 Python 實現

動圖顯示計算神經元輸出值

使用激活函數的原因是因為線性模型(無法處理線性不可分的情況)的表達能力不夠,所以這里通常需要加入 Sigmoid 函數來加入非線性因素得到神經元的輸出值。

 

sigmoid 函數

可以看到 Sigmoid 函數的值域為 (0,1) ,若對于多分類任務,輸出層的每個神經元可以表示是該分類的概率。當然還存在其他的激活函數,他們的用途和優缺點也都各異。

BP 算法執行的流程(前向傳遞和逆向更新)

在手工設定了神經網絡的層數,每層的神經元的個數,學習率 η(下面會提到)后,BP 算法會先隨機初始化每條連接線權重和偏置,然后對于訓練集中的每個輸入 x 和輸出 y,BP 算法都會先執行前向傳輸得到預測值,然后根據真實值與預測值之間的誤差執行逆向反饋更新神經網絡中每條連接線的權重和每層的偏好。在沒有到達停止條件的情況下重復上述過程。

其中,停止條件可以是下面這三條

● 權重的更新低于某個閾值的時候

● 預測的錯誤率低于某個閾值

● 達到預設一定的迭代次數

譬如說,手寫數字識別中,一張手寫數字1的圖片儲存了28*28 = 784個像素點,每個像素點儲存著灰度值(值域為[0,255]),那么就意味著有784個神經元作為輸入層,而輸出層有10個神經元代表數字0~9,每個神經元取值為0~1,代表著這張圖片是這個數字的概率。

每輸入一張圖片(也就是實例),神經網絡會執行前向傳輸一層一層的計算到輸出層神經元的值,根據哪個輸出神經元的值最大來預測輸入圖片所代表的手寫數字。

然后根據輸出神經元的值,計算出預測值與真實值之間的誤差,再逆向反饋更新神經網絡中每條連接線的權重和每個神經元的偏好。

前向傳輸(Feed-Forward)

從輸入層=>隱藏層=>輸出層,一層一層的計算所有神經元輸出值的過程。

逆向反饋(Back Propagation)

因為輸出層的值與真實的值會存在誤差,我們可以用均方誤差來衡量預測值和真實值之間的誤差。

一文詳解神經網絡 BP 算法原理及 Python 實現

均方誤差

逆向反饋的目標就是讓E函數的值盡可能的小,而每個神經元的輸出值是由該點的連接線對應的權重值和該層對應的偏好所決定的,因此,要讓誤差函數達到最小,我們就要調整w和b值, 使得誤差函數的值最小。

一文詳解神經網絡 BP 算法原理及 Python 實現

權重和偏置的更新公式

對目標函數 E 求 w 和 b 的偏導可以得到 w 和 b 的更新量,下面拿求 w 偏導來做推導。

一文詳解神經網絡 BP 算法原理及 Python 實現

其中 η 為學習率,取值通常為 0.1 ~ 0.3,可以理解為每次梯度所邁的步伐。注意到 w_hj 的值先影響到第 j 個輸出層神經元的輸入值a,再影響到輸出值y,根據鏈式求導法則有:

一文詳解神經網絡 BP 算法原理及 Python 實現

使用鏈式法則展開對權重求偏導

根據神經元輸出值 a 的定義有:

一文詳解神經網絡 BP 算法原理及 Python 實現

對函數 z 求 w 的偏導

Sigmoid 求導數的式子如下,從式子中可以發現其在計算機中實現也是非常的方便:

一文詳解神經網絡 BP 算法原理及 Python 實現

Sigmoid 函數求導

所以

一文詳解神經網絡 BP 算法原理及 Python 實現

則權重 w 的更新量為:

一文詳解神經網絡 BP 算法原理及 Python 實現

類似可得 b 的更新量為:

一文詳解神經網絡 BP 算法原理及 Python 實現

但這兩個公式只能夠更新輸出層與前一層連接線的權重和輸出層的偏置,原因是因為 δ 值依賴了真實值y這個變量,但是我們只知道輸出層的真實值而不知道每層隱藏層的真實值,導致無法計算每層隱藏層的 δ 值,所以我們希望能夠利用 l+1 層的 δ 值來計算 l 層的 δ 值,而恰恰通過一些列數學轉換后可以做到,這也就是逆向反饋名字的由來,公式如下:

一文詳解神經網絡 BP 算法原理及 Python 實現

從式子中我們可以看到,我們只需要知道下一層的權重和神經元輸出層的值就可以計算出上一層的 δ 值,我們只要通過不斷的利用上面這個式子就可以更新隱藏層的全部權重和偏置了。

在推導之前請先觀察下面這張圖:

 

l 和 l+1 層的神經元

首先我們看到 l 層的第 i 個神經元與 l+1 層的所有神經元都有連接,那么我們可以將 δ 展開成如下的式子:

一文詳解神經網絡 BP 算法原理及 Python 實現

也即是說我們可以將 E 看做是 l+1 層所有神經元輸入值的 z 函數,而上面式子的 n 表示的是 l+1 層神經元的數量,再進行化簡后就可以得到上面所說的式子。

在這里的推導過程只解釋了關鍵的部分。另外也參考了周志華所寫的機器學習中的神經網絡部分的內容和 neural networks and deep learning的內容。

Python 源碼解析

源碼來自于 Michael Nielsen大神的深度學習在線教程。

使用 Python 實現的神經網絡的代碼行數并不多,僅包含一個 Network 類,首先來看看該類的構造方法。

  1. def __init__(self, sizes): 
  2.         """ 
  3.         :param sizes: list類型,儲存每層神經網絡的神經元數目 
  4.                       譬如說:sizes = [2, 3, 2] 表示輸入層有兩個神經元、 
  5.                       隱藏層有3個神經元以及輸出層有2個神經元 
  6.         """ 
  7.         # 有幾層神經網絡  
  8.         self.num_layers = len(sizes) 
  9.         self.sizes = sizes 
  10.         # 除去輸入層,隨機產生每層中 y 個神經元的 biase 值(0 - 1) 
  11.         self.biases = [np.random.randn(y, 1for y in sizes[1:]] 
  12.         # 隨機產生每條連接線的 weight 值(0 - 1) 
  13.         self.weights = [np.random.randn(y, x) 
  14.                         for x, y in zip(sizes[:-1], sizes[1:])] 

向前傳輸(FreedForward)的代碼

  1. def feedforward(self, a): 
  2.         """ 
  3.         前向傳輸計算每個神經元的值 
  4.         :param a: 輸入值 
  5.         :return: 計算后每個神經元的值 
  6.         """ 
  7.         for b, w in zip(self.biases, self.weights): 
  8.             # 加權求和以及加上 biase 
  9.             a = sigmoid(np.dot(w, a)+b) 
  10.         return a 

源碼里使用的是隨機梯度下降(Stochastic Gradient Descent,簡稱 SGD),原理與梯度下降相似,不同的是隨機梯度下降算法每次迭代只取數據集中一部分的樣本來更新 w 和 b 的值,速度比梯度下降快,但是,它不一定會收斂到局部極小值,可能會在局部極小值附近徘徊。

  1. def SGD(self, training_data, epochs, mini_batch_size, eta, 
  2.             test_data=None): 
  3.         """ 
  4.         隨機梯度下降 
  5.         :param training_data: 輸入的訓練集 
  6.         :param epochs: 迭代次數 
  7.         :param mini_batch_size: 小樣本數量 
  8.         :param eta: 學習率  
  9.         :param test_data: 測試數據集 
  10.         """ 
  11.         if test_data: n_test = len(test_data) 
  12.         n = len(training_data) 
  13.         for j in xrange(epochs): 
  14.             # 攪亂訓練集,讓其排序順序發生變化 
  15.             random.shuffle(training_data) 
  16.             # 按照小樣本數量劃分訓練集 
  17.             mini_batches = [ 
  18.                 training_data[k:k+mini_batch_size] 
  19.                 for k in xrange(0, n, mini_batch_size)] 
  20.             for mini_batch in mini_batches: 
  21.                 # 根據每個小樣本來更新 w 和 b,代碼在下一段 
  22.                 self.update_mini_batch(mini_batch, eta) 
  23.             # 輸出測試每輪結束后,神經網絡的準確度 
  24.             if test_data: 
  25.                 print "Epoch {0}: {1} / {2}".format( 
  26.                     j, self.evaluate(test_data), n_test) 
  27.             else
  28.                 print "Epoch {0} complete".format(j) 

根據 backprop 方法得到的偏導數更新 w 和 b 的值。

  1. def update_mini_batch(self, mini_batch, eta): 
  2.         """ 
  3.         更新 w 和 b 的值 
  4.         :param mini_batch: 一部分的樣本 
  5.         :param eta: 學習率 
  6.         """ 
  7.         # 根據 biases 和 weights 的行列數創建對應的全部元素值為 0 的空矩陣 
  8.         nabla_b = [np.zeros(b.shape) for b in self.biases] 
  9.         nabla_w = [np.zeros(w.shape) for w in self.weights] 
  10.         for x, y in mini_batch: 
  11.             # 根據樣本中的每一個輸入 x 的其輸出 y,計算 w 和 b 的偏導數 
  12.             delta_nabla_b, delta_nabla_w = self.backprop(x, y) 
  13.             # 累加儲存偏導值 delta_nabla_b 和 delta_nabla_w  
  14.             nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)] 
  15.             nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)] 
  16.         # 更新根據累加的偏導值更新 w 和 b,這里因為用了小樣本, 
  17.         # 所以 eta 要除于小樣本的長度 
  18.         self.weights = [w-(eta/len(mini_batch))*nw 
  19.                         for w, nw in zip(self.weights, nabla_w)] 
  20.         self.biases = [b-(eta/len(mini_batch))*nb 
  21.                        for b, nb in zip(self.biases, nabla_b)] 

下面這塊代碼是源碼最核心的部分,也即 BP 算法的實現,包含了前向傳輸和逆向反饋,前向傳輸在 Network 里有單獨一個方法(上面提到的 feedforward 方法),那個方法是用于驗證訓練好的神經網絡的精確度的,在下面有提到該方法。

  1. def backprop(self, x, y): 
  2.         """ 
  3.         :param x: 
  4.         :param y: 
  5.         :return: 
  6.         """ 
  7.         nabla_b = [np.zeros(b.shape) for b in self.biases] 
  8.         nabla_w = [np.zeros(w.shape) for w in self.weights] 
  9.         # 前向傳輸 
  10.         activation = x 
  11.         # 儲存每層的神經元的值的矩陣,下面循環會 append 每層的神經元的值 
  12.         activations = [x]  
  13.         # 儲存每個未經過 sigmoid 計算的神經元的值 
  14.         zs = []  
  15.         for b, w in zip(self.biases, self.weights): 
  16.             z = np.dot(w, activation)+b 
  17.             zs.append(z) 
  18.             activation = sigmoid(z) 
  19.             activations.append(activation) 
  20.         # 求 δ 的值 
  21.         delta = self.cost_derivative(activations[-1], y) * \ 
  22.             sigmoid_prime(zs[-1]) 
  23.         nabla_b[-1] = delta 
  24.         # 乘于前一層的輸出值 
  25.         nabla_w[-1] = np.dot(delta, activations[-2].transpose()) 
  26.         for l in xrange(2self.num_layers): 
  27.             # 從倒數第 **l** 層開始更新,**-l** 是 python 中特有的語法表示從倒數第 l 層開始計算 
  28.             # 下面這里利用 **l+1** 層的 δ 值來計算 **l** 的 δ 值 
  29.             z = zs[-l] 
  30.             sp = sigmoid_prime(z) 
  31.             delta = np.dot(self.weights[-l+1].transpose(), delta) * sp 
  32.             nabla_b[-l] = delta 
  33.             nabla_w[-l] = np.dot(delta, activations[-l-1].transpose()) 
  34.         return (nabla_b, nabla_w) 

接下來則是 evaluate 的實現,調用 feedforward 方法計算訓練好的神經網絡的輸出層神經元值(也即預測值),然后比對正確值和預測值得到精確率。

  1. def evaluate(self, test_data): 
  2.        # 獲得預測結果 
  3.        test_results = [(np.argmax(self.feedforward(x)), y) 
  4.                        for (x, y) in test_data] 
  5.        # 返回正確識別的個數 
  6.        return sum(int(x == y) for (x, y) in test_results) 

最后,我們可以利用這個源碼來訓練一個手寫數字識別的神經網絡,并輸出評估的結果,代碼如下:

  1. import mnist_loader 
  2. import network 
  3.  
  4. training_data, validation_data, test_data = mnist_loader.load_data_wrapper() 
  5. net = network.Network([7843010]) 
  6. net.SGD(training_data, 30103.0, test_data = test_data) 
  7. # 輸出結果 
  8. # Epoch 0: 9038 / 10000 
  9. # Epoch 1: 9178 / 10000 
  10. # Epoch 2: 9231 / 10000 
  11. # ... 
  12. # Epoch 27: 9483 / 10000 
  13. # Epoch 28: 9485 / 10000 
  14. # Epoch 29: 9477 / 10000 

可以看到,在經過 30 輪的迭代后,識別手寫神經網絡的精確度在 95% 左右,當然,設置不同的迭代次數,學習率以取樣數對精度都會有影響,如何調參也是一門技術活,這個坑就后期再填吧。

總結

神經網絡的優點:

網絡實質上實現了一個從輸入到輸出的映射功能,而數學理論已證明它具有實現任何復雜非線性映射的功能。這使得它特別適合于求解內部機制復雜的問題。

網絡能通過學習帶正確答案的實例集自動提取“合理的”求解規則,即具有自學習能力。

網絡具有一定的推廣、概括能力。

神經網絡的缺點:

對初始權重非常敏感,極易收斂于局部極小。

容易 Over Fitting 和 Over Training。

如何選擇隱藏層數和神經元個數沒有一個科學的指導流程,有時候感覺就是靠猜。

應用領域:

常見的有圖像分類,自動駕駛,自然語言處理等。

TODO

但其實想要訓練好一個神經網絡還面臨著很多的坑(譬如下面四條):

  • 如何選擇超參數的值,譬如說神經網絡的層數和每層的神經元數量以及學習率;
  • 既然對初始化權重敏感,那該如何避免和修正;
  • Sigmoid 激活函數在深度神經網絡中會面臨梯度消失問題該如何解決;
  • 避免 Overfitting 的 L1 和 L2正則化是什么。

參考

[1] 周志華 機器學習

[2] 斯坦福大學機器學習在線課程

[3] Parallel Distributed Processing (1986, by David E. Rumelhart, James L. McClelland), Chapter 8 Learning Internal Representations by Error Propagation

[4] How the backpropagation algorithm works

[5] Backpropagation Algorithm

[6] 鏈式求導法則,臺灣中華科技大學數位課程,Youtube 視頻,需要翻墻,順便安利一下他們的數學相關的視頻,因為做的都非常淺顯易懂

本文轉自雷鋒網,如需轉載請至雷鋒網官網申請授權,本文作者曾梓華

責任編輯:張子龍 來源: 雷鋒網
相關推薦

2017-04-17 13:10:09

神經網絡人工智能網絡

2020-12-08 20:20:15

神經網絡深度學習機器學習

2019-11-19 08:00:00

神經網絡AI人工智能

2017-05-31 13:23:41

神經網絡深度學習

2018-07-29 06:46:07

神經網絡RNN循環神經網絡

2025-03-31 08:50:00

模型量化神經網絡AI

2023-09-17 23:09:24

Transforme深度學習

2020-08-20 07:00:00

深度學習人工智能技術

2017-04-26 14:32:24

神經網絡人工智能對杭樣本

2017-11-29 13:55:55

神經網絡循環神經網絡RNN

2020-08-14 10:20:49

神經網絡人工智能池化層

2021-10-26 16:10:50

神經網絡AI算法

2018-12-19 10:05:15

LVSNginxHAProxy

2020-09-09 10:20:48

GraphSAGE神經網絡人工智能

2024-04-30 14:54:10

2019-11-06 17:00:51

深度學習神經網絡人工智能

2025-03-03 08:10:00

神經網絡深度學習人工智能

2017-08-21 10:00:23

遺傳算法Python生物學

2022-02-15 23:38:22

Python機器學習算法

2018-10-18 10:27:15

機器學習神經網絡python
點贊
收藏

51CTO技術棧公眾號

自由的xxxx在线视频| www毛片com| 极品尤物一区| 色婷婷精品久久二区二区蜜臀av | 国产精品igao视频网网址不卡日韩 | 色爱区综合激月婷婷| 一区二区日本| 天堂网在线中文| 美女脱光内衣内裤视频久久网站 | 婷婷精品国产一区二区三区日韩| 国产精品无码一区二区桃花视频| 好看的日韩av电影| 在线观看日韩欧美| 亚洲色偷偷色噜噜狠狠99网| 影视一区二区三区| 亚洲一区在线视频观看| 日韩成人av网站| 人妻与黑人一区二区三区| 免播放器亚洲一区| 7777免费精品视频| 精品一区在线观看视频| 日韩高清一级| 日韩欧美一区二区在线视频| 国产精品一区二区羞羞答答| av剧情在线观看| 综合亚洲深深色噜噜狠狠网站| 国产精品二区三区| 国产美女免费看| 日韩精品福利网| 97碰在线观看| 久久精品免费av| 中文字幕乱码亚洲无线精品一区| 亚洲午夜性刺激影院| 蜜桃色一区二区三区| 亚洲男男av| 欧美自拍丝袜亚洲| 浮妇高潮喷白浆视频| 欧美人与动牲性行为| 国产精品久久久久久久久搜平片 | 国产精品果冻传媒| 秋霞影院一区| 制服丝袜在线91| 在线看免费毛片| 欧美成人xxxx| 欧美三级资源在线| 手机在线看福利| 天天综合网天天| 色偷偷成人一区二区三区91 | 欧美办公室脚交xxxx| 一区二区三区色| 久久av秘一区二区三区| 午夜视频在线观看免费视频| 久久综合九色综合97_久久久| 国产高清精品一区二区三区| 不卡av中文字幕| 国产精品一卡二卡| 成人资源视频网站免费| 亚洲精品字幕在线| 成人黄页在线观看| 极品日韩久久| 瑟瑟在线观看| 国产视频一区二区在线| 欧美性大战久久久久| 理论视频在线| 国产精品美女久久久久久久| 一区二区三区|亚洲午夜| 日本精品在线| 亚洲免费三区一区二区| 成人在线播放网址| 女人高潮被爽到呻吟在线观看 | 男人揉女人奶房视频60分 | 天堂av在线免费观看| 99久久伊人精品| 免费日韩av电影| youjizz在线播放| 国产精品第四页| 污污污污污污www网站免费| 黄页网站在线| 婷婷成人激情在线网| 亚洲精品乱码久久久久久自慰| 桃花岛成人影院| 欧美猛男男办公室激情| 男人女人拔萝卜视频| 成人免费直播在线| 亚洲一二三在线| 欧美丰满熟妇bbbbbb| 亚洲精品极品| 国产精品久久一| 亚洲av无码国产精品久久不卡| 不卡av免费在线观看| 欧美尤物一区| 在线视频观看国产| 色婷婷综合激情| 热久久久久久久久| 人人香蕉久久| 欧美理论电影在线播放| 亚洲免费激情视频| 看片的网站亚洲| 国产精品我不卡| 97人人在线| 五月婷婷欧美视频| 91 在线视频观看| 久久综合五月婷婷| yellow中文字幕久久| 日韩久久精品视频| 久久成人羞羞网站| 蜜桃久久精品乱码一区二区 | 中文字幕制服丝袜一区二区三区| 17c丨国产丨精品视频| free欧美| 亚洲国产精品va在线看黑人| 日本午夜精品视频| 亚洲欧美日韩精品一区二区| 91久久精品国产| 韩国免费在线视频| 性感美女久久精品| 欧美污在线观看| 欧美亚洲高清| 欧美性一区二区三区| 性猛交富婆╳xxx乱大交天津| 国产午夜精品久久久久久久 | 免费欧美在线视频| 精品不卡一区二区三区| av香蕉成人| 欧美日韩国产不卡| 日本高清黄色片| 免费在线亚洲| 精品在线视频一区二区| 欧洲黄色一区| 正在播放一区二区| 亚洲精品成人av久久| 久久精品亚洲一区二区| 狠狠久久综合婷婷不卡| 青春草视频在线| 欧美一区二区三区在线观看| 天天干天天舔天天操| 性8sex亚洲区入口| 久久国产精品一区二区三区四区| 色呦呦在线播放| 欧美一区二区三区公司| 国产wwwwxxxx| 久久精品国产亚洲一区二区三区| 欧美在线一二三区| 亚洲欧洲美洲av| 精品亚洲精品福利线在观看| 国产精品美女毛片真酒店| 国产传媒日韩欧美成人| 老司机午夜免费福利视频| 国产精一区二区| 欧美成年人网站| 国产99视频在线| 亚洲综合精品久久| 国产精品九九视频| 一区二区三区四区五区精品视频| 国产精品一区二区在线观看 | 青青草视频在线观看| 高跟丝袜一区二区三区| av直播在线观看| 老牛嫩草一区二区三区日本| 日韩久久在线| 亚洲国产91视频| 久久久电影免费观看完整版| 国产三级三级在线观看| 亚洲精品国产视频| 蜜桃视频无码区在线观看| 尹人成人综合网| 国产伦精品一区二区三区高清| 91九色在线播放| 日韩久久精品电影| 影音先锋国产在线| 亚洲精品久久嫩草网站秘色| 中文字幕人妻一区二区三区| 日韩亚洲国产欧美| 日韩一区二区三区资源| 欧美大片在线观看一区二区| 国产免费一区视频观看免费| 国产高清一级毛片在线不卡| 欧美性生活久久| www成人啪啪18软件| 狠狠色丁香婷综合久久| 永久免费看av| 日本一道高清一区二区三区| 日产日韩在线亚洲欧美| 一级毛片视频在线观看| 日韩美一区二区三区| 久久夜色精品国产噜噜亚洲av| 国产日韩高清在线| 天天色天天干天天色| 国产视频亚洲| 日本黄色a视频| 精品国产一区二区三区不卡蜜臂| 日本视频久久久| 成人片在线看| 亚洲欧美日韩区| www.天堂在线| 在线中文字幕一区| 欧美又粗又大又长| 国产婷婷精品av在线| 亚洲综合中文网| 日本亚洲欧美天堂免费| 成人在线视频一区二区三区| 精品视频网站| 国产一区免费视频| 精品一区二区三区亚洲| 日韩av电影在线播放| 亚洲按摩av| 伊人激情综合网| 天堂v在线观看| 91精品久久久久久久99蜜桃| 九九九在线观看| 一区二区三区四区视频精品免费| 国产ts在线播放| 大胆亚洲人体视频| 想看黄色一级片| 丝袜美腿一区二区三区| 欧美日韩黄色一级片| 一区二区蜜桃| 亚洲午夜精品国产| 亚洲人挤奶视频| 精品国产一区二区三区四区vr| 国产95亚洲| 国产精品亚洲美女av网站| 中文字幕人成乱码在线观看| 欧美激情视频一区二区| 黄网站在线播放| 一区二区三区天堂av| 久青草国产在线| 日韩av在线一区| 蜜臀av免费在线观看| 欧美一级日韩一级| 91肉色超薄丝袜脚交一区二区| 色www精品视频在线观看| 欧美成人精品欧美一级乱黄| 亚洲精品水蜜桃| 日韩成人短视频| 中文幕一区二区三区久久蜜桃| 手机av免费看| ww久久中文字幕| 中文字字幕码一二三区| 99久久久免费精品国产一区二区| 亚洲欧美激情一区二区三区| 激情丁香综合五月| 肉色超薄丝袜脚交| 国产精品一级黄| 能看毛片的网站| 国产成人精品午夜视频免费| 国内av免费观看| 国产乱人伦偷精品视频不卡| 日本亚洲一区二区三区| 国产伦精品一区二区三区免费迷 | 欧美xxxx黑人又粗又长精品| 超碰成人在线免费| 国产在线欧美日韩| 日韩有码中文字幕在线| 欧美lavv| 国产一区二区三区四区五区| 日韩欧美精品久久| 日本电影一区二区| 中文字幕欧美人与畜| 91中文字幕精品永久在线| 亚洲在线不卡| 影音先锋日韩精品| 国产精品一线二线三线| 免费视频一区| 人人爽人人av| 久久99热99| 日批视频在线看| 波多野结衣中文一区| 右手影院亚洲欧美| 国产精品美女一区二区三区| 在线看的片片片免费| 亚洲女厕所小便bbb| 一级aaa毛片| 色综合色狠狠天天综合色| 中文字幕av在线免费观看| 欧美酷刑日本凌虐凌虐| 蜜臀av午夜精品| 亚洲性视频网站| av在线免费观看网址| 久久久久久欧美| 成人午夜精品| 99国产在线视频| 亚洲婷婷伊人| 99热这里只有精品7| 激情视频一区二区三区| 成人一区二区三| 国产毛片精品视频| 人妻在线日韩免费视频| 国产精品高清亚洲| 精品午夜福利视频| 欧亚洲嫩模精品一区三区| 精品国产av 无码一区二区三区| 亚洲国产美女精品久久久久∴| 韩国精品视频| 久久久久中文字幕| 岛国精品在线| 国产一区二区在线网站| 99国内精品久久久久久久| 3d动漫一区二区三区| 久久99精品久久久| 爱爱免费小视频| 亚洲精品久久嫩草网站秘色| 波多野结衣一区二区三区在线| 日韩欧美激情在线| www免费网站在线观看| 欧美激情在线播放| 9.1麻豆精品| 任我爽在线视频精品一| 亚洲先锋成人| 蜜桃福利午夜精品一区| 久久久蜜桃精品| 亚洲综合一二三| 欧美大胆人体bbbb| 毛片在线不卡| 国产va免费精品高清在线| 高潮按摩久久久久久av免费| 国产成人三级视频| 久久黄色级2电影| 免费网站在线高清观看| 欧美日韩国产限制| 欧美一级淫片aaaaaa| 久久亚洲精品一区| 欧美大陆国产| 日韩国产高清一区| 久久狠狠婷婷| 亚洲成人日韩在线| 精品国产鲁一鲁一区二区张丽 | 亚洲精品天天看| av老司机免费在线| 99精品国产一区二区| 亚洲啊v在线观看| 亚洲 欧美 另类人妖| 久久久99精品免费观看| 五月激情六月丁香| 日韩福利视频在线观看| 国产无遮挡裸体视频在线观看| 96pao国产成视频永久免费| 久久久久蜜桃| 善良的小姨在线| 夜色激情一区二区| 亚洲精品国产片| 欧美肥老妇视频| 激情视频极品美女日韩| 九色自拍视频在线观看| 成人福利视频在线看| 久久夜靖品2区| 日韩精品视频在线观看免费| 忘忧草在线日韩www影院| 久久综合中文色婷婷| 久久久久国产一区二区| 丰满人妻一区二区三区大胸| 麻豆久久一区| 一道精品一区二区三区| 久久99日本精品| eeuss影院一区二区三区| 麻豆精品免费视频| 色综合色狠狠综合色| 精品欧美不卡一区二区在线观看 | 激情视频在线观看一区二区三区| 国内精品美女在线观看| 精品少妇人妻av一区二区三区| 亚洲国产一区二区视频| 天天干在线观看| 国产91在线播放九色快色| 国产日产精品一区二区三区四区的观看方式 | 91在线观看免费| 国内在线观看一区二区三区| 李丽珍裸体午夜理伦片| 日韩欧美国产激情| 91精彩视频在线观看| 91成人免费视频| 亚洲精一区二区三区| 一区二区黄色片| 欧美日韩一卡二卡| 欧美xxxx黑人又粗又长| 九色91在线视频| 日本不卡中文字幕| 青青草手机在线观看| 日韩精品中文字幕有码专区| 日本h片久久| 日本人妻伦在线中文字幕| 2024国产精品视频| 在线观看免费中文字幕| 欧美老女人xx| 亚洲精品进入| 国产精品探花在线播放| 动漫精品一区二区| 黄色免费在线看| 久久riav| 激情文学综合丁香| 久草手机在线视频| 操日韩av在线电影| 亚洲国产精品嫩草影院久久av| 天天色综合天天色| 亚洲成人av电影在线| www免费网站在线观看| 狠狠干一区二区| 国产专区欧美精品| 中文字幕天堂在线| 97精品在线视频|