日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Actor-Critic實(shí)戰(zhàn):優(yōu)勢(shì)函數(shù)、GAE與A2C訓(xùn)練循環(huán)拆解

Actor-Critic實(shí)戰(zhàn):優(yōu)勢(shì)函數(shù)、GAE與A2C訓(xùn)練循環(huán)拆解 強(qiáng)化學(xué)習(xí)學(xué)到 Actor-Critic 這一節(jié)基本算是從會(huì)跑 demo跨到能理解現(xiàn)代 RL 工程的分水嶺。前面講策略梯度時(shí)REINFORCE 用一整條軌跡的回報(bào)去估計(jì)梯度方差大到需要幾十次采樣才能勉強(qiáng)收斂講到值函數(shù)近似時(shí)又發(fā)現(xiàn)只學(xué) Q 值沒法直接輸出策略。Actor-Critic 把這兩條線擰在一起一個(gè)網(wǎng)絡(luò)負(fù)責(zé)決定動(dòng)作一個(gè)網(wǎng)絡(luò)負(fù)責(zé)評(píng)價(jià)動(dòng)作好不好用評(píng)價(jià)網(wǎng)絡(luò)的輸出給決策網(wǎng)絡(luò)的梯度降方差。A2C、A3C、PPO、DDPG、TD3、SAC 這一整串現(xiàn)在還在被廣泛使用的算法骨架都是它。這篇文章是2026 新版強(qiáng)化學(xué)習(xí)從入門到精通系列的第 42 篇重點(diǎn)不再停留在概念解釋上而是把 Actor-Critic 的網(wǎng)絡(luò)結(jié)構(gòu)、優(yōu)勢(shì)函數(shù)、GAE、損失函數(shù)組合、訓(xùn)練循環(huán)這些真正影響能不能跑通的部分拆開講。文中的每段代碼都可以直接復(fù)制運(yùn)行環(huán)境用 PyTorch GymnasiumCartPole 這類任務(wù)在純 CPU 上幾分鐘就能看到曲線抬起來不需要顯卡。讀者對(duì)象很明確已經(jīng)寫過 REINFORCE 或 DQN、知道策略梯度和貝爾曼方程大概在講什么、但自己動(dòng)手寫 Actor-Critic 時(shí)總是卡在為什么 loss 是這三項(xiàng)加在一起優(yōu)勢(shì)函數(shù)到底怎么算critic 學(xué)崩了怎么辦這幾個(gè)問題上的人??赐曛髴?yīng)該能獨(dú)立寫出一個(gè)可訓(xùn)練的 A2C并且知道把它換成 PPO 需要?jiǎng)幽膸仔小?. Actor-Critic 核心能力速覽先把這套架構(gòu)的關(guān)鍵信息壓縮成一張表后面所有內(nèi)容都是圍繞這張表展開的細(xì)節(jié)。需要注意Actor-Critic 不是某一個(gè)算法而是一類架構(gòu)范式表里列的是這個(gè)范式的共性以及它在主流算法上的具體投影。能力項(xiàng)說明架構(gòu)組成Actor 策略網(wǎng)絡(luò)輸出動(dòng)作分布Critic 價(jià)值網(wǎng)絡(luò)輸出狀態(tài)價(jià)值或動(dòng)作價(jià)值解決的核心問題策略梯度方差過大、單步更新效率低、無法在線學(xué)習(xí)梯度估計(jì)方式用 Critic 給出的價(jià)值作為基線或優(yōu)勢(shì)替代蒙特卡洛回報(bào)支持的動(dòng)作空間離散動(dòng)作Categorical與連續(xù)動(dòng)作Gaussian / Tanh-Gaussian均可典型代表算法A2C、A3C、PPO、TRPO、DDPG、TD3、SAC網(wǎng)絡(luò)結(jié)構(gòu)可共享主干shared trunk也可完全分離separate networks更新方式同策略A2C/PPO或異策略DDPG/TD3/SAC需要經(jīng)驗(yàn)回放采樣效率同策略版本中等異策略版本較高訓(xùn)練穩(wěn)定性依賴優(yōu)勢(shì)歸一化、梯度裁剪、價(jià)值損失系數(shù)等工程手段硬件門檻小型任務(wù)純 CPU 可跑Atari 級(jí)別建議單卡 GPU并行環(huán)境吃 CPU 核數(shù)依賴環(huán)境Python 3.10、PyTorch 2.x、Gymnasium 1.x版本以實(shí)際安裝為準(zhǔn)典型調(diào)試周期CartPole 級(jí)別分鐘級(jí)MuJoCo 級(jí)別小時(shí)級(jí)適合場(chǎng)景連續(xù)控制、機(jī)器人仿真、游戲 AI、推薦策略優(yōu)化、對(duì)話策略學(xué)習(xí)這里要提前說清楚一個(gè)容易混淆的點(diǎn)很多教程把 Actor-Critic 當(dāng)成一個(gè)具體算法講實(shí)際上它更像一個(gè)模板。你在模板里換掉優(yōu)勢(shì)估計(jì)方式就得到 A2C換掉更新約束就得到 PPO把 Critic 從狀態(tài)價(jià)值換成動(dòng)作價(jià)值并加經(jīng)驗(yàn)回放就得到 DDPG。理解模板比背算法名有用得多因?yàn)檎鎸?shí)項(xiàng)目里你幾乎總要改一點(diǎn)東西。2. 從策略梯度到 Actor-Critic為什么必須有一個(gè) Critic先把動(dòng)機(jī)講透否則后面看到三項(xiàng) loss 相加會(huì)覺得是拍腦袋湊出來的。最原始的策略梯度定理給出的是這樣一個(gè)式子梯度等于策略對(duì)數(shù)概率乘以回報(bào)的期望。用采樣估計(jì)時(shí)我們用一整條軌跡的累計(jì)回報(bào) G_t 去乘 log π(a|s)。問題在于 G_t 是一個(gè)隨機(jī)變量同一狀態(tài)下采樣十次可能得到十個(gè)差別很大的回報(bào)梯度方向跟著劇烈抖動(dòng)。為了讓這個(gè)估計(jì)穩(wěn)定下來一個(gè)很自然的想法是減去一個(gè)與動(dòng)作無關(guān)的基線 b(s)因?yàn)闇p去它不會(huì)改變期望只會(huì)改變方差。數(shù)學(xué)上可以證明E[?log π(a|s) · b(s)] 0所以基線是免費(fèi)的降方差工具。那么最優(yōu)的基線是什么理論上是狀態(tài)價(jià)值函數(shù) V(s)。把 G_t 換成 G_t - V(s)方差會(huì)顯著下降。而這個(gè) G_t - V(s) 恰好就是優(yōu)勢(shì)函數(shù) A(s,a) 的一個(gè)無偏估計(jì)它衡量的是在狀態(tài) s 下采取動(dòng)作 a比平均水平的動(dòng)作好多少。到這里Actor 的更新方向就變成了往優(yōu)勢(shì)為正的動(dòng)作上加概率往優(yōu)勢(shì)為負(fù)的動(dòng)作上減概率。接下來的問題是怎么拿到 V(s)。用蒙特卡洛方式統(tǒng)計(jì)回報(bào)當(dāng)然可以但那樣必須等回合結(jié)束學(xué)習(xí)是離線的、慢的。Critic 網(wǎng)絡(luò)的作用就是用函數(shù)近似的方式直接學(xué) V(s)而且可以只依賴單步的 TD 誤差來更新實(shí)現(xiàn)真正的在線學(xué)習(xí)。這就是 Actor-Critic 的核心交換用 Critic 引入偏差bias換來方差的大幅下降和在線更新能力。用一句話概括兩者分工Actor 負(fù)責(zé)試Critic 負(fù)責(zé)評(píng)。Critic 的評(píng)價(jià)越準(zhǔn)Actor 的更新方向越穩(wěn)Actor 的策略越好Critic 面對(duì)的數(shù)據(jù)分布越集中學(xué)起來也越容易。這種互相依賴也帶來了這套架構(gòu)最典型的失敗模式——兩個(gè)網(wǎng)絡(luò)一起崩后面第 9 章會(huì)專門講怎么拆解。關(guān)于偏差和方差的取舍還有一個(gè)重要的工程變量用 TD(0) 的單步誤差偏差大但方差小用蒙特卡洛回報(bào)方差大但無偏中間的 n-step 回報(bào)和 GAE 就是在兩者之間滑動(dòng)。這個(gè)滑動(dòng)的旋鈕直接決定了訓(xùn)練曲線是平滑爬升還是劇烈震蕩是 Actor-Critic 調(diào)參里性價(jià)比最高的一個(gè)參數(shù)。3. 環(huán)境準(zhǔn)備與最小可運(yùn)行工程骨架Actor-Critic 對(duì)環(huán)境的依賴其實(shí)很輕它不需要 CUDA 編譯、不需要下載大模型權(quán)重甚至不需要顯卡。真正容易出問題的地方在于包版本不匹配導(dǎo)致的 API 變更尤其是 Gymnasium 從 Gym 分叉出來之后step 的返回值從四項(xiàng)變成五項(xiàng)很多老教程直接復(fù)制過來就會(huì)報(bào)解包錯(cuò)誤?;A(chǔ)依賴如下。版本號(hào)這里不寫死因?yàn)椴煌瑱C(jī)器上的 CUDA 與 PyTorch 對(duì)應(yīng)關(guān)系不同寫死反而容易踩坑原則是 PyTorch 官方安裝向?qū)Ыo出的組合優(yōu)先。# 創(chuàng)建獨(dú)立環(huán)境避免和已有項(xiàng)目沖突 conda create -n actor_critic python3.10 -y conda activate actor_critic # 安裝核心依賴具體版本以本機(jī)可用的 CUDA 組合為準(zhǔn) pip install torch --index-url https://download.pytorch.org/whl/cpu pip install gymnasium numpy matplotlib tensorboard如果機(jī)器上有顯卡并且想跑圖像輸入的任務(wù)把第一行的 CPU 源換成官方對(duì)應(yīng)的 CUDA 源即可。對(duì)于 CartPole、Pendulum、MountainCarContinuous 這類低維狀態(tài)任務(wù)CPU 訓(xùn)練速度快過 GPU因?yàn)閿?shù)據(jù)傳輸開銷會(huì)蓋過并行計(jì)算收益這一點(diǎn)在后面的資源占用章節(jié)還會(huì)提到。建議的工程目錄結(jié)構(gòu)如下把網(wǎng)絡(luò)定義、算法實(shí)現(xiàn)、訓(xùn)練腳本、配置分離后面要換成 PPO 或者換環(huán)境時(shí)改動(dòng)量會(huì)小很多actor_critic_demo/ ├── configs/ │ └── a2c_cartpole.yaml ├── models/ │ └── networks.py # Actor / Critic 定義 ├── algos/ │ ├── a2c.py # A2C 更新邏輯 │ └── gae.py # 優(yōu)勢(shì)估計(jì) ├── train.py # 訓(xùn)練主循環(huán) ├── evaluate.py # 評(píng)估與可視化 └── requirements.txt驗(yàn)證環(huán)境是否裝好跑一段最小檢查腳本就夠了。這段腳本同時(shí)能確認(rèn) Gymnasium 的 API 版本因?yàn)閞eset返回(obs, info)、step返回五項(xiàng)這個(gè)約定是從 Gymnasium 開始統(tǒng)一的如果你的環(huán)境返回四項(xiàng)說明裝的是老版本 Gym后面的代碼需要相應(yīng)調(diào)整。import gymnasium as gym import torch print(torch:, torch.__version__) print(cuda available:, torch.cuda.is_available()) env gym.make(CartPole-v1) obs, info env.reset(seed42) print(obs shape:, obs.shape) print(action space:, env.action_space) obs, reward, terminated, truncated, info env.step(env.action_space.sample()) print(step 返回項(xiàng)數(shù)正確reward , reward) env.close()運(yùn)行結(jié)果里如果打印出step 返回項(xiàng)數(shù)正確環(huán)境就沒問題了。如果這里報(bào)too many values to unpack說明裝的是老版 Gym最簡單的處理是統(tǒng)一升級(jí)到 Gymnasium而不是在代碼里寫兼容分支后者會(huì)讓后面所有邏輯都變臟。4. Actor 與 Critic 的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)是 Actor-Critic 里最容易被輕視的部分。很多人直接把別人的 MLP 抄過來層數(shù)、激活函數(shù)、初始化全都不動(dòng)結(jié)果在某個(gè)任務(wù)上怎么調(diào)都學(xué)不動(dòng)。實(shí)際上 Actor 和 Critic 對(duì)輸出的要求完全不同一個(gè)是概率分布參數(shù)一個(gè)是標(biāo)量價(jià)值兩者的輸出層設(shè)計(jì)必須分開考慮。4.1 離散動(dòng)作空間的 Actor離散動(dòng)作下Actor 輸出的是每個(gè)動(dòng)作的 logit經(jīng)過 softmax 得到概率再用Categorical分布采樣。輸出層不要加 softmax因?yàn)?PyTorch 的Categorical內(nèi)部會(huì)做 log_softmax提前做一次會(huì)導(dǎo)致數(shù)值不穩(wěn)定這是新手最常犯的錯(cuò)誤之一。import torch import torch.nn as nn class DiscreteActor(nn.Module): def __init__(self, obs_dim: int, action_dim: int, hidden: int 128): super().__init__() self.body nn.Sequential( nn.Linear(obs_dim, hidden), nn.Tanh(), nn.Linear(hidden, hidden), nn.Tanh(), ) self.head nn.Linear(hidden, action_dim) def forward(self, obs: torch.Tensor): logits self.head(self.body(obs)) return logits激活函數(shù)這里選 Tanh 而不是 ReLU原因是 ReLU 在狀態(tài)輸入歸一化不理想時(shí)容易產(chǎn)生大片死區(qū)而策略網(wǎng)絡(luò)對(duì)梯度方向很敏感死區(qū)會(huì)導(dǎo)致某些動(dòng)作永遠(yuǎn)采不到探索直接退化。這不是絕對(duì)規(guī)則但在連續(xù)控制和低維狀態(tài)任務(wù)上Tanh 的魯棒性明顯更好代價(jià)是訓(xùn)練稍慢一點(diǎn)。4.2 連續(xù)動(dòng)作空間的 Actor連續(xù)動(dòng)作要輸出一個(gè)高斯分布的均值和對(duì)數(shù)標(biāo)準(zhǔn)差。均值通常經(jīng)過 tanh 壓到 [-1, 1]再按動(dòng)作上下限縮放對(duì)數(shù)標(biāo)準(zhǔn)差用可學(xué)習(xí)參數(shù)并且要 clamp 到一個(gè)合理區(qū)間否則訓(xùn)練中期可能出現(xiàn)標(biāo)準(zhǔn)差指數(shù)爆炸采樣出來的動(dòng)作全是邊界值。class ContinuousActor(nn.Module): def __init__(self, obs_dim: int, action_dim: int, hidden: int 256): super().__init__() self.body nn.Sequential( nn.Linear(obs_dim, hidden), nn.Tanh(), nn.Linear(hidden, hidden), nn.Tanh(), ) self.mean_head nn.Linear(hidden, action_dim) self.log_std nn.Parameter(torch.zeros(action_dim)) def forward(self, obs: torch.Tensor): mean torch.tanh(self.mean_head(self.body(obs))) log_std torch.clamp(self.log_std, min-20, max2) std log_std.exp() return mean, stdlog_std用獨(dú)立參數(shù)而不是網(wǎng)絡(luò)輸出是因?yàn)樵诖蟛糠诌B續(xù)控制任務(wù)里探索噪聲的水平與具體狀態(tài)關(guān)系不大獨(dú)立參數(shù)收斂更穩(wěn)。如果你做的是狀態(tài)相關(guān)性很強(qiáng)的任務(wù)比如機(jī)械臂在接近目標(biāo)時(shí)需要精細(xì)動(dòng)作可以讓網(wǎng)絡(luò)輸出 log_std但要額外做 clamp。4.3 Critic 的輸出與價(jià)值尺度Critic 輸出一個(gè)標(biāo)量 V(s)結(jié)構(gòu)比 Actor 簡單但初始化很關(guān)鍵。如果 Critic 初始輸出偏離真實(shí)回報(bào)的量級(jí)太遠(yuǎn)第一批優(yōu)勢(shì)估計(jì)會(huì)全是噪聲Actor 會(huì)朝錯(cuò)誤方向更新一大步之后再想糾正就很困難。class Critic(nn.Module): def __init__(self, obs_dim: int, hidden: int 128): super().__init__() self.body nn.Sequential( nn.Linear(obs_dim, hidden), nn.Tanh(), nn.Linear(hidden, hidden), nn.Tanh(), ) self.head nn.Linear(hidden, 1) # 輸出層用小初始化讓初始 V(s) 接近 0 nn.init.orthogonal_(self.head.weight, gain1.0) nn.init.zeros_(self.head.bias) def forward(self, obs: torch.Tensor): return self.head(self.body(obs)).squeeze(-1)這里的squeeze(-1)很重要不寫的話價(jià)值張量是[batch, 1]后面和回報(bào)張量相減會(huì)發(fā)生廣播形狀悄悄變成[batch, batch]損失看起來在下降但學(xué)的是完全錯(cuò)誤的東西。這類形狀 bug 不會(huì)報(bào)錯(cuò)只會(huì)讓訓(xùn)練莫名其妙地不收斂排查成本極高。4.4 共享主干還是分離主干經(jīng)典實(shí)現(xiàn)里常見兩種寫法一種讓 Actor 和 Critic 共享前面的特征提取層只分開輸出頭另一種完全獨(dú)立。共享主干的優(yōu)勢(shì)是參數(shù)少、特征復(fù)用、在小任務(wù)上收斂快缺點(diǎn)是梯度會(huì)互相干擾如果兩個(gè)損失量級(jí)差異大容易一方主導(dǎo)把另一方的特征壓掉。完全分離則沒有干擾但參數(shù)量翻倍。我的建議是CartPole、Acrobot 這種幾十維狀態(tài)的任務(wù)可以共享圖像輸入或高維連續(xù)控制一律分離。判斷標(biāo)準(zhǔn)很簡單如果訓(xùn)練曲線出現(xiàn)策略熵快速塌縮但回報(bào)不漲很可能是共享主干被價(jià)值損失帶偏了改成分離往往立刻好轉(zhuǎn)。5. 優(yōu)勢(shì)函數(shù)與 GAE 實(shí)現(xiàn)優(yōu)勢(shì)函數(shù)的估計(jì)質(zhì)量直接決定 Actor-Critic 的表現(xiàn)上限。這一節(jié)從最簡單的單步 TD 誤差一路推到 GAE每一步都給出可運(yùn)行的代碼。5.1 TD 誤差與 n-step 回報(bào)最基礎(chǔ)的優(yōu)勢(shì)估計(jì)就是 TD 誤差A(yù) r γV(s) - V(s)。它的偏差來自 Critic 本身不準(zhǔn)但因?yàn)橹挥靡徊秸鎸?shí)獎(jiǎng)勵(lì)方差極小。另一個(gè)極端是蒙特卡洛A G_t - V(s)無偏但方差大。中間的 n-step 回報(bào)用 n 步真實(shí)獎(jiǎng)勵(lì)加上第 n 步的價(jià)值估計(jì)def compute_nstep_returns(rewards, values, dones, gamma0.99, n5): rewards/values/dones 均為長度 T 的列表values 多一個(gè) bootstrap 項(xiàng) T len(rewards) returns [] for t in range(T): R 0.0 for k in range(n): if t k T: break R (gamma ** k) * rewards[t k] if dones[t k]: break else: # 未終止則加上第 n 步的價(jià)值估計(jì)作為 bootstrap idx min(t n, T) R (gamma ** n) * values[idx] returns.append(R) return returns這段代碼里有個(gè)細(xì)節(jié)值得注意for...else結(jié)構(gòu)只有在循環(huán)正常走完沒有被break時(shí)才執(zhí)行 bootstrap。如果軌跡中途終止就不該再加 bootstrap 項(xiàng)否則會(huì)把下一回合的價(jià)值錯(cuò)誤地算進(jìn)來。這類終止處理錯(cuò)誤在外行看來只是曲線抖一點(diǎn)實(shí)際上是系統(tǒng)性偏差。5.2 GAE 的遞推實(shí)現(xiàn)GAE 的做法是把所有 n-step 優(yōu)勢(shì)做指數(shù)加權(quán)平均用一個(gè)參數(shù) λ 控制偏差方差權(quán)衡。λ0 退化成單步 TDλ1 退化成蒙特卡洛。工程上最常用的是 0.95 左右。遞推公式是A_t δ_t γλ(1-done_t)A_{t1}其中 δ_t 就是單步 TD 誤差。從后往前算一遍即可復(fù)雜度 O(T)。def compute_gae(rewards, values, dones, gamma0.99, lam0.95): rewards: [T] values: [T1]最后一項(xiàng)是 bootstrap 價(jià)值 dones: [T]float終止為 1 返回 advantages [T] 和 returns [T] T len(rewards) advantages [0.0] * T last_adv 0.0 for t in reversed(range(T)): if t T - 1: next_value values[T] else: next_value values[t 1] delta rewards[t] gamma * next_value * (1 - dones[t]) - values[t] last_adv delta gamma * lam * (1 - dones[t]) * last_adv advantages[t] last_adv returns [advantages[t] values[t] for t in range(T)] return advantages, returns兩個(gè)輸出都要用advantages拿去算策略損失returns拿去算價(jià)值損失。有些人圖省事直接用 advantages 當(dāng)價(jià)值目標(biāo)這是錯(cuò)的因?yàn)閮r(jià)值網(wǎng)絡(luò)學(xué)的是 V(s) 而不是優(yōu)勢(shì)兩者差了一個(gè)基線。5.3 優(yōu)勢(shì)歸一化拿到優(yōu)勢(shì)后必須做一步歸一化這是 A2C/PPO 里最廉價(jià)也最有效的穩(wěn)定手段import torch def normalize_advantages(adv: torch.Tensor, eps: float 1e-8): return (adv - adv.mean()) / (adv.std() eps)歸一化的作用是把梯度步長控制在合理范圍。不做這一步時(shí)如果某批次優(yōu)勢(shì)全是正數(shù)且數(shù)值很大一次更新就能把策略推得很遠(yuǎn)直接破壞探索歸一化之后優(yōu)勢(shì)的均值是 0、方差是 1更新量級(jí)與回報(bào)絕對(duì)大小解耦換環(huán)境時(shí)不用重新調(diào)學(xué)習(xí)率。這個(gè)技巧在 reward 尺度差異大的任務(wù)上幾乎是必須的。6. 完整 A2C 訓(xùn)練實(shí)現(xiàn)把前面的模塊拼起來就是一段可以直接跑的 A2C。選擇 A2C 而不是 PPO 作為第一個(gè)完整實(shí)現(xiàn)是因?yàn)樗鼪]有重要性采樣比率和 clip邏輯干凈出錯(cuò)時(shí)定位容易。import gymnasium as gym import numpy as np import torch import torch.nn as nn import torch.optim as optim from torch.distributions import Categorical class ActorCritic(nn.Module): def __init__(self, obs_dim, action_dim, hidden128): super().__init__() self.shared nn.Sequential( nn.Linear(obs_dim, hidden), nn.Tanh(), nn.Linear(hidden, hidden), nn.Tanh(), ) self.actor nn.Linear(hidden, action_dim) self.critic nn.Linear(hidden, 1) nn.init.orthogonal_(self.actor.weight, gain0.01) nn.init.zeros_(self.actor.bias) nn.init.orthogonal_(self.critic.weight, gain1.0) nn.init.zeros_(self.critic.bias) def forward(self, x): h self.shared(x) return self.actor(h), self.critic(h).squeeze(-1) def act(self, obs): logits, value self.forward(obs) dist Categorical(logitslogits) action dist.sample() return action, dist.log_prob(action), value, dist.entropy() def collect_rollout(env, model, rollout_steps20): obs_list, act_list, logp_list [], [], [] rew_list, done_list, val_list [], [], [] obs, _ env.reset() ep_return, ep_returns 0.0, [] for _ in range(rollout_steps): obs_t torch.as_tensor(obs, dtypetorch.float32) with torch.no_grad(): action, logp, value, _ model.act(obs_t) next_obs, reward, terminated, truncated, _ env.step(action.item()) done terminated or truncated obs_list.append(obs_t) act_list.append(action) logp_list.append(logp) rew_list.append(reward) done_list.append(float(done)) val_list.append(value.item()) ep_return reward obs next_obs if done: ep_returns.append(ep_return) ep_return 0.0 obs, _ env.reset() with torch.no_grad(): _, last_value model(torch.as_tensor(obs, dtypetorch.float32)) return (obs_list, act_list, logp_list, rew_list, done_list, val_list, last_value.item(), ep_returns) def train(): env gym.make(CartPole-v1) obs_dim env.observation_space.shape[0] action_dim env.action_space.n model ActorCritic(obs_dim, action_dim) optimizer optim.Adam(model.parameters(), lr3e-3) gamma, lam 0.99, 0.95 value_coef, entropy_coef 0.5, 0.01 returns_history [] for update in range(200): (obs_list, act_list, logp_list, rew_list, done_list, val_list, last_val, ep_returns) collect_rollout(env, model) returns_history.extend(ep_returns) values val_list [last_val] advs, rets [], [] last_adv 0.0 for t in reversed(range(len(rew_list))): delta rew_list[t] gamma * values[t 1] * (1 - done_list[t]) - values[t] last_adv delta gamma * lam * (1 - done_list[t]) * last_adv advs.append(last_adv) advs.reverse() rets [advs[i] values[i] for i in range(len(advs))] adv_t torch.tensor(advs, dtypetorch.float32) adv_t (adv_t - adv_t.mean()) / (adv_t.std() 1e-8) ret_t torch.tensor(rets, dtypetorch.float32) logp_t torch.stack(logp_list) obs_t torch.stack(obs_list) logits, values_pred model(obs_t) dist Categorical(logitslogits) entropy dist.entropy().mean() policy_loss -(logp_t * adv_t.detach()).mean() value_loss nn.functional.mse_loss(values_pred, ret_t) loss policy_loss value_coef * value_loss - entropy_coef * entropy optimizer.zero_grad() loss.backward() nn.utils.clip_grad_norm_(model.parameters(), 0.5) optimizer.step() if (update 1) % 10 0 and returns_history: avg np.mean(returns_history[-20:]) print(fupdate {update1:03d} | avg return {avg:.1f} | fentropy {entropy.item():.3f} | value loss {value_loss.item():.3f}) env.close() if __name__ __main__: train()這段代碼里有幾個(gè)設(shè)計(jì)選擇值得單獨(dú)說。策略損失用采樣時(shí)記錄的logp_list而不是重新前向計(jì)算這是同策略算法的標(biāo)準(zhǔn)做法但要記得 detach 優(yōu)勢(shì)否則梯度會(huì)流進(jìn)價(jià)值網(wǎng)絡(luò)導(dǎo)致雙重反傳。價(jià)值損失用 MSE如果獎(jiǎng)勵(lì)尺度很大可以換成 Huber避免離群回報(bào)把 Critic 拉飛。熵獎(jiǎng)勵(lì)的符號(hào)是減去因?yàn)槲覀兿M畲蠡匾簿褪亲寭p失里包含負(fù)的熵項(xiàng)。梯度裁剪的 0.5 是個(gè)經(jīng)驗(yàn)值。A2C 在 CartPole 上即使不裁剪一般也能跑但在連續(xù)控制任務(wù)里一次異常大的優(yōu)勢(shì)就能讓策略參數(shù)跳變裁剪是最省事的保險(xiǎn)。裁剪閾值不要設(shè)得太小0.1 以下會(huì)讓學(xué)習(xí)明顯變慢因?yàn)榇蟛糠终L荻纫矔?huì)被削。在普通筆記本 CPU 上這段代碼大概 100 到 200 次 update 就能讓平均回報(bào)爬到 400 以上200 次全滿。如果跑到 500 次還在 20 左右徘徊基本可以判定是環(huán)境 API 或優(yōu)勢(shì)計(jì)算出了問題直接跳到第 9 章排查。7. 算法族對(duì)比與選型Actor-Critic 這個(gè)模板衍生出的算法很多實(shí)際項(xiàng)目里選型的關(guān)鍵不是哪個(gè)最新而是樣本從哪來、動(dòng)作空間是什么、允許的調(diào)參時(shí)間有多少。下面這張表把常用的幾個(gè)放在一起對(duì)比。算法策略類型采樣方式動(dòng)作空間經(jīng)驗(yàn)回放主要特點(diǎn)典型用途A2C隨機(jī)策略同策略同步多環(huán)境離散/連續(xù)否結(jié)構(gòu)簡單易于調(diào)試教學(xué)、基線對(duì)比A3C隨機(jī)策略同策略異步多線程離散/連續(xù)否異步更新現(xiàn)已較少使用歷史參考PPO隨機(jī)策略同策略多輪復(fù)用離散/連續(xù)否clip 約束穩(wěn)定工業(yè)界主力大模型 RLHF、游戲 AIDDPG確定性策略異策略僅連續(xù)是確定性策略加目標(biāo)網(wǎng)絡(luò)連續(xù)控制基線TD3確定性策略異策略僅連續(xù)是雙 Critic、延遲更新、目標(biāo)平滑連續(xù)控制常用SAC隨機(jī)策略異策略僅連續(xù)是最大熵框架探索充分機(jī)器人、樣本昂貴場(chǎng)景選型的實(shí)操判斷可以這樣走如果你能拿到大量并行仿真環(huán)境同策略的 PPO 是最省心的選擇它的調(diào)參空間相對(duì)寬容社區(qū)實(shí)現(xiàn)也最多如果真實(shí)環(huán)境采樣代價(jià)高、一步要花幾秒那就得走異策略路線用經(jīng)驗(yàn)回放提高樣本利用率連續(xù)動(dòng)作優(yōu)先考慮 SAC 或 TD3如果動(dòng)作是離散的且環(huán)境便宜A2C 足夠作為第一版基線。從 A2C 遷移到 PPO 的改動(dòng)量其實(shí)很小核心是把采一批數(shù)據(jù)更新一次改成采一批數(shù)據(jù)分多個(gè) epoch 更新同時(shí)加上重要性采樣比率和 clip。下面這段是 PPO 的策略損失核心可以對(duì)照第 6 章的 A2C 看差異def ppo_policy_loss(new_logp, old_logp, advantages, clip_ratio0.2): ratio torch.exp(new_logp - old_logp) surr1 ratio * advantages surr2 torch.clamp(ratio, 1.0 - clip_ratio, 1.0 clip_ratio) * advantages return -torch.min(surr1, surr2).mean()這里old_logp必須是采樣時(shí)記錄的、并且在多個(gè) epoch 內(nèi)保持不變。很多人把它每個(gè) epoch 重新算一遍clip 就失效了算法退化成沒有約束的策略梯度訓(xùn)練曲線會(huì)突然崩掉。這個(gè)坑在復(fù)現(xiàn) PPO 時(shí)出現(xiàn)頻率極高。8. 訓(xùn)練監(jiān)控、資源占用與常見問題排查Actor-Critic 的調(diào)試核心是分而治之先把 Critic 單獨(dú)看好再看 Actor。因?yàn)?Actor 的更新方向完全依賴 Critic 給出的優(yōu)勢(shì)如果價(jià)值估計(jì)本身在亂飄后面所有調(diào)參都是在錯(cuò)誤的地基上做微調(diào)。8.1 必須監(jiān)控的四個(gè)指標(biāo)第一是平均回合回報(bào)看趨勢(shì)不看單點(diǎn)用最近 20 到 100 回合的滑動(dòng)平均。第二是策略熵它反映探索程度CartPole 上健康的曲線是從 0.69 左右緩慢下降到 0.3 附近如果十幾輪就掉到 0.05說明策略過早確定通常需要加大熵系數(shù)或降低學(xué)習(xí)率。第三是價(jià)值損失它應(yīng)該整體下降但允許波動(dòng)如果持續(xù)上升說明價(jià)值目標(biāo)尺度有問題。第四是梯度范數(shù)裁剪前的梯度范數(shù)突然放大到幾十上百往往是某批次優(yōu)勢(shì)異?;虺霈F(xiàn)了數(shù)值問題。把這幾項(xiàng)寫進(jìn)日志接 TensorBoard 是最省事的做法from torch.utils.tensorboard import SummaryWriter writer SummaryWriter(runs/a2c_cartpole) # 在每個(gè) update 結(jié)束時(shí)記錄 writer.add_scalar(train/avg_return, avg_return, update) writer.add_scalar(train/entropy, entropy.item(), update) writer.add_scalar(train/value_loss, value_loss.item(), update) writer.add_scalar(train/grad_norm, grad_norm, update) writer.close()8.2 資源占用怎么觀察低維狀態(tài)任務(wù)上瓶頸幾乎全在環(huán)境交互而不在網(wǎng)絡(luò)計(jì)算。一個(gè) 128×128 的 MLP 單次前向在 CPU 上是微秒級(jí)而env.step往往要幾十微秒到毫秒級(jí)。所以在 CartPole 上把模型搬到 GPU 反而更慢因?yàn)槊看味家鲆淮沃鳈C(jī)到設(shè)備的拷貝。判斷標(biāo)準(zhǔn)很直接用time.perf_counter()把采樣耗時(shí)和更新耗時(shí)分別打出來如果采樣占 80% 以上優(yōu)化方向就是并行環(huán)境而不是換硬件。import time t0 time.perf_counter() rollout collect_rollout(env, model) t1 time.perf_counter() # ... 更新邏輯 ... t2 time.perf_counter() print(fsample: {t1-t0:.3f}s | update: {t2-t1:.3f}s)當(dāng)任務(wù)換成圖像輸入情況就反過來了。Atari 的 84×84×4 幀堆疊輸入特征提取網(wǎng)絡(luò)的前向和反向會(huì)成為主要開銷這時(shí)候 GPU 才有意義同時(shí)顯存占用主要取決于批量大小和網(wǎng)絡(luò)寬度。觀測(cè)這一點(diǎn)最方便的方式是torch.cuda.max_memory_allocated()在訓(xùn)練循環(huán)里定期打印比看任務(wù)管理器準(zhǔn)確得多。并行環(huán)境是另一個(gè)資源維度。A2C 原本就設(shè)計(jì)成多環(huán)境同步采樣用gymnasium.vector.SyncVectorEnv起 8 個(gè)環(huán)境采樣吞吐能提升數(shù)倍但 CPU 占用也會(huì)同步上升。這里要注意并行環(huán)境的數(shù)量不是越多越好超過物理核心數(shù)之后上下文切換開銷會(huì)吃掉收益一般取物理核心數(shù)的一半到全部之間。8.3 常見問題與排查表問題現(xiàn)象可能原因排查方式解決方案回報(bào)長期停在隨機(jī)水平優(yōu)勢(shì)符號(hào)寫反或未 detach打印單批次優(yōu)勢(shì)均值檢查是否恒正或恒負(fù)修正優(yōu)勢(shì)計(jì)算確保adv.detach()策略熵幾輪內(nèi)塌到接近 0學(xué)習(xí)率過大或熵系數(shù)過小觀察 entropy 曲線下降速度降 lr 到 1e-3 以下熵系數(shù)提到 0.01 以上價(jià)值損失不降反升回報(bào)尺度與初始化不匹配打印values_pred.mean()與ret_t.mean()輸出層小初始化或?qū)貓?bào)做縮放張量形狀報(bào)錯(cuò)或結(jié)果異常Critic 輸出未 squeeze檢查values_pred.shape加.squeeze(-1)訓(xùn)練前期正常后期突然崩潰梯度爆炸記錄裁剪前梯度范數(shù)開啟梯度裁剪閾值 0.5 左右換環(huán)境后完全不學(xué)觀測(cè)未歸一化檢查 obs 數(shù)值范圍加 running mean/std 歸一化多環(huán)境并行后變慢環(huán)境數(shù)超過物理核數(shù)對(duì)比不同 env 數(shù)的采樣耗時(shí)降到物理核心數(shù)以內(nèi)PPO 復(fù)現(xiàn)后曲線不如 A2Cold_logp 每個(gè) epoch 重算檢查 old_logp 是否在 epoch 內(nèi)固定采樣時(shí)記錄一次全程復(fù)用連續(xù)動(dòng)作全落在邊界log_std 無約束打印 std 數(shù)值clamp log_std 到 [-20, 2]這張表里最值得展開的是觀測(cè)未歸一化這一條。CartPole 的觀測(cè)數(shù)值都在個(gè)位數(shù)不歸一化也能跑所以很多人養(yǎng)成了不歸一化的習(xí)慣。一旦換到 Pendulum 或者 MuJoCo觀測(cè)里同時(shí)存在 0.01 量級(jí)和 10 量級(jí)的維度網(wǎng)絡(luò)會(huì)幾乎只對(duì)大量級(jí)維度敏感小量級(jí)維度相當(dāng)于被屏蔽表現(xiàn)為怎么調(diào)都不學(xué)。加一層 running 均值方差歸一化通常一次就解決。9. 最佳實(shí)踐與下一步Actor-Critic 這一套東西寫對(duì)一次之后復(fù)用價(jià)值很高。下面是幾條從實(shí)際調(diào)試?yán)锟偨Y(jié)出來的、能明顯減少踩坑時(shí)間的做法。第一條永遠(yuǎn)先在 CartPole 上跑通再換環(huán)境。這不是偷懶而是建立一條已知正確的基線。當(dāng)你在 MuJoCo 上調(diào)了兩天沒結(jié)果時(shí)把同一份代碼切回 CartPole 跑 50 輪如果也不學(xué)問題在算法實(shí)現(xiàn)如果正常問題在超參或環(huán)境適配。這個(gè)二分能把排查范圍瞬間砍掉一半。第二條把 Critic 的學(xué)習(xí)率和 Actor 分開設(shè)置。共享一個(gè)優(yōu)化器看似簡潔但兩者對(duì)步長的敏感度不同Critic 通常需要更快地跟上回報(bào)變化Actor 則需要更保守。實(shí)踐里 Critic 學(xué)習(xí)率取 Actor 的 2 到 3 倍是常見起點(diǎn)尤其在價(jià)值損失下降明顯滯后于策略改進(jìn)的時(shí)候。第三條保留一套最小可運(yùn)行配置。把能跑通的那組超參寫進(jìn)configs/目錄并加注釋說明適用環(huán)境之后每次實(shí)驗(yàn)都從它 fork 出來而不是在當(dāng)前腳本上反復(fù)改數(shù)字。Actor-Critic 調(diào)參很容易陷入改了 A 又影響 B的循環(huán)有基線配置才能判斷某次改動(dòng)是真的有效還是隨機(jī)波動(dòng)。第四條批量任務(wù)和長訓(xùn)練要加斷點(diǎn)保存。訓(xùn)練腳本里定期保存模型參數(shù)、優(yōu)化器狀態(tài)和當(dāng)前 update 序號(hào)配合日志落盤。強(qiáng)化學(xué)習(xí)的訓(xùn)練曲線經(jīng)常在某個(gè)階段突然變好或變差如果沒保存中間狀態(tài)想回到那個(gè)點(diǎn)重新實(shí)驗(yàn)就只能從頭再來這在需要跑幾小時(shí)的任務(wù)上代價(jià)很大。def save_checkpoint(path, model, optimizer, update, best_return): torch.save({ model: model.state_dict(), optimizer: optimizer.state_dict(), update: update, best_return: best_return, }, path) def load_checkpoint(path, model, optimizer): ckpt torch.load(path, map_locationcpu) model.load_state_dict(ckpt[model]) optimizer.load_state_dict(ckpt[optimizer]) return ckpt[update], ckpt[best_return]第五條評(píng)估階段一定要關(guān)掉探索。訓(xùn)練時(shí)用隨機(jī)策略采樣是為了探索評(píng)估時(shí)應(yīng)該用分布的均值或 argmax并且固定隨機(jī)種子跑多個(gè)回合取平均。用帶噪聲的策略去評(píng)估得到的回報(bào)會(huì)明顯偏低且波動(dòng)很大容易誤判模型沒學(xué)好。關(guān)于下一步的擴(kuò)展方向比較自然的路徑有兩條。一條是往 PPO 走把第 6 章的采樣和更新拆成兩段加上重要性采樣比率和 clip這套代碼幾乎可以直接用在語言模型的 RLHF 微調(diào)流程里那邊的 reward model 扮演的就是 Critic 的角色只是評(píng)價(jià)對(duì)象從狀態(tài)變成了整段回復(fù)。另一條是往異策略走引入經(jīng)驗(yàn)回放緩沖區(qū)、目標(biāo)網(wǎng)絡(luò)和雙 Critic去處理真實(shí)采樣代價(jià)高的連續(xù)控制問題。如果要在這兩條路上做選擇判斷依據(jù)就一句話你的環(huán)境能不能便宜地并行采樣。能就走同策略不能就走異策略。這個(gè)判斷比看任何算法排行榜都可靠。Actor-Critic 的骨架在這兩條路上是共通的先把它吃透后面換算法只是替換幾個(gè)模塊的事。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中文字幕后石码三区四区| 91男女啊啊啊| 成人一区二区三区四区| 96麻豆精品一区二区三区| 91欧美综合| 日韩 女同 综合| 蜜桃久久一区| 亚洲少妇激情一区二区三区| 夜夜爽爽爽| 尹人免费观看视频在线| 熟女少妇一区二区三区| 91撸色网 玖玖网 欧美| 免费夜夜爱黄色视频毛片| 国产精品电影大全| 国内外毛片在线观看| 欧美亚洲第一页| 精品一区二区2| 天综合网| 亚洲精品视频在线播放| 色噜噜人妻丝袜AV资源| 久久这里只精品免费福利| 少妇国产不卡| 韩国毛片一区二区三区| 一区二区激情国产熟女 | 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 97综合国产精品高潮久久| 超碰97综合网| 无码人妻丰满熟妇奶水区毛片| 免费αⅴ在线观看| 97色伦欧美| 五月色综合| 60秒不遮不挡| 99热 按摩 日韩| 久久人妻熟女一区二区| 色呦呦国产精品免费看| 亚洲情色第一页| 花花AV导航| 久久精品国产精品亚洲艾通辽熟妇 | 人妻五十路在线| 神马久久久久| 亚洲精品国产无码高清| 国产97色在线 | 亚洲| 久操黄色视频| 怡红院成人视频| 91欧美综合| 97超碰逼| 九九99精品| 操美女高潮抽搐白浆| 性爱av在线免费观看| 久久久久久免费电影| 精品1区2区3区| 国产成人网| 色香欲影| AV天堂电影网| 在线情色电影 91大 | 四虎免费看黄| 色五月激情网| 久久亚洲中文字幕视频| 婷婷伊人五月| 91精品久久久| 日韩熟女乱伦中出| 波多野结衣被操50分钟免费视频| 无码WWW免费视频网站| 亚洲中亚日激情视频| 91精品久久久久久77777| 婷婷丁香五月天综合东京热| 日本三级大片| 95精品在线| 亚洲无码精品AV久久久| 国产精品午夜福利亚洲综合网| 亚洲欧美在线观看无码| 青草草免费网站av| 爱av免费| 美女十八禁| 大香蕉欧美国产日韩高潮| 五月色网| 久久美女福利是上海美女| 岛国在线免费视频| 床上啊啊啊一区二区三区| 丁香五月综合| 乱子伦一区二区三区国产精品| 殴美日韩m| 日韩熟女视频二区| av亚欧| 国产精品亚洲高清在线| 美女的肌被草喷水视频| 91欧美性| 欧洲亚洲国产综合在线| 欧美熟妇人体| 亭亭丁香激情| 老师充足的奶水小说| 久久久久夜夜夜夜| 欧美男女午夜啪啪| 国产日韩精品suv| 久久天天摸| 九九九九久久久久| 操九九九九九九| 91久久青青草原精品| 人妻少妇久久久| 蜜臀99久久精品久久久懂爱| 国产激情视频在线观看| 91精品人妻一区二区三区蜜桃| 亚洲黄色a级片| 91蜜臀人妻中文字幕在线| 欧美高清18A片| 久久久久久久久久久久黄色| 这里只有精品视频在线观看麻豆| 精品二999| 蜜乳av首页| 1024精品在线| 夜夜操二区| 天天久久| 日本超碰色精品| 麻豆国产免费影片| 国产精品嫩草影院午夜两性 | 草草电影院| 日日妻色网| 久久久久久久一级黄色打同平台| 日韩中文字幕国产| 三及片网站| 强奸熟女一区二区三区 | 亚洲天堂男人天堂| 一本色道久久综合狠狠操| 日韩国产品视频中文字| 五月天婷婷久久| 婷婷av在线中文字幕| 中文字幕福利视频一区二区三区在线观看| 免费人人搞97| 九色97| 日韩性爱电影一区 | CCYY草草影院地址入口| 成人开心网在线视频| 亚洲的天堂网| 和协无码影院| 久久久婷婷| 中文字幕视频一区视频二区| 美女啊啊啊啊啊啊啊| 日产狠狠干| 亚欧性爱在线无码| 中文字幕成人| 色色无码| 日产中文字幕2020| 青草香蕉网| 国产精品2020| 1024午夜激情男人的天堂| 久久亚州高清| 色哟哟av网址| 国产一区二区久久| 91日韩网站| 男女啊啊啊啊啊| 欧美综合网A| 亚洲,欧美,综合网| 中文字幕丰满人妻日本| 岛国网址国产| 丁香五月天社区| 老女人爆菊| 日韩AV一区二区三区三州三州| 国产婷婷一区| 天操天操夜操夜月操月年年操操| 99中文字幕| 五月天色图影视| 亚洲成人性| 精品人妻一区二区三区四区石在线| 激情小说亚洲图片| 日韩亚洲中文字幕在线| 天天流夜夜操| 欧美亚洲激情| 性老妇一区二区三区| 欧美97爱| 超碰久久精品| AV污污污污| 精品对白久久不卡| 国产第二页| 天天干天天插| 综合欧美日韩在线观看| 国产自产22区| 99re不伦| 激情文学网伊人| 精品视频久久| 色香欲天天天天综合色| 啊啊啊啊啊好多水| 久久婷婷伊人| 中文字幕av一区二区三区人妻少妇 | 少妇一级婬片免费放一级a性色. | 国内精品伊人久久久久影院会| 黄片在线免费在线观看| 91激情国产| 粉嫩在线一区二区懂色| 校园春色宗合网| 狠狠色婷婷7777久| 国产精品天干天干综合网麻豆 | 青青草视频在线观看一区二区| 青青色综合| 久久久久久久九九九九| 大鸡巴久久久| a片自拍直播视频| 91人妻视频| 伊色久人大在线| 色综合久| 玖玖爱在线视频免费观看| 日本免费不卡二区| 国产高清视频无码在线| 日韩精品电影| 这里只有精品久久| 久久久久亚洲熟妇熟女| 欧美亚洲宗合色性图| 国产白丝av| 九月AV| 国产隔壁老王影院在线| 黄呦呦在线| 黄色av一区二区在线| 91情色在线| 久久av色| 婷婷五月成人| 国产精品成人无码av无码免费| 噜噜瑟| 精品美女在线视频| 国产美女高潮| 日韩欧美麻豆| 久草精品一区| 黄色大片一区二区密桃丝袜| 国产日韩精品人妻久久久久色欲网站| 国产搭汕a级片| 欧美超碰96| 五月丁香激情啪啪| 亚洲日韩美国人妻| 日韩一级久久毛片| 999九九九九国产动| 超碰97玖玖爱| 99久久99久久综合| 狼狼色丁香久久婷婷综合五月| 91痴汉| 97超碰资源网| 国产25页| 久久99999| 色婷婷狠狠18禁| 夜色AV无码手机在线影院| 国产综合色精品在线观看| 极品出轨视频网站| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 亚洲精品久久久久毛片A片拉屎 | 嗯啊不要在线| 精品国产一区二区三区av在线资源| 国产一进一出视频网站| 日日噜噜夜夜狠狠视频无| 999综合网| 婷婷爽人人婷婷爽视频| 男女啊啊啊| 一区二区三区男人的天堂| 少妇人妻无码| 欧美97在线观看| 久久999久| 99啪啪| 欧美97网| www色色com| 精品人体无圣光凹凸| 久久无码一区二区二三区性色| 国产搭汕a级片| 国产后入式在线观看| 国产精品97超碰| 日本亚欧爱爱| 亚洲色图欧美| 人人爱人人乐人人操| 精品国产乱码久久| 18禁无码永久免费无限制| 欧美伊人久久综合网| 国产精品久久妻无码网站| 澳门黄片一香蕉视频| 免费人成在线观看网站品爱网| 三久久久四久久久久| 曰韩中文人妻视频| 欧亚乱色熟女一区二区| **一级毛片国产| 精品91摸| 超碰一区二区| 亚洲日韩精品久久久久一区壹牛| 天堂无码精品国产久| 国产原创剧情在线丝袜| 丝袜内射| 亚91网| 国产兽交视频在线播放| 深夜激情无码| 一区在线观看中文字幕| 国模不卡一本二本三电影| 久久久久久裸体| 97任你吞精| 欧美黑人与女人91| 97在线视频观看| 正宗无毛一线天嫩逼| 日本人体九九九九九九| 国产性刺激| 26uuu性物| 久草男人天堂| 激情综合网五月婷婷五月天| 丰满熟妇大乳做爰| 无码一区二区三区四区五区六区七区八区九区十区视频 | 人妻人久久精品中文字幕| 久久综合九九| 麻花豆传媒剧国产MV出差| 99色婷婷| 久操凹凸视频| 青娱乐国产剧情av一区| 欧美内射少妇| 激情第四色| 福利伊人玖玖国产| 国产免费黄色一级大片| 人妻丰满熟妇av无码区蜜桃| 一起草精品人妻| 乱人乱色一区二区三区免费 | 日韩欧美大片免费高清啪啪| 偷拍新久久| 亚洲男人天堂2016| 99热aaa| 大香蕉AV在线| 乱伦熟女区| 中国女人内射6XXXXX| julia国产在线| 九草九九九| 旡码电影特区| 国产欧美一区二区| 免费久久精品麻豆一区二区av| 26uuu性| 国产无码高清操逼视频| av一区二区三区不卡| 青青草中日韩在线| 欧亚揄拍偷拍精品视频| 亚洲资源网| 日产成人久久| 加勒比性爱成人在线| 天堂网 主播 亚洲| 精品二区三四区五电影 | 婷婷午夜清品久久久久久久性色视频观| 91日产桃蜜| 另类一区| 国产精品视频内谢女人| 久久美女福利是上海美女| 大香蕉日亚洲日本亚大| 五月天激情婷婷| 91无码西班牙视频在线| 日本三级大片| 欧美精品精品一区二区| 800zy一区二区| 久久男人精品| 欧美裸体美女日麻屄| 夜色五月天| 欧亚无码视频| 国产麻豆一区二三区| 久久最新免费视频23| 免费操逼91| 日韩欧美麻豆大片| 超碰色97| 91美女在线视频| 亚洲国产婷婷在线播放| 九九九久久久W精品| 超碰超碰95| 九月丁香婷婷色| 欧美中文狠| www色婷婷| 日韩欧美国产高清视频| 国产超碰AV在线精品| 乱色老一区二区三区的观看方式| 亚洲欧美日韩国产丝袜自拍中文| 日本女厕偷拍| 国内精品不卡无毒99999| 91麻豆天美国产欧美日| 天天日天天舔东京热| 嗯~啊~快点 死我视频免费看网站| 国产乱子伦一区二区三区免看| 97伦乱| 欧美精品激情| 亚洲图片激情综合另类| 插日本熟女视频| 久久久草成人网站久久久草成人久久久草久久久 | 亚洲精品1区| 狠狠躁天天躁日日躁| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 亚洲性刺激| 欧美性暴力猛交| 大香蕉中文网| 国产精品久久久久亚洲av| 成人黑料社久久| 日本精品国产视频| 综合激情一一91| 9色国产精品一区粉嫩| 中文字幕aⅴ在线视频| 国产又黄又爽又刺激久久久久久| 伊人久久大香线蕉无码| 一区二区三区激情在线观看| 一本一首道人妻少妇免费久久| 99re99在线视频| 99热99在线播放激情| 国产1769在线| 色网1| 国产成年精品高清在线观看91| 亚洲揄拍网| 婷婷五月综合激情| av亚欧| 91AV老熟女视频| 五十路六十路七十路熟婆| 久草精品国产蜜臀 | 亚洲91射| www.色婷婷色综合| 国产精品在线免费| 区日韩亚洲乱码av电影| 91美女高潮| 翔田千里av一区二区三区| 激情小说激情视频| 综合熟女| 友优传媒精品在线一区二区| 99热综合| 2023天天操夜夜操| 国产成人一级av88| 亚洲精品自拍| 日韩av三四区| 精品人妻一区二区视频| 嗯嗯啊好大| 亚洲成人在线高清| 情色五月天网| 性暴力欧美猛交在线直播| 亚洲免费97免费| 亚洲色图尤物视频| 青青草视频导航官网| 国产最新小视频在线播放下载| 人妻久热在线| 中文久久| 天美一二三在线观看Av| 四虎国产精品永久在线囯在线| 成 人 影视 一区 二区 三区 四区 | 天天日骚逼熟女| blacked精品一区国产| 国产兽交视频在线播放| 欧美Aⅴ| 青青草大香蕉在线视频| 台欧久久精品视频| 久热91| 麻豆精品久久久久久久| 亚洲欧美91| 久久综合女优| 午夜啊啊| 丰满人妻-区二区三区免费| 探花在线免费观看视频国产一区| 欧美特大AA级黄片| 内射小黄片| 精品日韩中文在线| 亚洲第一黄色av网站 | 国产久久久9999| 97超碰69| 大香蕉欧美日韩| 精品小视频在线| 国产乱码精品久久久久久| 亚洲永久永久永久永久一级一级一级精品| 欧美色图99| 18禁免费视频| 岛国视频免费在线观看| 国产一级内射无挡观看| 亚洲色鬼| Julia在线播放亚洲久久| 人妻碰碰碰碰碰碰| 日韩资源网| 久久国产999| 色狠狠综合噜一二三区| 啊啊啊97视频| 97亚洲国产| 蜜臀在线网站| 啊啊啊啊啊在线| 欧美高清无码免费视频高清版| 草B在线| 骚货人妻偷情自拍在线视频| 国产亚洲精品美女久久久m| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 丝袜综合| 日韩在线人妻网站| 97伊人超碰| 国产后入清纯| 亚洲色电影在线| 欧美性爱无码一区二区三区| 精品精品精品| 天天操美美| 97久久精品不卡| 亚洲女优有码无码高清| 大香蕉综合网| 国产又黄又粗又猛大片| 懂色AV中文| 亚洲日韩美国人妻| 激情 欧美 亚洲 小说| 亚洲图片欧美另类综合免费视频大大香| 亚洲人妻色图| 天天操天天干一区二区 | 综合久久欧美| 精品97久久综合| 综合欧美色图| 亚洲天堂中文字| 欧美综合骚| 天堂涩涩| 国产51色综合久久免费| 波多野42部激情无码喷潮| 欧美老熟另类| 蜜臀网址在线| 国产懂色精品国产av| 操逼天美3区| 免费观看日本操逼视频| 热久日综合| 91痴汉| 宅男午夜在线视频| 国产精品久久久蜜臀| 久久久99免费| 伊人久久亚洲中文字幕不卡| 91丝袜美女国产| 欧美 色 亚洲| 99久久久| 日韩人妻无码不卡网站| 91视频观看网站| 玖玖玖玖精品国产剧情| 欧美东京热青青草| 亚洲情欲| 中文字幕欧美精品亚洲日韩蜜臀| 夜夜国自区| AV中文字幕三四五| 久久精品国产97欧美精品亚洲| 骚货 中文字幕 av| 97欧美综合| 日日干日日摸| 永久免费观看的毛片的网站| 久久久久亚洲三级电影| av在线一区二区三区| 亚洲国产一区二区三区四区国产| 激情五月天色色| 久草视频分类在线| 人妻日日夜夜精品| 亚洲涩涩| 女人香蕉久久毛毛片精品| 欧美第二页| 青草草免费网站av| 丁香色五月 97干| 欧美黑人猛交春色影视大全| 久噜噜| 九色 蝌蚪 熟女自| 日韩一级欧美一级国产一级台湾| 大香蕉久| 欧插网站| 天天爽入口| 久操免费在线| 国产网站在线播放| 久久国产精品91| 欧美日韩人妻婷婷一区| 亚洲资源站| 精品成人动漫一区二区| 高跟丝袜AV专区国产| 日韩在线视频1234| 97色诱| 91黑丝美女| 日韩999| 欧美一区二区成人一卡| TS人妖另类精品视频系列| 久久999久| 欧色综合| 亚洲深夜福利| 日韩成人人妻网站| 欧美日韩*字幕一区| 午夜国产成人福利视频| 中文字幕一区二区三区人妻少妇在线| 91老司机精品| 高清无码 国产精品| AV不卡在线| AND人妻系列| 天天天乱色综合全| 神马久久午夜| 欧美黄色片AAAAA| 亚州色图欧美| 日本久久女同性恋视频| 深爱激情五月天| 91国产在线精品| 欧美人与动性人交a| 亚洲情色中文字幕一区| 欧美美女在线高潮999| 日本道人妻久久久在线不卡色视频| 亚洲无无码αⅴ每日更新| 91大胆欧美| 日本孕妇孕交| 97超碰人人模人人拍人人| 人妻中文在线| 午夜操操操| 最新日产中文在线麻豆| 男人的天堂久久狠| 四虎影视永久在线免费| 欧美色图片91| 国产精品白丝在线播放| 中文字幕在线观看第二页| 91色婷婷综合久久中文字幕二区| 黄色片,com| 试看福利| 日本东京热加勒比久久| 欧美日韩天堂| 久久一区二区高清免费| 蜜桃中文字日产乱幕4区| 91五十路| 人人手机欧洲亚洲国产人妻| 97超碰超碰| 激情久久av一区av二区av| 亚洲欧美综合网站| 麻豆国产96在线| 超碰偷拍| 96久久精品一二三区色欲| 五月开心久久AV官网| 91综合在线| 日韩人人精品| 99久久婷婷丁香| 日本不卡免费二区| 五月综合色| 欧美性色网| 青娱乐国产剧情av一区| 91艹逼精品| 亚洲春色欧美激情自拍| 蜜桃色色网站视频三区| 骚女天天综合网| 91九久| 青娱乐淫乱1314| 亚洲欧洲无码97久久精品| av无线看| 欧美—性—交—色| 亚洲91av| 国产一区自拍欧美日韩| 久久久熟女一区| 无码乱人伦中文视频| 日日摸日日碰夜夜爽视频| 日韩美女久久一区二区三区| 国产高清吃奶免费视频网站| 久久噜噜噜精品国产亚洲综合| 婷婷亚洲综合| 久久精品国产亚洲AV清纯| 亚洲免费97免费| 国产懂色精品国产av| 一二三四区操操Av| 日日日啊啊啊| 首页中文字幕中文字幕免费| 欧美日韩国产色五月综合在线| 婷婷在线播放| 日韩乱码Av| 91骚熟女| 亚洲、日韩、综合、另类| 国产精品久久久久久亚洲色欲| 好吊色一区| 日本理论在线| 男人天堂网手机版婷婷| 无套内射性感少妇视频| A片大香蕉在线| 无码一区二区精品视频久久久春药| 亚洲一级性爱视频免费看| 亚洲欧洲中文日韩女优乱码| 国内黄色精品| 午夜福利国产欧美日韩夜夜| 日韩日韩日韩-国产乱码精品一区二区| 四虎AV无码| 一区二区三区免费视频入口| 久久精品小视频| 久久精品无码不卡| 开心五月天激情网| 成人羞羞视频国产| 亚洲天堂人人妻| 就去色综合| 370p日韩欧美亚洲精品| 亚洲欧美日韩电影网站一区 | 丁香六月婷婷综合| 国产精品视频播放| 天天干,天天日| 99热婷婷一区二区三| 日本操逼视频不卡直接放| 人人妻人人狠人人| 黄色十八禁| 欧美 亚洲 大香| 欧亚日韩一区在线| 99热18这里只有精品| 欧美97在线观看| 玖玖人人爱| 久久亚洲婷婷| 91精品伊人久久久大香线蕉91| 欧美精品久久久久久久丰满| 国产高清成人免费视频| 亚洲黄色| 91欧美情色| 亚洲色图 91| 97热视频在线观看| 久久99精品九九久久久婷婷| 天天cao在线| 1二区9| 久久人人爽爽爽人久久久| 日韩无码嘿咻黑热久| 色婷婷电影网| 中文字幕在线观看丝袜| 国模不卡| 精品性爱一二三区| 一级久久久久久久久久久| 亚洲国产尤物yw在线观看| 国产一区免费午夜视频| 亚洲无码国产探花在线观看| 99亚洲国产精品色一区二区三区| 加勒比伊人| 欧美日本视频一区| 97在线观看免费| 91四海无码日韩欧美| 精品人妻一区二区三区不卡断| 97chaopengongkai| 欧美少妇色图| 国产第12页| 国产日韩区| 久热香蕉精品在线视频| 最新国产亚洲精品精品国产亚洲综合| 亚洲无线码一区国产欧美国| 无码一区免费在线不卡| 高清在线不卡一区二区 视频| 午夜视频好爽啊| 99久久无码| 无码外流操逼视频| 嗯啊抽插大香蕉网页| 艹少妇网站| 亚洲日韩精品在线播放| 很很干很很操| 极品内射| daxiangjiao你懂的| 欧美92| 国产成人91一区二区三区| 性爱Av免费| av天堂手机版追回| 四虎永久在线精品免费网址 | 日本 情色 1区2区3区| 国产日韩美女小穴视频网站不卡| 青青青草原| 国产路线专区| 欧美亚洲色图另类国产| 亚洲色诱惑| 大香蕉天天看妹子| 日韩欧美中文字亚洲慕| 日逼视频日本| 国产精品成人午夜福利| 网站A V在线| 亚洲九月丁香| 男人天堂站| 97国产精品久久久久 | 美女毛片999| 精品久久久久久中文字幕三区| 91女优在线观看| 天天操夜夜操| 中文字幕精品探花视频| 爱媛媛久久国产福利| 伊人97色天使| 蜜桃臀久久| 亚洲欧洲自拍图片专区满春格 | 久久成人东京热人妻| 国内毛片欧美香蕉精品| 久操热线| 啊啊啊97视频| 96精品久久| 成人福利视频网| 国产suv精品一区二区四区999 | 91成人久久| 欧美熟爽综合| 久久久月天| 91久久久久久久久18| 2000亚洲男人天堂| 操人妻视频| 久久精品中文字幕无码l| 91干熟女| 天天日日夜夜| 亚洲中文sv| 国模艳艳啪啪一区| 91人妻视频| 人妻少妇精品| 久久婷婷亚洲| 黄色十八禁| 久久久久久亚洲中文| 青青11操操操操操操操操| 中文字幕一区二区无码成人| 丁香五月综合| 国产日韩人人| 自拍偷拍第26| 天天淫人人妻日日色| 99在线精品视频| 爽 好舒服 无码刺激久久| 国偷自 一区二区| 韩国一级婬片A片无码天美| 日本中文字幕高跟| 激情在线青青操| 国内自拍 日韩激情 99| 中精品一区二区三区| 国产成人亚洲精品无码古代早漏男| 亚洲天堂自拍| 日韩熟女操逼| 伊人久久大香线综合无码| 青青草字幕AV| 成人亚欧免费视频| 国模91| 欧美色性爱| 久久久久人| 国产女生在线| 久久久青青草| 99热思思| 超碰97COm中文| 中文字幕二区日韩天堂| 五月天亚洲色图| 欧美日韩 强奸乱伦| 秋霞男人网| 2025年A片视频精品| 狠狠干精品一二三四五六2022| 人人操人人摸avav| 日韩av色图综合| 久久精品中文字幕观看| 91色人| 色爱国产| 神马久久久久久| 嗯啊啊啊轻点视频 | 亚洲素人网| 最新av中文字幕高清| 亚洲自拍另类丝袜综合| 操高情无码| 成人情色综合网| 台欧久久精品视频| dy888午夜老子影视达达兔| 精品v1区| 亚洲欧美日韩二区视频| 欧美激情一| 美女诱惑爱爱| 欧美真人抽搐一进一出gif| 亚州日韩97| 青青草丝袜在线视频| 91色宗合| 亚洲美乱| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 日本黄色裸日本黄色裸体| 日本成人电影资源网| 国产嫩草精品A88AV| 欧美性区| 婷婷中文网| 97视频在线看| 日本久久综合| 久热婷婷| 精品人妻一区二区视频| 四虎影视国产精品| 天天综合亚在线| 这里只有精品视频在线观看麻豆| 亚洲日韩狠狠撸视频| 91暧暧| 亚洲密乳AV| 欧美92| 秋霞一区二区三区四区五区六区七区| 久草福利在线资源站| 欧美精品二区视频在线| 亚洲AV在线资源| 尤物av网站| 亚洲欧洲国产综合av| 亚洲情色欧美| 色婷婷一区二区三区久久午夜成人不| 色综合一区二区三巨| 亚洲天堂7777| 久久r精品| 人妻人人澡人人爽人人| 综合色图区| 大香网站| 在线播放免费av福利片| 91在线丝袜| 亚洲精品一卡二卡三卡福利视频网站| 亚州操操穴网| 日本网色| 鸡巴插逼视频| 欧美在线天堂| 黄色高清久久无码依人| 国产区91柔拿会所技师| 国产精品盗摄 偷窥盗摄| 97伊人网| 艹精品| 久久久99久9| 久久久久国产无av| 亚州操逼图| 一级做受视频免费是看美女| 99re久久| 亚洲脚交| 日韩精品国产精品五码一区二区| 九九香蕉网| 国产性爱乱伦AV| WWW操逼| 亚洲国产精品无码AV久久| 欧美情色亚洲| 嫩草 我啊~嗯~在线| 天美传媒AV国产在线| 亚洲精品丝袜| 人妻夜夜爽天天爽麻豆三区网站| 久操大香蕉手机视频在线看 | 97在线青| 色噜噜狠狠色综无码久久合欧美| 97中文天堂| 免费中文在线| 搡老女人老熟女91| 大香蕉之青青草原| 色婷婷丁香五月| 日韩簧片免费看| 欧美成人贴图| 欧美图片偷拍| 精品亚洲国产成人精品| 日本不卡五区| 人妻激情在线视频| 精品熟女一区=区三区| 午夜寂寞欧美| 中文字幕av亚洲精品| 精品十八在线观看| 琪琪精品免费一区二区三区| 欧美久久人体| 东北女人操比视频| 超碰99在线| 殴美在线AⅤ| 97无码视频在线播放| 免费男人的天堂| 熟妇人妻一区二区三区| 日韩乱插| 黑人嘿嘿嘿超爽免费视频| 欧美综合在线91| 成人精品电影| 久久e6只有精品| 婷婷探花久久精品一区| 97精品国产97久久久久久免费| 无码精品蜜桃一区二区三区ww| 亚洲欧洲激情卡通另类文学四射小说网站| 久久草视频污视频| 精久久久91| 中文字幕老熟妇黄色视频| 亚洲高清无码在线桃色| 亚洲熟女乱色一区二区三区| 亚洲资源一区| 四虎884| 综合97亚洲| 国产极品99热在线播放69| h无码动漫在线观看| 乱伦熟女区| 狠狠干妹子| 操B久久| 青青草自拍视频在线播放| 啊啊啊好爽快点啊啊啊嗯嗯| 亚洲啪啪视频一区二区| 精品国产91av一区二区三区 | 久久精品店| 久久精品99久久久久久| 天天综合有色网| 熟女一区二区| 国产免费永久精品无码| 久久久久国产精品喷潮免费观看臀 | 校园春色 亚洲| 色哟哟精品1精品2| 中文字幕午夜精品久久久| 999综合色| 丁香婷婷激情五月天无毒不卡 | 欧美中字不卡| 日日夜夜骚| 97操97色| 色五月首页| 五月丁香激情综合网| 激情AV| 狠狠操狠狠爱| 亚洲国产综合久久天堂| 很很干很很操| 国产一区二区三区中文字幕| 啊啊啊啊啊操我视频| 亚洲日韩青青草色月| 久久大线蕉一区| 亚洲国产中文字幕| 九一综合网| 亚洲诱惑天堂 | 一区操逼日比视频| 17c嫩草51久久91嫩草| 久96热在线观看视频| 99色热国产视频精品| 亚洲精品99999| 日韩性爱长视频免费| 九月激情婷婷| 人妻人人做人人澡人人爽欧美一区| 国产精品岛国片在线观看| 久久人妻视频网| 熟妇亚洲一区二区三区| 97少妇人妻中文字幕久久| 欧美姓爱综合网| 人人模人人看| 黄色av片三级三级三级免费看| 天天天天操| 日韩精品高清资源在线| 91亚洲丝袜| 精品熟女呻吟久久91| 国产狂喷潮在线精品| 免费作爱一级视频| 久99热| 黄色小说亚洲| 又黄又硬又粗又长国产视频| 中文字幕在线免费观看 | 在线性黄高清免费视频| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 国产性感骚丝袜在线| 亚洲自拍一区夜夜操| 97精品网站| 国产日本一区二区三区蜜臀在线观看| 狠狠久久手机视频精品| 色操逼网| 天天摸,夜夜摸| 久草毛片电影怡| 精品无码一区二区人妻久久蜜桃| 97精品视频在线| 色吧 综合| 囯产操逼片| WWW4虎| 欧美另类天堂| 午夜一级免费毛片| 日本三级中国三级99人妇网站| 美女AV一区二区| se..亚洲欧美| 国产精品探花视频| 打av高清| 91天天| 久久精品亚洲成a人天堂| 69精品人人人人| 亚洲动态色图| 97青青操视频| 国产精品国产自产高清AV| AA丁香综合激情| 亚洲综合影院| 看黑丝美女操逼青青网站| 三级精品三级在线观看| 粉嫩小泬久久久一区二区| 天堂中文日本在线观看| 中文熟女五十乱码在线| 九月色婷婷| 日韩精品在线视频,日韩精品……| 91热爆在线| 91天天综合| 欧美夜色| 国产精品ⅴ无码大片在线看.| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 日本熟女免费視颖| 青青欧美| 97久久久| 国语对白露脸XXXXXX| 天天日天天操VV| 操逼操网| 久久天堂| 天天夜夜久久| 亚洲综合校园春色| 亚洲另类春色| 色婷五月| 啊啊啊慢点| 色五月首页| 欧美97av| 婷婷激情五月综合| 怡春院久久| 日本色婷婷| 精品人妻久久久久一区二区三区| 日韩一级欧美一级在线观看| 亚洲999综合| 亚欧性爱无码| 午夜福利区| 中文字幕日韩人妻视频| 久啪| 国产真实野战在线视频| 嗯嗯啊啊好大好爽| 国产欧美亚洲精品a第2页| 日本五区不卡| 欧美综合区| 精品国产AV一区天美传媒| 99精品免费| 久久免费少妇| 69综合网| 欧美高清18A片| 情色五月天久久久| 国产亚洲精品农村妇女| 亚洲中字慕不卡| 国产高清免费不卡av| 99精品久久久久久| 婷婷午夜| 亚洲欧美999| 歐美一級亂黃99在綫精品| 黄色区免费观看中文字幕| 亚洲影视第一页| 婷婷伊人网| 91大神精品长腿在线观看网站| 9999亚洲电影| 在线精品福利免费播放| 亚洲久久久| 黑人与人妻| 欧美成人一级免费电影| 午夜精品久久久久久久第一页按摩| 天天综合精品| 成人久久久| 夜夜国产一区| 免费看日产一区二区三区| 超碰午夜| 久久久成人精品| 国产人妻精品久久久一区二区三区 | 国产精品伦理| 超碰在线人妻不卡| a在线视频免费观看| 老女人综合| 神马久久69| 中亚精品极乱| 欧美日韩电影成人在线| 91青青| 久啪| 99成人| 国产色精品午夜大片| 欧美精品97| 亚洲骚男同com| 欧美在线伊人色| 抽插无码高清一区| 精品人妻免费观看| 国产中文字幕在线观看| 五月天婷婷成人网| 亚洲精品天堂久久A∨51成人漫| 97超碰超| 成年人免费观看网站| 啊啊啊啊二区好大| 久久九九国产精品| 一级片视频啪啪| 夜夜精品视频| 精品美女少妇一区二区| 日韩在线女优天天干| 97色碰| 免费看日产一区二区三区| 亚洲欧美综合区自拍另类| 九九九九9999| 亚洲成成熟女人综合一区二区| 爱妻综合网| 四虎影院成年人片| 大香网站| 亚洲天堂中文字| 岛国1区2区3区在线观看| 欧美色图另类图片| 91九色丰满高潮| 亚欧美综合网。| 九九碰九九爱97| av午夜影院在线播放| 搞中出久久| 成人26uuu| 蜜臀网 一区| 九九九九九九精品| 97超碰伊人| 久久久久久久久九九久孕交| 国产农村妇女一区二区| 婷婷色网| 日韩欧美福利视频看看| 久久久96| 九九视频黄色片| 美国aaaaa一级黄片| 舔舔啊| 超碰爽人妻熟女Av| 欧美在线色图| 极品少妇99| av操操不卡| 91欧美偷拍| 久久久久久久国产| 亚洲图片 91| 3571色综合一区二区二区| 91久久久久久| 日韩精品区二区三区不卡| 97色色视频| 中文字幕一区 二区三四五 区日 日骚| 97色色色| 精品久久久中文字幕不| 大鸡吧尹人在线|