成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對(duì)Transformer中位置編碼的可視化理解

發(fā)布于 2025-6-9 00:25
瀏覽
0收藏

了解位置編碼背后的數(shù)學(xué)原理和直覺

Transformer是一種深度學(xué)習(xí)架構(gòu),它利用注意力機(jī)制來學(xué)習(xí)數(shù)據(jù)元素之間的關(guān)系。它由一個(gè)編碼器和一個(gè)解碼器組成,與傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)或卷積神經(jīng)網(wǎng)絡(luò)(CNN)不同,它可以并行處理輸入序列,而不依賴于順序處理。Transformer模型的一個(gè)重要組成部分是位置編碼。這種方法能夠?qū)⑽恢眯畔⑻砑拥皆~嵌入中,使模型能夠理解序列中單詞的順序。這一點(diǎn)至關(guān)重要,因?yàn)槟J(rèn)情況下,Transformer是并行處理模型,它本身并不理解語言的順序性。在本文中,我們將描述位置編碼背后的直覺。此外,我們旨在使用Python對(duì)位置編碼背后的數(shù)學(xué)概念進(jìn)行可視化理解。。

位置編碼

在自然語言處理中,句子中單詞的位置或順序非常重要,因?yàn)樗?guī)定了句子的語法和語義。循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)按順序處理句子,這使它們能夠考慮單詞的順序。然而,這種順序處理存在一些缺點(diǎn)。它可能會(huì)使訓(xùn)練RNN的計(jì)算成本很高,特別是對(duì)于長句子。此外,RNN可能會(huì)受到梯度消失問題的影響,即在網(wǎng)絡(luò)處理更多單詞時(shí),句子前面部分的信息會(huì)被稀釋或丟失。

相反,Transformer架構(gòu)使用多頭自注意力機(jī)制,這使得它能夠同時(shí)處理句子中的所有單詞,而不是按順序處理。這種并行處理可以使訓(xùn)練過程更快,并且不太容易受到梯度消失問題的影響。然而,由于所有單詞都是同時(shí)處理的,Transformer模型無法感知句子中單詞的順序,因此它需要一個(gè)額外的機(jī)制來跟蹤單詞的順序。

位置編碼是一種將單詞順序信息注入Transformer模型的關(guān)鍵機(jī)制。圖1顯示了位置編碼在Transformer架構(gòu)中的位置。它分別應(yīng)用于輸入和輸出嵌入,在它們進(jìn)入編碼器和解碼器之前。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

它向每個(gè)嵌入添加一個(gè)向量,該向量表示單詞在句子中的位置,如圖2所示。輸入句子首先進(jìn)行分詞,也就是說,它被分解為單個(gè)單詞或子詞單元。然后,每個(gè)詞元被轉(zhuǎn)換為一個(gè)嵌入向量,該向量表示該詞元的含義。接下來,對(duì)于每個(gè)詞元,生成一個(gè)位置編碼向量。這個(gè)向量僅由詞元在句子中的位置決定,因此,不同的位置會(huì)得到不同的唯一向量。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

嵌入向量和相應(yīng)的位置編碼向量按元素相加。結(jié)果是一個(gè)具有位置感知的嵌入向量,它同時(shí)攜帶了詞元的含義和位置信息。這些具有位置感知的向量隨后被發(fā)送到Transformer的編碼器和解碼器部分(圖1)。

現(xiàn)在讓我們看看位置編碼是如何定義的。我們知道位置編碼是一個(gè)添加到詞元嵌入向量的向量。因此,它們應(yīng)該具有相同數(shù)量的元素。讓我們假設(shè)嵌入向量的維度是一個(gè)由??d_model???表示的偶數(shù)。所以,位置編碼向量將具有相同的維度。假設(shè)??pos??是一個(gè)整數(shù)變量,表示序列中詞元的位置。我們還假設(shè)它從0開始(圖3)。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

