久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

Actor-Critic實戰(zhàn):優(yōu)勢函數(shù)、GAE與A2C訓(xùn)練循環(huán)拆解 強(qiáng)化學(xué)習(xí)學(xué)到 Actor-Critic 這一節(jié)基本算是從會跑 demo跨到能理解現(xiàn)代 RL 工程的分水嶺。前面講策略梯度時REINFORCE 用一整條軌跡的回報去估計梯度方差大到需要幾十次采樣才能勉強(qiáng)收斂講到值函數(shù)近似時又發(fā)現(xiàn)只學(xué) Q 值沒法直接輸出策略。Actor-Critic 把這兩條線擰在一起一個網(wǎng)絡(luò)負(fù)責(zé)決定動作一個網(wǎng)絡(luò)負(fù)責(zé)評價動作好不好用評價網(wǎng)絡(luò)的輸出給決策網(wǎng)絡(luò)的梯度降方差。A2C、A3C、PPO、DDPG、TD3、SAC 這一整串現(xiàn)在還在被廣泛使用的算法骨架都是它。這篇文章是2026 新版強(qiáng)化學(xué)習(xí)從入門到精通系列的第 42 篇重點不再停留在概念解釋上而是把 Actor-Critic 的網(wǎng)絡(luò)結(jié)構(gòu)、優(yōu)勢函數(shù)、GAE、損失函數(shù)組合、訓(xùn)練循環(huán)這些真正影響能不能跑通的部分拆開講。文中的每段代碼都可以直接復(fù)制運行環(huán)境用 PyTorch GymnasiumCartPole 這類任務(wù)在純 CPU 上幾分鐘就能看到曲線抬起來不需要顯卡。讀者對象很明確已經(jīng)寫過 REINFORCE 或 DQN、知道策略梯度和貝爾曼方程大概在講什么、但自己動手寫 Actor-Critic 時總是卡在為什么 loss 是這三項加在一起優(yōu)勢函數(shù)到底怎么算critic 學(xué)崩了怎么辦這幾個問題上的人??赐曛髴?yīng)該能獨立寫出一個可訓(xùn)練的 A2C并且知道把它換成 PPO 需要動哪幾行。1. Actor-Critic 核心能力速覽先把這套架構(gòu)的關(guān)鍵信息壓縮成一張表后面所有內(nèi)容都是圍繞這張表展開的細(xì)節(jié)。需要注意Actor-Critic 不是某一個算法而是一類架構(gòu)范式表里列的是這個范式的共性以及它在主流算法上的具體投影。能力項說明架構(gòu)組成Actor 策略網(wǎng)絡(luò)輸出動作分布Critic 價值網(wǎng)絡(luò)輸出狀態(tài)價值或動作價值解決的核心問題策略梯度方差過大、單步更新效率低、無法在線學(xué)習(xí)梯度估計方式用 Critic 給出的價值作為基線或優(yōu)勢替代蒙特卡洛回報支持的動作空間離散動作Categorical與連續(xù)動作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)驗回放采樣效率同策略版本中等異策略版本較高訓(xùn)練穩(wěn)定性依賴優(yōu)勢歸一化、梯度裁剪、價值損失系數(shù)等工程手段硬件門檻小型任務(wù)純 CPU 可跑Atari 級別建議單卡 GPU并行環(huán)境吃 CPU 核數(shù)依賴環(huán)境Python 3.10、PyTorch 2.x、Gymnasium 1.x版本以實際安裝為準(zhǔn)典型調(diào)試周期CartPole 級別分鐘級MuJoCo 級別小時級適合場景連續(xù)控制、機(jī)器人仿真、游戲 AI、推薦策略優(yōu)化、對話策略學(xué)習(xí)這里要提前說清楚一個容易混淆的點很多教程把 Actor-Critic 當(dāng)成一個具體算法講實際上它更像一個模板。你在模板里換掉優(yōu)勢估計方式就得到 A2C換掉更新約束就得到 PPO把 Critic 從狀態(tài)價值換成動作價值并加經(jīng)驗回放就得到 DDPG。理解模板比背算法名有用得多因為真實項目里你幾乎總要改一點東西。2. 從策略梯度到 Actor-Critic為什么必須有一個 Critic先把動機(jī)講透否則后面看到三項 loss 相加會覺得是拍腦袋湊出來的。最原始的策略梯度定理給出的是這樣一個式子梯度等于策略對數(shù)概率乘以回報的期望。用采樣估計時我們用一整條軌跡的累計回報 G_t 去乘 log π(a|s)。問題在于 G_t 是一個隨機(jī)變量同一狀態(tài)下采樣十次可能得到十個差別很大的回報梯度方向跟著劇烈抖動。為了讓這個估計穩(wěn)定下來一個很自然的想法是減去一個與動作無關(guān)的基線 b(s)因為減去它不會改變期望只會改變方差。數(shù)學(xué)上可以證明E[?log π(a|s) · b(s)] 0所以基線是免費的降方差工具。那么最優(yōu)的基線是什么理論上是狀態(tài)價值函數(shù) V(s)。把 G_t 換成 G_t - V(s)方差會顯著下降。而這個 G_t - V(s) 恰好就是優(yōu)勢函數(shù) A(s,a) 的一個無偏估計它衡量的是在狀態(tài) s 下采取動作 a比平均水平的動作好多少。到這里Actor 的更新方向就變成了往優(yōu)勢為正的動作上加概率往優(yōu)勢為負(fù)的動作上減概率。接下來的問題是怎么拿到 V(s)。用蒙特卡洛方式統(tǒng)計回報當(dāng)然可以但那樣必須等回合結(jié)束學(xué)習(xí)是離線的、慢的。Critic 網(wǎng)絡(luò)的作用就是用函數(shù)近似的方式直接學(xué) V(s)而且可以只依賴單步的 TD 誤差來更新實現(xiàn)真正的在線學(xué)習(xí)。這就是 Actor-Critic 的核心交換用 Critic 引入偏差bias換來方差的大幅下降和在線更新能力。用一句話概括兩者分工Actor 負(fù)責(zé)試Critic 負(fù)責(zé)評。Critic 的評價越準(zhǔn)Actor 的更新方向越穩(wěn)Actor 的策略越好Critic 面對的數(shù)據(jù)分布越集中學(xué)起來也越容易。這種互相依賴也帶來了這套架構(gòu)最典型的失敗模式——兩個網(wǎng)絡(luò)一起崩后面第 9 章會專門講怎么拆解。關(guān)于偏差和方差的取舍還有一個重要的工程變量用 TD(0) 的單步誤差偏差大但方差小用蒙特卡洛回報方差大但無偏中間的 n-step 回報和 GAE 就是在兩者之間滑動。這個滑動的旋鈕直接決定了訓(xùn)練曲線是平滑爬升還是劇烈震蕩是 Actor-Critic 調(diào)參里性價比最高的一個參數(shù)。3. 環(huán)境準(zhǔn)備與最小可運行工程骨架Actor-Critic 對環(huán)境的依賴其實很輕它不需要 CUDA 編譯、不需要下載大模型權(quán)重甚至不需要顯卡。真正容易出問題的地方在于包版本不匹配導(dǎo)致的 API 變更尤其是 Gymnasium 從 Gym 分叉出來之后step 的返回值從四項變成五項很多老教程直接復(fù)制過來就會報解包錯誤?;A(chǔ)依賴如下。版本號這里不寫死因為不同機(jī)器上的 CUDA 與 PyTorch 對應(yīng)關(guān)系不同寫死反而容易踩坑原則是 PyTorch 官方安裝向?qū)Ыo出的組合優(yōu)先。# 創(chuàng)建獨立環(huán)境避免和已有項目沖突 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 源換成官方對應(yīng)的 CUDA 源即可。對于 CartPole、Pendulum、MountainCarContinuous 這類低維狀態(tài)任務(wù)CPU 訓(xùn)練速度快過 GPU因為數(shù)據(jù)傳輸開銷會蓋過并行計算收益這一點在后面的資源占用章節(jié)還會提到。建議的工程目錄結(jié)構(gòu)如下把網(wǎng)絡(luò)定義、算法實現(xiàn)、訓(xùn)練腳本、配置分離后面要換成 PPO 或者換環(huán)境時改動量會小很多actor_critic_demo/ ├── configs/ │ └── a2c_cartpole.yaml ├── models/ │ └── networks.py # Actor / Critic 定義 ├── algos/ │ ├── a2c.py # A2C 更新邏輯 │ └── gae.py # 優(yōu)勢估計 ├── train.py # 訓(xùn)練主循環(huán) ├── evaluate.py # 評估與可視化 └── requirements.txt驗證環(huán)境是否裝好跑一段最小檢查腳本就夠了。這段腳本同時能確認(rèn) Gymnasium 的 API 版本因為reset返回(obs, info)、step返回五項這個約定是從 Gymnasium 開始統(tǒng)一的如果你的環(huán)境返回四項說明裝的是老版本 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 返回項數(shù)正確reward , reward) env.close()運行結(jié)果里如果打印出step 返回項數(shù)正確環(huán)境就沒問題了。如果這里報too many values to unpack說明裝的是老版 Gym最簡單的處理是統(tǒng)一升級到 Gymnasium而不是在代碼里寫兼容分支后者會讓后面所有邏輯都變臟。4. Actor 與 Critic 的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計網(wǎng)絡(luò)結(jié)構(gòu)是 Actor-Critic 里最容易被輕視的部分。很多人直接把別人的 MLP 抄過來層數(shù)、激活函數(shù)、初始化全都不動結(jié)果在某個任務(wù)上怎么調(diào)都學(xué)不動。實際上 Actor 和 Critic 對輸出的要求完全不同一個是概率分布參數(shù)一個是標(biāo)量價值兩者的輸出層設(shè)計必須分開考慮。4.1 離散動作空間的 Actor離散動作下Actor 輸出的是每個動作的 logit經(jīng)過 softmax 得到概率再用Categorical分布采樣。輸出層不要加 softmax因為 PyTorch 的Categorical內(nèi)部會做 log_softmax提前做一次會導(dǎo)致數(shù)值不穩(wěn)定這是新手最常犯的錯誤之一。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)輸入歸一化不理想時容易產(chǎn)生大片死區(qū)而策略網(wǎng)絡(luò)對梯度方向很敏感死區(qū)會導(dǎo)致某些動作永遠(yuǎn)采不到探索直接退化。這不是絕對規(guī)則但在連續(xù)控制和低維狀態(tài)任務(wù)上Tanh 的魯棒性明顯更好代價是訓(xùn)練稍慢一點。4.2 連續(xù)動作空間的 Actor連續(xù)動作要輸出一個高斯分布的均值和對數(shù)標(biāo)準(zhǔn)差。均值通常經(jīng)過 tanh 壓到 [-1, 1]再按動作上下限縮放對數(shù)標(biāo)準(zhǔn)差用可學(xué)習(xí)參數(shù)并且要 clamp 到一個合理區(qū)間否則訓(xùn)練中期可能出現(xiàn)標(biāo)準(zhǔn)差指數(shù)爆炸采樣出來的動作全是邊界值。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用獨立參數(shù)而不是網(wǎng)絡(luò)輸出是因為在大部分連續(xù)控制任務(wù)里探索噪聲的水平與具體狀態(tài)關(guān)系不大獨立參數(shù)收斂更穩(wěn)。如果你做的是狀態(tài)相關(guān)性很強(qiáng)的任務(wù)比如機(jī)械臂在接近目標(biāo)時需要精細(xì)動作可以讓網(wǎng)絡(luò)輸出 log_std但要額外做 clamp。4.3 Critic 的輸出與價值尺度Critic 輸出一個標(biāo)量 V(s)結(jié)構(gòu)比 Actor 簡單但初始化很關(guān)鍵。如果 Critic 初始輸出偏離真實回報的量級太遠(yuǎn)第一批優(yōu)勢估計會全是噪聲Actor 會朝錯誤方向更新一大步之后再想糾正就很困難。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)很重要不寫的話價值張量是[batch, 1]后面和回報張量相減會發(fā)生廣播形狀悄悄變成[batch, batch]損失看起來在下降但學(xué)的是完全錯誤的東西。這類形狀 bug 不會報錯只會讓訓(xùn)練莫名其妙地不收斂排查成本極高。4.4 共享主干還是分離主干經(jīng)典實現(xiàn)里常見兩種寫法一種讓 Actor 和 Critic 共享前面的特征提取層只分開輸出頭另一種完全獨立。共享主干的優(yōu)勢是參數(shù)少、特征復(fù)用、在小任務(wù)上收斂快缺點是梯度會互相干擾如果兩個損失量級差異大容易一方主導(dǎo)把另一方的特征壓掉。完全分離則沒有干擾但參數(shù)量翻倍。我的建議是CartPole、Acrobot 這種幾十維狀態(tài)的任務(wù)可以共享圖像輸入或高維連續(xù)控制一律分離。判斷標(biāo)準(zhǔn)很簡單如果訓(xùn)練曲線出現(xiàn)策略熵快速塌縮但回報不漲很可能是共享主干被價值損失帶偏了改成分離往往立刻好轉(zhuǎn)。5. 優(yōu)勢函數(shù)與 GAE 實現(xiàn)優(yōu)勢函數(shù)的估計質(zhì)量直接決定 Actor-Critic 的表現(xiàn)上限。這一節(jié)從最簡單的單步 TD 誤差一路推到 GAE每一步都給出可運行的代碼。5.1 TD 誤差與 n-step 回報最基礎(chǔ)的優(yōu)勢估計就是 TD 誤差A(yù) r γV(s) - V(s)。它的偏差來自 Critic 本身不準(zhǔn)但因為只用一步真實獎勵方差極小。另一個極端是蒙特卡洛A G_t - V(s)無偏但方差大。中間的 n-step 回報用 n 步真實獎勵加上第 n 步的價值估計def compute_nstep_returns(rewards, values, dones, gamma0.99, n5): rewards/values/dones 均為長度 T 的列表values 多一個 bootstrap 項 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 步的價值估計作為 bootstrap idx min(t n, T) R (gamma ** n) * values[idx] returns.append(R) return returns這段代碼里有個細(xì)節(jié)值得注意for...else結(jié)構(gòu)只有在循環(huán)正常走完沒有被break時才執(zhí)行 bootstrap。如果軌跡中途終止就不該再加 bootstrap 項否則會把下一回合的價值錯誤地算進(jìn)來。這類終止處理錯誤在外行看來只是曲線抖一點實際上是系統(tǒng)性偏差。5.2 GAE 的遞推實現(xiàn)GAE 的做法是把所有 n-step 優(yōu)勢做指數(shù)加權(quán)平均用一個參數(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]最后一項是 bootstrap 價值 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兩個輸出都要用advantages拿去算策略損失returns拿去算價值損失。有些人圖省事直接用 advantages 當(dāng)價值目標(biāo)這是錯的因為價值網(wǎng)絡(luò)學(xué)的是 V(s) 而不是優(yōu)勢兩者差了一個基線。5.3 優(yōu)勢歸一化拿到優(yōu)勢后必須做一步歸一化這是 A2C/PPO 里最廉價也最有效的穩(wěn)定手段import torch def normalize_advantages(adv: torch.Tensor, eps: float 1e-8): return (adv - adv.mean()) / (adv.std() eps)歸一化的作用是把梯度步長控制在合理范圍。不做這一步時如果某批次優(yōu)勢全是正數(shù)且數(shù)值很大一次更新就能把策略推得很遠(yuǎn)直接破壞探索歸一化之后優(yōu)勢的均值是 0、方差是 1更新量級與回報絕對大小解耦換環(huán)境時不用重新調(diào)學(xué)習(xí)率。這個技巧在 reward 尺度差異大的任務(wù)上幾乎是必須的。6. 完整 A2C 訓(xùn)練實現(xiàn)把前面的模塊拼起來就是一段可以直接跑的 A2C。選擇 A2C 而不是 PPO 作為第一個完整實現(xiàn)是因為它沒有重要性采樣比率和 clip邏輯干凈出錯時定位容易。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()這段代碼里有幾個設(shè)計選擇值得單獨說。策略損失用采樣時記錄的logp_list而不是重新前向計算這是同策略算法的標(biāo)準(zhǔn)做法但要記得 detach 優(yōu)勢否則梯度會流進(jìn)價值網(wǎng)絡(luò)導(dǎo)致雙重反傳。價值損失用 MSE如果獎勵尺度很大可以換成 Huber避免離群回報把 Critic 拉飛。熵獎勵的符號是減去因為我們希望最大化熵也就是讓損失里包含負(fù)的熵項。梯度裁剪的 0.5 是個經(jīng)驗值。A2C 在 CartPole 上即使不裁剪一般也能跑但在連續(xù)控制任務(wù)里一次異常大的優(yōu)勢就能讓策略參數(shù)跳變裁剪是最省事的保險。裁剪閾值不要設(shè)得太小0.1 以下會讓學(xué)習(xí)明顯變慢因為大部分正常梯度也會被削。在普通筆記本 CPU 上這段代碼大概 100 到 200 次 update 就能讓平均回報爬到 400 以上200 次全滿。如果跑到 500 次還在 20 左右徘徊基本可以判定是環(huán)境 API 或優(yōu)勢計算出了問題直接跳到第 9 章排查。7. 算法族對比與選型Actor-Critic 這個模板衍生出的算法很多實際項目里選型的關(guān)鍵不是哪個最新而是樣本從哪來、動作空間是什么、允許的調(diào)參時間有多少。下面這張表把常用的幾個放在一起對比。算法策略類型采樣方式動作空間經(jīng)驗回放主要特點典型用途A2C隨機(jī)策略同策略同步多環(huán)境離散/連續(xù)否結(jié)構(gòu)簡單易于調(diào)試教學(xué)、基線對比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ī)器人、樣本昂貴場景選型的實操判斷可以這樣走如果你能拿到大量并行仿真環(huán)境同策略的 PPO 是最省心的選擇它的調(diào)參空間相對寬容社區(qū)實現(xiàn)也最多如果真實環(huán)境采樣代價高、一步要花幾秒那就得走異策略路線用經(jīng)驗回放提高樣本利用率連續(xù)動作優(yōu)先考慮 SAC 或 TD3如果動作是離散的且環(huán)境便宜A2C 足夠作為第一版基線。從 A2C 遷移到 PPO 的改動量其實很小核心是把采一批數(shù)據(jù)更新一次改成采一批數(shù)據(jù)分多個 epoch 更新同時加上重要性采樣比率和 clip。下面這段是 PPO 的策略損失核心可以對照第 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必須是采樣時記錄的、并且在多個 epoch 內(nèi)保持不變。很多人把它每個 epoch 重新算一遍clip 就失效了算法退化成沒有約束的策略梯度訓(xùn)練曲線會突然崩掉。這個坑在復(fù)現(xiàn) PPO 時出現(xiàn)頻率極高。8. 訓(xùn)練監(jiān)控、資源占用與常見問題排查Actor-Critic 的調(diào)試核心是分而治之先把 Critic 單獨看好再看 Actor。因為 Actor 的更新方向完全依賴 Critic 給出的優(yōu)勢如果價值估計本身在亂飄后面所有調(diào)參都是在錯誤的地基上做微調(diào)。8.1 必須監(jiān)控的四個指標(biāo)第一是平均回合回報看趨勢不看單點用最近 20 到 100 回合的滑動平均。第二是策略熵它反映探索程度CartPole 上健康的曲線是從 0.69 左右緩慢下降到 0.3 附近如果十幾輪就掉到 0.05說明策略過早確定通常需要加大熵系數(shù)或降低學(xué)習(xí)率。第三是價值損失它應(yīng)該整體下降但允許波動如果持續(xù)上升說明價值目標(biāo)尺度有問題。第四是梯度范數(shù)裁剪前的梯度范數(shù)突然放大到幾十上百往往是某批次優(yōu)勢異?;虺霈F(xiàn)了數(shù)值問題。把這幾項寫進(jìn)日志接 TensorBoard 是最省事的做法from torch.utils.tensorboard import SummaryWriter writer SummaryWriter(runs/a2c_cartpole) # 在每個 update 結(jié)束時記錄 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ò)計算。一個 128×128 的 MLP 單次前向在 CPU 上是微秒級而env.step往往要幾十微秒到毫秒級。所以在 CartPole 上把模型搬到 GPU 反而更慢因為每次都要做一次主機(jī)到設(shè)備的拷貝。判斷標(biāo)準(zhǔn)很直接用time.perf_counter()把采樣耗時和更新耗時分別打出來如果采樣占 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ò)的前向和反向會成為主要開銷這時候 GPU 才有意義同時顯存占用主要取決于批量大小和網(wǎng)絡(luò)寬度。觀測這一點最方便的方式是torch.cuda.max_memory_allocated()在訓(xùn)練循環(huán)里定期打印比看任務(wù)管理器準(zhǔn)確得多。并行環(huán)境是另一個資源維度。A2C 原本就設(shè)計成多環(huán)境同步采樣用gymnasium.vector.SyncVectorEnv起 8 個環(huán)境采樣吞吐能提升數(shù)倍但 CPU 占用也會同步上升。這里要注意并行環(huán)境的數(shù)量不是越多越好超過物理核心數(shù)之后上下文切換開銷會吃掉收益一般取物理核心數(shù)的一半到全部之間。8.3 常見問題與排查表問題現(xiàn)象可能原因排查方式解決方案回報長期停在隨機(jī)水平優(yōu)勢符號寫反或未 detach打印單批次優(yōu)勢均值檢查是否恒正或恒負(fù)修正優(yōu)勢計算確保adv.detach()策略熵幾輪內(nèi)塌到接近 0學(xué)習(xí)率過大或熵系數(shù)過小觀察 entropy 曲線下降速度降 lr 到 1e-3 以下熵系數(shù)提到 0.01 以上價值損失不降反升回報尺度與初始化不匹配打印values_pred.mean()與ret_t.mean()輸出層小初始化或?qū)貓笞隹s放張量形狀報錯或結(jié)果異常Critic 輸出未 squeeze檢查values_pred.shape加.squeeze(-1)訓(xùn)練前期正常后期突然崩潰梯度爆炸記錄裁剪前梯度范數(shù)開啟梯度裁剪閾值 0.5 左右換環(huán)境后完全不學(xué)觀測未歸一化檢查 obs 數(shù)值范圍加 running mean/std 歸一化多環(huán)境并行后變慢環(huán)境數(shù)超過物理核數(shù)對比不同 env 數(shù)的采樣耗時降到物理核心數(shù)以內(nèi)PPO 復(fù)現(xiàn)后曲線不如 A2Cold_logp 每個 epoch 重算檢查 old_logp 是否在 epoch 內(nèi)固定采樣時記錄一次全程復(fù)用連續(xù)動作全落在邊界log_std 無約束打印 std 數(shù)值clamp log_std 到 [-20, 2]這張表里最值得展開的是觀測未歸一化這一條。CartPole 的觀測數(shù)值都在個位數(shù)不歸一化也能跑所以很多人養(yǎng)成了不歸一化的習(xí)慣。一旦換到 Pendulum 或者 MuJoCo觀測里同時存在 0.01 量級和 10 量級的維度網(wǎng)絡(luò)會幾乎只對大量級維度敏感小量級維度相當(dāng)于被屏蔽表現(xiàn)為怎么調(diào)都不學(xué)。加一層 running 均值方差歸一化通常一次就解決。9. 最佳實踐與下一步Actor-Critic 這一套東西寫對一次之后復(fù)用價值很高。下面是幾條從實際調(diào)試?yán)锟偨Y(jié)出來的、能明顯減少踩坑時間的做法。第一條永遠(yuǎn)先在 CartPole 上跑通再換環(huán)境。這不是偷懶而是建立一條已知正確的基線。當(dāng)你在 MuJoCo 上調(diào)了兩天沒結(jié)果時把同一份代碼切回 CartPole 跑 50 輪如果也不學(xué)問題在算法實現(xiàn)如果正常問題在超參或環(huán)境適配。這個二分能把排查范圍瞬間砍掉一半。第二條把 Critic 的學(xué)習(xí)率和 Actor 分開設(shè)置。共享一個優(yōu)化器看似簡潔但兩者對步長的敏感度不同Critic 通常需要更快地跟上回報變化Actor 則需要更保守。實踐里 Critic 學(xué)習(xí)率取 Actor 的 2 到 3 倍是常見起點尤其在價值損失下降明顯滯后于策略改進(jìn)的時候。第三條保留一套最小可運行配置。把能跑通的那組超參寫進(jìn)configs/目錄并加注釋說明適用環(huán)境之后每次實驗都從它 fork 出來而不是在當(dāng)前腳本上反復(fù)改數(shù)字。Actor-Critic 調(diào)參很容易陷入改了 A 又影響 B的循環(huán)有基線配置才能判斷某次改動是真的有效還是隨機(jī)波動。第四條批量任務(wù)和長訓(xùn)練要加斷點保存。訓(xùn)練腳本里定期保存模型參數(shù)、優(yōu)化器狀態(tài)和當(dāng)前 update 序號配合日志落盤。強(qiáng)化學(xué)習(xí)的訓(xùn)練曲線經(jīng)常在某個階段突然變好或變差如果沒保存中間狀態(tài)想回到那個點重新實驗就只能從頭再來這在需要跑幾小時的任務(wù)上代價很大。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]第五條評估階段一定要關(guān)掉探索。訓(xùn)練時用隨機(jī)策略采樣是為了探索評估時應(yīng)該用分布的均值或 argmax并且固定隨機(jī)種子跑多個回合取平均。用帶噪聲的策略去評估得到的回報會明顯偏低且波動很大容易誤判模型沒學(xué)好。關(guān)于下一步的擴(kuò)展方向比較自然的路徑有兩條。一條是往 PPO 走把第 6 章的采樣和更新拆成兩段加上重要性采樣比率和 clip這套代碼幾乎可以直接用在語言模型的 RLHF 微調(diào)流程里那邊的 reward model 扮演的就是 Critic 的角色只是評價對象從狀態(tài)變成了整段回復(fù)。另一條是往異策略走引入經(jīng)驗回放緩沖區(qū)、目標(biāo)網(wǎng)絡(luò)和雙 Critic去處理真實采樣代價高的連續(xù)控制問題。如果要在這兩條路上做選擇判斷依據(jù)就一句話你的環(huán)境能不能便宜地并行采樣。能就走同策略不能就走異策略。這個判斷比看任何算法排行榜都可靠。Actor-Critic 的骨架在這兩條路上是共通的先把它吃透后面換算法只是替換幾個模塊的事。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情综合网激情综合| 男人的天堂亚洲| 国产免费操逼| 97免费视频网| 人人妻人射| 97干色天堂| 深夜福利黄片| 久久伊人在线五区| 18啪啪手机免费性爱| 白嫩嫩一区| 亚洲欧洲综合| 日本三级中国三级99人妇网站| 97超碰影音| 国产呦精品一区二区三区下载| 91老熟女| 亚洲 图片 综合91| 久久精品国产亚洲AV嘿嘿| 97资源欧美| 精品午夜福利导航| 亚洲宗合电影| 国产日韩区| 福利天堂| 99热久| 淫穴高潮色图| 九九无码久久精品视频| 成 人 A V免费视频在线观看| 极品五月天噜噜| 黄页av| 国产精品网站www| 嫩草美女久久| 日本欧美不卡| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 香蕉久久AⅤ...| 日韩视频小说在线观看 | 精品少妇一区二区三区免费观看| 亚洲欧美国产中文视频| ai欧美亚洲小说| 欧美三级中文字幕hd| 国产欧美日产一区二区三区 - 国产欧美日| 操逼操逼逼操操逼91| 亚洲精品国产熟女久久久| 欧美人妻精品一区二区| 精品少妇99| 夜夜操二区| 亚洲AV无码秘 蜜桃臀国精产品| 欧美性色综合网| 亚洲精品官网在线观看| 午夜男人的天堂| 成人熟女视频一区二区三区| 国产女生在线| 日韩欧美加勒比| 久久久性爱视频| 天天日天天干天天整| 久久系列| 亚洲色图日韩丝袜制服一区二区五月在线| 91新在线欧美| **一级毛片国产| 天天上日日上日韩精品| 久久r精品| 久久久久久久久久久久久9999| 超碰97人妻免费在线| AV99热18这里只有精品| 涩涩五月天| 天天操人人操狠狠插| 超碰视97中文| 欧美精品激情| 91国精产品| 精品91摸| 亚洲熟女av日韩熟女| 日韩精品色呦呦| 无码九九| 1二区9| 九九亚洲| 亚洲国产日韩欧美熟妇在线| 一线黄色免费性爱片| 男人天堂导航| 日本一久是| 欧美黄色图片| 六六久久日韩不卡| 破苞ⅩXXX性无码动漫无码| 久久久久9999| 欧美亚洲91| 日日夜夜模| 日本久操视频| 91伊人久久在线| 97在线免费看| 久久9亚洲| 不卡免费av在线播放| 性饥渴少妇av无码毛片| 9久在线视频只有精品| 欧美色图亚洲色,麻豆| 日本熟妇色熟妇在线视频播放| 亚洲有码 视频一区| 成人午夜小视频手机在线看| 福利社区午夜一区二区| 中文字幕aⅴ在线视频| 人人人摸人人| 无码不卡八戒| ji熟女.com| 国产日韩无码一区二区三区久久区| 床戏久久久av一区二区麻豆| 亚洲骚男同com| 日日夜夜噜| 亚洲国产一区二区三区在线| 超碰亚洲97| 3571色综合一区二区二区| 无码伊人久久大杳蕉中文无码| 乱伦图一区| 一级性爱啪啪视频| 国产高清在线观看欧美| 精品性爱一二三区| 天天做天天爱天天爽| 五月丁香婷婷啪啪| 五月天婷婷综合网| 日本天堂网| 欧美精品第四五页中文字幕在线观看| 午夜天堂网| 天天操女人| 偷拍网站久久男女男| 后入美女国产| 欧美精品丝袜久久久中文字幕| 尻女朋友一夜| 天天综合网1| 粉嫩少妇自慰在线| 97综合久第一页| 国产AV中文| 欧美一级A一级a爱片久久| 午夜舔阴达高潮视频免费看| 欧美顶级黄色大片免费| 99色在线| 美腿丝袜偷拍亚洲欧美| 欧美综合在线第一页| 国产精品69久久久久孕妇欧美| 疯操AV| 99热婷婷一区二区三| 91综合色噜噜| 中文字幕一区电影在线观看| 日产狠狠干| 色穴精品| 日韩BBN| 国产精品农村妇女| 亚洲欧洲成人在线电影| 一区二区三区视频在线观看免费| 99热精品在线| 日韩av三四区| 日韩在线观看AV| 欧美色亚洲| 亚洲第一精品在线视频| 另类天堂| 91精品又粗又猛又爽| 96超碰网| 美国人人操人人操| 色色色热| 91N综合在线| 国产av强奸美女| 黄色电影在线播放综合网站| 99激情| 久噜噜| 屁股久久久久久| 51一区二区三区| 99这里有精品| 99精品高潮| 欧美91变态| 日本狂喷奶水在线播放212| 色九区| 欧洲精品在线播放| 中文久久久| 91强热人妻| 三级片大波波| 久久久不卡| 亚洲无码?第一页| 1024久久高清视频| 啊啊啊男女| 国产一级内射无挡观看| 精品国产99| 日韩三级av片| 91 亚洲 欧美 日韩 国产 综合| 亚洲AV无码天美传媒一区| 欧美综合传媒| 久久久久久日韩| 亚洲情色五月天| 国产尤物在线三区| 免费观看啪视频| 1204av韩国| 精品999999| 第一高清av中文字幕| 中文字幕日韩人妻视频一区二区三区交换夫妻| 97在线免费视频观看| 国产综合网站在线播放| 天天影视射综合网| 在线免费观看日韩一区| 午夜天堂精品久久| 欧美Ⅴ性爱| 日韩性色b| 男人的天堂com| 欧美视频在线视频免费va| 精品一区二区三区四区外站| 色在线亚洲视频www| 免費人妻夜夜爽天天爽爽一区| 极品另类| 人妻出轨一区二区三区| 诱惑网综合| 五月色综合| 欧美性夜| 丝袜美腿诱惑亚洲欧美视频在线观看 | 色黄色美女大长腿午夜视频| 乱老熟女一区二区三区| 人妻一区二区三区视频| 狠操91,com| 美女极品一区二区三区| 日本熟妇人妻一区二区三区| 欧美最婬乱婬爆婬牲视频| 91 亚洲 欧美 日韩 国产 综合| 色五月激情AV在线| 亚洲欧美经典一区二区| 97伊人网| 绑缚麻绳人妻寝取完整版| 无码人妻精品一区二区三区99不卡| 久久99黄色卞西瓜| 91久久九九精品国产综合| 国产美女激情| 91九色网| 操操操日本的逼| 日产成人久久| 天天综合网国产| 夜夜骑夜夜操| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 免看60秒涩涩视频| 五月天婷婷综合网| 91搞逼视频| av久日| 四色永久成人网站| 精品人妻中文字幕高清| 亚洲天堂日本| 99热超碰| 国产精品久久久三级无码| 91性网| 麻豆AV短剧| 色综合久久88色综合久久天天| 日本幼女18+| 天天看天天综合成人网| 操逼啊啊啊91| 日韩人妻丝袜中文字幕| 大香蕉在线视频重口味毛片在线| 免费综合亚洲中文| 草莓精品视频在线免费观看| 四虎884| 96AV久久久| 东亚亚洲无码高清| 热99这里有精品综合久久| 夜夜综合| 嫩草 人人网精品| 欧美很很操视频| 91av熟女人妻| 暴力av在线| 熟女自慰久久久| AAA久久| 免费观看性欧美一级| 伊人久大| 色老牛| 婷婷综合在线观看| 99热66| 久久久久亚洲AV无码专区少妇| 人人妻人人爽一区二区三区| 性爱AV天堂| 91色图片| 91N欧美| 玖玖玖玖精品国产剧情| 亚洲小电影免费涩涩成人在线高清 | 日本天堂网| 91GD.COM| JULIA一区二区三区在线播放| 国产一级特黄大片处女| 精品无码秘 人妻一区二区| 国产熟码AV| 国产日韩欧美| 性爱视频无打码在线观看| 色欲久久99国产精品久久久久久| 99这里只有精品| 97在线观看免费视频l| 久久久久久久久久久97| 久无码| 久久久久久午夜男人的天堂| 日本熟女中文| 黄aaaaaaaaaaaaaaaaaa色网站| 免费人成在线观看网站品爱网| 91综合色| 欧美91精品国产自产| 超碰久超碰久| 男人的天堂va| 91色花堂| 天天日天天操天天射河南省| 麻豆综合一区av| 久久精品国产亚洲5555| 超碰97精品| 蜜臀中文字幕| 国产肏逼网站| 伊人久久大香线蕉无码| 一本一道vs波多野结衣| 国产一区二区av综合| 国产高清免费不卡av| 一区二区三区黄片免费观看| 性开放中文AV高清无码免费看| 99re国产精品视频| 国产自产自拍| 日本日皮视频逼| 夜夜草网站| AV九九| 亚洲丝袜色| 黑操B| 香一区二区三区| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 人人做人人妻人人夜视频| 亚洲av综合色区图片亚洲| 国产特级毛片AAAAAA高潮流水| 久久久久久国产成人| 岛国激情视频在线观看| 亚洲国产成人精品无码专区| 综合网欧美在线| 久久久久国产亚洲一区欧美色图日韩| 嗯嗯啊啊用力视频免费| 夜夜免费视频| 日本久久女同性恋视频| 国内毛片国产专区二| 国产尹人在线视频免费| 清柠毛片| 330Dv国产女人终合视频极品人与兽| 久久超碰大香蕉| 欧美丝袜美女电影一二三四区| 欧美色道啊| 熟妇女伦乱视频| 亚洲成人精品在线一区| 国产又色又爽又舒服的三级视频| 91精品国产综合久久久蜜臀| 东北女人操比视频| 97综合在线| 1人人看人人摸人人操| 久久97资源 网| 97在线观视频免费观看| 91丝袜视频在线观看| 国产精品亚洲色婷婷久久久| 天天躁日日躁AAAXX| 欧美日韩理论一区| 久久久久久中文| 中国AAAAAA黄色片| 色综合尤物| 国产久久日韩网站导航| 夜夜春夜夜操| 中国少妇XXXX做受| 久久人妻视频| 我想要啊 啊 啊| 热思思免费视频| 婷婷亚洲五月***久久| 久久久久久大| 久久人| 亚洲AV无码黄色强奸| 91人妻丝袜无码| 欧美激情黑人| 国产成人精品必看 | 尤物黄色在线观看网站| 久操黄色视频| 天天综合网日韩| 欧亚性爱视频免费看| 好湿好紧好爽 视频| 91黄射| 国产精品亚洲高清在线| 少妇69中文| 97视频在线播放| 男人的天堂一区| 日韩 欧美 校园一区| 91强在线播放| 色在线视频导航| 色丁香五月婷婷| 91精品丝袜久久久久久| 国产精品亚洲一区二区三区四区| 欧洲乱码一区二区| 精品免费视频国产一区| 亚洲五月丁香花狠狠干一区二区三区| 九九热午夜欧亚国产视频| 天天爽夜夜爽夜夜爽精| 91色五月俺来也| 午夜精品久久久| 色婷婷丁香五月| 亚洲色性| 五月丁香在线| 激情一区二区| 精品 码产区一区二-1080P高清在线www-B029AV| 91青青在线视频| 一区二区影院| 97免费视频在线观看视频| 操逼日批| 先锋音影AV| 亚洲 日本 国产 综合| 人妻在线臀日韩| 亚洲色狠| 麻豆天美传媒在线视频天堂| 日韩激情毛片一级久久久| 美女的肌被草喷水视频| 国产精品探花色| 妇人噜噜| 一区二区三区欧美激情| 精品天堂| 青青11操操操操操操操操| 2019天天干| 欧美日韩免费专区在线| 麻豆国产视频精品观看| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 九九色逼| 日韩欧无码一区二区三区免费不卡 | 白丝被操91| 五月天伊人| 夜夜操青青草| 人人摸人人舔一区二区| 欧美日韩99| 老熟女综合| 日韩天堂av电影在线观看| 99re热有精品视频国产| 久久亚洲天堂| 九九九久千久久激情蜜桃在线看| 人人摸人人添人人操 | 美女黄码视频午夜| 97干在线| 在线无码网站| 97久久久久| 国产自产91区13区| 乱伦av.com| 欧美se综合| 成人日本精品九区| 日本欧美亚洲高清在线看| 变态综合色| 伊人网在线观看| 福利色色| 人妻二区| 亚州综合在线| 呦女网站| 久久久99久9| 日韩成人性爱AV| 在线不欧美| 91强在线播放| yirendaxiangjiashipin| 蜜乳性色无码专日粉嫩骚逼AV| 日本污ww视频网站| 丁香九月激情| 婷婷五月天影院| 日本Xx性爱| 日韩/97| 日韩视频精品在线观看| 亚洲欧美色图| 女人的天堂大香蕉网| 黄页大片在线观看| 欧美日韩国第一区| 美女爽到高潮91| 超碰精品97| 神马久久啊啊| 丰满少妇一区二区三区专区| 欧美精品1区2区3区| 你懂的在线观看区国产| 久久黄人人爽视频| 亚洲成成熟女人综合一区二区| 亚州久久9| 色牛牛AV| A级在线视频| 九九九九免费高| 午夜男女爽爽爽在线视频 | 肥臀熟女福利视频一区二区| 综合国产影视三级| 欧美九一精品久久久熟妇| 婷婷色香| 狠狠搞 亚洲91| 你操综合| 操狠狠| 综合久久婷婷| 色香蕉影院| 欧美一级A片在线看视频性色| 日韩欧美成人午夜福利| 伊人黄色片| 八戒午夜福利理论片| av中亚| 欧美资源| 久久中出| 91在线精品一区二区三区| 亚洲久久久久| 成人日本视频人妻在线| 日韩操逼HD| 国产黄片精品在线| 成人aⅴ一区二区三区| 中文字幕国产| 美女操逼福利视频| 成人性爱全视频观看| 三级特黄60分钟播放| 51久久夜色精品国产麻豆| 国产不良强奸视频免费看| 日韩一区二区精彩视频| 国产最新小视频在线播放下载| 九九精品无码专区免费| 亚欧无码在线| 偷看洗澡一二三区美女| 五月婷婷六月丁香| 亚洲色人妻综合| 亚洲AV资源| av亚洲天堂资源网站| 伦在线97| 天天综合,91入口| 一起草视频在线| 国产乱伦视频污| 91亚洲色人| 久久九九视频九九视频| 狠狠色婷婷7777久| 精品久久在线区一区| 色情亚洲日本成人| 欧美人妻另类在线| 一起草视频在线| 亚洲av综合伊人久久| 93人人操人人| 久久一二三四五六七八九区区区 | 99久久久无码国产精品性男| Julia在线播放亚洲久久| 久热色情精品| 色九九综合AV| 亚洲另类春色| 免费精品中文字幕| 五月天激情国产综合婷婷婷| 国产白领连续中出在线观看| 91性| 91综合网站| 日韩激情啪啪啪| 色色综合网站| 成人欧美日超碰| 九九热av| 老熟女乱子伦中文字幕一区二区| 在线观看一卡二卡| 99精品高潮| 天天日夜干| 美女一区二区国产精品| 婷婷香蕉欧美在线一区二区三区| 91性感网站| 99re这里只有精品9| 又大又长又粗又爽又黄| 欧美亚性天堂| 久久人妻一区二区三区高清| 免费家庭乱伦视频| 99久久久久| 中文字幕女同在线| 九九九精品| 天天肏夜夜肏| 欧美午夜视频| 久久伊人最新网址视频| 人人操人人狠狠操| 久久久久久久久久久久九| 啊啊啊啊啊在线| 在线观看精品国产免费| 国产精品suv一区| 欧美96精品在线| 国产呦精品一区二区三区下载| 亚洲蜜臀懂色| 国产精品美女视频诱惑| 五月婷婷六月天| 老女人91| 精品人妻av在线播放| 熟妇人妻一区二区| 久久精品国产Aⅴ| 五月激情综合网| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 亚洲欧洲色情高清| 强奸乱伦 亚洲一区| 五月天色图影视| 青青草色AV| 国产精品久久久久av| 欧美日韩中国x| 最新中文字幕精品在线| 精品久久久不卡一区二区| 中文字幕美女91| 黑丝少妇麻豆| 97无码视频在线播放| 91 在线亚洲| 美女啊啊啊啊啊| 99国产人成精品| 98久久超碰| 99精彩视频| 四虎在线视频| 国产丝袜视频| 张柏芝国产一区在线观看| 内射白嫩美女| AV乱伦专区| 99青青草国产视频| 草草影院最新网址| 伊人亚洲综合| 久久精品国产72国产精品福利| 欧亚韩国999| 色婷亚洲五月在线观看| 精品无码少妇| 天天影视网综合少妇| 精品国产Av无码久久久伦古装| 久久天天摸| 搡老熟女免费视频| 婷婷另类小说| 中国一区二区亚洲人妻| 99re视频在线播放青草| 淮穴色AV| 69少妇一区二区| 在线小视频| 亚洲人妻AV| 97干色| 四虎884a| 国产在线精品偷| 美女久久久久久久久久久| 97精品国产97久久久久久| 中国AAAAAA黄色片| 亚洲欧洲无码一区夜| 无遮挡h肉动漫在线观看| 亚洲人妻爽爽爽| 国产有码一区| 丝袜美腿制服人妻二区中文字幕| 极品人妻少妇综合| 欧美色图偷拍另类| 伦理片秋霞免费影院| 我想要 啊 啊 啊| 色爱综合网| 物业黑人 AV一区| 久久久一区二区三区四曲免费听| 午夜小电影在线插入淫高潮| 在线一区| 国产不卡精品91| 欧美,日韩综合久久| 久久久久久久| 欧美91丝袜| 久久久久精| 国产久久av| 日本操逼视频免费| av日韩中文字幕| 情色av电影| 婷婷五月激情综合| 久久久久人妻二区精品叶可怜| 欧美桃色网| 亚洲少妇在线影音| 97超碰国产精品| 国产精品无码在线| 三级日本一区二区三区| 国产又粗又长又大的视频| 久久精9| 日韩AV电影网站| 亚洲一本色道中文无码aV天美| 2023天天操夜夜操| 欧美se综合| 伊人久久亚洲色欲综合网站| 久久久精久久久| 久热久| 无码精品蜜桃一区二区三区ww| 国产乱伦视频污| 人妻丝袜一区二区三区在线| 九久久精品| 久久香蕉超碰97国产精品| 91蜜臀熟女| 色9999日韩国产| 嗯啊抽插大香蕉网页| 国产性爱强奸乱伦大全| 超碰诱惑| 天天操天天干美女网址导航| 亚洲欧洲无码一区夜| 九九英色视频| 蜜桃传媒一区二区亚洲| 五月天激情小说| www色婷婷| 人妻99p| 操逼视频免费日韩无码| 蜜桃视频成a人v在线| 精品成人无码| 黄色av网站在线播放| 精品国产Av无码久久久亚洲| 97爱综合| 国产在线观看一区二区三区| 日韩九区| 国产97色在线| 国产67194| 大香蕉九九| 色5月婷婷| 99激情视频| 久久精品人体AV| 精品丰满人妻一区二区三区免费观| 亚洲啪啪性视频| 玖玖色综合| 欧美操逼一二三区| 亚州宗合另类| 91色五月俺来也| 欧美一二三区四五区| 欧美72网页| 高清肉丝中文无码| 在线播放中文字幕| 亚洲熟女一区二区| 精品欧美乱码久| 亚洲色图 欧美| 欧美成熟性爱精品| 很黄很色的视频在线观看| 久久国产免费激情视频| 91动漫操逼视频| 99热最新| 亚洲天堂色图| 精品999日本| 欧美综合综合| 天天欧美欧美亚洲网| 天天看综合网| 精品小视频在线| 久久是精品| 91中文字幕制服丝袜免费视频| 蜜桃久久一区二区| 久久欲| 强奸乱伦日韩AV| 乱人伦 国语对白:视频直接看| 殴美性色a级欧美| 嗯嗯,好大,好爽,好骚 | AV九九| 欧美亚洲性爱一区二区| 色超碰综合| 欧美色图99| 91看黄片| 90后性网国产欧美| 伊人久久亚洲中文字幕| 超碰97亚洲区| 综合网亚洲| 欧美大香蕉同搞| 少妇 综合| 激情文学 亚洲图片| 日韩欧美中文字幕搭讪巨乳美人妻视频| 国产精品扒开腿做爽爽爽视频| 久久无码一区二区二三区性色| 欧美性爱视频免费一区一A| 丁香激情网| www.91欧美| 啊啊啊啊好爽好舒服一区二区易域| .精品人妻一区二区三| 亚洲国产高清福利视频| 一区久久久二区| 久久久免费视频18| 国产极品粉嫩馒头一线天av| 亚洲天堂 视频你懂的| 色女99一级片在线观看| 精品十八在线观看| 亚洲综合另类小说色区亚洲成av人片在www | 丁香婷婷五月| 超碰在线国产| 国产精品久久久久久久久久久久久久久久 | 大香蕉之青青草原| 新亚洲无码| 久热91| 四虎在线免费视频| 午夜男女爽爽大片免费观看| 丁香五月天激情| 9999久久久久| 999精品国产高清一区二区| 一本道综合色图| 在线观看啊啊啊啊啊| 精品无码久久久久久国产浪潮| 色婷婷基地| 福利大香蕉| 亚洲性爱免费电影| 人妻美腿丝袜制服诱惑综合天堂-| 2017,超碰| 欧美视频一区二区在线| 欧美72网页| 欧美v亚洲v综合v国产v妖精| 亚洲色图超碰在线| 狠狠入| 韩国一级婬片A片AAAAA| 天美麻豆黄色录像| 淫荡熟女乱伦网| 九九九九九九成人| 久久中文字幕不卡人妻| 熟女啪啪视频| 97色亚洲| 91女在线观看| 国产无码精品久久久久久| 人妻啊啊人妻啊| 国产精品视频在线观看| www.久久99| 超碰在线免费一区二区三区| 国产又爽又黄| 欧美 色 亚洲| 天天干天天干天天| 在线不欧美| 久久日韩毛| 久久只有精品| 夜夜操天天肏| 久久男人精品| 日韩欧美中文字| 欧美熟女操屄| 99精品在线| 激情九月婷婷| 夜夜躁狠狠躁日日躁av| 亚洲有码 欧美精品| 欧美日韩1234| 91视频成人福利网站在线一区 | 四虎影视精品| 九九毛片这里只有精品| 欧美精品成人一区二区在线观看 | 99综合视频一体| 三级色影综合网| 久久a久久| 人人干黄色| 欧美一区二区三区成人性生活| 欧美十八禁导航成人| 97超碰中文字幕| 久久久18| 97超碰人人模人人拍人人| 日韩钢筋无码高清啾啾啾| 亚洲色图欧美色图日韩色图| 最新9久久久9免费视频| 国产67194| 老司机福利青青草| 亚洲天堂人人妻| 国产成人自拍视频在线| 东京热大香蕉| 97在线青| 三级三级三级日本99| 国产女同在线观看视频| 精品久久九| 狠狠操天天干| 国产成人无码a| 亚洲伊人青青草| 日本天天人人狠狠在线日美女 | 亚洲av无线观看| suv精产一二三区| 熟女中出视频| 精品久久久亚洲AV成人网站| 国产美女高潮| 丝袜色综合| 亚洲……91| 秋霞蝌科网日本一区| 日韩情色一区二区| 色妇91| 色嘟嘟人妻天堂网| 综合免费无码中文| 大香蕉欧美| 日韩av情韩国爱禁区av一区二区| 嗯嗯啊操我| 91在线精品| 色激情综合网站| 亚洲在线A| 亚洲情色在线| 综合色图亚洲欧美| 国产尤物AV尤物在线观看不卡| 97精品免费| 国产少妇内射| 97欧美色资源| 超碰公开久久网| av国产无码| www.99中文字幕| 日韩少妇无码| 亚洲图片 欧美电影| 国产精品。| 欧美视频在线第3页| 日韩不卡a级视频专区| 国产高清视频无码在线| 亚洲丝袜少妇在线| 久久精品高清无码一区| 九九热超碰97亚洲最新香蕉| 激情五月激情综合网| 强奸乱伦中文字幕AV| 国产精品黑人一区二区三区| 久久在肏| 天天日骚逼熟女| 国产精品久久久久久久久久久久久久久久 | www网站黄| 18禁免费视频| 麻豆视频国产一区二区| 九九热九九| 久久香蕉国产线看观看亚洲女人 | 男人的天堂2019AV| 婷婷久月| 日韩中文字幕视频在线观看| 人妻 丝袜美腿 中文字幕| J?P?NESEHD熟女熟妇伦| 亚洲成人贴图| 资源新线在线天堂| 丰满人妻一区二区三区免费 | 九九九久久久久| 日韩中文字幕熟妇人妻| 97视频在线观看播放与子乱对白在线……| 91精品国产麻豆国产自产在| 亚洲一区二区中文字幕| 久久性爱网站| 色哟哟511老熟女| 一牛影视成人片免费| 国产一在线观看| 又粗又长又爽在线观看| 国产91av在线播放| www.99色| 浓厚中出中文字幕在线| 国产JDAV无码视频在线观看| PMv在线观看| 100啪啪视频大全| 久久天天艹| 中文精品一区二去| 3D污黄视频在线观看| 十八禁的黄污污免费网站| 99精品视频在线观看免费| 黄色AAAAAAAAAAA大片| 夜间福利片1000无码| 黄色小视频日本txt| 亚洲激情在线一区二区| 亚洲操人| 亚洲春色激情小说| 久久久久9久久久久| 日韩传媒在线| 亚洲自拍欧美色综合| 国产免费一区| 97中文综合| 国产精品乱码久久久久| 中文字幕第9页萱萱影音先锋| 蜜乳视频网站| 乱伦AVxx| 开心五月天激情网| 欧美色偷拍 | 五月天偷拍| 国产精品久久9| 超碰97最新人妻| 久久久草草精品| 久久人妻熟女一区二区| 天天影视色香欲综合网小说| 黄色av网站在线播放| 在线无码操| 久久精品欧美一区蜜桃| 少妇69中文| 中日韩久久久免费看| 日韩小电影| 伊人黄色片| 伊人久久艹| 一区=区三区视频| 青操影院| 国产精品96久久久久久| 天天色天天干天天爱| 国产精品久久伊人| 日本免费不卡二区| 东北操逼| 又粗又长又大国产不卡| 日韩欧美aⅴ综合网站发布| 欧美做爰无码A片视频| 亚洲天堂女优在线| 在线电影亚洲色图| 91少妇| 亚洲一卡2卡3卡4卡乱码网站 | 少妇滛荡视频| 亚洲AO在线| 67914在线兔费成人视频| 伊人热综合| 欧美性生活综合| 精久久久91| 精品欧美乱码久| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 国内精品99999| 国产中文字幕在线点播| 日韩三级一区| 嗯嗯啊啊的视频| 日韩欧美性吧婷婷乱伦大香蕉| 人妻乱仑一区二区三区| 免费看污网站| 中国特猛少妇色xxx| 男女性感激情网站| 日本不卡高清免v欧美日韩在线观看| 成人久久久精品| 精品高清av中文字幕| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 手机在线A片| 男人天堂网址| 日韩黄片视频试看| 日韩熟女精品无码专区一区二区| 极品肉射| 中文字幕精品一区二区精| 亚洲国产成人福利在线观看| 婷婷丁香五月天亚洲天堂网| 麻花豆传媒剧国产MV出差| 五月婷婷久久综合| 精品女人999| 啊v视频在线观看| 丁香九月激情啪| 狠狠操狠狠| 在线情色电影 91大| 蜜乳av首页| 日韩一区二区精彩视频| 黄久久| 97操97色| 色官网在线| 国产精品一二三区18| 乱操9999| 欧亚不卡| 久久怡红院| 欧美日韩 强奸乱伦| 超碰成人人人爽人人爽| 亚洲极品| 岛国人妻少妇av在线观看| 99ri视频| 秋霞久久亚洲精品成人| 精品日韩| 欧美日日人人天天| 精品国产91久久久久久一区黄无| 超碰在线国产| 芊芊操逼视频无码| 久久精品熟女亚洲AV麻豆软件| 国产精品粉嫩福利在线| 欧洲乱码一区二区| 思思热在线视频精品| 91c色| 免费中文综合精品| 九九热国产| 国产乱不卡| 人人搡人人肉久久精品| 久操高青| 丁香六月婷婷久久综合| 丝袜美腿制服人妻二区中文字幕| 92性色国产午夜福利在线661| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 日韩美女啪啪一区| 97爱爱爱| 91情色在线| 美女网站黄页| 欧美A√综合网| 日本天堂网| 91色综| 五月天综合| 天天看,天天做| 日韩色| 天天插夜夜操| 操逼视频国产无套| 亚洲天堂欧美| 躁躁躁日日躁2020| 久久久久女教师免费一区| 日本精品一区二区三| 97一区二区三区视频| 色狠人在线99| 日韩精品高清资源在线 | 厕所偷拍在线| 精品久久久久,69国产成人精| 亚洲激情网| 欧美久热| 丁香六月激情综合| 色人久久| 丁香五月天堂网| 午夜一区| 日日操天天操| 日韩精品国产精品五码一区二区| av一区二区三区 中文| 成人日本视频人妻在线| 97最新在线播放视频| 把腿张开老子CAO烂你| 国产精品干干干| 亚洲国产一区二区入口| 成人精品一区二区91毛片不卡| 日韩综合成人免费视频| 久久久亚洲Av| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 蜜臀久久久99久久久久| 久久国产精品m码| 神马午夜久久| 欧美激情激情xxxx欧美专区| av网站在线看| 天天做天天爱夜夜爽毛片试看| 内射夫妻三片| 亚洲三区视频| 人妻中文字幕日韩电影| 天天操天天舔| 狠狠干综合| 青青爽| 精品无码一二三四区| 亚洲综合情色| 97人人夜| 亚洲图片欧美色图| 国产黄色在线播放观看| 夜嗨影院| 色播丁香| 九九玖玖精品| 久久国99999| 色哟哟精品1精品2| 果冻传媒A片麻豆熟妇人妻| 男人的天堂2019| www.yeyecao| 婷婷中文网| wwwss在线观看| 嗯啊不要啊啊在线观看视频| 清清草影| 激情婷婷黑人91| 一区二区三区国产在线播放| 人人玩人人添人人澡免费| 精品性爱一二三区| 蜜臀久久99精品久久久久久久久| 日韩AV一区二区三区三州三州| 亚州色国| 校园激情狠狠四射| 91被操| 一级久久性爱视频| 日本三级久| 91AV天堂| 亚洲人妻日日日| 中国农村熟妇毛片视频| 强奸乱伦av电影| 欧美成人9797| 91欧美综合在线| 中日韓欧美高清| 欧美性爱无码一区二区三区| 精品国产精品一区二区| AV天堂电影网| 九久久精品| 国产高清成人免费视频| 最新日产中文在线麻豆| 999狠狠综合| 97在线资源| 天美传媒精品一区二区| 黑人狂躁日本妞一区二区三区| 狠狠操天天干| 激情小说亚洲图片| 蜜臀久久99精品久久久久久无删减 | 国产久久久| 亚乱色| 高清不卡视频| 亚洲中文字幕久久无码精品| 超碰在线欧美性爱激情| 91超级碰| 91欧美性| 国产午夜精品理论片a大结局| 天天色播亚洲综合网站| 91久久久视| 超碰99re| 国产精品自在自拍视频| 91麻豆天美国产| 久久精品超碰| 亚洲日韩美女中文字幕乱| 国产精品久久发布| 国产又粗又长又大的视频| 人人操人人操人人操人人操人人操人人人11.CM | 久久精品一区二区三区不卡| 大香蕉92| 国产中文字幕在线点播| 久操综合在线| 在线观看啊啊啊啊啊| 狠狠中文字幕| 粉嫩国产精品久久久| 亚洲视频精选| 女人被添高潮免费视频| 北条麻妃性愛视频| 国产精品爆乳懂色蜜乳| 99精品网| 天堂av最新电影网| www..com操老师| 日本A级视频| 日韩兔费看黄片| 欧美99| 亚州欧美另类| 日本在线不卡v二区| 欧美在线大香蕉| 97精品一区二区视频| 日本三级韩三级99久久| 亚洲中文sv| 影音先锋中文字幕日本好一区二区| 午夜精品久久久久| 成人午夜高潮av猛片| 夜夜中出国产| 91成人无码| 920日本午夜免费| 色老大| 激情四射五月天| 妇女乱色二区| 熟女六十路|