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

ARTICLE DETAIL

資訊詳情

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

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

Actor-Critic實戰(zhàn):優(yōu)勢函數(shù)、GAE與A2C訓練循環(huán)拆解 強化學習學到 Actor-Critic 這一節(jié)基本算是從會跑 demo跨到能理解現(xiàn)代 RL 工程的分水嶺。前面講策略梯度時REINFORCE 用一整條軌跡的回報去估計梯度方差大到需要幾十次采樣才能勉強收斂講到值函數(shù)近似時又發(fā)現(xiàn)只學 Q 值沒法直接輸出策略。Actor-Critic 把這兩條線擰在一起一個網(wǎng)絡(luò)負責決定動作一個網(wǎng)絡(luò)負責評價動作好不好用評價網(wǎng)絡(luò)的輸出給決策網(wǎng)絡(luò)的梯度降方差。A2C、A3C、PPO、DDPG、TD3、SAC 這一整串現(xiàn)在還在被廣泛使用的算法骨架都是它。這篇文章是2026 新版強化學習從入門到精通系列的第 42 篇重點不再停留在概念解釋上而是把 Actor-Critic 的網(wǎng)絡(luò)結(jié)構(gòu)、優(yōu)勢函數(shù)、GAE、損失函數(shù)組合、訓練循環(huán)這些真正影響能不能跑通的部分拆開講。文中的每段代碼都可以直接復制運行環(huán)境用 PyTorch GymnasiumCartPole 這類任務(wù)在純 CPU 上幾分鐘就能看到曲線抬起來不需要顯卡。讀者對象很明確已經(jīng)寫過 REINFORCE 或 DQN、知道策略梯度和貝爾曼方程大概在講什么、但自己動手寫 Actor-Critic 時總是卡在為什么 loss 是這三項加在一起優(yōu)勢函數(shù)到底怎么算critic 學崩了怎么辦這幾個問題上的人??赐曛髴撃塥毩懗鲆粋€可訓練的 A2C并且知道把它換成 PPO 需要動哪幾行。1. Actor-Critic 核心能力速覽先把這套架構(gòu)的關(guān)鍵信息壓縮成一張表后面所有內(nèi)容都是圍繞這張表展開的細節(jié)。需要注意Actor-Critic 不是某一個算法而是一類架構(gòu)范式表里列的是這個范式的共性以及它在主流算法上的具體投影。能力項說明架構(gòu)組成Actor 策略網(wǎng)絡(luò)輸出動作分布Critic 價值網(wǎng)絡(luò)輸出狀態(tài)價值或動作價值解決的核心問題策略梯度方差過大、單步更新效率低、無法在線學習梯度估計方式用 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)驗回放采樣效率同策略版本中等異策略版本較高訓練穩(wěn)定性依賴優(yōu)勢歸一化、梯度裁剪、價值損失系數(shù)等工程手段硬件門檻小型任務(wù)純 CPU 可跑Atari 級別建議單卡 GPU并行環(huán)境吃 CPU 核數(shù)依賴環(huán)境Python 3.10、PyTorch 2.x、Gymnasium 1.x版本以實際安裝為準典型調(diào)試周期CartPole 級別分鐘級MuJoCo 級別小時級適合場景連續(xù)控制、機器人仿真、游戲 AI、推薦策略優(yōu)化、對話策略學習這里要提前說清楚一個容易混淆的點很多教程把 Actor-Critic 當成一個具體算法講實際上它更像一個模板。你在模板里換掉優(yōu)勢估計方式就得到 A2C換掉更新約束就得到 PPO把 Critic 從狀態(tài)價值換成動作價值并加經(jīng)驗回放就得到 DDPG。理解模板比背算法名有用得多因為真實項目里你幾乎總要改一點東西。2. 從策略梯度到 Actor-Critic為什么必須有一個 Critic先把動機講透否則后面看到三項 loss 相加會覺得是拍腦袋湊出來的。最原始的策略梯度定理給出的是這樣一個式子梯度等于策略對數(shù)概率乘以回報的期望。用采樣估計時我們用一整條軌跡的累計回報 G_t 去乘 log π(a|s)。問題在于 G_t 是一個隨機變量同一狀態(tài)下采樣十次可能得到十個差別很大的回報梯度方向跟著劇烈抖動。為了讓這個估計穩(wěn)定下來一個很自然的想法是減去一個與動作無關(guān)的基線 b(s)因為減去它不會改變期望只會改變方差。數(shù)學上可以證明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)勢為負的動作上減概率。接下來的問題是怎么拿到 V(s)。用蒙特卡洛方式統(tǒng)計回報當然可以但那樣必須等回合結(jié)束學習是離線的、慢的。Critic 網(wǎng)絡(luò)的作用就是用函數(shù)近似的方式直接學 V(s)而且可以只依賴單步的 TD 誤差來更新實現(xiàn)真正的在線學習。這就是 Actor-Critic 的核心交換用 Critic 引入偏差bias換來方差的大幅下降和在線更新能力。用一句話概括兩者分工Actor 負責試Critic 負責評。Critic 的評價越準Actor 的更新方向越穩(wěn)Actor 的策略越好Critic 面對的數(shù)據(jù)分布越集中學起來也越容易。這種互相依賴也帶來了這套架構(gòu)最典型的失敗模式——兩個網(wǎng)絡(luò)一起崩后面第 9 章會專門講怎么拆解。關(guān)于偏差和方差的取舍還有一個重要的工程變量用 TD(0) 的單步誤差偏差大但方差小用蒙特卡洛回報方差大但無偏中間的 n-step 回報和 GAE 就是在兩者之間滑動。這個滑動的旋鈕直接決定了訓練曲線是平滑爬升還是劇烈震蕩是 Actor-Critic 調(diào)參里性價比最高的一個參數(shù)。3. 環(huán)境準備與最小可運行工程骨架Actor-Critic 對環(huán)境的依賴其實很輕它不需要 CUDA 編譯、不需要下載大模型權(quán)重甚至不需要顯卡。真正容易出問題的地方在于包版本不匹配導致的 API 變更尤其是 Gymnasium 從 Gym 分叉出來之后step 的返回值從四項變成五項很多老教程直接復制過來就會報解包錯誤。基礎(chǔ)依賴如下。版本號這里不寫死因為不同機器上的 CUDA 與 PyTorch 對應關(guān)系不同寫死反而容易踩坑原則是 PyTorch 官方安裝向?qū)Ыo出的組合優(yōu)先。# 創(chuàng)建獨立環(huán)境避免和已有項目沖突 conda create -n actor_critic python3.10 -y conda activate actor_critic # 安裝核心依賴具體版本以本機可用的 CUDA 組合為準 pip install torch --index-url https://download.pytorch.org/whl/cpu pip install gymnasium numpy matplotlib tensorboard如果機器上有顯卡并且想跑圖像輸入的任務(wù)把第一行的 CPU 源換成官方對應的 CUDA 源即可。對于 CartPole、Pendulum、MountainCarContinuous 這類低維狀態(tài)任務(wù)CPU 訓練速度快過 GPU因為數(shù)據(jù)傳輸開銷會蓋過并行計算收益這一點在后面的資源占用章節(jié)還會提到。建議的工程目錄結(jié)構(gòu)如下把網(wǎng)絡(luò)定義、算法實現(xià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 # 訓練主循環(huán) ├── evaluate.py # 評估與可視化 └── requirements.txt驗證環(huán)境是否裝好跑一段最小檢查腳本就夠了。這段腳本同時能確認 Gymnasium 的 API 版本因為reset返回(obs, info)、step返回五項這個約定是從 Gymnasium 開始統(tǒng)一的如果你的環(huán)境返回四項說明裝的是老版本 Gym后面的代碼需要相應調(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)都學不動。實際上 Actor 和 Critic 對輸出的要求完全不同一個是概率分布參數(shù)一個是標量價值兩者的輸出層設(shè)計必須分開考慮。4.1 離散動作空間的 Actor離散動作下Actor 輸出的是每個動作的 logit經(jīng)過 softmax 得到概率再用Categorical分布采樣。輸出層不要加 softmax因為 PyTorch 的Categorical內(nèi)部會做 log_softmax提前做一次會導致數(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ū)會導致某些動作永遠采不到探索直接退化。這不是絕對規(guī)則但在連續(xù)控制和低維狀態(tài)任務(wù)上Tanh 的魯棒性明顯更好代價是訓練稍慢一點。4.2 連續(xù)動作空間的 Actor連續(xù)動作要輸出一個高斯分布的均值和對數(shù)標準差。均值通常經(jīng)過 tanh 壓到 [-1, 1]再按動作上下限縮放對數(shù)標準差用可學習參數(shù)并且要 clamp 到一個合理區(qū)間否則訓練中期可能出現(xià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)性很強的任務(wù)比如機械臂在接近目標時需要精細動作可以讓網(wǎng)絡(luò)輸出 log_std但要額外做 clamp。4.3 Critic 的輸出與價值尺度Critic 輸出一個標量 V(s)結(jié)構(gòu)比 Actor 簡單但初始化很關(guān)鍵。如果 Critic 初始輸出偏離真實回報的量級太遠第一批優(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]損失看起來在下降但學的是完全錯誤的東西。這類形狀 bug 不會報錯只會讓訓練莫名其妙地不收斂排查成本極高。4.4 共享主干還是分離主干經(jīng)典實現(xiàn)里常見兩種寫法一種讓 Actor 和 Critic 共享前面的特征提取層只分開輸出頭另一種完全獨立。共享主干的優(yōu)勢是參數(shù)少、特征復用、在小任務(wù)上收斂快缺點是梯度會互相干擾如果兩個損失量級差異大容易一方主導把另一方的特征壓掉。完全分離則沒有干擾但參數(shù)量翻倍。我的建議是CartPole、Acrobot 這種幾十維狀態(tài)的任務(wù)可以共享圖像輸入或高維連續(xù)控制一律分離。判斷標準很簡單如果訓練曲線出現(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 r γV(s) - V(s)。它的偏差來自 Critic 本身不準但因為只用一步真實獎勵方差極小。另一個極端是蒙特卡洛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這段代碼里有個細節(jié)值得注意for...else結(jié)構(gòu)只有在循環(huán)正常走完沒有被break時才執(zhí)行 bootstrap。如果軌跡中途終止就不該再加 bootstrap 項否則會把下一回合的價值錯誤地算進來。這類終止處理錯誤在外行看來只是曲線抖一點實際上是系統(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 誤差。從后往前算一遍即可復雜度 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 當價值目標這是錯的因為價值網(wǎng)絡(luò)學的是 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ù)值很大一次更新就能把策略推得很遠直接破壞探索歸一化之后優(yōu)勢的均值是 0、方差是 1更新量級與回報絕對大小解耦換環(huán)境時不用重新調(diào)學習率。這個技巧在 reward 尺度差異大的任務(wù)上幾乎是必須的。6. 完整 A2C 訓練實現(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而不是重新前向計算這是同策略算法的標準做法但要記得 detach 優(yōu)勢否則梯度會流進價值網(wǎng)絡(luò)導致雙重反傳。價值損失用 MSE如果獎勵尺度很大可以換成 Huber避免離群回報把 Critic 拉飛。熵獎勵的符號是減去因為我們希望最大化熵也就是讓損失里包含負的熵項。梯度裁剪的 0.5 是個經(jīng)驗值。A2C 在 CartPole 上即使不裁剪一般也能跑但在連續(xù)控制任務(wù)里一次異常大的優(yōu)勢就能讓策略參數(shù)跳變裁剪是最省事的保險。裁剪閾值不要設(shè)得太小0.1 以下會讓學習明顯變慢因為大部分正常梯度也會被削。在普通筆記本 CPU 上這段代碼大概 100 到 200 次 update 就能讓平均回報爬到 400 以上200 次全滿。如果跑到 500 次還在 20 左右徘徊基本可以判定是環(huán)境 API 或優(yōu)勢計算出了問題直接跳到第 9 章排查。7. 算法族對比與選型Actor-Critic 這個模板衍生出的算法很多實際項目里選型的關(guān)鍵不是哪個最新而是樣本從哪來、動作空間是什么、允許的調(diào)參時間有多少。下面這張表把常用的幾個放在一起對比。算法策略類型采樣方式動作空間經(jīng)驗回放主要特點典型用途A2C隨機策略同策略同步多環(huán)境離散/連續(xù)否結(jié)構(gòu)簡單易于調(diào)試教學、基線對比A3C隨機策略同策略異步多線程離散/連續(xù)否異步更新現(xiàn)已較少使用歷史參考PPO隨機策略同策略多輪復用離散/連續(xù)否clip 約束穩(wěn)定工業(yè)界主力大模型 RLHF、游戲 AIDDPG確定性策略異策略僅連續(xù)是確定性策略加目標網(wǎng)絡(luò)連續(xù)控制基線TD3確定性策略異策略僅連續(xù)是雙 Critic、延遲更新、目標平滑連續(xù)控制常用SAC隨機策略異策略僅連續(xù)是最大熵框架探索充分機器人、樣本昂貴場景選型的實操判斷可以這樣走如果你能拿到大量并行仿真環(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 就失效了算法退化成沒有約束的策略梯度訓練曲線會突然崩掉。這個坑在復現(xiàn) PPO 時出現(xiàn)頻率極高。8. 訓練監(jiān)控、資源占用與常見問題排查Actor-Critic 的調(diào)試核心是分而治之先把 Critic 單獨看好再看 Actor。因為 Actor 的更新方向完全依賴 Critic 給出的優(yōu)勢如果價值估計本身在亂飄后面所有調(diào)參都是在錯誤的地基上做微調(diào)。8.1 必須監(jiān)控的四個指標第一是平均回合回報看趨勢不看單點用最近 20 到 100 回合的滑動平均。第二是策略熵它反映探索程度CartPole 上健康的曲線是從 0.69 左右緩慢下降到 0.3 附近如果十幾輪就掉到 0.05說明策略過早確定通常需要加大熵系數(shù)或降低學習率。第三是價值損失它應該整體下降但允許波動如果持續(xù)上升說明價值目標尺度有問題。第四是梯度范數(shù)裁剪前的梯度范數(shù)突然放大到幾十上百往往是某批次優(yōu)勢異常或出現(xiàn)了數(shù)值問題。把這幾項寫進日志接 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 反而更慢因為每次都要做一次主機到設(shè)備的拷貝。判斷標準很直接用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)當任務(wù)換成圖像輸入情況就反過來了。Atari 的 84×84×4 幀堆疊輸入特征提取網(wǎng)絡(luò)的前向和反向會成為主要開銷這時候 GPU 才有意義同時顯存占用主要取決于批量大小和網(wǎng)絡(luò)寬度。觀測這一點最方便的方式是torch.cuda.max_memory_allocated()在訓練循環(huán)里定期打印比看任務(wù)管理器準確得多。并行環(huán)境是另一個資源維度。A2C 原本就設(shè)計成多環(huán)境同步采樣用gymnasium.vector.SyncVectorEnv起 8 個環(huán)境采樣吞吐能提升數(shù)倍但 CPU 占用也會同步上升。這里要注意并行環(huán)境的數(shù)量不是越多越好超過物理核心數(shù)之后上下文切換開銷會吃掉收益一般取物理核心數(shù)的一半到全部之間。8.3 常見問題與排查表問題現(xiàn)象可能原因排查方式解決方案回報長期停在隨機水平優(yōu)勢符號寫反或未 detach打印單批次優(yōu)勢均值檢查是否恒正或恒負修正優(yōu)勢計算確保adv.detach()策略熵幾輪內(nèi)塌到接近 0學習率過大或熵系數(shù)過小觀察 entropy 曲線下降速度降 lr 到 1e-3 以下熵系數(shù)提到 0.01 以上價值損失不降反升回報尺度與初始化不匹配打印values_pred.mean()與ret_t.mean()輸出層小初始化或?qū)貓笞隹s放張量形狀報錯或結(jié)果異常Critic 輸出未 squeeze檢查values_pred.shape加.squeeze(-1)訓練前期正常后期突然崩潰梯度爆炸記錄裁剪前梯度范數(shù)開啟梯度裁剪閾值 0.5 左右換環(huán)境后完全不學觀測未歸一化檢查 obs 數(shù)值范圍加 running mean/std 歸一化多環(huán)境并行后變慢環(huán)境數(shù)超過物理核數(shù)對比不同 env 數(shù)的采樣耗時降到物理核心數(shù)以內(nèi)PPO 復現(xiàn)后曲線不如 A2Cold_logp 每個 epoch 重算檢查 old_logp 是否在 epoch 內(nèi)固定采樣時記錄一次全程復用連續(xù)動作全落在邊界log_std 無約束打印 std 數(shù)值clamp log_std 到 [-20, 2]這張表里最值得展開的是觀測未歸一化這一條。CartPole 的觀測數(shù)值都在個位數(shù)不歸一化也能跑所以很多人養(yǎng)成了不歸一化的習慣。一旦換到 Pendulum 或者 MuJoCo觀測里同時存在 0.01 量級和 10 量級的維度網(wǎng)絡(luò)會幾乎只對大量級維度敏感小量級維度相當于被屏蔽表現(xiàn)為怎么調(diào)都不學。加一層 running 均值方差歸一化通常一次就解決。9. 最佳實踐與下一步Actor-Critic 這一套東西寫對一次之后復用價值很高。下面是幾條從實際調(diào)試里總結(jié)出來的、能明顯減少踩坑時間的做法。第一條永遠先在 CartPole 上跑通再換環(huán)境。這不是偷懶而是建立一條已知正確的基線。當你在 MuJoCo 上調(diào)了兩天沒結(jié)果時把同一份代碼切回 CartPole 跑 50 輪如果也不學問題在算法實現(xiàn)如果正常問題在超參或環(huán)境適配。這個二分能把排查范圍瞬間砍掉一半。第二條把 Critic 的學習率和 Actor 分開設(shè)置。共享一個優(yōu)化器看似簡潔但兩者對步長的敏感度不同Critic 通常需要更快地跟上回報變化Actor 則需要更保守。實踐里 Critic 學習率取 Actor 的 2 到 3 倍是常見起點尤其在價值損失下降明顯滯后于策略改進的時候。第三條保留一套最小可運行配置。把能跑通的那組超參寫進configs/目錄并加注釋說明適用環(huán)境之后每次實驗都從它 fork 出來而不是在當前腳本上反復改數(shù)字。Actor-Critic 調(diào)參很容易陷入改了 A 又影響 B的循環(huán)有基線配置才能判斷某次改動是真的有效還是隨機波動。第四條批量任務(wù)和長訓練要加斷點保存。訓練腳本里定期保存模型參數(shù)、優(yōu)化器狀態(tài)和當前 update 序號配合日志落盤。強化學習的訓練曲線經(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)掉探索。訓練時用隨機策略采樣是為了探索評估時應該用分布的均值或 argmax并且固定隨機種子跑多個回合取平均。用帶噪聲的策略去評估得到的回報會明顯偏低且波動很大容易誤判模型沒學好。關(guān)于下一步的擴展方向比較自然的路徑有兩條。一條是往 PPO 走把第 6 章的采樣和更新拆成兩段加上重要性采樣比率和 clip這套代碼幾乎可以直接用在語言模型的 RLHF 微調(diào)流程里那邊的 reward model 扮演的就是 Critic 的角色只是評價對象從狀態(tài)變成了整段回復。另一條是往異策略走引入經(jīng)驗回放緩沖區(qū)、目標網(wǎng)絡(luò)和雙 Critic去處理真實采樣代價高的連續(xù)控制問題。如果要在這兩條路上做選擇判斷依據(jù)就一句話你的環(huán)境能不能便宜地并行采樣。能就走同策略不能就走異策略。這個判斷比看任何算法排行榜都可靠。Actor-Critic 的骨架在這兩條路上是共通的先把它吃透后面換算法只是替換幾個模塊的事。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中亚黄色三级大片| 色吊丝 日日骚 清纯唯美| 国产一区二区三三视频| 中文字幕欧美精品亚洲日韩蜜臀| 久久综合久久综合人久久夜精品| 亚洲第2页| 97超碰色中文字幕| 男人的天堂啪啪啪啪啪蜜桃不卡| 国内毛片国产欧美拍| 青木玲在线不卡| 久久久久国产一区二| 婷婷激情四射| 九九九只有精品| 精品久久久久瑟瑟| 九九在线视频| www.久久最新地址| 日韩熟女无码| 99999亚洲| 男人天堂综合| 九九精品美女高溯喷水| 亚洲激情在线一区二区| 色黄色美女大长腿午夜视频| 偷拍 欧美 日韩| 超碰色大香蕉| 清清草影| 麻豆亚洲Av成人无码一区精品| 岛国AB视频| 91肉片| 午夜精品久久久久久久| 欧美中文字幕一区| 天天插天天插| 五月天黄色av| 亚州精品一区二区三区香中文字幕在线| 尤物黄色在线观看网站| 色色色日本| 蜜臀网 一区| 欧洲亚洲人妻无码高清久久三区四区| 天天搞欧美| 97视频900| 情色五月天久久久| 午夜福利久久久噜久噜久久综合| 色蜜AV| 久久久18| 在线不卡视频| 狼人综合婷婷激情四射 | 91天天| 97人人爱人人乐| 搡老女人老91妇女熟女| 亚洲视频二区| 青青操视频在线| 美女大乳久久久久久久女人18| 久久欧美1卡2卡3| 99热亚洲| 欧美色图天堂在线| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 操逼操逼操| 超碰97人妻在线| 亚洲精品久久久久毛片A片拉屎| 97在线免费看视频| 91少妇人妻| 九九九九热| 好吊色综合| 老司机午夜精品视频| 台湾一区国产高清在线| 午夜.DJ高清在线观看免费7| 激情专区综合| 久无码| 性感女人网页在线观看视频| 18禁久极品美女久久哦哟呀!| 亚洲熟女乱色一区二区三区久久久| 国产久久一区二区| 9久久久久久| 亚洲黄色电影| 成人精品久久久午夜福利| 一中国女人毛片水真多| 欧美色视频在线| 在线国产探花| 精品久久久九九九孕妇| 欧成人在线| 男人天堂2017| 日韩乱伦AⅤ| 狠狠色狠狠色狠狠五月| 九九RE视频在线精品| 亚洲天堂女优在线| 福利在线视频一区二区| 欧美亚州综合网图片| 1769成人国产精品视频| 中文字幕在线高清男人的天堂 | 330Dv国产女人终合视频极品人与兽| av操操不卡| 精品中文日韩字幕视频| 91精片| 久久九九视频九九视频| 国产在线不卡导航| 无码操逼天堂| 日韩中文字幕精品一区在线| 青青草日本无码| 美女干逼2| 熟女人妻一区二区三区| 肏逼福利网站| 一级性爱aaaa| 久久久婷婷| 91狠狠狠| 四虎国产精品永久地址入口| 1区2区3区中文字幕日韩| 91大神电影天堂| 欧美碰碰综合色| 97在线精品观看视频| 日韩无码成人电影| 天天躁狠狠躁av| 99999精品| 日韩久久激情精品| 男人 天堂 日 亚洲| 青青青青青手机视频| 久久亚州精品成人Av无| 日韩有码一区三区| 东京热精品97综合网| 五月天伊人网| 抽插无码高清一区| 欧美日本不卡| 日本熟妇人妻中出视频| 日本新免费二区三区| 日韩无码三级影院| 亚洲在钱| 在线观看中文av字幕| 91丝袜激情在线 | 99国产人成精品| 97天天插| 成人情色一区二区| 色97干| 最新国产亚洲精品精品国产亚洲综合| 肥佬影院91| 亚洲综合婷婷| 超碰97 线线 在现| 成人精品在线观看| 男人的天堂久久久| 亚洲男人天堂2012| 青娱乐淫乱1314| 一区,二区,三区视频| 欧美大香蕉久| 嫩草伊人久久精品| 综合操逼| 91 国产丝袜在线播放-百度| 日本国产亚洲一区在线观看| 色综合99999| 亚洲激情在线观看一区| 色婷婷婷五月天激情四射| 日韩免费簧片| 99操| 啊啊好多水| 精品无码久久久久久国产浪潮| 成人综合视频久久| 国产精品毛片?v一区二区三区| 美女AV一区二区| 97在线公开视频| 国产原创自拍| 一区二区三区精品视频| 亚洲无 码A片在线观看麻豆| 夜夜操91744565| 性欧美999| 久久日韩毛| 久久亚洲中文字幕视频| 韩日巨乳美女免费视频在线观看| 高清无码国产亚洲| 97超碰色色| 99精品丰满人妻| 久久曰曰| 一级黄色牲爱A级片| 亚洲国产日韩精品久久久| 女优免费一区二区永久| 日韩中文字幕二区| 在线观看色视频| 久热精品在线| 91久久久老司机| 天天色粽合合合合合合合| 日韩操逼性鲍| 日本三级精品| 欧亚第一综合网| 曰韩av中文字幕专区| 久久专区| 久久大黄片| 在线观看午夜婷婷久久久久清性观看| 麻豆人妻精品一区二区| 婷婷丁香五月天综合东京热| 9国产超碰| 60秒不遮不挡| 肉丝无码中文高清| 一道本东京热加勒比一区二区三区| yellow网站免费观看日韩高清无码| 91性网| 91AV天堂| 伊人色综合欧美| 老熟女91av| 一区二区三区激情在线观看| 国产精品999zyz| 操逼操2| 久草看看看| 欧美国产有色电影| 欧美大香蕉在线观看| 人人操人人摸人 | 欧美999| 亚洲伊人青青草| 亚洲日本大香蕉1| 欧美日韩亚洲五月天婷婷| 激情综合97| 国产精品岛国片在线观看| 亚洲人体视频在线观看| 国产成人无码a| 91亚洲欧美| 九九五月天| 丰满人妻一区二区中文| 97日视频| 啊啊啊要高潮了| 九九国产热| wwe 天天干.com| 久久久久久性爱片| 精品久久久久久亚洲| 亚洲AV无码黄色强奸| 狠狠爱夜夜| 色偷偷2020免费视频播放| 亚洲综合九| 佐山爱中文字幕| 91暧暧| 久久久久久久久久久999| 国产精品久久发布| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 一区,二区,三区视频| 男人的天堂成人的社区| 吉川爱美98堂在线| 亚洲永久永久永久永久一级一级一级精品| 爱丝福利| 日韩在线电影| 99热| 黄色小视频日本txt| 操比国产| 九九亚洲| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 黑人中出21连凳花野真衣| 97久精品| 国产久久日| 少妇蹲下买菜露大唇0| 久久精品中文字幕女同| 国产97色在线 | 亚洲| 91欧美色| 国产成人手机视频激情| 色婷婷成人| 99啪啪| 成人一级二级| 2020中文字幕在线观看| 精品成人亚洲午夜电影| 97任你吞精| 黄色高清无码无码破解免费暗网 | 呻吟 欧美 日本 中出| 草久在线| 热久久国产| 国产精品激情久久久久久久| 超碰97久| 精品中文字幕第一页| 秋霞蝌科网日本一区| 丁香六月综合激情| 97人人射| 99re95| 日本色色网| 亚洲国产精品成人综合| 99国产精品自在自在| 97人人射| 欧美日韩国产色图在线| 亚洲国产美女久久久久 | 午夜福利一区二区影院| 四虎影视永久在线观看精品免费网站| 五月丁香在线| 人人操肉肉| 九热中文字幕| 久久精品91| 91 丝袜在线| 一本道综合色图| 岛国片在线视频网站| 97亚洲自在精品在线观看| 精品无码一二三四区| 五月天激情四射| 精品中文字幕第一页| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 国产农村妇女精品1区二区| 五月婷婷久久综合| 99视频自拍| 黄色av网站在线播放| 丝袜AV一区二区三区| 殴洲老熟女| 欧美中文字幕男人天堂久久精品 | 天天天天天超碰| 91美女丝袜诱惑视频| 九九综合久久| 美女午夜福利免费视频| 26uuu国产亚洲综合| 日韩猛交| 超碰人人干天天射| 高颜值美女口爆高潮浪叫| 9.1小视频| 久久偷偷色综合蜜桃| 久久少妇视频| 国产肏屁眼视频| 欧美 亚洲 制服 精品| 国产呦精品一区二区三区下载| 国产真实野战在线视频| 无码精品人妻一区二区三区妖精| 中日亚韩免费视频| 久久久久久精品免费看A级| 日韩精品国产一区二区| 精品毛片av一区二区| 翔田千里无码一区| 乱伦一二三区| 先锋影音av先锋一区| 久久久性爱| 欧美激情高清性猛交| 一区二区三区一亚洲中文字幕、综合区灬 | 亚洲精品九九九| 超碰色大香蕉| 欧美92| 丰满人妻一区二区三区免费| 97爱综合| 日韩精品资源专区二区| 香蕉热人人精品| av网页一区二区三区| 四虎国产精品永久地址入口| 最新三级网址| 深夜激情无码| 丁香五月天视频| 9热9热综合网| 麻豆伊人网| 天天日天天操VV| 中文字幕一区二区三四五区日日骚| 久久少妇人妻| 久久久免费高清中文视频| 91高潮| 亚洲男人天堂AV| 婷婷超| 不卡av在线中文字幕| 自怕偷自怕亚洲精品| 污污汅18禁网站在线永久免费观看 | 精品少妇一区二区三区免费观看| AV天堂电影网| 蜜桃臀av一区二区| 国产一区二区二区按摩精品啪视频| 秋霞怕怕片| 一级性爱啪啪视频| 在线视频日韩欧美国产| 天天日天天爽| 美女91色黄18| 91爱| 国产aⅴ无码片毛片一级网站| 91久热| 伊人大香蕉在线| 色婷婷A V一二三四区麻豆综合| 91亚洲人| 日本成人电影资源网| 婷婷五月色| 欧美性暴力猛交XXXX| www.男人天堂| 免费精品无码一级毛片牛牛影视 | 久午视频| 粉嫩av久久一区二区三区| 国产色精品午夜大片| 96精品在线| 国产美女激情| 中文字幕一区二区视频在线观看| 91GD.COM| 亚洲男人综合网| 麻豆亚洲AV成人无码久久精品| 内射老妇BBWX0C0CK| 国产97色在线| 四虎影库国产精品免费| 久久精品28| 天天色,天天干,天天干| 国产馆极品诱惑| 天天综合网合集91| av一区二区三区四区| 三级三级三级日本99| 久久久99999久网站| 亚洲色图欧美| 韩日无码在线观看| 国产肏屁眼视频| 日躁天天爽爽| 成人午夜无码视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 夜夜爽妓女| 欧美亚州综合网图片| 色吧 综合| 丁香六月东京热| 美女淫穴| 亚洲另类欧美精品| 色狠狠综合噜一二三区| 日韩综合97p| 色综合婷婷| 国产99999久久精品| 国产精品永久免费10000| 清柠毛片| 九热中文字幕| 欧美日韩夜夜| 国产99精品一区二区三区免费| 九九九午夜| 久久精品人妻一区| 超碰日本97美女人妻人人玩人人爱| 天堂av最新电影网| 久久‘黄片视频| 亚洲色图欧美色图综合| 国产精品久久久久av| 天天天堂影视日韩亚洲91| 岛国免费黄色网址| 嫩草影院永久在线制服丝袜| 新久久AV| 久久综合久色欧美综合狠狠| 亚洲精品99| 青青草一区二区高清无码视频 | 97视频在线观看网站| 综合自拍| 国产精品乱码久久久| 开心五月天激情网| 在线视频亚洲无码| 日韩AV色图| 性暴力欧美猛交在线直播| 2017大香蕉国产精品久久| 在线观看高清AV| 夜夜骑操视频| 狼人久草| 免费精品无码一级毛片牛牛影视| 德国一二三不卡| 中文字幕精品一区欧美| 国产妇女精品视频青青草| 国产综合永久精品日韩鬼片| 亚洲青色欧美| 99热在线播放| 黄片免费视频2019| 91女优在线观看 | 偷拍亚洲熟女视频播放| 国产精品久久久久999| www.91久久| 超碰在线一区二区| 色哟哟av网址| 欧美熟爽综合| 人人爱人人操人人性| 91综合无码| 老熟女区| 91黑丝露脚| 永久免费av无码网站国产app | 五月婷婷丁香六月| 中国国产精品一区视频| 九热中文字幕| 日韩综合97P| 丁香激情五月天| 夜夜躁狠狠躁日日躁av| 伊人嫩草| 欧洲乱码一区二区| 国产精品久久久鸭无码的功能| 久操精品| 亚洲系列欧美| 五月婷婷六月丁香| 亚洲图片欧洲图片aⅴ| 少妇久久| 99在线观看视频在线高清| 久久人人爽爽爽人久久久| 殴美在线AⅤ| 2024年最新色情网站在线观看| 97操97干| 久久久熟妇熟女国产| 婷婷综合网| 国产精品亚洲天堂网址| 精品免费一区| 日本幼女18+| 加勒比在线视频| 五月婷婷激情综合| 国产性久久久| 日本高清视频xxxx| av三级电影在线播放| 伊人久大| 亚州男人的天堂| 亚洲天堂第一页| 97人人干| 天天躁日日躁AAAXX| 内射老妇BBWX0C0CK| 亚洲97精品| 人妻大香蕉| 在现视频女上位好爽| www.超碰| 激情五月天婷婷| 无色无码| 国产www色在线观看| 亚洲国产成人7777| 久久狠狠色噜噜狠狠狠狠97| 国产91丝袜 在线播放| 色五月AV在线| 色臀aV| 亚洲的天堂网| 亚洲男人的天堂在线看| 91在线丝袜视频| 91 亚洲 欧洲| 厕所偷拍在线| 中美日韩毛片| 不卡九肏| 91色鬼| 日日狠狠久久偷偷色综合免费| www.色婷婷色综合| 久久久九九网站| 国产AV超爽| 日韩av影片在线观看| 国产免费一区在线观看| 色五月亚洲| 操91| 日本有码影片下载| 欧美日韩夜夜| 人妻一区二区三区| 亚洲色情在线影视| 日本精品九九九| 久九9精品| 99精品无码| 午夜经典| 日韩欧美加勒比| 男人的天堂久久| 精品免费视频国产一区| 国产狂喷潮在线精品| 在线毛片片免费观看| 先锋激情∨在线视频播放| 成人性爱av| av无码av无码专区| 柠檬AV导航| 97人人爱人人做人人乐| 色亚州人久干视频在线观看免费版| 超碰到97情色| 天天干嫩逼网| 午夜福利一区二区影院| 五十路三级片| 日韩一级片在线看| 人妻精品综合中文字幕在线 | a天堂视频| 强奸a片网| 伊人综合色网| 亚洲黄色网址| 久久久无码视频| 伦伦成年午夜免费视频| 美女自卫慰黄网站免费| 国产黄a三级三级三级av在线看| 欧美中文字幕一区| 在线 欧美 亚洲| 人妻丝袜美腿中文字幕| 91社操逼| 91女人的网站| 丝袜色综合| 亚洲色交| 久久久久久国产精品免费网站| 亚洲AV成人在线| 人妻密肉在线观看| 亚春色色| 色翁荡息又大又硬又粗又爽| 日韩中文欧美| 99热线麻豆| 一级做a爰片性色毛片久久| 成人无码影片视频在线| 91女神在线视频| 97在线日韩中文字幕| 老熟妇乱轮| 欧美三级中文字幕hd| 丁香五月天啪啪| 四虎免费视频| 亚欧毛片基地国产毛片基地| 婷婷六月天| 91路www| 色综合av综合久久| 亚洲高清在线| 东北操逼| 上海一级黄片| 97精品视频免费| 99av| 亚洲人人操| 久久久91福利姬| 日本高清视频xxxx| 欧美精品第四五页中文字幕在线观看| 欧美草草高清日韩视频| 中文字幕日韩人妻视频一区二区三区| 久久久蜜桃一区二区三区| 国产吹潮女在线观看| 久久午夜鲁丝片| 亚洲情色第一页| 97国产精选| 久草精品国产99| 欧美熟爽综合| 中文视频在线观看| 久久,精品一二三| 好爽要喷了| 成人精品一区二区91毛片不卡| 黄色高清久久无码依人| 校园春色 亚洲| 日韩无码专区| 欧美性第1页| 久久肏大逼| 色偷偷超碰亚洲| 久久91视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲精品久久久久久| 人妻啪| 亚洲大色堂| 美国aaaaa一级黄片| 日欧毛片久久| 国产熟女免费观看久久| 激情婷婷丁香| 免費黃色視頻觀看一| 人妻少妇无码 | 天天综合网91| 综合久久六月久久婷婷| 人妻蜜桃臀| 大香蕉五月天婷婷| 97超碰精品图片| 91操碰| 人妻少妇精品视频一区二区三区| a网站免费观看| 久久久久久97| 国产熟女少妇一区| 成人无码电影在线观看网| 久久一二三四不卡 | 久久↗↗| 亚洲黄网在哪免费看| 久9九综合在线| 亚洲天堂东京热| 69av一区二区三区| 欧洲精品一二三在线| 白嫩国模丰满一二三区| 91中出视频| 91美腿丝袜在线观看| 超碰2017| 亚州色阁| 国产欧美精品日韩区二区麻豆天美| 97久久超碰| 少妇人妻无码| 一级久久性爱视频| 日本天天干天天操一区| 激情亚洲天堂| 精品一二三区久久AAA片| 色九色久| 亚洲码和欧洲精品激情系列| 99精品欧美一区二区三区桃色| 人妖欧美一区二区| 91视频国品一二三区| 在线播放成人高清免费视频| 最新9久久久9免费视频| 久久极品一区二区| 亚洲精品三区在线观看| 97超碰色情| 欧美999999| 五月婷婷激情综合| 一级片在线观看高清无码| 中韩中文字幕在线观看| 久久深夜无码| 狠狠操狠狠爱| 久久久久亚洲?V片无码V| 九草九九九| 大香蕉宅男伊人| 伊人久久婷婷| 岛国AB视频| 2017大香蕉| 欧美黑人日韩少妇色情| 精品视频日日夜夜| 国产精品免费视频人成| 日本精品中文字幕视频| 啊啊啊啊好疼视频| 欧美 青青草| 精品亚洲国产成人AV制服丝袜| 91国产操逼视频| 天堂综合| 美女91在线观看| 大香蕉碰碰| www色日本| 91精品国产日韩欧美综合| 国产精品自拍视频| 亚洲玖玖爱| 人人澡综合涩| 国产精品乱人伊人网| 六月丁香婷| 被男人添B超爽视频| 91狠狠| 久9精品| 色97综合中文字幕| 青青伊人久久| 中文字幕97色| 中文字幕88av在线| 久热久一区二区三区| 天天日少妇逼AV| 爆操无码| 人妻少妇被猛烈进入中| 中文字幕乱在线伦视频中文字幕乱码在线| 呦呦一区| 久久AV无码AV| 亚洲中文字幕熟女| 91色图| 96精品久久| 国内毛片四区| 天天久久久久久| 老鸭窝日丰县女人| 欧美第一页| 久久久精品一区二区| 欧美性天天影院| 久久同城AV| 午夜综合在线| 天堂精品| 一本大道青青| 亚洲人妻在线精品| 欧美性爱综合,免费| 免费岛国一级片| 亚洲欧洲av影音| WWW操逼| 九月丁香婷婷色| 变态乱伦伪娘灌肠一区二区| 偷拍 亚洲 欧美| 国产精品黑人一区二区三区| 国产精品分类在线观看| 91搞逼视频| 在线观看AV片| 人妻少妇av在线观看| 婷婷视频在线免费观看| www.色婷婷| 视频在线观看一二三区| 丝袜天堂| 亚洲诱惑天堂| 97超碰美女| 国产色综合亚洲色综合吹潮| 激情视屏国产乱伦强奸| 久久婷婷五月综合| 日韩精彩免费| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| a片亚洲一本通视频| 久久是精品| 啊啊啊啊啊啊啊啊在线观看| 18禁看网站一区| 国内毛片婷婷六月色| 日本精品无码三级网站| 欧美夜夜狠| 国产美女口爆吞精| 久久九九精品一区二区| 超碰91在线| 国产成人午夜视频网址| 中文字幕在线日亚州9| 性欧美另类高清| 久久久中文版| 亚洲第一页色网| 亚洲 无码 有码 中文字幕| 人人操欧美风骚| 亚洲高清国产理伦片| 99热在线播放| 亚洲限制级| 亚洲毛片久久| 久久久久久一日韩字幕无码| 日本3级一区二区免费 | av日韩在线观看电影| 欧日韩不卡视.频| 1204金沙人妻懂旧版免费| 日韩精品资源| 2020中文在线一区二区三区| 黑人精品成人一区二区三区 | 蜜臀99久久国产| 婷婷丁香九月| 久久精品性| 一本道综合色图| 激情小说亚洲图片| 色哟哟 日韩精品| 亚洲偷拍自拍在线视频| 久久精品亚洲东京热色播| 欧美综合自拍亚洲综合图| AVE乱伦| 国产 无码 一区二区| 婷婷激情四射| 亚洲AV无码黄色强奸| 国产农村妇女精品一| 99啪啪| 中 文字幕一区二区三四 五 区日 日 骚 | 精品成人动漫一区二区| 色老汉玖玖爱| 一二区在线观看视频| 高潮毛片无遮挡高清免费| 成人婷婷丁香| 九九九九九九综合| 色呦呦呦在线观看视频| 78久久久| 精品国产一区探花在线观看| 97av在线视频| 人妻精品一区一区三区蜜桃91| 国产白丝av| 97人人干| 婷婷人妻激情| 日韩性爱播放| 中文日韩欧美熟| 北约熟女超碰| 91中文精品日韩欧美在线| 一本色道久久天天射天天干| 久久手机视直播| 精品福利| 荡小穴在线观看| 色色97爱| 91国产精品在线看| 91国产丝袜白虎| 97人人干人人操| 久草毛片| 国产精品自拍xxxx| 91网站18+| 亚洲中文字母在线播放| 十八禁电影伊人网| 国语对白在线播放视频| 国产女人9999| 激情婷婷| 91bbb| 九九天堂| 国内偷拍精品一区二区| 久久九七| 国产日韩精品suv| 久久伊人青青草| 精品人体无圣光凹凸| 97在线观看免费视频l| 一级毛片久久久久久久女人18| 一区,二区,三区视频| 无码国产Av| 超碰 97国产熟女| 国产精品白丝在线播放| 96免费视频在线| 精品视频免费在线一区| 欧美国产操逼| 天天色综合天天操| 亚洲天堂资源在线| 亚洲天堂性爱| 成人无遮挡毛片免费看| 色综合超碰超| 7777欧美成是人在线观看| 久热伊人| 亚洲精品国产AV天美传媒| 国产AV色黄看到爽| 九九热午夜欧亚国产视频| 99色天堂| 国产白丝精品在线观看| www.高清无码诱惑一区.com | 国产日韩欧美| 91九色在线| 国产白丝精品在线观看| 大香蕉欧美日韩| 亚洲免费人妻在| 91美女在线观看| 亚洲色资源| 337p大胆噜噜噜噜噜91Av| 精品免费一区| 久操操| 你懂得91| 俄罗斯一区二区视频在线观看| 日本一二三免费久久| 欧美在线啊啊啊| 素人播放一区| 操逼网站视频漫画国产| 日本性交操一区二区不卡系列| 91少妇高潮| 欧美人妻中出| 啊啊啊好湿国产一二| 中文字幕黄色片| A V视频日本| 免费A片三p视频| 超碰色图| 蜜臀一二三区| 欧日韩在线观看| 91丝袜美女| 日韩三级视频一区二区三区| 一级性爱aaaa| 国产熟女完整版中字| 韩国三级色呦呦| 9久久久久久| 久久伊人青青草| 啊啊啊好爽快点啊啊啊嗯嗯| 色呦呦呦在线观看视频| 国产精品内射婷婷一级二| 男人天堂最新手机版在线青青草| 中文无码一二三区| 探花熟女,姿勢到位,體驗感也到位| 久久久久国产精品久久久| 国产99999久久精品| 日韩三级网址| 91狠狠色丁香婷婷综合久久| 在线观看岛国有码| 天堂v无码免费视频| 97亚洲国产| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 伦理弟一页| 人人妻人人操人人乐| 五月色网| 国产精品视频白浆免费| 一区二区三区在线美女| 亚洲综合网91| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 人妻少妇精品一区二区三区| 亚洲欧洲日韩天堂av| 波多野结衣AV无码一区| 九九九九国产| 一区二区影视| 国产91丝袜 在线播放| 亚洲欧洲无码一区夜| 操操操操网黑人| 性欧美体内射精| 97天天爽| 操逼日韩无码| 六月婷婷色综合| 天天干天天狼在线视频| 亚洲精品无码久久AV| 2017人人操,人人摸| 在线毛片片免费观看| 性色亚洲| 91天天综合网| 青青草好吊色| 91网站18禁| 亚洲欧美清纯| 少妇蹲下露出大唇5| 九九九九九九精品| 少妇专区一二三四五| 国产成人主播| 大香蕉欧美日韩| 欧美韩国你懂得在线| 丝袜内射| 国产成人资源| 91殴美大片| 天美一二三在线观看Av| 操美女人妻| 欧美综合在线91| 久久综合久色欧美综合狠狠| 亚洲大色鬼| av天堂加勒比| 亚洲女优有码无码高清| 亚洲乱妇p22| 高清无码久操视频| 蜜臀AV秘一区翔田千里| 亚欧成人综合影院| 午夜寂寞欧美| 五月丁香激情综合网| 亚洲最大无码中文字幕网站| 大香蕉伊人色偷偷在线| 少妇一区二区三区在线观看| 久久精品老司| 日韩中文9| 欧美激情内射| 欧美在线|亚洲| 97免费在线观看| 美女操逼A A| 围产精品一区二区三区视频播放| 亚洲国产无码精品首页久久久| 天天爽天天爽| 成人精品视频一区二区| 九九自拍伦理| 欧美综合天堂| 蜜臀一区二区三区在线| 国产成人亚洲精品无码最新在线| 曰韩人妻中文字幕在线| 口爆吞精在线观看| 91碰碰碰| 神马久久网| av草草在线电影| 久久久9999| 日韩无码黄色片| 五月丁香啪啪啪| 久久国色天香香蕉| 色综合 加勒比| 97香蕉网| 91操人| 青青草在线成人视频| 亚洲AV资源| 死我十八禁| av黄图片在线观看| 久久久久国产精品喷潮免费观看臀| 色999五月色| 青春草A| 啊啊啊啊免费视频| 国产福利电影| 中文字幕成人理论在线| 精品久久久久瑟瑟| 欧美女同在线| 69av一区二区三区| 亚洲日韩精品在线播放| 亚洲天堂日本| 69少妇一区二区| 国产精品熟女AV中文字幕在线播放| 日韩三级av片| 免费在线观看AV无码网站| 青女在线| 国内毛片国产欧美拍| 久久久草成人网站久久久草成人久久久草久久久 | 亚洲成人在线播放| 一区超碰一区| 中文字幕一区电影在线观看 | 日韩三级视频一区二区三区| 少妇熟女视频一区二区三区| 国产欧美岛国精品一区| 日日干男人的天堂| 综合激情二| 亚洲乱色视频一区、二区在线| 91bbb| 精品四五区| 激情色图| 婷婷国产精品九区| 精品久久久久久中文字幕视频免费| 亚洲精品男人的天堂| 丝袜 中出 制服 人妻 美腿 中文字幕| 精品国产乱码久久久久久口爆网站 | 性爱视频无打码在线观看| 色婷婷综合久久久久中文一区二区| 大香蕉欧美| 欧美专区第一页| 大象AV在线| 亚洲 图片 欧美 色图| 色综合国产在线观看| 日本加靬比网站发布页| 免费久久一级毛片大黄| 操逼精品视频| 手机在线A片| 精品少妇人妻| 人、人、摸,人、人、草| 亚洲第二页| 天天综合色| 97色网| 神马午夜久久久| 淫荡少妇免费| 国产熟女自拍| 亚洲国产日韩欧美熟妇在线| 好涩综合| 久热久一区二区三区| 手机午夜电影神马久久| 使劲用力艹少妇视频一区二区 | 97爱爱爱| 国产肏屁眼视频| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 色乱二区| 麻豆一区二区三区在线看 | 国产精点久久久成人| 国产嫩草精品A88AV| 99免费视频| 91视频伊人| 午夜AV污污污| 99久视频| a亚洲欧美色欲| 97欧美日韩中文| 柠檬AV导航| 少妇一级无码精品| 97超碰总站| 屌逼传媒| 爽极品影院| 亚洲黄色AV电影| 大香蕉国产中文自拍| 亚洲第一成人影院色播| 一区二区不卡视| 欧美国产有色电影| 婷婷五月天AV| 久久日韩精品一区二区| 伊人久大| 丰满少妇一区二区三区专区| 最新中文字幕精品在线| 欧美加勒比| 日日骚精品视频| 国产伊人自拍| 黄色av片三级三级三级免费看| 国产精品国产精品国产| 经典丝袜一区| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲性爱高潮影院| 亚洲熟女性高潮久久久| 亚洲欧美另类图片| 啊啊啊啊啊啊啊啊啊在线观看| 荡小穴在线观看| 天堂8在线新版官网| 色y情视频免费看| 黑人在线91| 天综合网欧美| 国产自产91区13区| 五月天社区| 3028国产精品| 精品人妻视频入口| 超碰碰97资源站| 中国黄色特级精品一区二区三区片| 欧美人妻二区三区| 97婷婷色| 人人操人人摸人| 大香蕉www.超碰| av影片在线观看不卡| 精品人妻一区二区三区四区| 人妻丝袜肏逼| 91骚妇| 久久久久久久久久久久久久9999| 久久露脸国产老熟女| 国产精品久久久久中文字幕| 综合影院永久入口国产| 日夜伊人网| 亚洲中文sv| 92大香蕉| 四虎影视永久在线观看精品免费网站| 操人妻逼91| 蜜桃中文字日产乱幕4区| 亚洲精品一区中文字幕乱码| 亚洲操人| 国产女性无套 免费观看| 一级黄色视频网| 黄视频免费| 日韩欧洲操屄视频| 欧美成人性爱视频在线播放| 亚州91| 欧美精品宗合| 91伊人| 夫妻天天操岛国视频| 久久久四区| 射综合网| 91丝袜| 久操97| 91精品人| 大香蕉乱级| 欧美爱三级日韩久久| 亚洲av综合伊人久久| 亚洲电影中字一区二区| 日韩免费福利在线观看| 欧美一级AAAAAAA| 亚洲日韩视频二区| 2017人人操,人人摸| 亚洲精品三区在线观看| 操逼天美3区| 日韩精品 视频一区二区| 日韩精品 视频一区二区| 午夜电影在线观看无码专区| 国产黄片在线免费观看| 91足交| 日本在线不卡一二区| 婷婷伊人綜合中文字幕| 精品国产一区二区三区av在线资源| 国产刺激视频| 91人人看| 亚洲综合小视频小说在线观看| 国产精品suv一区| 久久99深爱久久99精品| 天堂av最新电影网| 91熟女丨老女人| 蜜臀久久99精品久久久久| 日本孕妇一区二区视频操逼免费看| www.色吧5.com| 丰满岳乱妇一区二区三区| 岛国黄色大片网站| 99久久久久| 花野真衣| 免费久久9999| 久久机热| 91国模| A一区片| 日本一级二级三级网站| 色色99| 少妇人妻精品| 舔舔啊| 日本不卡二区| 国产在线观看91精品一区| 亚洲导航深夜福利| 91精品久久久久久综合五月天| 熟女丝袜视频| 99久在线精品99re8a| 男人的天堂Va| 日欧操屄| 国产AV久久久蜜爱影集| 极品五月天噜噜| 极品色电影院| 超碰97护士| 国产精品久久久无码AV网站|