設(shè)??PE_pos???為位置??pos???處詞元的位置編碼向量。我們知道它是一個(gè)具有??d_model???個(gè)元素的向量。假設(shè)??j???是這個(gè)向量中元素的索引,并且讓??j???從0開始。現(xiàn)在,??PE_pos???在索引??j = 2i???和??j = 2i + 1??處的元素定義如下:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

由于??j???從0開始,??i??的范圍是(0 \dots d_{model}/2 - 1)。使用這些公式,我們現(xiàn)在可以為詞元?jiǎng)?chuàng)建整個(gè)位置編碼向量:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

但是為什么我們要使用三角函數(shù)來構(gòu)建位置編碼向量呢?為什么我們要在這個(gè)向量中配對(duì)正弦和余弦函數(shù)呢?三角函數(shù)具有周期性,這意味著它們?cè)谝?guī)則的間隔內(nèi)重復(fù)其值。周期性可以用來設(shè)計(jì)一個(gè)計(jì)數(shù)器。

老式的汽油泵通常配備機(jī)械計(jì)數(shù)器來顯示已分配的燃油量。這些計(jì)數(shù)器使用齒輪和輪子等物理機(jī)制來跟蹤燃油流量,以加侖或升為單位顯示總量。計(jì)數(shù)器本身通常有一系列旋轉(zhuǎn)的輪子,其邊緣標(biāo)有數(shù)字0到9。最右邊的輪子在每次事件發(fā)生時(shí)移動(dòng)一個(gè)增量。當(dāng)它完成一次旋轉(zhuǎn)時(shí),它會(huì)回到0,但會(huì)使左邊的下一個(gè)輪子移動(dòng)一個(gè)增量(圖4)。同樣,當(dāng)每個(gè)輪子達(dá)到9并移動(dòng)到0時(shí),左邊相鄰的輪子會(huì)移動(dòng)一個(gè)增量。因此,每個(gè)輪子在從9回到0時(shí)都表現(xiàn)出周期性行為。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

圖5展示了一個(gè)類似的機(jī)械計(jì)數(shù)器機(jī)制,其中使用指針而不是輪子來顯示每個(gè)數(shù)字。當(dāng)然,所有指針都同時(shí)移動(dòng),類似于時(shí)鐘的指針。然而,每個(gè)指針的移動(dòng)速度都比左邊相鄰的指針快。當(dāng)每個(gè)指針完成一次旋轉(zhuǎn)并回到0時(shí),左邊的下一個(gè)指針會(huì)移動(dòng)一個(gè)增量。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

公式2中的位置編碼向量實(shí)現(xiàn)了一種類似的機(jī)制來對(duì)序列中的詞元進(jìn)行計(jì)數(shù)。為了理解這種機(jī)制,我們首先繪制一個(gè)以原點(diǎn)為中心、半徑為1的單位圓,如圖6所示。

設(shè)(p_x)和(p_y)表示單位圓上一點(diǎn)(p)的坐標(biāo),并且設(shè)從原點(diǎn)到(p)的射線與正(x)軸形成一個(gè)角度(\theta)。現(xiàn)在我們可以使用(\theta)來找到(p)的坐標(biāo):

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

我們現(xiàn)在可以使用這個(gè)概念來理解位置編碼公式。在公式1中,每對(duì)余弦和正弦函數(shù)可以表示單位圓上一個(gè)點(diǎn)的位置(圖7)。因此,位置編碼向量在某種程度上類似于圖5中所示的機(jī)械計(jì)數(shù)器。在這里,每對(duì)正弦和余弦函數(shù)扮演著圖5中指針的角色。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

現(xiàn)在我們已經(jīng)理解了位置編碼,我們可以在Python中實(shí)現(xiàn)它。清單1中的??positional_encoding()???函數(shù)創(chuàng)建給定序列的位置編碼向量。請(qǐng)注意,我們只需要知道序列的長度(由??max_len???表示的詞元數(shù)量)和嵌入向量的維度(??d_model??),就可以創(chuàng)建公式1中的位置編碼向量。詞元本身及其相應(yīng)的嵌入向量不會(huì)改變位置編碼向量。

