国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲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)拆解 強化學(xué)習(xí)學(xué)到 Actor-Critic 這一節(jié)基本算是從會跑 demo跨到能理解現(xiàn)代 RL 工程的分水嶺。前面講策略梯度時REINFORCE 用一整條軌跡的回報去估計梯度方差大到需要幾十次采樣才能勉強收斂講到值函數(shù)近似時又發(fā)現(xiàn)只學(xué) Q 值沒法直接輸出策略。Actor-Critic 把這兩條線擰在一起一個網(wǎng)絡(luò)負責(zé)決定動作一個網(wǎng)絡(luò)負責(zé)評價動作好不好用評價網(wǎng)絡(luò)的輸出給決策網(wǎng)絡(luò)的梯度降方差。A2C、A3C、PPO、DDPG、TD3、SAC 這一整串現(xiàn)在還在被廣泛使用的算法骨架都是它。這篇文章是2026 新版強化學(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)容都是圍繞這張表展開的細節(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ù)控制、機器人仿真、游戲 AI、推薦策略優(yōu)化、對話策略學(xué)習(xí)這里要提前說清楚一個容易混淆的點很多教程把 Actor-Critic 當(dāng)成一個具體算法講實際上它更像一個模板。你在模板里換掉優(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ù)學(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)勢為負的動作上減概率。接下來的問題是怎么拿到 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 負責(zé)試Critic 負責(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ù)制過來就會報解包錯誤。基礎(chǔ)依賴如下。版本號這里不寫死因為不同機器上的 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 # 安裝核心依賴具體版本以本機可用的 CUDA 組合為準(zhǔn) pip install torch --index-url https://download.pytorch.org/whl/cpu pip install gymnasium numpy matplotlib tensorboard如果機器上有顯卡并且想跑圖像輸入的任務(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)境是否裝好跑一段最小檢查腳本就夠了。這段腳本同時能確認 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)致某些動作永遠采不到探索直接退化。這不是絕對規(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)性很強的任務(wù)比如機械臂在接近目標(biāo)時需要精細動作可以讓網(wǎng)絡(luò)輸出 log_std但要額外做 clamp。4.3 Critic 的輸出與價值尺度Critic 輸出一個標(biāo)量 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]損失看起來在下降但學(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這段代碼里有個細節(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 誤差。從后往前算一遍即可復(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ù)值很大一次更新就能把策略推得很遠直接破壞探索歸一化之后優(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)勢否則梯度會流進價值網(wǎng)絡(luò)導(dǎo)致雙重反傳。價值損失用 MSE如果獎勵尺度很大可以換成 Huber避免離群回報把 Critic 拉飛。熵獎勵的符號是減去因為我們希望最大化熵也就是讓損失里包含負的熵項。梯度裁剪的 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隨機策略同策略同步多環(huán)境離散/連續(xù)否結(jié)構(gòu)簡單易于調(diào)試教學(xué)、基線對比A3C隨機策略同策略異步多線程離散/連續(xù)否異步更新現(xiàn)已較少使用歷史參考PPO隨機策略同策略多輪復(fù)用離散/連續(xù)否clip 約束穩(wěn)定工業(yè)界主力大模型 RLHF、游戲 AIDDPG確定性策略異策略僅連續(xù)是確定性策略加目標(biāo)網(wǎng)絡(luò)連續(xù)控制基線TD3確定性策略異策略僅連續(xù)是雙 Critic、延遲更新、目標(biāo)平滑連續(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 就失效了算法退化成沒有約束的策略梯度訓(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ù)值問題。把這幾項寫進日志接 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è)備的拷貝。判斷標(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)象可能原因排查方式解決方案回報長期停在隨機水平優(yōu)勢符號寫反或未 detach打印單批次優(yōu)勢均值檢查是否恒正或恒負修正優(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)試里總結(jié)出來的、能明顯減少踩坑時間的做法。第一條永遠先在 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 倍是常見起點尤其在價值損失下降明顯滯后于策略改進的時候。第三條保留一套最小可運行配置。把能跑通的那組超參寫進configs/目錄并加注釋說明適用環(huán)境之后每次實驗都從它 fork 出來而不是在當(dāng)前腳本上反復(fù)改數(shù)字。Actor-Critic 調(diào)參很容易陷入改了 A 又影響 B的循環(huán)有基線配置才能判斷某次改動是真的有效還是隨機波動。第四條批量任務(wù)和長訓(xùn)練要加斷點保存。訓(xùn)練腳本里定期保存模型參數(shù)、優(yōu)化器狀態(tài)和當(dāng)前 update 序號配合日志落盤。強化學(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)練時用隨機策略采樣是為了探索評估時應(yīng)該用分布的均值或 argmax并且固定隨機種子跑多個回合取平均。用帶噪聲的策略去評估得到的回報會明顯偏低且波動很大容易誤判模型沒學(xué)好。關(guān)于下一步的擴展方向比較自然的路徑有兩條。一條是往 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
返回資訊列表
在线观看AV片| 又大又长又粗又爽又黄| 亚洲阿v天堂在线| 在线中文字幕视频| 妇女视频网站| 男女性感激情网站| 人人操肉肉| 玖日综合网| 久99热| 精人妻一区二区三区| 日本人妻A片成人免费看片| 我爱操| 久久婷婷一区二| 欧美不卡五十路| 夜夜爽夜夜摸夜夜操免费视频| 一区二区三区精品黑丝白丝酒店对鸡 | 丁香五月天激情综合| 88在线一区二区三区| 狼人综合婷婷激情四射| 亚洲激情在线| 亚洲另类久操网| 女同性恋久久| 富女玩鸭子一级毛片| 欧美精品 - 91爱爱| 久操网无码在线| 一级性爱网| 亚洲的天堂网| 亚洲一二三精品久久网| 欧美熟女操屄| 午夜福利1区2区3区| 人妻熟妇久草在线| 色婷婷在线视频精品导航| 日本熟女免费視颖| 国产成人 综合亚洲 天堂| 亚洲欧美情色| 大香蕉中文201| 18禁久久| 加勒比av网| 91亚州欧美| 黄片在线免费在线观看| 91精品国产91久久福利| 国模私拍一区二区三区神乳| 99re6在线视频播放免费精品| 亚洲综合97中文网| 色香91| 偷拍欧美激情| 九九十八精品| 997色在线| 亚洲性刺激| 91美女看B| 欧美内射少妇| 亚洲 另类 丝袜 自拍 动漫| 神马久久中文字幕| 欧美熟女逼久久久久久| 96超碰网| 久热精品在线国产| 8050午夜少妇无码| 中文操嬖片。| 嫖老熟女A片一二三区| 在线无码操| 婷婷丁香五月综合| 欧美精品三区| 亚洲av综合伊人久久| 9Ⅰ超碰| 国产91美女视频| 日韩视频中文字幕| 91社操逼| 精品一区二区成人| 99热这里只有精品地址| 探花激情视频| 天天综合AV| 91网站18在线观看| 一区,二区,三区视频| 国产黄色动态精品| 中文字幕88av在线| 日日爽熟女| 久久国产AⅤ| 国产精品制服丝袜清纯唯美| 欧美精品人妻视频| 亚州欧美综合| 91福利网在线观看| 日本三级人妻a人妻一在线| 日本中文字幕熟妇| 操逼无毒无码免费视频| 国产精品久久久 | 殴美在线AⅤ| 在现视频女上位好爽| 日日夜夜草草草| 色色色色色色色色综合| 青娱乐福利99| 老司机老司机午夜影院| 日韩美一区| 天天澡天天爽日日av| 99在线精品观看视频中文| 狠狠爱综合网| 欧美十八禁导航成人| 人妻少妇久久久| 人妻AV 中文字幕的| 91久久18禁| 精品久久久久久久| 亚洲欧洲另类| 久9久精品视频| 欧美91精品国产自产| 欧美v亚洲v日韩v最新在线二区 | 日韩无码黄色片| 亚洲天堂情色| 欧美日韩在线视频网站| 欧美中文字幕一区 | 99精品久久久久久久婷婷蜜桃| 国产热RE99久久6国产精品首| 久久五月丁香| 欧美亚洲在线| 欧美一级A片在线看视频性色| 一区二区国产视频在线观看| 亚洲男人久久综合天堂| 国产精品suv一区| 人妻aa| 欧美91精彩| 日本熟妇熟色97一本在线观看| 色男人色天堂东京热| 亚洲毛片基地专区| 欧美国产精品久久九九| 无码9区| 欧美日韩系列| 国产suv精品一区二区四| 秋霞福利网| 欧美精品1区2区3区| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 丁香五月激情综合| 亚洲色人| 99热精品国产| 久久亚洲AV无码专区首页| 欧美大战久久久伊人| 97精品一区二区视频| 91色图片| 思思热国产在线视频| 久久精彩视频| 91老熟女| 久久久久亚洲精品| 日韩精品1区2区中文字幕| 97一区二压| 亚洲乱码国产乱码精网站| 粉嫩av一区二区三区四季| 国产伦乱91| 蜜桃臀av一区二区| 日韩情色视频| 免费看黄视频亚洲网站| 尤物av网站免费在线播放| 久久天天摸| 久久黄片国产一区二区| 日韩色女精品| 激情五月天网| 国产亚洲欧美每日在线| 天天天堂影视日韩亚洲91| 婷婷六月色开| 女欧美一区二三区| 国产吹潮女在线观看| 国产精品秘 福利姬在线观看| 精品无码少妇| 目产99999久久999| 大香蕉男女超碰精品在线| 欧美日韩精品久久久久东北老熟妇| 操逼逼无码| 国产91福利小视频在线观看| 91视频综合在线| 人妻熟女午夜精品在线| 综合久久久久久久综合网| 久久久啊啊啊| 青娱乐手机日韩在线视频| 久久激情综合| 伊人久久在线视频观看| 午夜精品久久久久久久久久久久久 | 国产精品电| 亚洲限制级在线| 国产精品自拍欧美在线| 精品欧美不卡在线播放| 97久久国产精品女不卡| 亚洲色图伊人网| 亚洲人成网www| 午夜一区二区三区国产| 不卡av免费在线网址| 后入综合久久| com 首页 18岁 禁区 女优 免费 精选 同城| 久久天堂婷婷网| 一本精品日本在线视频精品| 国产精品毛片| 天美传媒Av在线| 国产欧美一区二区| www.91色综合| 蜜乳AV色欲AVAV无码| 免费的黄片有限公司| 亚洲色图A| caopeng97人妻| 人妻在线中出视频| 韩国女主播青草福利视频| 91精品大奶人妻| 色yeye成人免费视频| 不卡中文字幕aⅴ在线| 日韩啪啪视频| 在线天堂资源亚洲| 久久久精品,3| 中文有码9| 不卡六六在线91| h色99999| 国产精品国产| 91N综合网在线| 农村妇女精品一区二区| 牛牛久久国产精品视频一二三| 久久a久久| 99re9在线| 天天综合精品| 伊人女女资源在线观看| 色香色欲天天综合网天天来吧| 一类av片在线看| AV和黑人在线播放| 三级网色| 可以免费观看的av| 国产又粗又又黄又猛| 亚洲色图大香| 成人女人国产| 97在线资源| 欧美性生活内射| 蜜桃丰满熟妇av无码区不卡| 国产av色网| 综合欧美色图| 97超碰国产亚洲精品| 亚洲精品97p| 久久超碰日韩精品| 无遮挡男女激烈动态图| 欧美一区二区福利在线| 精品国产一区探花在线观看| 日韩av影片在线观看| www.色五月| 精品国产嫩穴视频| 婷婷九月国产| 人妻少妇精品视频一区二区三区| 91精品国| 无码一区免费在线不卡| 中文字幕奈奈美被公侵犯| 亚欧日韩成人| 大香蕉色十月| 嫩草 我啊~嗯~在线| 九久精品| 凹凸久久人人| 麻豆九九九| 国产三级中文字幕粉嫩| 天天躁日日躁狠狠躁| 草草影院最新网址| 超碰性爱97| 69丨亚洲丨精品丨入口免费播放| 国产精品96久久久久久| 午夜AV人气不卡| 午夜高清成人在线视频| 久久久久9999妇女| 2017天天插| av绯色| 亚洲综合激情五月久久| 极品AV网站在线观看| 97欧美日韩综合| 久久首页| 久久久久骚| 丝袜色综合| 日本久久女同性恋视频| 亚洲精品色| 国产精品一级二级在线| 国产熟女完整版中字 | 久久久久久中文| 欧美性爱精品七区| 欧美亚洲综合色| 久久是精品| 极品综合| 久久99999| 清纯唯美亚洲综合| 人人透人人操| 中文字幕在线第二页| 眼镜人妻101.com| 欧美制服另类丝袜| 日韩小电影| 日韩精品一区的| 韩日精品福利视频一区不卡在线免| 97精品免费视频网站| 日韩性爱网址| 夫妻AV网站| 天天色综亚洲91污| 超碰在97| 一,爱啪啪,在线免费视频| 99re在线观看| 日韩偷拍一区二区三区| 天天内射| 秋霞成人一级在线观看| 96免费视频在线| 日韩精品资源专区二区| 久久久久久久久久久久黄色 | 秋霞免费AV| 日韩欧亚中文在线| 国产三级多多影院2022国产AA一级毛片无码| 欧美大香蕉97| 久草免费福利在线播放| 97超色| 91成人在线免费视频| 老女人老91妇女老热女| 少妇干B| 欧美激色| 性爱久久| 欧州一区二区三区四区| 97网址97| 人妻少妇久久久| 欧美色偷偷| 麻豆国产原创AV色哟哟| 人妻一二三区| 大茄子熟女AV导航| 欧美久久九九| 福利操逼| 大香蕉中文201| 亚洲天堂电影精品一区| 新亚洲无码| 亚州春色| 久久99久久99久久99人受| 91熟女视频| 久热精品色情| 高潮内射在线| 欧美强奸乱能| 啊啊啊啊好疼| 熟妇国产免费一区| 亚洲激情综合| 色综合久久av| 天堂网亚洲区手机版| 国产精品一区二区三区在线密挑| 九九干| 亚州黄站| 久草草一二三四区久久| 丁香五月天啪啪| 国模私拍一区二区三区神乳| 久久青娱乐| 日本在线不卡123| 久操网址| 无码人妻一区二区三区色欲aⅴ| 97干综合网| 欧美日不卡| 免费看黄视频亚洲网站| 9999久久久| 少妇色综合| 嗯嗯嗯好爽| 色婷婷视频| 97AV在线观看| 日产精品久久久一区二区| 一牛影视久久久一区二区三区| 美中日韩无码| 亚洲欧美自拍偷拍| 色色色日本| 超碰97人人乐| 久久久久久无码人妻中文字幕| baisiav| 91丨熟女丨丰满熟女| 91激情| 91热| 久久中文字幕人妻熟av女蜜柚| 国产精品91ai| 久久人人妻| 久久9视频| AV不卡在线| 四虎午夜影院| 久久专区| 亚洲欧美另类图片| 欧美综合另类| 日日躁夜夜躁狠狠躁超爽| 啊啊啊啊好疼视频| 噜噜噜久久亚洲精品色情| 中文字幕91综合| 农村妇女一级二级三级视频| 亚洲成人久久美女| 玖玖婷婷五月天| 国产熟女乱论| 伊人久久大香大香线蕉中文| 国产小黄片在线免费观看| 色综合V| 亚洲情色综合| 久久久新亚洲AV| 亚州性色| 中文字幕欧美丝袜07资源| 亚洲图片小说欧洲| 加勒比中文av| 伊人热综合| 色色色日本| 亚洲黄片免费在线播放| 人妻丰满熟妇一区二区三| 精品丝袜无码一区二区三APP| 很很操在线| 日韩av无码网站| 亚洲 欧美 精品专区 极品| 99久久久无码国产精品性啊聊| 夜夜骑夜夜操| 69av一区二区三区| av无码精品久久久久| 亚洲乱码国产乱码精网站| 日韩午夜精品一区二区三区电影| 欧美日本国产日韩激情视频| 97摸视频| 好吊妞转入那个网| 日韩99神马视频播放| 欧美精品第四五页中文字幕在线观看| 99热在线不卡| 超碰精品人妻狠狠干| 天天综合站| 欧美宗合网| 亚洲无码精品AV久久久| 在线国产福利网址导航| 无码伊人久久大杳蕉中文无码| 色婷婷丁香五月| 国产精品视频电影| 老司机午夜精品福利视频一区二区 | 欧美色图 色综合图| 亚洲一区中文精品| 亚洲一本大道中文字幕无码在线| 婷婷综合| 好看的久久不射无码影视影院| 日本黄色天堂| 国产在线播放成人免费| 欧美日韩精品一区二区三区高清| 99热在线播放| 欧美97视频| 97欧美综合网| 五月婷网站| 丁香六月婷婷久久综合| 国产日产欧产美韩系列麻豆免费| 久久69| av网页一区二区三区| 天天综合精品| 蜜桃臀久久| 人人爱人人乐人人操| 久久性爱大全| 亚洲男人天堂2016| 国产乱子伦久久精品综合一区二区三| 欧美,日韩综合久久| 五月综合色| 丝袜狂射91| 国产精品人妻无码久久久老鸭窝| 屁屁影院一区二区三区国产 | 爱逼综合| 日韩av乱伦| 神马久久69| 国产精品点击进入在线影院高清| 99精品在线| 9999九九九久久久| 亚洲图片色图欧美另类| 91天天日| 日韩在线电影| 日本3级一区二区免费| 精品国产国产AV| 欧美色女人| 狠狠操夜夜操蜜桃视频三区| 日韩特一级久久| 天天狠操| 天堂射| 国产亚洲精品久久久久小| 大胆91| 男人的天堂VA| 欧美黄页在线| 97伊人网| 超碰资源亚洲97| 97综合激情| 偷窥自拍亚洲天堂网爆| 人妻 欧美亚洲| 把腿张开老子CAO烂你| 青青草男人天堂| 中国AV美女| 丝袜综合| 九九干| 国产精品乱码久久久久久| 一级特黄aaa大片在线观看成人一级片在线观看| 东京热激情视频一二三区| 日本幼女18+| 国产激情久久久| 四季av一区二区凹凸精品小说| 日韩午夜精品一区二区三区电影| 色臀aV| 免费综合亚洲中文| 青草精品视频一日本久久久久网站| 高清无码国产亚洲| 清纯唯美亚洲| 91色图片| 狠狠色噜噜狠狠狠狠狠色综合久久| 97 九色| 亚洲色色探花| 精品少妇99| 久久色人体 | 91丨九色丨东北熟女| 青青草久草| 超碰久久性爱| 2017人人操,人人摸| 五月开心久久AV官网| 秋霞一级视频在线观看免费| 综合五月天| 嗯嗯啊啊操死我| 高潮的A片激情扒开一区| 国模久久在线| 中文高清一区二区的| 26uuu久久| 欧美影音在线| 男人的天堂2019AV| 天天躁日日躁成人字幕aⅴ| 国产偷人妻精品一区二区在线| 久久久 国产精品| 色与欲影视| 人妻熟女一区二区三区在线| 亚洲五月天激情| 人妻性爱一区二区| 后入日本1234| 亚洲精品天天影视综合网| 日本午夜操逼| 国产午夜福利专区综合| 揉揉揉夜夜| 男人下部插入女人下部| 国产一区二区啪啪视频| 久久久精品91八戒| 0755午夜福利视频| 国产久久男人天堂| 欧亚乱色熟一区二区三四区| 亚洲偷拍自拍在线视频| 欧洲亚洲国产综合在线| 啊啊啊久久| 97免费视频在线观看视频| 爱爱动态120秒| 入口操逼网站| 亚洲国产ⅴ高清在线观看| 国产精品久久久久9999小说| 天天综合网AV91| 懂色综合久久久| 久久6热视频免费观看| 成人乱码一区二区三少妇| 国产精品视频91久久| 999久久久| 久久久草成人网站久久久草成人久久久草久久久 | 天天噜| 国产风韵犹存熟妇三区| 久操 高清| 日韩乱码Av| 天天躁日日躁AAAXX| 亚洲免费在线探花| 熟妇xxxxx性春色| 久久天堂| 亚州男人天堂| 久久东京热久久| 欧美亚洲清纯| 99热国产精品| 99精品综合久久久久五月天| 97久久天天综合色天天综合色电影| JULIA人妻风俗店中出电影| 色99视频| 色丁香五月婷婷| 99热91| 精品久久久亚洲AV成人网站| 伊人女女资源在线观看| 天天干天天狼在线视频| 抽插无码高清一区| www色色色com| 九九色色| 午夜情侣自拍网站| 红桃视频高潮| 1二区9| 超碰碰激情97+久| 伊人久久久日韩一区| 成人A片男人的天堂| 天天碰操中国年青熟妇| 夜夜福利| 中文熟女五十乱码在线| 欧美后入式| 青青草色AV| 777超碰| 色激情综合网站| 亚洲 欧美 日韩 国产一区二区| 成人国产视频在线观看| 欧美精品久久久久久久丰满| 少妇无码av专区线| 在线观看黄色电话| 五月丁香六月激情| 国产白嫩精品久久| 97丝袜亚洲在线播放| 91日日夜夜| 欧美情色亚洲| 美日韩男女操屄视频| 日本三级一区二区 在线| 看一级特黄a大一片| 黑人精品成人一区二区三区| 天天干,夜夜爽| 澳门成人网站久国产日韩| 在线97在线| 老色鬼成人精品视频下载大在线观看| 一区二区三区看视频| 尤物av网站免费在线播放| 先锋色眉乱伦资源| 五月丁香在线| yy少妇精品久久| 黑人在线91| 美女视频尤物网在线看| 日韩无码成人电影| 免费久久9999| 亚洲色阁| 黄色视频特级毛片| 二区熟妇韩日| 高颜值美女口爆高潮浪叫| 国产一区二区成人av在线播放| AV污污污污| 69AV女优男人的天堂| 一二视频神马久久传媒| CCYY草草影院地址入口| 丁香成人五月天| 亚洲少妇在线影音| 综合久久9| 思思在线免费视频| 操操操操网黑人| 超碰色老头| 亚洲免费人妻在| 天堂精品小草| 欧美天天| 婷婷亚洲综合| 美女网站黄页| 丰满岳乱妇一区二区三区| 97干日韩| 日本不卡一二区| 日韩一区二区三区四区五区| 日日A∨| 四虎精品永久在线播放| 99色综合| 日日骚一区二区三区| 岛国黄色短视频| 情色av电影| 加勒比综合| 很很干很很操| 78精品在线| 国产综合操逼高清| 啊啊啊啊在线播放| 人人插人人摸人人| 夜夜操一区二区| 欧美一区二区三区四区综合| 天天综合有色网| 亚洲国产丝袜熟女av| 天天综合网~69| 久久中文字幕在线观看| 久久乐| 先锋女优在线观看视频| 五月丁香啪啪| 香蕉99秘 一区精品蜜桃臀| 久热九九| 91色宗合| 欧美久久草熟女| 超碰97人妻| 欧美久久毛片基地| 日韩免费三级黄片电影| 日韩国产十八禁| 色黄污美女啪啪啪免费网站| 精品一久久久| 精品一啪| 国产午夜精品一区二区三区牛牛| 亚洲国产日韩欧美熟妇在线| 亚洲丝袜少妇在线| 好湿好紧好爽 视频| 日韩国产精品人妻无码久久久| 日本青青草在线| 欧洲亚洲国产综合在线| 夜夜 中文视频rt| 欧洲一级性爱视频在线观看| 超碰97久| 中文字幕日产av人| 国产乱伦性爱区| 亚洲天堂电影网| 99色热| 欧美精品精品一区二区| 亚洲欧洲第二视频在线观看色图| 国产懂色精品国产av| 2017,超碰| 任我爽视频在线观看| 亚洲av无码成电影在线播放| 精品无码产区一区二| 欧美性爱五月天| 久久久久久久强迫| 激情小说亚洲视频| 五月激情天| 国产成人99久久亚洲综合| 欧美综合色综合| 欧美激情总合网| 国产精品亚洲一级av第二区| 青青草原av| 97综合日韩| 天天干人妇| 乱抡国产91| 噜噜噜噜天天狠狠| 97超碰色屌| 日韩婷婷| 一区不卡在线观看av| 清纯唯美第一页| 国产传媒美日韩av| 天天色播| 日韩黄片视频试看| 啊啊啊免费| 2017天天透天天通天天擦| 中文字幕一区 二区三四五 区日 日骚| 日本操逼视频不卡直接放| 青娱乐 青青青操 日逼| 人人超碰在线观看黄| 久热99| 精品亚洲国产成人精品| 久久久久亚洲Av无码专区老牛影视| 97超碰精品成| 欧美色图天堂网m| AA丁香综合激情| 操B在线观看| 色屁屁影院www国产| 五月天婷婷社区| 国产一区二区精品在线视频| 久久综合久久综合人久久夜精品| 久久久中文| 天天视频黄网站| 亚洲天天做日日做天天谢日日| 亚洲 在线| 日本不卡中文| 天天躁夜夜躁狠狠躁AV| 新97国产超碰| 欲色影视综合吧| 爱爱动态120秒| 五月综合色| 久久婷婷热| 欧美v亚洲v日韩v最新在线二区| 巨爆乳一区二区爆乳区| 干我久操| 成人av毛片在线观看| 亚洲欧美日韩中文播放| 国产精品乱码久久久久| 亚洲欧美91| 色欧美在线| 老熟女综合网 | 精品久久久亚洲AV成人网站| 岛国黄色大片网站| 成人性爱美曰韩| 乱伦Av网| 一区二区三区四区免费视频| 综合操逼| 综合欧美日本三级| 日韩中文字幕二区| 色色激情五月天| 色婷婷丁香五月| 人人天天欧洲| 密臀在线免费观看| 久久熟妇五十路一区| 久久综合日韩亚洲欧美| 熟女中出视频| 成人精品视频| 九九九九97| 亚洲天堂电影网99999| 丝袜美腿丝袜| 超碰97亚洲| 日韩熟女操逼| 亚洲精品第一| 久久五月丁香| 91 丝袜在线| 欧美国产一区二区三区麻豆传媒| 国产日韩欧美| 亚洲精品黄码久久久久| 五十路熟女人妻一区二区三区四区五| 超碰97护士| 日韩人妻一区二区| 级做a爱无码性色永久免费| 人妻啪| 爱做久久久久久| 91亚·色| 欧美青青视频| 在线视频资源| 国产成人 综合亚洲 天堂| 强奸乱伦日韩AV| 蜜桃久久综合视频| laoshunv91| 夜夜夜夜久久久久| 欧美亚洲国产91在线| 性做久久久久久久| 日韩国产品视频中文字| 亚洲精品一区二区免费在线观看| 欧中美三级一区二区三区| 国产毛片片精品天天看视频| 亚洲精品xxx| 99re视频在线观看这里只有精品| 欧美色图天堂网m| 欧美最婬乱婬爆婬牲视频| 亚洲无 码A片在线观看麻豆| 免费一级特黄特色大片在线观看看| 婷婷五月天AV| 国产av热热色| 欧美亚洲激情| 欧美日韩国内不卡| 97这里都是精品| 色路综合| 插穴性爱视频在线观看| 97精品国产97久久久久久免费| 精品中文一区二区| 久久精品国产亚洲AV清纯| 日本在线不卡一二区| 男人天堂综合| 超碰97人妻| 亚洲欧美成人在线| 大香蕉青青9| 天天射天天操天天干天天吃2018 | 欧美中字二区| 久久春色| 久久九九综合| 另类老少妇| 色色色色日本| 大香蕉欧美伊| 97亚洲精品| 婷婷五月在线视频| 欧美成人精品一区二区男人蜜臀| 青青免费在线视频一区| 青青爽| 欧美综合另类| 国产亚洲色婷婷久久99精品91| 日日妻色网| 一区二区三区高清天码| 午夜久久一区二区无码中出| 九热久| 久久激情五月| 蜜臀99久久精品| 免费在线观看国内色片网站网址| 麻豆一区在线| 亚洲无码超碰免费| 久久综合乱子伦国产免费| 91亚洲欧美激情| 97人妻碰碰中文无码久热丝袜| 美女91av| 图片区小说区| 国产自偷| 精品国产久热在线观看| 羞答答AV中文字| 亚洲精品第一| 亚洲有薄码区久久在线一区| 人人考人人摸人人干| 国产日韩中文字幕欧美| 日本午夜福利影院| 极品出轨视频网站| www.丁香五月| 中文乱码字幕观看视频| 亚洲影视综合网| 国产强奸无码乱伦| 亚洲综合888| 不卡中文字幕aⅴ在线| 超碰99热中文字幕| 一本一道波多野毛片中文在线| 老司机免费视频在线91| 强奸乱伦资源| 91中出在线| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 国产尤物在线三区| 殴美,日韩国产伦精品| 97超碰人人操人人操| 男女激情中文字幕| 综合免费无码中文| 黄页网站成人免费| 美女尤物福利视频| 人人看人人插| 精品视频久久区| 精品久热| 国产乱伦搜索结果91P| 日韩欧美丝袜诱惑| 丁香五月综合| 久草新在线| 99精品网站| 色官网在线| 加勒比综合网| 亚洲 另类 丝袜 自拍 动漫| 国产一区二区三区影片| 欲香欲色| 亚洲九九视频在线观看| 久久,精品一二三| AV天堂国产| 99re99在线视频| 啊啊啊好湿国产一二| 干日本人少妇午夜寂寞影院| 超碰97久| 精品无码一二三四区| 操美女高潮抽搐白浆| 男女啪啪网站免费视频| 丝袜狠狠草尤物 91| 碰碰在线视频| 上海一级黄片| 欧美一级A一级a爱片久久| 98福利在线视频| 亚洲精品 大香蕉| 国产亚洲日韩在线三区黑人| 精品天堂| 亚洲熟女乱色一区二区三区久久久| 五月丁香综合网| 国产亚洲精品农村妇女| 91九色丨风韵犹存| 男人的天堂久久狠| 日本免费不卡二区| 国产无马av| 免费精品中文字幕| 曰韩中文人妻视频| 天天欧美97| 好屌色综合| 啊好大好舒服| 久久激情五月| 日韩人妻中文视频| 欧美自拍偷拍综合图片| www国产精品| 天美传媒精品一区二区三区| 欧美日韩少妇色情| 精品久久久九九九孕妇| 女人高潮大叫一级毛片| 黑人狂躁日本妞一区二区三区| 人妻夜夜爽天天爽三区麻豆AV网站| 无码九九| 欧美与日韩97| 欧美熟女妇同| 亚洲男人天堂网久久| 六六久久日韩不卡| 色婷婷丁香| 亚洲中文日韩精品| 欧美人与性动交a美精品| av网站免费线看| 国产在线播放成人免费| 国产AV中文| 天天综合网在线91| 欧美91网| 国产嫩草精品A88AV| 97在线欧| 日韩人人精品| 天天综合网亚洲综合网| 黄色一区三区| 任我爽在线视频免费观看 | 国产成年女人免费视频播放a| 少妇综合网| 国产激情视频一区区三区| 超碰美国| 凹凸精品熟女在线观看| 国产400孕妇孕交群| 草草草草视频| 欧美91在线| 欧美v日韩v亚洲v最新在线| 99无码| 国产精品一区二区a| 国产成人欧美精品在线| a片久久久久久久久久久久 | 国产自偷自拍一区| 欧美国产日韩高清在线| 综合婷婷| 91亚·色| 久久av网| 婷婷五月天无码| 91色色综合| 一区二区播放| 日韩有码中文字幕女同性恋| 欧亚日韩中文在线| 国产亚洲色停停久久99精品91| 立川理惠被中出无码| 日本人妻伦在线中文字幕| 99re热有精品视频国产| 国产男人又猛又粗又爽| 色婷婷香蕉| 九九九九88| 黄资源| 欧日韩一二三f区| 在线不欧美| 久久精品国产亚洲AV高清演员表| 青青操综合网| 色啪网| 天天天乱色综合全| 91精品人妻五十路| 91丝袜在线播放| 久久性生大片免费观看性| 日本一区视频在线观看| 色牛牛AV| 有码免费观看| 精彩久久中文| 99久久99久久免费精品蜜臀| 午夜视频久久久久一区| 极品色www影院| 在线啊啊啊啊| 国产精品久久久久久久久久二区三区| 变态综合色| 欧美激情性久久久久久| 亚洲国产一区二区三区四区国产| 亚州操操穴网| 国产精品色| 国产高清自拍视频| aaaa黄片| 秋霞男人网| 欧美日韩人妻精品一区二区三区| 肏逼视频日本| 婷婷深爱五月| 久久有碼| 超碰碰97资源站| 久久人人爽爽人人爽人人片αV| 五月丁香激情综合| 99国产精品免费| 欧美中文综合| 青草青草久热| 久久久久久91香蕉国产| 一区二区视频在看| 国产AV激情无码久久无码 | 一区在线精品中文字幕| 日本高清_区二区三区| 中文字幕91综合| 成人精品久久| 午夜120视频在线观看| 久久精品免费| 久久九九97| 久久久久成人亚洲国产| 亚洲综合影片| 啊啊啊啊啊啊在线观看| 精品亚洲国产成人AV制服丝袜| 国产精品 午夜福利| 亚洲熟女综合网| 欧美 亚洲 偷拍自拍| 亚洲欧洲久久天堂| 69XX一中文字幕人妻91| 婷婷久久综合| 麻豆熟妇乱妇熟色A片在线看| 欧美性爱中文字幕无线码| 白丝AV网站| 日韩av无码网站| 超碰三级秋霞| 色图四区| 五月婷婷综合激情| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 动漫av中文| 99久久久久久亚洲精品不卡| 国产欧美日韩女同性恋ww喷水精品 | 久草视频观看视频在线| 美女大乳久久久久久久女人18| 国产精品人妻无码久久久互動交流| 五月天综合网| 男人的天堂com| 国产精品青草综合久久| 男人天堂无码| 97国产成人精品免费视频| 97超级色碰碰| 日韩成人大片一区二区| 日日日日做夜夜夜夜做无码97| 久久无码成人| 色香伊人| 蜜桃av综合网发布| 日韩欧美~中文字| 看一级黄色视频| 欧美日韩色| 亚洲情色第一页| 新亚洲无码| 欧美性爱一区二区三区四区| 国产51色综合久久免费| 婷婷久草| 2018色综合天天操| 精品天堂| 干B视频伊人网| 飘花国产午夜精品不卡| 亚洲熟女偷拍在线观看| 日本精品成人无码| 另类欧美色| 青娱乐av在线| 国产亚洲精品精AV.| 亚洲熟久久| 人人看人人摸人人色| 精品一级| AV高清一区| 成年人一级黄色毛片大全在线观看| 97在线视频观看免费| 成人资源中文字幕在线观看天天| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 黄片免费看的| 成人日本片久久久蜜桃| 丝袜六区| 在线播放免费av福利片| 亚洲女人毛茸茸91| 亚洲成人av色网| 懂色中文一区二区三区| 久久久精品一区二区| 婷婷色婷婷| 精品国产一区二区三区在线播出| 国产乱子伦一区二区三区免看| 婷婷久久综合久| 青娱乐淫乱1314| 丰满丝袜少妇AV| 男人天堂久久精品| 91在线超高颜值国产| 国际精品久久久| 国产精品乱码久久久久久久久久久久| 性开放中文AV高清无码免费看| 91女色| 97爱b| 婷婷尹人大香蕉免费| 亚川综合视频| 精品国产AV一区天美传媒| 色综和网| 大香蕉97久久| 国产三级多多影院2022国产AA一级毛片无码 | 蜜臀99久久精品| 国产又大又粗又长视频在线| 亚洲av强奸乱伦| 久久久久亚洲三级电影| 黑人性暴力毛片| 超碰97久久观看| 日韩欧美女优电影| 偷拍自拍在线视频观看| 亚洲中文字幕精品一区| 欧美视频一区二区三区| 久操在97| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲怡春院| 97视频在线观看高清资源| 五月天激情综合网| 欧美亚洲日本视频久久久| 91AV入口| 久久春色| 国产91美女视频| 天美麻豆黄色录像| 九九九久久久久| 99re6久热只有精品6在线直播| 国产在线精品偷| 亚洲av影音先锋| 久久性爱精品一区| 日韩福利电影网| 天美传媒AV在线| 亚洲丨在线| 超碰在线综合97| 一二三四视频在线社区中文字幕| 五月天春色激情网| 欧美另类色图片| 天天干一干| 99无码视频| 99色热| 五月丁香影院| 动漫爆乳3D奶水一区在线观看 | 人妻91少妇| 美女十八禁| 国产精品一二三| 婷婷精品国产欧美精品亚洲人人爽| 九九九九九九九九九五码| 佐山爱中文字幕| 久草资源在线视频官方总站日韩丝袜美腿 | 五月婷婷无码| 九九色影院| 九九伊人网| 婷婷五月天av| 亚州精品一区二区三区香中文字幕在线| 日韩人妻无码专区| 色色婷婷五月天| 天天日夜夜| 小草三级久久观看| 操我啊啊啊啊啊| 亚洲精品一二三四区| 免费农村成人少妇人妻Aa一区二区视频 | 青青操在线亚洲视频观看欧美在线 | 青青草视频久久久久| 中文字幕av久久爽Av| 久久九七| 欧日韩在线观看| 九九亚洲色在线观看| 蜜臀99久久精品| 亚洲Av诱惑| 青草成人免费视频一com| 日韩无码一级黄色av片| 国产在线观看91精品一区| 久久久久亚洲?V片无码V| 欧美激情中文字幕另类小说|