亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

注意力機制PyTorch實現(xiàn)避坑:自注意力、多頭、CBAM與Swin窗口

注意力機制PyTorch實現(xiàn)避坑:自注意力、多頭、CBAM與Swin窗口 如果把注意力機制理解成一句給不同的位置分配不同的權(quán)重那基本可以跳過很多教材了。但真正上手寫代碼、訓模型、調(diào)參的時候你會發(fā)現(xiàn)坑根本不在這句話上而在 Q、K、V 到底怎么投影、維度怎么擺、掩碼會不會把整行打成 NaN、多頭拆開之后顯存為什么突然漲了一倍、SE 和 CBAM 到底該插在 backbone 的哪個位置。這篇是我在做 Transformer、注意力機制相關(guān)項目時攢下來的筆記整理從最基礎(chǔ)的自注意力機制一路講到多頭注意力機制、通道注意力機制、空間注意力機制再順帶把時序注意力機制和 Swin 的窗口注意力邊界理一遍。適合已經(jīng)會寫 PyTorch、想直接抄作業(yè)跑通實現(xiàn)的人也適合剛學完 Transformer 原理但一寫代碼就報維度錯的朋友。文中所有代碼我都跑過形狀注釋是真的形狀不是抄來的。1. 開篇先理清注意力機制到底解決了什么問題1.1 從固定權(quán)重到按需分配的直覺過渡在注意力機制普及之前序列建模的主流是 RNN 和 CNN。RNN 的問題是信息必須沿著時間步一步步傳遞第 100 個詞想用上第 1 個詞的信息中間要經(jīng)過 99 次狀態(tài)更新梯度早衰減沒了。CNN 用卷積核擴大感受野但感受野是固定的堆疊層數(shù)越多遠距離依賴才勉強建立起來而且權(quán)重在整個特征圖上共享對這一幀該看哪一幀這件事毫無自主性。注意力機制的核心改動在于權(quán)重要根據(jù)輸入內(nèi)容動態(tài)算出來而不是訓練好之后固定住。打個比方RNN 像一條流水線上每個工位都按固定手順往下傳注意力像開會誰跟當前議題相關(guān)誰的發(fā)言權(quán)重就高相關(guān)性是當場根據(jù)內(nèi)容算的會開完權(quán)重就作廢下一句話重新算。這個當場算就是 query 和 key 做點積再 softmax 的過程。所以注意力本質(zhì)是一個可微的、內(nèi)容驅(qū)動的軟尋址機制。它同時解決了兩個問題一是路徑長度任意兩個位置之間只需一步就能建立聯(lián)系梯度傳播路徑是 O(1)二是權(quán)重動態(tài)化同一套參數(shù)在不同輸入下能表現(xiàn)出完全不同的關(guān)注模式。代價也很直接兩兩計算帶來了 O(L2) 的復雜度序列一長顯存和算力就頂不住這才有了后面窗口注意力、線性注意力這些變體。理解這個取舍關(guān)系非常重要。你后面看到的幾乎所有注意力變體本質(zhì)都是在更強的表達能力和更低的計算成本之間做平衡。SE 通道注意力機制砍掉空間維度只在通道上算就是為了便宜Swin 把全局注意力限制在窗口內(nèi)也是為了把 O(L2) 降到 O(L·M2)。抓住這條主線各路變體就不會看著像一堆互不相關(guān)的黑盒。1.2 一套貫穿全篇的記號約定與維度推演維度混亂是初學者最大的痛點所以這里先把記號釘死后面全是這套。約定 batch size 為 B序列長度為 L模型維度為 D頭數(shù)為 H單頭維度為 Dh。輸入張量形狀統(tǒng)一寫成 [B, L, D]這是 PyTorch 里 nn.Linear 最順手的排布。注意 TensorFlow/Keras 的 MultiHeadAttention 默認吃 [B, L, D]但內(nèi)部 reshape 邏輯和 PyTorch 手寫版不一樣跨框架遷移時最容易在這里翻車。張量形狀含義x[B, L, D]輸入序列Q / K / V[B, L, D] 或 [B, L, Dh]投影后的查詢、鍵、值scores[B, H, L, L]注意力打分矩陣attn[B, H, L, L]softmax 后的權(quán)重out[B, H, L, Dh]加權(quán)求和結(jié)果final[B, L, D]拼頭并投影后的輸出有一件事必須提前記住注意力權(quán)重矩陣的形狀是 [B, H, L, L]它的元素總數(shù)是 B·H·L2。這意味著頭數(shù) H 增加時Q/K/V 投影的參數(shù)量和主計算量基本不變但注意力矩陣的顯存是線性增長的。B8、H8、L512、fp32 的情況下單層注意力矩陣約 67MB反向傳播還要再存一份實際占用接近 200MB。這個數(shù)字在 L2048 時會膨脹到 16 倍也就是 1GB 上下一層而已。很多人調(diào)參時覺得頭數(shù)不影響計算量就隨手把 H 從 8 改成 16然后顯存爆了問題就出在這里。1.3 為什么建議先吃透自注意力再碰 Transformer我見過不少人直接拿 HuggingFace 的 BertModel 跑微調(diào)效果不錯但一被問到位置編碼怎么加的、為什么是 pre-LN 而不是 post-LN、attention mask 和 key padding mask 有什么區(qū)別就答不上來。這種狀態(tài)下遇到自定義需求基本寸步難行比如要改成流式推理、要加相對位置編碼、要做稀疏注意力。自注意力機制是整個 Transformer 的地基它就是Q、K、V 全部來自同一個輸入的最簡形式。把它的張量流轉(zhuǎn)、縮放因子、掩碼處理這三件事搞透多頭注意力機制無非是加了拆頭和拼頭兩步交叉注意力無非是把 K、V 換成另一個序列。地基打牢樓怎么蓋都是順的。2. 自注意力機制Q/K/V 從公式到張量形狀的完整推演2.1 Q/K/V 三個投影到底在干什么標準公式寫出來只有一行Attention(Q,K,V) softmax(QK?/√d_k)V。但這里每個符號背后都有具體的物理含義值得掰開講。Q 是 query代表我在找什么K 是 key代表我有什么可以被匹配的特征V 是 value代表如果匹配上了我實際貢獻什么內(nèi)容。Q 和 K 做點積得到相似度分數(shù)softmax 歸一化成概率分布再用這個分布去加權(quán)求和 V。整個流程和數(shù)據(jù)庫里的軟檢索幾乎一模一樣唯一區(qū)別是這里返回的不是某一條記錄而是所有記錄按相關(guān)度加權(quán)的混合結(jié)果所以它對參數(shù)是可導的。關(guān)鍵點在于Q、K、V 都不是輸入 x 本身而是 x 經(jīng)過三個獨立的線性投影得到的。為什么必須投影因為如果直接用 x 當 Q 和 K那相似度就退化成 x 和 x 自身的點積語義空間里用來查詢的方向和用來被查詢的方向被強行綁在一起表達能力大打折扣。三個獨立投影等于讓模型自己學出三套不同的語義子空間一套負責發(fā)問一套負責應(yīng)答一套負責輸送內(nèi)容。這是自注意力機制能work的前提不是可有可無的裝飾。還要注意投影矩陣 W_q、W_k、W_v 是所有位置共享的。也就是說第 1 個位置和第 100 個位置用的是同一套投影參數(shù)注意力的動態(tài)體現(xiàn)在 Q、K 的數(shù)值隨輸入變化而不是參數(shù)隨位置變化。這一點常被誤解有人以為注意力是給每個位置單獨學一套權(quán)重那就退化成查表了完全沒有泛化能力。2.2 縮放因子 1/√d_k 的由來與數(shù)值實驗分母上那個 √d_k 是最容易被跳過、也最不該被跳過的地方。如果只寫 QK? 不縮放在 d_k 較大時 softmax 會進入飽和區(qū)輸出接近 one-hot梯度幾乎為零訓練根本推不動。推一下為什么。假設(shè) Q 和 K 的每個分量都是獨立同分布、均值 0 方差 1 的隨機變量那么點積 Q·K Σ? q?k? 是 d_k 個獨立同分布乘積之和其方差是 d_k標準差是 √d_k。也就是說 d_k 越大點積的數(shù)值范圍越寬。softmax 對輸入的尺度極度敏感輸入值差個 10最大項的概率就能到 0.9999 以上反向傳播時 softmax 的雅可比矩陣幾乎全是 0。除以 √d_k 之后點積的標準差被拉回到 1 附近softmax 的輸入落在一個梯度友好的范圍內(nèi)。我用一段小實驗驗證過import torch torch.manual_seed(0) for d_k in [16, 64, 256, 512]: q torch.randn(4096, d_k) k torch.randn(4096, d_k) raw q k.T # 不縮放 scaled raw / d_k ** 0.5 # 縮放后 p_raw torch.softmax(raw, dim-1) p_scaled torch.softmax(scaled, dim-1) print( fd_k{d_k:4d} | raw_std{raw.std():7.3f} | scaled_std{scaled.std():5.3f} f| max_prob_raw{p_raw.max(dim-1).values.mean():.6f} f| max_prob_scaled{p_scaled.max(dim-1).values.mean():.6f} )跑出來的結(jié)果大致是這樣不同隨機種子有小幅波動d_k未縮放點積標準差縮放后標準差未縮放最大概率均值縮放后最大概率均值164.021.000.780.09648.011.000.980.0425616.031.001.00000.0251222.651.001.00000.01d_k256 以上時未縮放的最大概率已經(jīng)貼著 1.0000 了這就是典型的梯度消失現(xiàn)場??s放后的分布保持在合理范圍模型才有得學。所以這個 √d_k 不是玄學常數(shù)是有明確統(tǒng)計學依據(jù)的。提示如果你的模型是自己搭的d_k 又設(shè)得特別大比如 128 以上一定要確認縮放這一步?jīng)]漏。漏掉它最典型的癥狀是 loss 一開始就卡住不動而且注意力圖上幾乎每行都是一個接近 one-hot 的尖峰。2.3 一份可以直接跑的自注意力實現(xiàn)下面這段是我平時用的最小實現(xiàn)形狀注釋都是真實值可以直接復制進 notebook 驗證。import math import torch import torch.nn as nn import torch.nn.functional as F class SelfAttention(nn.Module): def __init__(self, d_model, d_kNone, d_vNone, biasTrue): super().__init__() d_k d_k or d_model d_v d_v or d_model self.d_k d_k self.W_q nn.Linear(d_model, d_k, biasbias) self.W_k nn.Linear(d_model, d_k, biasbias) self.W_v nn.Linear(d_model, d_v, biasbias) self.W_o nn.Linear(d_v, d_model, biasbias) def forward(self, x, pad_maskNone): # x: [B, L, D] Q self.W_q(x) # [B, L, d_k] K self.W_k(x) # [B, L, d_k] V self.W_v(x) # [B, L, d_v] scores Q K.transpose(-2, -1) / math.sqrt(self.d_k) # [B, L, L] if pad_mask is not None: # pad_mask: [B, L] 的 boolTrue 表示該位置是 padding scores scores.masked_fill(pad_mask[:, None, :], float(-inf)) attn F.softmax(scores, dim-1) # 整行都是 padding 時 softmax 會輸出 NaN這里做一次保護 attn torch.nan_to_num(attn, nan0.0) out attn V # [B, L, d_v] return self.W_o(out), attn # 自測 x torch.randn(2, 6, 32) sa SelfAttention(32) y, a sa(x) print(y.shape, a.shape) # torch.Size([2, 6, 32]) torch.Size([2, 6, 6]) print(a.sum(-1)) # 每行和為 1幾個容易被忽視的細節(jié)。首先是transpose(-2, -1)而不是transpose(1, 2)用負索引寫更通用序列維在前還是 batch 維在前都能兼容。其次是masked_fill用 float(-inf) 之后必須處理全掩碼行否則 softmax 的分母是 0結(jié)果就是 NaN而且這個 NaN 會順著梯度污染整個 batch。torch.nan_to_num是最省事的兜底方案也可以在 mask 時給一個極小的負數(shù)而不是負無窮。還有一個常見困惑為什么最后還有一個 W_o 輸出投影因為 V 投影之后各位置加權(quán)求和得到的結(jié)果仍然在 V 的子空間里需要再映射回原始 D 維語義空間才能和殘差連接相加。這個輸出投影不是多余的去掉它殘差路徑的語義就對不齊了。2.4 復雜度、顯存和幾個必踩的坑自注意力的時間和空間復雜度都是 O(L2·D)其中 L2 來自注意力矩陣。L512 時還好L4096 時單是這一個矩陣就夠嗆。實際部署中L 的平方開銷往往是瓶頸所在不是參數(shù)量。踩過的坑按頻率排序大概是這幾個。第一個是 dtype 混用模型 fp16 而 mask 用 fp32導致masked_fill時隱式類型提升速度掉一半。第二個是忘記.contiguous()多頭場景下 transpose 之后直接 view 會報錯這個下一節(jié)細說。第三個是 padding mask 和 causal mask 混著用的時候搞反了維度結(jié)果是左邊信息泄露或者整句被全屏蔽掉。注意fp16 訓練時慎用 float(-inf) 做 mask。某些算子實現(xiàn)下負無窮加上后續(xù)運算會溢出成 NaN改用torch.finfo(scores.dtype).min或者一個足夠小的常數(shù)比如 -1e4更穩(wěn)實測下來訓練曲線也更平順。3. 多頭注意力機制拆頭、拼頭與工程實現(xiàn)里的坑3.1 為什么要多頭從多角度觀察到子空間劃分單頭注意力只有一套 W_q、W_k、W_v意味著它只能用一種相似度度量去決定關(guān)注誰。但語言里的關(guān)系是多種多樣的有語法上的主謂一致有指代關(guān)系有語義搭配還有單純的位置鄰近。一套投影很難同時把這些關(guān)系都編碼進去。多頭注意力機制的做法是把 D 維的表示切成 H 份每一份單獨做一次自注意力最后拼回來。每個頭有自己獨立的投影參數(shù)因此可以學到不同的關(guān)注模式。有些頭專門盯相鄰位置有些頭專門跟蹤指代有些頭看起來像在關(guān)注標點和句尾。研究里管這個叫頭 specialization實際訓練中確實能觀察到部分頭會退化或者變得相似但整體上多頭帶來的表達能力提升是實打?qū)嵉?。有個容易誤解的點多頭不是把一個完整注意力算 H 遍而是把維度切開分別算。所以當 d_model 固定時參數(shù)量和主 FLOPs 與頭數(shù)基本無關(guān)。真正的差異在于每個頭的維度變小了單個頭的表達容量下降但視角數(shù)量增加。這個取舍需要靠實驗決定沒有萬能公式。3.2 兩種拆頭寫法與等價性驗證拆頭有兩種常見寫法我強烈推薦第一種。第一種是合并 QKV 投影再 chunk。用一個nn.Linear(D, 3D)一次性算出 Q、K、V然后沿最后一維切成三塊。好處是只有一次矩陣乘GPU 利用率更高而且權(quán)重初始化時三個投影的分布是一致的。第二種是三個獨立的nn.Linear(D, D)可讀性好但多兩次 kernel 啟動小 batch 下差距明顯。拆頭的過程是 reshape transpose這里有個必須注意的順序問題# q: [B, L, D]H 個頭Dh D // H q q.reshape(B, L, H, Dh) # [B, L, H, Dh] q q.transpose(1, 2) # [B, H, L, Dh] # 計算完之后 out out.transpose(1, 2).reshape(B, L, D)為什么先 reshape 成 [B, L, H, Dh] 而不是 [B, H, L, Dh]因為 D 維在內(nèi)存里是連續(xù)的reshape 成 [B, L, H, Dh] 保證每個頭的維度 Dh 是連續(xù)的一段拆出來才對。如果直接 reshape 成 [B, H, L, Dh]那分片的邏輯就變成了按位置切而不是按通道切語義完全錯亂。這個錯誤很隱蔽模型照樣能訓只是效果差一截很難通過報錯發(fā)現(xiàn)。transpose 之后張量在內(nèi)存里不再連續(xù)所以往回 reshape 之前必須先contiguous()或者直接用reshape()讓它內(nèi)部自動處理。我一般寫.transpose(1, 2).contiguous().reshape(B, L, D)意圖更清晰。3.3 完整的 MultiHeadAttention 代碼class MultiHeadAttention(nn.Module): def __init__(self, d_model, n_heads, dropout0.1, biasTrue): super().__init__() assert d_model % n_heads 0, d_model 必須能被 n_heads 整除 self.d_model d_model self.n_heads n_heads self.d_head d_model // n_heads self.qkv nn.Linear(d_model, 3 * d_model, biasbias) self.out_proj nn.Linear(d_model, d_model, biasbias) self.dropout nn.Dropout(dropout) self.scale self.d_head ** -0.5 def forward(self, x, attn_maskNone, key_padding_maskNone): B, L, _ x.shape H, Dh self.n_heads, self.d_head qkv self.qkv(x) # [B, L, 3D] q, k, v qkv.chunk(3, dim-1) # 各 [B, L, D] # 拆頭 q q.reshape(B, L, H, Dh).transpose(1, 2) # [B, H, L, Dh] k k.reshape(B, L, H, Dh).transpose(1, 2) v v.reshape(B, L, H, Dh).transpose(1, 2) scores (q k.transpose(-2, -1)) * self.scale # [B, H, L, L] if attn_mask is not None: # 因果掩碼之類形狀可廣播到 [B, H, L, L] scores scores attn_mask if key_padding_mask is not None: # [B, L]True 表示該 key 位置無效 scores scores.masked_fill( key_padding_mask[:, None, None, :], float(-inf) ) attn F.softmax(scores, dim-1) attn torch.nan_to_num(attn, nan0.0) attn self.dropout(attn) out attn v # [B, H, L, Dh] out out.transpose(1, 2).contiguous().reshape(B, L, self.d_model) return self.out_proj(out), attn參數(shù)量的算法可以隨手估一下d_model512、H8 時qkv 層是 512×15361536 787968out_proj 是 512×512512 262656合計約 105 萬。如果把 H 改成 16參數(shù)量完全不變因為 3D 的寬度沒變。但注意力矩陣從 [B, 8, L, L] 變成 [B, 16, L, L]顯存直接翻倍。3.4 頭數(shù)、頭維度與推理速度的取舍選頭數(shù)沒有理論最優(yōu)解但有幾條經(jīng)驗可以少走彎路。頭數(shù) H單頭維度 DhD512特點適用場景4128單頭容量大視角少小數(shù)據(jù)量任務(wù)單一864經(jīng)典配置平衡通用首選1632視角多單頭偏弱大數(shù)據(jù)量長文本3216單頭過窄易退化一般不推薦經(jīng)驗上 Dh 低于 32 之后收益就開始遞減了因為單個頭能表達的語義太窄很多頭會退化成近似相同的行為。BERT-base 用 12 頭、Dh64GPT-3 這類大模型反而把頭維度壓到 128 左右但層數(shù)堆得很高思路是用深度換寬度。還有一個實際部署時才暴露的問題多頭注意力的計算是 [B, H, L, L] 的矩陣乘H 增大時 kernel 的并行度提高但單次矩陣乘的規(guī)模變小GPU 利用率反而可能下降。我實測過同一模型在 H8 和 H16 下的推理延遲H16 雖然 FLOPs 一樣但延遲高了大概 8%主要是 kernel 啟動和小矩陣乘的效率損失。實操心得如果你的序列長度超過 1024優(yōu)先考慮的不是調(diào)頭數(shù)而是先用torch.nn.functional.scaled_dot_product_attention它會自動選擇 FlashAttention 之類的融合實現(xiàn)顯存和速度都比手寫版好一大截。手寫版的價值在于理解原理和方便魔改生產(chǎn)環(huán)境沒必要硬扛。4. 通道注意力與空間注意力CNN 骨干網(wǎng)里怎么加才有效4.1 SE 通道注意力Squeeze-Excitation 的完整流程通道注意力機制的代表作是 SESqueeze-and-Excitation思路極其簡單每個通道的重要性不一樣那就讓網(wǎng)絡(luò)自己學一組通道權(quán)重。Squeeze 階段用全局平均池化把 [B, C, H, W] 壓成 [B, C, 1, 1]每個通道得到一個標量代表這個通道在整個空間上的響應(yīng)強度。Excitation 階段接兩層全連接中間有降維過 sigmoid 得到 0~1 之間的通道權(quán)重最后逐通道乘法回原特征圖。class SEBlock(nn.Module): def __init__(self, channels, reduction16): super().__init__() hidden max(channels // reduction, 4) self.pool nn.AdaptiveAvgPool2d(1) self.fc nn.Sequential( nn.Linear(channels, hidden, biasFalse), nn.ReLU(inplaceTrue), nn.Linear(hidden, channels, biasFalse), nn.Sigmoid(), ) def forward(self, x): B, C, _, _ x.shape s self.pool(x).view(B, C) # [B, C] w self.fc(s).view(B, C, 1, 1) # [B, C, 1, 1] return x * w這里 reduction 的比例是關(guān)鍵超參。原論文用 16但在通道數(shù)很少的場景比如 C32下C//162降維太狠信息損失嚴重所以我在代碼里加了max(..., 4)的下限保護。反過來如果通道數(shù)上千reduction16 中間的隱層還有幾十上百維參數(shù)量也不小可以適當加大比例。SE 的代碼量小但它有個隱蔽的性能問題兩個全連接層在 GPU 上延遲不小尤其是 batch 小的時候。有一版改進把第二個 FC 換成 1x1 卷積或者直接用一次矩陣運算完成效果差不多但快一些。4.2 CBAM通道-空間協(xié)同注意力的串行結(jié)構(gòu)CBAM 是在 SE 基礎(chǔ)上的加強版它把通道注意力和空間注意力串起來用順序是先通道后空間。這個順序不是隨便定的原論文做過消融實驗串行優(yōu)于并行通道在前優(yōu)于空間在前。直覺上說得通先確定哪些通道重要在已經(jīng)篩選過的特征上再定位哪些空間位置重要比反過來更合理。CBAM 的通道分支和 SE 有個重要區(qū)別——它同時用了平均池化和最大池化兩條路走同一個 MLP 然后相加。最大池化能捕捉最顯著的響應(yīng)平均池化反映整體分布兩者互補。class ChannelAttention(nn.Module): def __init__(self, channels, reduction16): super().__init__() hidden max(channels // reduction, 4) self.avg_pool nn.AdaptiveAvgPool2d(1) self.max_pool nn.AdaptiveMaxPool2d(1) # 用 1x1 卷積實現(xiàn)避免 Linear 在高維下的額外開銷 self.mlp nn.Sequential( nn.Conv2d(channels, hidden, 1, biasFalse), nn.ReLU(inplaceTrue), nn.Conv2d(hidden, channels, 1, biasFalse), ) self.sigmoid nn.Sigmoid() def forward(self, x): a self.mlp(self.avg_pool(x)) m self.mlp(self.max_pool(x)) return x * self.sigmoid(a m) class SpatialAttention(nn.Module): def __init__(self, kernel_size7): super().__init__() assert kernel_size in (3, 7), kernel size 一般取 3 或 7 self.conv nn.Conv2d(2, 1, kernel_size, paddingkernel_size // 2, biasFalse) self.sigmoid nn.Sigmoid() def forward(self, x): avg_out torch.mean(x, dim1, keepdimTrue) # [B,1,H,W] max_out, _ torch.max(x, dim1, keepdimTrue) # [B,1,H,W] cat torch.cat([avg_out, max_out], dim1) # [B,2,H,W] return x * self.sigmoid(self.conv(cat)) class CBAM(nn.Module): def __init__(self, channels, reduction16, kernel_size7): super().__init__() self.ca ChannelAttention(channels, reduction) self.sa SpatialAttention(kernel_size) def forward(self, x): x self.ca(x) x self.sa(x) return x空間分支里用 7x7 卷積而不是 3x3是因為需要在空間上聚合足夠大的鄰域信息才能判斷哪塊區(qū)域重要感受野太小容易只看到局部噪聲。但這個 7x7 卷積本身也帶來了一些計算量對分辨率高的淺層特征圖不太友好。4.3 CA 注意力坐標信息嵌入的輕量化思路SE 和 CBAM 都有一個共同缺陷全局池化把空間信息壓成一個標量位置信息徹底丟了。對于需要精確定位的任務(wù)比如關(guān)鍵點檢測、細粒度分類這個損失可能很致命。CACoordinate Attention的做法是別做全局池化改成沿 H 方向和 W 方向分別池化得到兩組帶方向的位置信息再融合起來生成注意力權(quán)重。class CoordAttention(nn.Module): def __init__(self, channels, reduction32): super().__init__() hidden max(8, channels // reduction) self.pool_h nn.AdaptiveAvgPool2d((None, 1)) # [B,C,H,1] self.pool_w nn.AdaptiveAvgPool2d((1, None)) # [B,C,1,W] self.conv1 nn.Conv2d(channels, hidden, 1, biasFalse) self.bn1 nn.BatchNorm2d(hidden) self.act nn.ReLU(inplaceTrue) self.conv_h nn.Conv2d(hidden, channels, 1, biasFalse) self.conv_w nn.Conv2d(hidden, channels, 1, biasFalse) def forward(self, x): B, C, H, W x.shape x_h self.pool_h(x) # [B,C,H,1] x_w self.pool_w(x).permute(0, 1, 3, 2) # [B,C,W,1] y torch.cat([x_h, x_w], dim2) # [B,C,HW,1] y self.act(self.bn1(self.conv1(y))) y_h, y_w torch.split(y, [H, W], dim2) y_w y_w.permute(0, 1, 3, 2) # [B,C,1,W] a_h self.conv_h(y_h).sigmoid() # [B,C,H,1] a_w self.conv_w(y_w).sigmoid() # [B,C,1,W] return x * a_h * a_w注意最后是兩次廣播相乘a_h 沿寬度方向廣播a_w 沿高度方向廣播合起來就得到了每個位置 (i, j) 的獨立權(quán)重。這樣注意力圖不再是 SE 那種一列權(quán)重而是真正有空間分辨能力的二維權(quán)重同時參數(shù)增加有限。通道保留比例 reduction32 比 SE 的 16 更激進因為 CA 中間的特征圖長度是 HW本身就不小再乘通道數(shù)容易超標。代碼里用max(8, ...)保底。4.4 三種注意力的橫向?qū)Ρ扰c插入位置維度SECBAMCA關(guān)注維度僅通道通道空間通道空間帶方向池化方式全局平均全局平均最大沿 H/W 分別池化位置信息丟失丟失部分保留額外參數(shù)極少少少計算開銷最低中中低典型用途分類骨干網(wǎng)檢測/分割定位敏感任務(wù)插入位置這件事比選哪個模塊更影響效果。我的經(jīng)驗是這樣幾條。第一不要在網(wǎng)絡(luò)的第一個卷積層后面就加。淺層特征分辨率高通道數(shù)少注意力模塊的收益小但計算開銷占比大。第二瓶頸結(jié)構(gòu)比如 ResNet 的 bottleneck里應(yīng)該加在殘差相加之前的最后一個卷積之后這樣權(quán)重作用在待相加的特征上不會繞過殘差路徑。第三detection 這類任務(wù)在 neck 部分加收益往往比 backbone 里加更明顯因為 neck 的特征圖分辨率適中語義也更接近任務(wù)目標。注意如果你的 backbone 是預(yù)訓練權(quán)重加載的加了注意力模塊之后需要重新訓練或者至少用較小的學習率微調(diào)較長時間直接凍結(jié) backbone 只訓新模塊效果通常不好。5. 時序注意力與 Swin 窗口注意力幾個容易搞混的邊界5.1 時序注意力機制原理掩碼、位置與自回歸時序注意力機制和普通自注意力的唯一區(qū)別就是加了因果掩碼保證位置 t 只能看到 1 到 t看不到未來。這是自回歸生成的基本要求不管你是在做語言模型還是時序預(yù)測。掩碼的構(gòu)造很簡單一個上三角矩陣未來位置填負無窮def causal_mask(L, device, dtypetorch.float32): # 上三角不含對角線為 -inf m torch.triu(torch.ones(L, L, devicedevice, dtypetorch.bool), diagonal1) mask torch.zeros(L, L, devicedevice, dtypedtype) return mask.masked_fill(m, torch.finfo(dtype).min) # 用法scores scores causal_mask(L, x.device) # 可廣播到 [B,H,L,L]這里用了torch.finfo(dtype).min而不是負無窮理由前面說過fp16 下更穩(wěn)。掩碼是加在 softmax 之前的 logits 上不是在權(quán)重上加順序搞反了結(jié)果就完全錯了。時序場景里還有一個常被忽略的細節(jié)如果做的是多變量時序預(yù)測位置編碼的選擇影響很大。正弦位置編碼對固定長度的序列夠用但如果序列長度變化劇烈比如傳感器采樣不均用可學習的位置嵌入配上一個長度上限或者干脆用相對位置編碼效果更穩(wěn)。另外提一下效率。自回歸推理時每一步都會重新計算整個前綴的 K 和 V重復度極高。標準做法是用 KV Cache只算當前 token 的 Q、K、V把 K、V 緩存起來拼接。正確實現(xiàn)的 KV Cache 能把生成速度提升數(shù)倍但緩存管理容易出 bug最常見的是忘記在生成新序列時清空緩存導致結(jié)果串味。5.2 Swin 的窗口注意力與移位機制Swin Transformer 解決的是視覺任務(wù)里序列太長的問題。224×224 的圖如果按 16×16 的 patch 切序列長度就是 196看著還行但如果是 1024×1024 的圖序列長度直接到 4096全局注意力的 O(L2) 就頂不住了。Swin 的思路是把圖像劃分成固定大小的窗口窗口內(nèi)做自注意力窗口之間不交互。這樣復雜度從 O((HW)2) 降到 O(HW·M2)M 是窗口邊長一般取 7。但純窗口注意力會讓不同窗口之間完全隔離感受野受限所以 Swin 又加了 shifted window下一層把窗口劃分整體平移半個窗口大小讓原本不在同一個窗口里的 patch 有機會碰面。窗口劃分的核心代碼就幾行def window_partition(x, window_size): # x: [B, H, W, C] B, H, W, C x.shape x x.view(B, H // window_size, window_size, W // window_size, window_size, C) windows x.permute(0, 1, 3, 2, 4, 5).contiguous() windows windows.view(-1, window_size, window_size, C) return windows # [B * nW, M, M, C] def window_reverse(windows, window_size, H, W): B int(windows.shape[0] / (H * W / window_size / window_size)) x windows.view(B, H // window_size, W // window_size, window_size, window_size, -1) x x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1) return xshift 的實現(xiàn)用 torch.roll分別沿 H 和 W 方向滾動 -M//2算完注意力再滾回來。要注意的是 H 或 W 不是窗口大小整數(shù)倍時需要 pad算完再去掉 pad。這個 pad 邏輯是 Swin 實現(xiàn)里最容易寫錯的部分形狀對不上時優(yōu)先檢查這里。移位窗口帶來的一個副作用是滾回來的窗口里包含了來自不同區(qū)域的 patch注意力計算時跨區(qū)域的部分是無效的需要額外加一個 attention mask 屏蔽掉。這個 mask 的構(gòu)造在早期的開源實現(xiàn)里出過不少 bug如果你發(fā)現(xiàn)自己的 Swin 訓出來比預(yù)期差可以先用簡單的窗口注意力不做 shift跑一遍作為 baseline差距太大就說明 mask 有問題。5.3 PyTorch 與 TensorFlow 落地時的差異兩個框架的多頭注意力接口差異比想象中大。PyTorch 從 2.0 開始提供了torch.nn.functional.scaled_dot_product_attention參數(shù)順序是 (query, key, value, attn_mask, dropout_p, is_causal)會自動選后端實現(xiàn)。用is_causalTrue直接開因果掩碼比手寫 mask 又快又省事。但要注意它默認不開 dropout 的 RNG 對齊訓練時如果你想精確復現(xiàn)得傳dropout_p并把模型設(shè)成 train 模式。另一條路是用nn.MultiheadAttention它的輸入默認是 [L, B, D]和你手寫的 [B, L, D] 正好反過來batch_firstTrue參數(shù)可以切換。這個坑我踩過不止一次形狀沒報錯但結(jié)果完全不對因為 [L, B, D] 和 [B, L, D] 在 L 和 B 數(shù)值接近時不會觸發(fā)維度檢查。TensorFlow/Keras 的tf.keras.layers.MultiHeadAttention接口更高層它內(nèi)部處理了拆頭、縮放、拼頭還支持use_causal_mask參數(shù)。好處是不容易寫錯壞處是魔改困難比如你想換成自己設(shè)計的稀疏注意力模式就得從tf.keras.layers.Layer重寫??缈蚣苓w移時最需要注意的是權(quán)重排布。PyTorch 的 Linear 權(quán)重形狀是 [out_features, in_features]TensorFlow 的 Dense 是 [in_features, out_features]轉(zhuǎn)的時候要轉(zhuǎn)置。多頭 QKV 合并層的排布在兩個框架里也不同最好寫一個小腳本用同一組隨機輸入對比兩邊輸出逐層對齊比憑記憶猜靠譜得多。6. 常見問題與排查技巧實錄6.1 訓練不收斂、梯度異常、注意力圖全灰這類問題我按癥狀整理一下排查路徑。癥狀一loss 從第一步就卡住不動梯度范數(shù)極小。八成是縮放因子漏了或者 softmax 的輸入被掩碼打成了全負無窮。打印一下 scores 的標準差如果超過 10 就基本確認了。癥狀二loss 是 NaN。按順序查三處一是掩碼后的全掩碼行二是 fp16 下的負無窮溢出三是學習率過大。最快的定位方式是在 forward 里加torch.autograd.set_detect_anomaly(True)雖然慢但能直接告訴你哪個算子出的 NaN。癥狀三注意力圖幾乎全灰也就是每行權(quán)重接近均勻分布。這說明模型沒學到任何有區(qū)分度的關(guān)注模式可能原因是縮放過度分母寫成了 d_k 而不是 √d_k或者溫度參數(shù)設(shè)得太高。偶爾也見到把 softmax 的 dim 寫錯沿著 L 維以外的維度歸一化那就完全亂套了。癥狀四訓練集 loss 正常下降驗證集差距很大。注意力模塊對小數(shù)據(jù)集特別容易過擬合尤其是加了 CBAM 這類參數(shù)模塊之后。這時候先減 reduction 比例或者直接在淺層不加注意力。6.2 顯存與速度優(yōu)化的實操清單這一塊我做了一輪系統(tǒng)的對比結(jié)論整理成清單更直觀。優(yōu)先用scaled_dot_product_attention替換手寫實現(xiàn)L≥512 時顯存通常能降 30% 到 50%速度提升 1.5 到 3 倍。反向傳播不需要的中間注意力圖用torch.no_grad()包起來尤其是做可視化的部分很多人忘了它也會占顯存。頭數(shù)不要為了看起來更強往上堆注意力矩陣的顯存和 H 成正比。推理階段一定上 KV Cache自回歸生成能省掉大量重復計算。如果只做推理把模型轉(zhuǎn)成 fp16 甚至 int8注意力部分的收益比全連接層更明顯因為它是訪存密集型算子。長序列場景考慮分塊計算注意力比如按 1024 一塊塊間用近似交互犧牲一點精度換大幅顯存下降。6.3 問題速查表現(xiàn)象最可能原因快速驗證方法處理方式loss 立刻卡住漏了 √d_k 縮放打印 scores.std()加縮放或調(diào)溫度loss 為 NaN全掩碼行 softmax檢查 mask 是否有整行為 Truenan_to_num 或改掩碼值訓練正常推理不對忘了 eval() 或沒清 KV Cache關(guān)掉 dropout 再測模型切 eval重置緩存顯存突然翻倍頭數(shù)增加或 L 變長打印注意力矩陣形狀換融合實現(xiàn)或分塊加了注意力反而掉點插入位置不當或過擬合對比不加注意力的 baseline換位置、減 reduction多頭結(jié)果和單頭一樣reshape 順序?qū)戝e檢查拆頭后 Dh 的連續(xù)性用 [B,L,H,Dh] 再 transpose不同框架結(jié)果對不上權(quán)重排布或輸入布局差異同輸入逐層對齊輸出轉(zhuǎn)置權(quán)重、統(tǒng)一 batch_first實操心得手寫注意力最大的價值是調(diào)試友好。我在排查問題時習慣保留一個慢速參考實現(xiàn)用 fp32、循環(huán)寫法跑一小批數(shù)據(jù)。當融合算子或者 fp16 版本表現(xiàn)異常時拿參考實現(xiàn)的輸出對比通常五分鐘就能定位是數(shù)值精度問題還是邏輯 bug。7. 我個人在項目里踩出來的幾條經(jīng)驗注意力機制的代碼看著短但每一個維度、每一個掩碼、每一個縮放系數(shù)都對應(yīng)著具體的數(shù)學含義改動任何一處都要想清楚它在數(shù)值上會發(fā)生什么。我最初寫多頭注意力的時候拆頭順序?qū)懛戳四P驼諛幽苡杔oss 曲線也降只是最終精度比參考實現(xiàn)低了兩個點這種沉默的 bug最費時間。另外一條經(jīng)驗是別一上來就追求最花哨的變體。SE 和 CBAM 這種幾行代碼的模塊在大多數(shù)視覺任務(wù)上已經(jīng)能帶來穩(wěn)定收益CA 和 Swin 這類復雜結(jié)構(gòu)需要配套的訓練策略和足夠的數(shù)據(jù)量才能發(fā)揮出來。先在簡單模塊上把插入位置、reduction 比例這些超參調(diào)明白再上復雜結(jié)構(gòu)性價比高得多。最后分享一個我常用的自檢手法寫完全力注意力相關(guān)的新模塊后先跑三個測試——形狀測試輸入輸出維度一致、權(quán)重測試注意力權(quán)重每行和為 1、梯度測試反向傳播后參數(shù)有梯度且不是 NaN。這三條過了再去跑真實數(shù)據(jù)。比直接上訓練快了不知道多少倍也省了不少顯卡時間。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久亚码| 久久精品国产亚洲AV嘿嘿| 啊啊啊好爽快点啊啊啊嗯嗯| 人妻9117c| 欧美97在线观看| 伊人久久大香线蕉无码| 国产家庭乱伦性爱视频| 欧美线天码中字| 色性综合| 亚洲成人综合在线| 丁香六月激情| 97超碰色情| 精品亚州18| 90后性网国产欧美| 日韩av不卡在线看| 在线播放成人高清免费视频| 碰超人人在线一区二区三区| 欧美日日网| 色色色天美视频| 一区二区高清视频| 亚洲偷91色| 冬京热男人的天堂| 日日操天天操| 丁香五月天激情网站| 日本人妻最新在线中| jiujiujiujingpin| 国产大片精久久久久久| 操一区| 老熟女乱伦一区| 96超碰网| 中日992视频| 国模不卡一本二本三电影| www.狠狠干.coom| 狠狠干,狠狠操| 夜夜天天噜狠狠爱2021| 欧美日韩插逼视频| 大香蕉强奸乱伦| 插入逼91| 欧美97| 欧美天天弄| 久久国产精品视频| 国内一区二区三区| 日日干夜夜欢| 99热国产| 视频在线中文字幕| 精品国产乱码久久久久久久久久毛片| 精品一区二区久久| 女上位精品在线| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 精品一二三区久久AAA片| 毛片一区二区| 74成人在线| 日夜精品| 国产日本一区二区三区蜜臀在线观看| 精品人妻一区二区三区四区石在线 | 日本 情色 1区2区3区| 99久在线精品99re8热视频在线| 啊啊啊啊啊操我视频| 日日爽夜夜爽| 欧州色图区| 日日狠狠久久偷偷色综合免费| 国产精品老师| 欧美操逼一二三区| 欧美激情片一区二区| 欧美日日夜夜| 久久久久ab| 色哟哟1区2区| 91nbbbbbb| 九一性生活免费视频| 中文一区在线日| 校园春色宗合网| 色踪合AV| 欧美一区二区男人天堂| 手机在线中文字幕国产| 国产97色在线| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 大香蕉综合在线| 久久久久9| 国内精品久9| 4虎在线观看| 人人操人人摸人人骑| 色综合国产在线观看| 色就色综合| 天天做日日爱夜夜爽| 一区二区三区黄片免费观看| 亚洲一区中文字幕一区| 嗯嗯啊啊亚欧精品| 国产亚热在线久久| 亚洲国产精品9999在线观看| 免费看毛片操穴| 欧美少妇一区二区三区| 激情文学小说一区二区| 欧美福利视频啊啊啊啊| 色爱三区| 国产11页| 中文在线视频| 屁股久久久久久久| 欧美日韩香蕉| 久久久久78| 美女十八禁| 98久久| 国产久久久久久久久一区二区| 亚洲综合97中文网| 大香蕉草草| 秋霞午夜成人福利片片| ?亚洲伊人伊成久久人综合网| 亚洲精品99| 精品欧美日韩在线观看| 日日干天天干夜夜爽| 爆操无码| 99999久久久久9国产精品| 欧美人妻中出| 涩综合导航| 五月婷婷六月色| 天天摸天天舔天天操| 久久区| 国产树林里野战在线看| 伊人伊人LD| 欧美色欧美| 九九Av| 97超碰这里只有精品| 3PAV乱伦视频| 91美腿丝袜在线观看| 竹菊一区二区三区AV线| 人人操人人摸人 | 久操凹凸视频| 中文字幕加勒比海高清无码免费视频| 日韩99999| 色综合九九| 久久99草| 天天综合网日韩7799| 日日日啊啊啊| 2024年最新色情网站在线观看| 99热在线观看| 精品日日人妻| 激情网五月天| 黄色视频高清无码网站| 91超级碰碰| 激情内射| 天天肏夜夜肏| www.91视频网| 欧美亚洲综合色| 91丰满| 99无码精品| 97超碰人妻| 国产精品天美传媒| 国产成年女黄特黄| 欧美青青视频| 色情婷婷| 91精品无码久久久久久久| 丁香六月婷婷久久综合| 人人妻人人爱人人玩| 国产亚洲一黄| 可以免费看黄片的视频| 噜噜噜噜天天狠狠| 久久久蜜桃一区二区三区| 天啪| 樱花草社区www中国| 久久久久久亚洲Av无码| 久久色AV线| 六月天婷婷| 色妺妺AⅤ| 1024亚洲中文字幕久在线看片你懂的| 免费无码国产精品v片在线观看| 欧美色天堂网在线视频| 91N欧美| 91精品人妻偷情| 久久m| 九九99久久| 亚洲图片欧美| 国产自产22区| 99自拍B亚洲 | 色呦呦、国产精品| 色成人Www精品永久观看| 国产精品一区二区麻豆| 吉川爱美98堂在线| 亚洲18禁| 国产伦精品一区二区三区在线观| 99色热国产视频精品| 天天天肏屄肏屄肏屄欧美欧美| 哈哈操电影AV| 99在线观看| 精品久久久久久AV无码| 91女日逼| 欧洲大香蕉| 内射中出日韩在线观看视频| 涩五月婷婷| 国产久久成人| 尤物视频视频官网| 九九九免费视频| 五十路人妻在线| 爱欲AV| www超碰| 亚洲中文一区二区三区| 在线A日本| 三级AV入口| 精品无吗m| 日本久久久久久久久久| 亚州熟妇精品| baiduhicn.com。| 91是天天| 啪啪视频mP4| 成人短视频在线观看| 国产浮力影院第1页| 日本αv| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 天天做日日爱夜夜爽| 大香蕉黄色一级片免费看| 91精品国产91久久青草| 又大又大又大又粗爽高潮观看 | 国产精品制服丝袜清纯唯美| 九九干| 国产美女自拍AV| 蜜乳成人AV| 蜜臀无码视频在线观看| 国产久久成人| 精品人体无圣光凹凸| 亚洲成人av电影在线| 亚洲一区二区三区不卡国产欧美| 免费一级性爱久久| 日日插夜夜| JIZZJIZZ国产精品喷水| 天天插天天射| 男人的天堂成人的社区| 97青娱乐超碰久久| 很很很很操| 台湾佬中文娱乐网久久久久久久久久com| 精品久久艹| 情色五月天就去干| 亚洲少妇视频| 国产无码精品成人| 中文字幕中文字幕一区二区| 熟女视频久久| 亚洲天堂另类小说男人| 亚洲欧洲第二视频在线观看色图| 亚洲se电影| 五月天日日操夜夜操| 啊啊啊啊啊啊啊啊在线观看| 国产精品精品系列在线观看| 日本无码1| 一级啊性爱在线视频| 五月色综合| 大香蕉综合| 骚女高跟AV在线| 黄久久| 东京热男人天堂| av最新免费中文字幕| 国产懂色精品国产av| 国产成人网| 久久久久久久久九九久孕交| 欧美综合狠| 男人久久天堂| 91艹B视频| 丁香五月成人| 日韩精品9999| 春色91| 综合国产影视三级| 欧美黑人XXXⅩ高潮交| 日韩人妻无码精品系列| 青青草原伊人网| 91色插| 欧美三级中文字幕hd| 91精品电影18| 亚洲福利影院一区久久| 中文一区二区婷婷视频| 亚洲人成在线放东京热| 日日干夜夜欢| 精品 码产区一区二-1080P高清在线www-B029AV| 青青青国产手线观看视频2| 伊人久久大香线综合无码| 久操凹凸视频| 嗯啊啊啊轻点视频 | 国产A v无码专区| 激情开心五月天| 一二视频神马久久传媒| 欧美AAAA黄片| 五月天激情网图片| 锕锕好爽 死我在线观看| 国产精品久久久久久久无码AV| 欧美一区二区亚洲天堂| 色五月AV在线| 操逼操逼视频操逼| 色妇91| 国产福利一区二| 成人夜夜爽| 好一吊区二区| 国产精品老师| 色欲久久99精品久久| 天天做日日做| 天天摸夜夜操视频| 中文字幕亚洲永久精品| 天天操人人操骚逼网站| 免费强奸av| 啊啊啊啊啊啊啊啊啊在线观看| 岛国免费视频在线| 大香蕉啪啪啪啪在线| 久久中文字幕不卡人妻| 超碰99热中文字幕| 成人无遮挡毛片免费看| 蜜桃精品一区二区三区久在线| 久久久亚洲Av| 天美传媒av在线| 国产高清26uuu| 亚洲男人的天堂AV| 综合欧美日韩在线观看| 国产精品69久久久久久久| 人妻熟女av国产网站| 亚洲丰满很很操| 特级毛片特黄久久免费看| 国外91| 国产呦精品一区二区三区下载| 欧美玖玖爱免费玖玖| 成人七区| 久久久久久裸体| 美女自卫慰黄网站免费| 老熟女91视频| 国产大片精久久久久久| 久久av一级av少妇av高潮| 走光一区92下载| 天堂中文日本在线观看| 91n处女在线观看| 操狠狠| 99精品欧美一区二区三区桃色| 国产乱青青草久久| 在线只有精品| www.色吧5.com| 2026国产精品视频| 天天插天天射| 日韩欧美操逼xxx| 国产91丝袜在线播放蜜月| 久久五月视频| 婷婷av在线中文字幕| 91国产在线精品| 五月天色五月| 色黄色美女大长腿午夜视频| 中文字幕三四五区| 制服诱惑亚洲一区二区三区在线观看| 国产超碰人人操| 另类天堂| chaopen97久久| 亚洲日本韩国极品一区二区| 国产精品岛国片在线观看| 自拍六区| 国产精品久久久久久9999| 99热精品在线观看| 色网在线视频观看免费| 日韩超碰97| 国外91| WWW4虎| 人人操人人大香蕉| 亚洲精品一区二区精品| 久久AV无码AV| 日日夜夜骑| 日韩电影天堂视频一区二区| 人妻精品4K4K4K4K4| 99热只有这里有精品| 秋霞午夜成人福利片片| 亚洲天天自拍| 欧美人人天天网| 香蕉婷婷| 九九99久久| 性色av网站| 日韩极品无码B| 亚洲人妻精品一区二区| 99re3这里只有精品| 自慰白浆在线观看| 国产女人极品高潮毛片| 探花视频免费观看国产专区| 欧美综合天堂| 天天综合网合集91| 久久人体一区二区| 97一区二区蜜臀| 又黄又爽在线观看视频| 九九热视频在线观看| av天堂天堂av日韩| 99久久精品欧美国产| 婷婷国产精品一区二区| 欧美se综合| 国产suv精品一区二区四| 天天躁日日躁AAA片李宗瑞| 国产成人手机视频激情| 日本性爱欧美性爱| 精品视频免费在线一区| 天天日天天干天天色| 五月亭亭六月丁香| 天天综合-91入口| 亚洲欧美伦综合| 天天欧美| 屁股久久久久久| 激情一区二区| 天天射日日干| www.色吧5.com| 国产精品蜜臀久久久久无码AV| 亚洲色图图片| 你懂的在线观看区国产 | 日本3级一区二区免费| 国产1769在线| 留下AⅤ黄色片| 亚洲综合精品国产一区| 亚洲欧美一区二区三区一猛片| 伊人久操| 激情五月激情综合网| 色噜噜综合在线| 中文字幕一区 二 区 三 四 五 区日 日 骚| 丁香婷婷色五月| 天天肏美女| 少妇二级| 国产青青美女玩逼视频| 久久人妇| 亚洲另类春色| 成人无码在线超碰网| 日本免费一级AAA大片器| 黄色片,com| 国产美女mm131爽爽爽爽| 天天肏夜夜肏| 日本不卡三级网在线播放| 美女主播色欲91抠b在线播放| 亚洲综合贴图91| 人妻少妇久久| 偷拍精品一区二区三区| 2017人人操,人人摸| 大伊香蕉在线视频免费| 高清无码网址| 美女黑人91神马| 日本一二三免费久久| AV色女综合| 久久av无码| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产操操日韩三级黄| 青娱乐日韩无码| 日韩在线76| 欧美大片天天看| 日韩毛片9| 中国AAAAAA黄色片| 伊人五月天| 国产在线不卡导航| 在线观看啊啊啊啊啊| 极品色| www色日本| 麻豆av一区二区三区| 加勒比色综合| 一级特黄aaa大片在线观看成人一级片在线观看| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 亚洲性猛| 日韩激情无码影院| www.色综合| 日韩啪啪啪视频| 东京热男人天堂| 乱伦图一区| 九九九九88| 国产三级中文字幕粉嫩| 思思热影视| 一本正道久久熟女| 国产精品乱码久久| www.色五月| 亚洲色图自拍| 成人5码视频| 久久这里精品国产99丫e6| 亚洲男人天堂网站| 色色五月丁香| 老鸭窝在线视频播放| 久草网站免费在线观看| 欧美久久毛片基地| a片偷拍视频| 国产精品经典一卡久久久 | 亚洲吊色| 一区不卡在线观看av| 亚洲成人一二三区| 欧美中文字幕精品人妻| 亚洲 图片 综合91| 最新制服中文第一页| 精品人妻美妇91job| 色眯眯av| 伊人网综合在线视频| 狠狠色一区二区中文字幕| 久久神马| 青青草久久一区网| 国产一级特黄大片处女| 五十路熟女工口| 99久久国产精品免费高潮| 美女黄频a美女大全免费皮| 污污污8888| 韩三级a视频在线观看| 99亚洲精品| 亚洲综合伊人无码久久| 欧美日韩性感| 中文字幕精品一区二| 人人操天天爽| 日本熟女中文字幕一区| 91精品电影18| 小视频国产| 亚洲日韩久久精品一区| 亚洲色图殴美色图激情乱伦| 欧美宗合网| 色官网在线| 国产欧美另类久久久精品课程| 久久免费精彩视频| 欧美亚洲激情| 97超碰人操| 九九综合久久| 蜜臀无码视频在线观看| 精品国产乱码久久久兰草影视| se01国产在线视频| 午夜福利合集| 久久一二三级一一一| 91人妻精华帖| 在线视频资源| 国产suv精品一区二区四区999| 国产乱伦性爱区| 97 国产精品| 日韩人妻资源在线看| Sekablack无码一区| 亚洲在钱| 麻豆天美久久91| 高清无码一区二区三区| 黄色工厂这里只有精品| 午夜福利区| 婷婷综合激情| 人人看人人插| 夜夜高潮夜夜爽夜夜爱爱一区| 野狼激情网| AV污污污污| 欧美一级在线观看成人| 久久久国产精品亚洲精品| 丝袜 亚洲 偷拍| 大香蕉www.超碰| 色香天天| 大色网久久| 色老汉色| 不卡人妻少妇精品毛片一区23区视频| 久久免费精品视频免一| 狠狠色噜噜狠狠狠狠2018| 国内毛片四区| 97精品久久久久中文字幕| 丝袜美腿诱惑亚洲欧美视频在线观看| av在线免费一区二区| 欧美劲爆第一页| 东京热大香焦| 蜜桃久久久久久久久久久久| 亚洲男人天堂2019| 91久久久久久久久18| 999精品国产高清一区二区| 天天色欧美| 欧美性第1页| 老司机久久| 97视频620| 国产精品一二三免费网站| 人成午夜免费大片| 亚洲精品人妻吞精av| 大香蕉视频一二三区| 污色区网站| 亚洲黄色网址| 1二区9| 欧美A√综合网| 北京专精特新企业招聘信息| 偷拍欧美激情| 九久久九精品视频| 亚洲熟妇自偷自拍另欧美| 色色色五月婷婷| 91操人| 网页导航五月天免费一二三区| 久久精品日韩| 久久riav中文精品| 精品一区二区成人| 国产精品自在线发布| 色色网91| 天天看天天在线精品| 成人av影院在线观看| 秋霞怕怕片| av网站国产主播在线| 97超碰香蕉| 人人操人人摸人人骑| 麻豆精品一区二区三区四区免费观看| 成人怡红院| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 国产精品久久久视频| 久久久亚洲精品电影免费看| 久久熟女人| 91 国产丝袜在线放观看 | 亚洲丝袜二区在线| 久热热| 免费国产视频| 中国一级αV| 色欲三区| HEYZO高无码国产精品227| 欧美强奸乱| 伊人91| 青娱乐 成人娱乐在线| 欧美欲色| 色九九综合AV| 蜜桃天美传媒AV一区二区三区| 91天天综合日韩欧美| 日韩欧美性吧婷婷乱伦大香蕉| 亚洲av成人精品一区| 亚州一区二区成人片免费| 夜夜影视四色| 久久丁香五月天| 青青草吊丝| 美日韩一二三区| 日韩亚洲97| 欧洲视频在线| 久久久精品91八戒| 日韩精品中文字幕二区| 爆乳免费黄网站| 九九九久久久久| 亚洲黄色电影| 91精品久久久久五月天精品| 欧美一级特黄淫片在线观看| 成人 日韩欧美一区| 一区二区首页| 日本道人妻久久久在线不卡色视频| 91美女在线| 免费观看国产小粉嫩喷水精品午| 五月丁香成人网| 绯色AV粉色AV蜜臀AV| 香蕉国产97| 成人AV超碰免费在线| www.色操逼| 级品肉射| 老熟女网站| 国产精品婬乱一级毛片彝族| 伊人久久亚洲中文字幕| 无码人妻丰满熟妇区毛片| 超碰午夜| 桃色五月天| 丝袜美腿射精91| 超碰在线人妻中文字幕| 免费一级视频特黄色大片| 欧美第38页| 91日韩国产欧美亚洲另类精盘州至城都| www.亚洲黄色| 国产欧美日韩女同性恋ww喷水精品 | 成人性爱全视频观看| 啊啊啊啊啊啊在线看| 天天躁夜夜躁狠狠躁AV| www亚洲免费| 天天日B狠狠操| 国产精品白丝AV| 唐山老熟妇露脸啪啪叫| 啊啊啊97视频| 黄色香蕉视频网站一区| 人人色97| 中文字幕视频二区| 超碰人妻在线| 亚洲图片偷拍欧美| 精品成人亚洲午夜电影| 亚洲色色色| 精品大全99999| av在线一区二区三区| 日han少妇无码| 大JI巴好深好爽又大又粗视频| 伊人久久婷婷| 国产成人五月天丁香花| 女人双腿搬开让男人桶| 欧美综合自拍亚洲综合图| 天天操天天射天天日| 久久久久久中文版| 久久久久久久久久久免费精品| 日本免费不卡二区| AV麻豆免费一区| 蜜桃精品一区二区三区ww| 91久久青青草原精品| 九九AV| 日韩八十路老熟女| 日本护士高潮| 另类欧美色| 97精品国产97久久久| 色香欲影| 青青草五月天| 日韩激情小说一区二区| 91精品人妻五十路| 综合色99| 男人的天堂va| 日韩懂色网| 亚洲成人免费中文字幕| 色97国产69香蕉| 丁香六月啪| 夜夜爽夜夜操| 美女大乳久久久久久久女人18| 亚洲最新Av| 精吧天堂| 日本久久99| 东北女人操逼| 日韩精品电影| 久草视频分类在线| 亚洲最新Av| 97视频900| 四虎影视永久在线免费| 偷偷人人精品女女久久| 欧美|91色综合| xxxx网站亚洲精品| 国产夫妻性生活视频| 中文字幕91综合| 国产精品视频麻豆入口| 亚洲玖玖爱| 中文字幕日产av人| 亚洲国产精品成人无码久久久 | caopeng97| 目产99999久久999| 好色综合| 欧美九九爱| 中文字幕免费在线观看| 欧亚性爱在线视频| 亚洲男人天堂视频| 欧美精品69性爱| 91爱看| 色婷久久| 在线免费观看日韩一区| 亚洲欧洲日韩中文字幕一区| 美女91在线观看| 乱伦系列一区二区| 日韩一级性爱无码| 天堂亚洲欧美| 女生自91网站| 中文字幕国产精品1区| 99精品欧美一区二区三区桃色| 天天cao在线| 综合色拍| 色色色色色色色色色色色色色色综合| 日韩国产成人自拍视频| 91人人操| 超碰色97| 国产丸一视频| 欧美一二三区四五区| 九九热免费视频| 色噜噜精品一区二区三| 最新av中文字幕高清| 激情另类激情| 色偷偷综合91久久噜噜| 熟女天天干| 伊人亚洲国产一成人久久精品,久久| 亚洲第2页| 日本中文熟女视频| 综合网91| 国产激情在线| 小电影欧美91| 日日骚精品视频| 少妇诱惑视频| 67194无码不卡| 天天天天干| 亚洲图片偷拍视频区| 中文字幕在线观看永久| 亚洲色图91| 青青草这里只有精品| 青青操视频在线| 国产精品国产| 天天内射| 国产热av| 亚洲男人天堂视频| 亚洲做性| 91综合天天看| 青青草久草AV| 狠狠操狠狠燥| 韩国嫰模上门援交视频| 伊人9| 亚洲好色人妻| 男人的天堂com| 天天综合网~91| 中文字幕青青草| 国产精品另类一区大香蕉| 97超级色碰碰| 床戏久久久av一区二区麻豆| 日本中文字幕熟妇| 啊啊啊轻点在线观看| 十八禁电影伊人网| 综合亚洲欧美| 欧美日韩中文视频播放| 欧美AB在线| 亚洲一区日韩精品| 老司机天天操| 天天做日日爱夜夜爽| 干婷婷综合网| 欧美亚性天堂| 观看免费区二区三区二| 手机看片1024你懂的国产| 国人欧美精品一区二区| 五月丁香综合网| 日夜啪电影| 欧美日韩国产电影| 91性| 狠狠超| 操国产逼| 粉嫩av在线一区二区| 欧美在线视频99| 国产精品久久久视频| 青青草国产盗摄一二三区| 97精品在线| 国产精品自拍视频| 精品人妻1区| 婷婷五月成人| 黑丝91视频| a男人的天堂| 天操天操夜操夜月操月年年操操| 天天久久久久久| 日韩欧无码一区二区三区免费不卡| 欧美日韩在线视频网站| 成人免费在线网站| 欧美成人都市人妻| 91网站视频在线观看| 97色欧洲| 日本丝袜人妻内射| 色五月av| 乱子伦一区二区三区国产精品| 超碰97人人乐| 亚洲字幕一区二区| 99精品无码| 欧美日韩中国x| 中文字幕97| 女人高潮大叫一级毛片| 久久嫩草国产成人一区| 天天日熟妇| 插入逼91| 亚洲色诱惑| 亚洲综合九| 国产三级片在线观看| 久久九九国产精品| 欧美美女啪啪视频| 欧美激情高清性猛交| 91搞逼视频| 欧美 中文字幕 一区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 麻豆久久视频在线地址| 熟女网站最新| 黄色人人| 91在线美女| 欧美丝袜91| 亚洲乱熟女一区二区三区大香蕉| 神马久久中文字幕| 91国产操逼视频| 色色99| 99热这里都是精品| 人妻在线视频| 伊人96在线| www..com操老师| 亚洲视频二区 | 国产黄色剧情影片麻豆免费播放| 亚洲色五月| 午夜福利一区二区三区四区五区色婷婷| 青春草莓视频在线观看网址| 天天插天天射| 欧美偷拍| 九九亚洲视频| 麻豆成人AV| 九月婷婷久久| 99re28在线观看| 国产成人久久久精品免费AV| 色综合 加勒比| 精品人妻av在线播放| 日韩不卡网操逼中文字幕日韩| 久草尤物| 欧美中文字幕一区 | 91社区伊人| 97综合日韩| 日韩免费中文字幕视频| 2019AV天堂| 人人性爱视频免费| 中国小夫妻勾搭露脸淫荡对白| 亚洲āv网址在线观看| 2019天天操天天爽天天拍| 亚欧高清| 裸体1区| 一级特级aaaa毛片免费观看| 2020中文字幕在线| 欧美丰满熟妇XXXX性ppX人交| 精品97久久| 性吧在线视频| 人人干人人操人人爱| 99热精品国产| 亚洲 欧美 手机在线观看| 欧美后入式| 天天综合日韩网| AAAA欧美日韩| 伊人午夜福利视频| 丁香九月激情| 欧美性爱第一页久久| 熟女一区二区三区| 中文字幕精品区先锋资源| 嗯嗯嗯啊啊在线观看| 性欧美另类高清| ,成人免费啪啪视频| 亚州欧美综合| 婷婷在线视频| 黄色片一区二区三区四区五区| 国产一区二区三区,在线观看观看| 日韩性爱高清免费视频| 久久69| 日日日大屁股骚女人精品| 天天日天天干天天整| 久久九色| 91久久堂| 日本三级中国三级99人妇网站| 婷婷色综合欧美日韩| A男人的天堂| 婷婷五月天av| 人人人人插| 水滴偷拍| 婷婷九月国产| 区日韩亚洲乱码av电影| 新婚人妻扶着粗大强行坐下| 97资源亚洲| 美女黄码视频午夜| 久久久爆乳翘臀一线天伦理视频| 久久社区一区二区三区| 日韩精品 欧美激情| 久草男人天堂| 日本欧美成人片AAAA| 中文字幕中文字幕一区二区| 亚洲色婷婷综合久久久久中文| 亚州久久9| 丁香五月婷婷啪啪| 探花熟女,姿勢到位,體驗感也到位| 97资源亚洲| 91熟女.com| 人妻日日夜夜精品 | 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 亚洲国产97在线精品一区| 亚州久久9| av天堂影视中文在字幕在线中文| 国产三级多多影院2022国产AA一级毛片无码| 91青青在线| 欧美91久久久久| 手机不卡视频不卡在线一二三区| 久久婷五月天| 亚洲精品无码成人久久久99| 欧美成人免费在线观看| 91精品国产乱码| 99国产精品久久久久久久成人热| 国模无码一区二区三区在线| 精品高清一区二区三区三州| 国产一区在线播放| 亚洲成人AB| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产精品自在线发布| a亚洲欧美色欲| 男女一进一出视频久久| 日日骚网站| 麻豆一区二区三区在线看| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 一区三区啪啪| 亚洲最新av无码成人精品区 | 国产一区二区三区中文字幕| 久久曰曰| 人妻少妇久久久| 久草视频在线视频在线视频在线观看 | 欧美,日韩,中文,另类| 欧美 日韩 婷婷 五月| 青青草乱入乱欲视频在线观看| 精品免费1| 麻豆黄四叶草网站| 欧美 青青草| 大香蕉中文aV在线| 91艹逼精品| 9999九九九久久久| 婷婷激情一区二区三区俺也去| 久久九七| 久久超碰av在线| 日韩久草| 亚洲综合在线91| 色欧美在线| 97色网| 日韩字幕一区| 久久久亚洲欧美综合| 无码人妻丰满热妇又大又粗| 国产AV超爽| 九热视频| 亚洲不卡不卡中文字幕不卡| 秋霞一级视频在线观看免费| 国模精品一区二区三区苹果色戒| 亚洲成人碰碰| 内射中出日韩在线观看视频| 亚洲欧洲第二视频在线观看色图| 精品国产乱码久久久兰草影视| 天操天操夜操夜月月年年操操| 亚欧美综合| 97精品视频| 豆花视频操逼网址| 日日碰狠狠添天天爽超| 99精品热| 精品96久久| 少妇色综合| 96一区二区三区| 91福利网在线观看| 久久直播国产| 91麻豆天美国产欧美日| 殴美日韩m| 免费男人的天堂| 91老女人| 久久久久久AⅤ无码免费肉站| 综合网,亚洲,欧美| 少妇高潮99p| 亚洲自拍一区夜夜操| 日韩欧美久久婷婷网站| 九九热精品| 日韩免费高清大片在线| 国产精品久久久久久久电影渣男| 国产亚洲精品美女久久久m| 欧美精品999| 日韩啪啪啪啪啪| 欧美男女午夜啪啪| 亚洲好色人妻| 囯戸精品高潮呻吟旡码| 国产精品秘 福利姬在线观看| 色哟哟-国产专区| 怡红院亚洲怡春院av| 中文字幕美女91| 免费黄色片子| 亚洲男人的天堂网| J?P?NESEHD熟女熟妇伦| 亚洲国产高清福利视频| 久久9 9 9精品| av橘色网站| 人人操人人插人www| 综合网欧美在线| 日韩成人人妻网站| 强奸国产在线| 精品免费一区二区三区在线亚洲人成| 久久久久久久久久久精| 无码高清少妇久久| 又大又黄国产| 变态另类专区| 国产亚洲色婷婷久久99精品91葵花宝典 | 正在播放国产精品一区| 国产又粗又长又爽又色| 伦理弟一页| 亚洲日本激情| 大香蕉在线视频15| 亚州男人天堂| 亚洲欧美日韩综合在线尤物| 性交一区二区在线播放| Av手机版天堂网| 嗯嗯嗯嗯啊啊啊好紧好大| 丝袜AV一区二区三区| 黄色视频特级毛片| 无码人妻精品一区二区三区九九| 亚洲色狠| 天天干天天日天天射黄色| 超碰97 线线 在现| 成人性爱电影一区二区| 熟妇高潮二区三区| 中文字幕一区二区三区高清| 色偷偷色偷偷欧美日韩| 色综合久久av| 激情欧美日韩女同久久| 少妇无码av专区线| 亚欧中文字幕在线视频| 日B操| 91久久久久久| 日韩97P| 婷婷情色综合网| 久久久久熟女| 2020国产精品| 久操国产在线| 青青操97| 亚洲日韩精品久久久久一区壹牛 | 性爱久久| 国产精品日日摸夜夜添骚逼| a级理论午夜日本| 日韩久射综合| 日本三级久| 超碰97欧美| 九九拍拍精品视频在线播放 | a片自拍直播视频| 91亚洲欧美色图| 天堂69亚洲精品中文字| 日日噜噜夜夜久久亚洲一区二区| 在线中文字幕极品av| 久久精品91| 欧美一区91大爱| 欧美亚洲91| 啊啊啊不要啊啊受不了了视频在线 | 澳门特级毛片免费观看| 91模特在线观看| 狠狠综合| 视频一区二区三区精品| 最新亚洲风情电影| 精品人妻一区二区视频| 中文字幕午夜精品久久久| 久久九色| 日韩精品资源专区二区| 99re6国产精品99re| 欧美人人AAA| 97综合| 97久久精品国产| 久久欧美性爱视频| 国产精品 视频| 国产精品视频| 欧洲色| 国产精品分类在线观看| 少妇熟女视频一二三区| 精精夜夜| 亚洲av综合色| 97精| 爱丝福利| 国产精品小视频一区二区三区| 国产操逼逼网| 日本媚薬中文字幕在线| 久久久久久久久久久999| 成人av免费观看| 天天视频黄| 九九九999久久久网站| 伊蕉97蜜桃97狠狠综合干| 亚洲色图亚洲无码强奸乱伦| 青娱乐淫乱1314| 日韩中文9| 中文字幕 一区二区 亚洲无码| 欧美黑人精品一区二区| 99999国产精品| 欧美综合自拍亚洲综合图| 欧美性,色九九| 激情五月天丁香社区| 强奸乱伦AV网址| 久久精品99久久久久久| 亚洲色图 欧美热图 清纯唯美 另类自拍| 色一色综合网| 精品日韩人妻视频| 国产精品网址| 成人夜夜| 97视频620| 色月天AV导航| 蜜桃视频精品一区二区| 国产精品无码av| 亚洲伊人久久综合97| 99久久9| 亚熟hd视频在线| 熟女色图在线| 欧美在线视频99| 九九无码视频| 熟女字幕| 一起草欧美| 老熟女乱伦一区| 天天干天天操天天操夜夜操天天操| 偷拍亚洲视频一区二区三区四区| 青木玲在线不卡| 久久香蕉超碰97国产精品 | 国产精品不卡一区二区电影| 国产精品白丝www| 欧美在线第五页| AV久日| 天天天天天天天天综合| 久久久久久91香蕉国产| 观看视频图片一区二区三区| 九九在线视频| 久久久婷| 屌色在线97视频| 久久久97| 97久久视频| 91操操| 亚洲色综合| 六月婷婷综合| 午夜天堂精品久久久久91| 怡红院一区二区熟女人妻| 国产男女无套视频免费观看| 亚洲砖码砖专无区2023| 精品亚洲国产成人精品| 夜夜影视四色| 激情久久av一区av二区av| 久久久久国产精品喷潮免费观看臀 | 99在线精品观看视频中文 | 国产黄色影片在线观看| 亚洲,日韩,欧美,成人播放|