# 清單1
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle

def positional_encoding(d_model, max_len):
    pos_arr = np.arange(0, max_len).reshape(-1, 1)
    i_arr = np.arange(0, d_model, 2)
    w = 1 / 10000**(2*i_arr/d_model)
    pe = np.zeros((max_len, d_model))
    pe[:, 0::2] = np.sin(pos_arr*w)
    pe[:, 1::2] = np.cos(pos_arr*w)
    return pe

接下來,我們可以使用這個(gè)函數(shù)來創(chuàng)建一個(gè)有5個(gè)詞元且??d_model = 6??的序列的位置編碼向量。

# 清單2
pe = positional_encoding(6, 5)
np.round(pe, 4)

array([[ 0.    ,  1.    ,  0.    ,  1.    ,  0.    ,  1.    ],
       [ 0.8415,  0.5403,  0.0022,  1.    ,  0.    ,  1.    ],
       [ 0.9093, -0.4161,  0.0043,  1.    ,  0.    ,  1.    ],
       [ 0.1411, -0.99  ,  0.0065,  1.    ,  0.    ,  1.    ],
       [-0.7568, -0.6536,  0.0086,  1.    ,  0.    ,  1.    ]])

??positional_encoding()???的輸出是一個(gè)二維數(shù)組,其中每一行給出了序列中一個(gè)詞元的位置編碼向量。清單3可視化了一個(gè)長度為7且??d_model = 20??的給定序列的位置編碼向量。我們采用與圖7相同的可視化方法,結(jié)果如圖8所示。

# 清單3
d_model = 20
max_len = 7
pe = positional_encoding(d_model, max_len)
fig, ax = plt.subplots(nrows=max_len, ncols=int(d_model/2),
                       figsize=(12, 11), sharex=True,sharey=True)
fig.subplots_adjust(wspace=0.1, hspace=0.005)
ax = ax.flatten()
r_array = np.arange(1, d_model/2+1)
i = 0
for token in pe:
    points = token.reshape(-1,2)
    for j in range(len(points)):
        ax[i].axhline(0, color='grey', linewidth=0.5)
        ax[i].axvline(0, color='grey', linewidth=0.5)
        circle = Circle((0, 0), 1, facecolor='none',
                        edgecolor='black', linewidth=0.5)
        ax[i].add_patch(circle)
        ax[i].scatter(points[j, 0], points[j,1], s=15)
        ax[i].set_aspect('equal')
        ax[i].set_aspect('equal')
        i += 1
for i in range(0, max_len):
    ax[i*int(d_model/2)].set_ylabel('Pos='+str(i), labelpad=20,
                                     fnotallow=10, rotatinotallow=0)
for i in range(0, int(d_model/2)):
    ax[i].set_title('j={},{}'.format(2*i, 2*i+1), pad=12, fnotallow=10)
plt.show()

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

如你所見,它是一個(gè)由圓圈組成的二維數(shù)組。這個(gè)數(shù)組中的每一行代表一個(gè)詞元的位置編碼向量。因此,第一行代表第一個(gè)詞元(??Pos=0???),第二行代表第二個(gè)詞元(??Pos=1???),依此類推。在每一行中,我們有10個(gè)圓圈(因?yàn)??d_model = 20???),并且每個(gè)圓圈代表位置編碼向量中的一對(duì)正弦和余弦函數(shù)(參考圖7)。例如,最左邊一列的圓圈代表詞元位置編碼向量的前兩個(gè)元素(圖7中??j = 0,1???),最左邊最后一列的圓圈代表這個(gè)向量的最后兩個(gè)元素(圖7中??j = d_model - 2, d_model - 1??)。

我們還觀察到,隨著詞元位置(??pos???)的增加,第一個(gè)圓圈上的點(diǎn)(對(duì)應(yīng)于??j = 0,1???)開始移動(dòng),并且它的移動(dòng)速度比第二個(gè)圓圈上的點(diǎn)(對(duì)應(yīng)于??j = 2,3???)快。實(shí)際上,在每一列中,圓圈上的點(diǎn)的移動(dòng)速度都比右邊相鄰列的點(diǎn)快。這是因?yàn)樵诠?中,正弦和余弦參數(shù)與??i???成反比,并且增加??i??會(huì)降低正弦和余弦函數(shù)的頻率。

位置編碼的數(shù)學(xué)性質(zhì)

公式2中定義的位置編碼向量具有一些有趣的數(shù)學(xué)性質(zhì),我們將在本節(jié)中討論。首先,讓我們計(jì)算位置編碼向量的長度。像

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

這樣的向量的長度定義為:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

現(xiàn)在,我們可以計(jì)算位置編碼向量的長度,如公式2所示:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

其中使用了以下三角恒等式來推導(dǎo)公式3:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

結(jié)果表明,位置編碼向量的長度與??pos??無關(guān),并且對(duì)于所有詞元都是相同的。由于所有向量的長度都相同,重要的是它們之間的角度。假設(shè)我們有兩個(gè)向量(\mathbf{u})和(\mathbf{v}),它們之間的角度是(\theta)。那么有:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

這里,(\mathbf{u} \cdot \mathbf{v})是(\mathbf{u})和(\mathbf{v})的點(diǎn)積,也可以寫成

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

其中(\mathbf{u}^T)是(\mathbf{u})的轉(zhuǎn)置。(\cos(\theta))項(xiàng)稱為向量(\mathbf{u})和(\mathbf{v})的余弦相似度。現(xiàn)在,我們可以計(jì)算

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

我們從公式4開始:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

為了計(jì)算這個(gè)公式的分子,我們可以寫:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

這個(gè)結(jié)果可以使用和差化積恒等式進(jìn)行簡化:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

得到:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

我們得出結(jié)論,公式5的分子與??pos???無關(guān)。我們還看到它的分母與??pos???無關(guān)。因此,??PE_pos???和??PE_(pos + k)???之間的角度僅取決于??k???和??d_model???,而與??pos??無關(guān):

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

這意味著,對(duì)于給定的(k)值,(PE_{pos})和(PE_{(pos + k)})之間的夾角始終保持不變,而與(pos)的值無關(guān)。讓我們來看一個(gè)例子以闡明這些結(jié)論。清單4將一個(gè)長度為12且(d_model = 2)的給定序列的位置編碼向量進(jìn)行了可視化呈現(xiàn)。在這種情況下,每個(gè)詞元的位置編碼向量僅由兩個(gè)元素組成,這使得整個(gè)向量可以表示為單位圓上的一個(gè)點(diǎn)。這次,所有詞元對(duì)應(yīng)的點(diǎn)都繪制在同一個(gè)圓上。結(jié)果如圖9所示。

# 清單4
margin = 0.03
pe = positional_encoding(2, 12)  
fig = plt.figure(figsize=(7,7))
ax = fig.add_subplot(1, 1, 1) 
circle = Circle((0, 0), 1, facecolor='none', edgecolor='black', linewidth=0.5)
ax.add_patch(circle)
for i in range(len(pe)):
    plt.scatter(pe[i, 0], pe[i,1], s=50, label=str(i))
    plt.plot([0, pe[i, 0]],[0,pe[i,1]])
    plt.text(pe[i, 0]+margin, pe[i,1]+margin, "PE"+str(i), fnotallow=14)
ax.set_aspect('equal')
plt.xlim([-1.2, 1.2])
plt.ylim([-1.2, 1.2])
plt.show()

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

對(duì)于每一個(gè)位置編碼向量,我們可以看到:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

我們還發(fā)現(xiàn),對(duì)于所有的(pos)值,(PE_{pos})和(PE_{(pos + k)})之間的夾角都是相同的。例如,(PE_0)和(PE_1)之間的夾角與(PE_3)和(PE_4)之間的夾角是一樣的。同樣,(PE_0)和(PE_2)之間的夾角等于(PE_1)和(PE_3)之間的夾角。當(dāng)(d_model>2)時(shí),我們無法繪制位置編碼向量。然而,本節(jié)中得到的結(jié)論仍然是有效的。

(PE_{pos})和(PE_{(pos + k)})之間的夾角取決于(k)且與(pos)無關(guān)這一事實(shí),使得Transformer模型能夠通過相對(duì)位置來學(xué)習(xí)關(guān)注。例如,當(dāng)前詞元與下一個(gè)詞元之間的夾角總是相同的,無論當(dāng)前詞元的位置或者整個(gè)序列的長度如何。以下是引入Transformer模型的原始論文[1]中的一段引用:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

但是這句話的數(shù)學(xué)含義是什么呢?假設(shè)我們有公式2中給出的位置編碼向量。我們知道這個(gè)向量有(d_model)個(gè)元素。現(xiàn)在,基于上述結(jié)論,存在一個(gè)(d_model×d_model)的矩陣(M_k),它取決于(k)(以及(d_model)),但與(pos)無關(guān),并且滿足以下等式:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

這個(gè)矩陣就是上述引用中提到的線性函數(shù)。我們可以很容易地證明,這個(gè)結(jié)論也可以推導(dǎo)出公式6。實(shí)際上,公式7表明,對(duì)于給定的(k)值,(PE_{pos})和(PE_{(pos + k)})之間的夾角保持不變,而與(pos)的值無關(guān)。在公式7中,(M_k)是一個(gè)旋轉(zhuǎn)矩陣,它將(PE_{pos})旋轉(zhuǎn)一定的角度(該角度取決于(k)),并將其轉(zhuǎn)換為(PE_{pos + k})。圖10展示了一個(gè)例子。在這里,矩陣(M_2)將(PE_0)旋轉(zhuǎn)到(PE_2)。由于這個(gè)矩陣與(pos)無關(guān),它會(huì)以相同的角度旋轉(zhuǎn)任何其他位置編碼向量。例如,它以相同的角度旋轉(zhuǎn)(PE_3)來得到(PE_5)。因此,(PE_{pos})和(PE_{pos + 2})之間的夾角總是相同的。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

清單5創(chuàng)建了一個(gè)熱圖,展示了一個(gè)長度為20且(d_model = 64)的給定序列中所有位置編碼向量的成對(duì)點(diǎn)積。該熱圖如圖9所示。

# 清單5
pe = positional_encoding(64, 20)  
dist = pe @ pe.T
plt.imshow(dist, cmap='jet', interpolatinotallow='nearest')  
plt.colorbar()
plt.title('Heatmap of Pairwise Dot Products')
plt.xlabel('Pos')
plt.ylabel('Pos')
plt.xticks(np.arange(0, 20, step=2))
plt.yticks(np.arange(0, 20, step=2))
plt.show()

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

這個(gè)熱圖是公式6的一種體現(xiàn)。由于所有的位置編碼向量長度相同,我們從公式5可以得出:

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

因此,一對(duì)位置編碼向量的點(diǎn)積與它們之間的夾角成反比(因?yàn)?\cos(\theta))與(\theta)成反比)。我們可以看到,熱圖矩陣中每條對(duì)角線上的元素顏色是相同的。這是因?yàn)閷?duì)于特定的(k)值,(PE_{pos})和(PE_{(pos + k)})之間的夾角保持不變,所以它們的點(diǎn)積也不變。如圖12所示,每條對(duì)角線代表一個(gè)特定的(k)值。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

這個(gè)熱圖還有另一個(gè)有趣的特征。當(dāng)兩個(gè)詞元的位置距離變遠(yuǎn)時(shí),我們預(yù)期它們的位置編碼向量之間的夾角會(huì)增大,而它們的點(diǎn)積會(huì)減小(點(diǎn)積與(\cos(\theta))成正比,而(\cos(\theta))與(\theta)成反比)。然而,熱圖顯示,兩個(gè)詞元的位置編碼向量的點(diǎn)積并不總是隨著它們位置距離的變遠(yuǎn)而減小。

圖13展示了一個(gè)例子。如果我們沿著熱圖矩陣的第一行觀察,點(diǎn)積呈現(xiàn)出周期性變化,并且會(huì)表現(xiàn)出振蕩行為。這意味著這些向量之間的夾角會(huì)反復(fù)增大和減小。這可能看起來有悖直覺,但原因在于正弦和余弦函數(shù)的周期性。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

為了解釋原因,我們繪制了圖8中位置編碼向量的成對(duì)點(diǎn)積的熱圖,其中序列長度為7,且(d_model = 20)。在這里,對(duì)應(yīng)于((j = 0,1))的圓上的點(diǎn)移動(dòng)得很快。在(PE_3)中,這個(gè)點(diǎn)與它在(PE_0)中的原始位置相距很遠(yuǎn),因此,(PE_0)和(PE_3)的點(diǎn)積很小(向量之間的夾角很大)。然而,在(PE_6)中,這個(gè)點(diǎn)幾乎回到了它的原始位置,而第二個(gè)圓((j = 2,3))上的點(diǎn)并沒有移動(dòng)那么多。結(jié)果,(PE_0)和(PE_6)之間的夾角變小了,并且它們的點(diǎn)積相比(PE_0)和(PE_3)的點(diǎn)積增大了。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

增大(d_model)可以減輕這種周期性行為。圖15展示了一個(gè)長度為20且(d_model = 512)的給定序列中所有位置編碼向量的成對(duì)點(diǎn)積的熱圖。現(xiàn)在,當(dāng)兩個(gè)向量的(pos)差值增大時(shí),它們的點(diǎn)積會(huì)持續(xù)減小。

對(duì)Transformer中位置編碼的可視化理解-AI.x社區(qū)

參考文獻(xiàn)

[1] Vaswani, Ashish; Shazeer, Noam; Parmar, Niki; Uszkoreit, Jakob; Jones, Llion; Gomez, Aidan N; Kaiser, ?ukasz; Polosukhin, Illia. 2017.Attention is All you Need .In Advances in Neural Information Processing Systems . Vol. 30. Curran Associates, Inc.arXiv :1706.03762.

本文轉(zhuǎn)載自????柏企閱文???,作者:tailet

收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
主站蜘蛛池模板: 国产69精品久久99不卡免费版 | 日韩国产三区 | 一级免费看片 | 免费亚洲婷婷 | 亚洲网在线 | 久国产视频 | 日韩成人 | 欧美大片一区二区 | 男人天堂午夜 | 狠狠爱视频 | 欧美久久电影 | 久久男人| 日本特黄a级高清免费大片 特黄色一级毛片 | 97色伦网 | 一区二区欧美在线 | 日韩精品无码一区二区三区 | 国产日韩精品一区二区三区 | 黄色一级大片在线免费看产 | 羞羞视频网站免费看 | 国产色网 | 国产一级特黄视频 | 国产精品资源在线观看 | 亚洲精品久久国产高清情趣图文 | 色爱综合 | 国产高清一二三区 | aaaaaa大片免费看最大的 | 国产视频一区二区 | 国产精品海角社区在线观看 | 亚洲欧洲日本国产 | 国产精品久久久久久久久久 | 91视频.| 一区二区不卡高清 | 一区二区三区四区在线 | 午夜播放器在线观看 | 黄免费在线 | 国外成人免费视频 | 亚洲国产一区视频 | 男人天堂久久 | 91婷婷韩国欧美一区二区 | 成人精品福利 | 国内精品一区二区三区 |