色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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)勢異常或出現(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
返回資訊列表
亚洲天堂男人网| 精品免费囯产一区二区三区| 91亚洲综合| 中国探花熟女| 中文字幕视频免费| 亚洲春色欧美激情自拍| 大鸡巴久久久| 亚洲婷婷丁香在线| 大香蕉伊利av| 骚女天天综合网| J?P?NESEHD熟女熟妇伦| 国产成人+综合亚洲+天堂| 天天综合网~91综合网| ji熟女.com| 少妇毛片久久| a亚洲欧美色欲| 中日无幕一二三四区| 91制服丝袜| 日本性爱少妇| 日本幼女18+| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 欧美激情综合网| 97人人模人人爽人人| 伊人久操| 婷婷久久久精品| 玖玖爱免费观看视频| 情色五月天网| 91狠狠综合久久久| 欧美一区二区一级岛国大片| 久久超碰98| 超碰97人妻| 婷婷久久久| 天天综合青苹果| 亚洲最大无码中文字幕网站| 亚洲国产天堂| 日本三级日本三级99| 亚洲日本大香蕉1| 蜜桃午夜视频一区二区| 东京热,男人的天堂| 大香蕉性欧美| 亚洲第一页色| 美女黄色一级A视频| 日韩电影免费网站麻豆视频| 自偷自拍的亚洲视频| 草B在线| 天天干人妇| 久久成人东京热人妻| 97啪啪| 极品少妇久久久久| 色青青久久影视| 青青草一本道福利视频| 不卡超碰护士AV在线免费播放| 亚洲中文字幕妇伦久久| 久久9免费视频| 一级人妻性爱视频| 超碰在线91| 日韩情色视频| 中文字幕AV片| 美女91AV| 老熟女搡BBBB搡BBBB视频| 神马久久啊啊| 免費黃色視頻觀看一| 精品妇女一区二区三区| 天天干夜夜一操| 日本色色色| 九九热五区| 久久爱97| 免费少妇一区二区| 美女啊啊啊啊啊啊啊| 99精品无码| 国产精品不卡一区二区三区av| 色色丁香| 天天色,天天干,天天干| 国产日韩怡红院| dy888午夜老子影视达达兔| 日韩欧美~中文字| 色九九综合AV| 国产精品又黄又猛又粗| 极品一区二区三区免费| 亚洲色图在线视频| 免费在线观看国内色片网站网址| 无码国产精品96久久久久孕妇| 天天看特黄的免费网站| 婷婷尹人大香蕉免费| 激情黄色片在线观看| 国产精品久久久久久久久久二区三区| 欧美精品1区2区3区| 亚洲国产综合图区中文字幕| 久艹99| 玖玖97综合 | 人人爱人人乐人人操| 中文字幕AV片| 亚洲综合色网| 亚洲精品亚洲人成人网| 丰满高潮18xxxx| 国产天天噜一噜久久久| 97 国产一区| 变态另类专区| 超碰欧美在线欧美| 欧洲射精91| 亚洲av淫乱| 国产精品农村妇女| 91久久18禁| 920日本午夜免费| 精品中文字幕一区二区l - 百度| 人人操 欧美| 日本不卡一二区| 丁香7月婷婷| 久久av色| 国产不卡精品91| 91精品无码人妻系列| 日本人妻中文字幕| 欧美不卡五十路| 超碰九九| 欧美日韩亚洲少妇寂寞影院正在播放 | 夜夜操青青草| v91av| 国产怡红院在线| 91老熟女老女人国产老太| 久久9亚洲| 久久久久久午夜男人的天堂| 久色网| 久久久久亚洲AV无码专区少妇 | 国产精品视频内谢女人| 国产乱子伦一区二区三区在线观看| 婷婷AV一区二区三区| 呦呦影院| 日韩免费大片一级播放| 欧美A片中文字幕| 91P0RNY大屁股人妻| 美女诱惑久久| 91福利网在线观看| 99e久久国产精品| 一本色道综合久久欧美| 久久久久久久9| 97日视频| 吊色| 天欧美在线| 伊人久日| 亚州黄站| 青青草福利视频| 日日夜夜精品视频| 久久狠狠色噜噜狠狠狠狠97| 婷婷色综合欧美日韩| 欧美偷拍| 国产高清自拍| 日日噜噜夜夜狠狠视频无| 国产亚洲深夜激情| 亚洲色图日韩精品| 色香蕉影院| 国产男女无套视频免费观看| 九九色精品| 九九色色| 国产av高清版| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 九九久久久久久爱| 操逼精品视频| 超碰97久久国| 正宗无毛一线天嫩逼| 亚州高清AV| 日韩97在线| 激情小说在线视频| 日韩操逼HD| 内射老妇BBWX0C0CK| 国产高清免费不卡av| 精品一二三区久久AAA片| 成人片在线播放| 在线日韩视频| 婷婷激情一区二区三区俺也去| 国厂麻豆77q4| 老熟女天天操| 蜜乳视频网站| 狠狠综合网| 美女露胸露尿口| 欧美日韩国产电影| 亚洲熟女诱惑| 欧美经典一区二区三区 | 99热亚洲| 青青操视频在线| 中文三一区| 男女日B国产| 大伊香蕉在线视频免费| 久久久久免费少妇| 国产精品久久久九九九| 亚州情色j区| 长长久久曰曰夜夜成人网| 麻豆人妻少妇在线免费观看| 亚洲美女高潮喷水视频| 亚洲天天做日日做天天谢日日| 国产亲戚伦亲在线| 久久侵犯人妻爽爽爽| 久久男人网| 亚欧洲一区二区视频| 97碰碰色| 一级特级aaaa毛片免费观看| 9/A片| 久久久久亚洲精品| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 乱老熟女一区二区三区| 97色操| 日韩黄色片子| 丝袜美腿欧美| 亚洲精品久久久久久| 大色综合| 色婷婷影视| 欧美亚洲成人在线一区二区三区| 偷拍亚洲| 欧美性爱伊人| 久久、1234| 中日韓欧美高清| 自拍大香蕉乱插| 91欧美成人色站| 99热一区二区三区四区| 33044男人的天堂深夜备| 欧美在线永久天堂| 久久久久精| 一区二区三区男人的天堂| 亚洲欧洲日本精品中文a∨| 狠狠综合| 加勒比av网| 日本精品网站在线中文| 少妇免费视频| 成人怡红院| 91精品人妻电影| 欧美成人综合| 无码直播久久久| 黑丝内射一区二区三区| 一区二区无码视频| 婷婷亚洲天堂| 91痴汉| 国产福利av精彩对白| 日本不卡二三区| 欧洲在线性爱视频| av国产无码| 乱色老一区二区三区的观看方式| 玖玖爱影院| 色播五月丁香| 91麻豆天美传媒在线| 久久五月丁香| 91精品丝袜久久久久久| 国产精品久久久久av| 久久视频少妇美女| 乱伦图av| 亚洲诱惑天堂| 亚洲国产欧美另类自拍| 桃色人妻在线视频| 亚洲欧洲精品视频发布| 97jingpin| 日日操丁香五月天| 久久机热| 九九RE视频在线精品| 中日992视频| 一区二区三区精品视频| 性高潮久久久久久久久久久| 五月丁香综合啪啪| 91宗合网| 中美日韩毛片| 中文字幕高清精品一区| 麻豆激情综合| 伊人影院综合是一个与深夜成人在线 | 精品人妻1237| 99老司机精品视频在线观看| 啊啊啊好大好湿| 日韩免费在线观看不卡| 人妻人人澡人人爽人人| 国产一区二区av综合| 久草成人影片| 日本天堂网| 亚洲熟伦熟妇AV无码春色| 欧美特大AA级黄片| 精品十三区| 福利操逼| 97超碰热线| 亚洲αv一区二区三区| 天天天天做夜夜夜夜做| 六月丁香久久| 美女网站91| 最新亚洲风情电影| 最新av中文字幕高清| 欧美A√综合网 | 国产av尤物| 美女网站91| 美女啊啊啊啊啊啊啊| 欧美91在线| 久久精品天美| 丁香五月天啪啪| 免费成人自拍视频在线| 偷拍色图| 久久九九99| 中文AV制服乱伦| 99re69| 午夜大香蕉| 明星性猛交ⅹxxx乱大交| 自拍亚洲综合| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 探花一区在线| 国内精品嫩模A∨私拍小视频| 日本新免费二区三区| 91超碰人人操| ,成人免费啪啪视频| 久久骚| 久操大香蕉手机视频在线看 | 国产精品探花视频| 久久性爱视频免费看| 岛国不卡超碰护士AV在线播放| 国产精品电影| 久久国产性爱| 日韩熟女操逼| 欧美高清色| 夜夜 中文视频rt| 97超碰69| 国产日韩欧美三级片| 国产操逼网站亚洲一级黄色| 精品国产乱码久久久久久免费| av九九| 青娱乐欧美激情一区二区| 大香蕉线| 国产黑白丝在线| 麻豆天美制片厂网站视频| 亚洲天堂久久| 欧洲综合无码| 91综合在线| 九九九九一区| 久欲AV| 超碰人妻久久人妻中文97| 一级特黄aaa大片在线观看成人一级片在线观看 | 欧美天堂日韩三级国产传媒| 亚洲欧美成人在线| 播播亚洲小说亚洲| 人妻献身系列第54部| 亚洲人成在线放东京热| 免费97视频| 神马久久久久久久久久久久| 毛片17S| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 国产日韩欧美三级片| 中文字幕精品一区欧美| 日韩性爱小视频| 99热销国产这里有精品| 成年在线视频日本亚洲在线视频区精品江靖宇公司| 久久久专区| 性吧在线视频| 精品超碰中文在线| 大香蕉婷婷| 欧美一区二区亚洲天堂| 色色操| 日韩欧美亚洲一区二区三区影院| 欧美日韩在线国产在线| 久操网线| 黄色视频特级毛片| 精品一区二区亚洲国产| 欧美97爱| 国产精品久久久久久片| 搞中出视频在线观看| 欧美亚洲天天| 天天日天天干天天操| 999岛国大片| 艳美熟妇先锋一二三区| 欧美一区二区三区黄色影视| 夜草欧美| 加勒比久久av| 欧美日韩不卡传媒| 亚洲精品色| 婷婷五月成人| 超碰超碰95| 9久综合网| 国产精品久久久久久 百度| 久操网址| 中文字幕在线高清男人的天堂| 尤物一级在线免费观看| 99操碰| 十八禁视频网站| 狠狠干,狠狠操| 嗯啊不要在线| 超碰激情808| 性生活无遮挡纯毛片在线看| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 亚州乱码中文字幕综合久久久| 欧美狠狠操| 狠插 制服 自拍| 国产精品不卡一区二区三区| 精品无av| 99999精品| 午夜.DJ高清在线观看免费7| 操逼视频亚洲| 清柠毛片| 天天夜夜久久| 91精品国产91久久久久久久久久久久| 久夜视频| 呦呦影院| 粉嫩av平台| 色哟哟av| 女性喷水高潮在线观看| 99热在线只有精品| 99啪| 九九色热| 一线黄色免费性爱片| 大但人体久久久久| 亚洲综合113页| 国产麻豆一级精品视频| 大香蕉懂9| 中文字幕老熟妇黄色视频| 婷婷丁香久久| 色老大| 久久精视频美日韩在线视频| 丁香色狠狠色综合久久小说| 手机在线播放国产福利| a级成人毛片免费视频高清| 亚洲天堂男人天堂网| 曰韩少妇无码| sss视频华人在线| 牛黄色久午久| 人人操人人插人www| 欧洲亚洲人人爽爽视频| 久久久国产精品人妻丝袜| 久久精品国产精品亚洲艾通辽熟妇| 久操网线| 女人被男人桶爽视频网站| 亚洲本色精品一区二区久久| 国产欧美精品日韩区二区麻豆天美| 色男人色天堂东京热| 岛国黄| 日本免费专区| 性一交一乱一交A片久久四色| 国产精品久久久久久久无码AV| 亚洲五码一区二区三区| WWW4虎| 综合伊人网12色| 九九九九亚洲| 四虎精品永久在线观看| 一起草三级AV电影在线观看 | 久久久少妇诱惑精品视频| 在线观看视频91| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 中文字日本乱码| 99少妇精品视频| 夜夜高潮夜夜爽| 日韩丰满熟妇| 综合亚洲欧美| 国产精品久久久久久久久久久久久久吹 | 色噜噜综合网| 国产AV线| 天天日B夜夜干B时时操B| 亚洲欧美国产成人综合不卡| 男人精品天堂一区| 中文字幕AV片| 强奸乱伦动态污图免费 | 玖玖爱影院| 欧洲亚洲少妇| 久久直播国产| 国产亚洲 中文欧美久久| 丰满高潮18xxxx| 日本狠狠干| 性videos欧美熟妇hdx| 超碰97综合网| 啊啊啊骚| 99热99在线播放激情| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 久操大香蕉手机视频在线看| 青青草色情网站视频| 少妇的嫩逼图片| 一类无码操逼视频| 国产九九久久久精品| 密臀成人视频久久久| 成人久久久| 日本三级韩三级99久久| 亚洲欧洲色情高清| 亚洲色图欧美一区二区不卡| 婷婷久久久| 狠狠爱AV| 乱操乱伦AV| 中文字幕精品丝袜| 国产乱伦性爱AV| 亚洲在钱| 麻豆国产免费影片| 99热欧美| 激情文学网伊人| 亚洲欧美视| 精品久久久久久中文| 国产精品天干天干综合网麻豆| 伊人精品久久网站| 欧美在线中M| 亚洲欧美色图| 色av中文字幕| 国产有码一区| 日韩精品资源| 久久精品99久久久久久| 97硬碰| 久久精品99| 久久精彩视频| 亚洲五月丁香花狠狠干一区二区三区| 2024人人操人人摸| 亚洲日韩美国人妻| 日韩欧美字幕亚洲一区二区| 99九九精品| 六月婷婷五月丁香| 97午夜剧场日韩| 国产欧美一区二区| 青青操在线亚洲视频观看欧美在线| 99操| 九九自拍伦理| 欧美日韩小说| 日韩性色| 欧美亚洲尤物久久| 男人的天堂啪啪啪啪啪蜜桃不卡| 国产乱码久久| 久久爱超碰网| 97久久久网站| 久久无码一区二区二三区性色| 超清中文乱码字幕| 插穴性爱视频在线观看| 天天操天天干一区二区| 五月丁香影院| 大胆91| 啊啊啊啊操死我了| 亚洲欧美清纯| 岛国黄片网站| 婬女免费一二三区A片| 欧美熟妇乱码在线一区| 久久偷拍人| 草草草草视频| 天天色黄色影院天天操| 日韩女优在线| 玖玖爱伊人玖玖爱| 在线无码视频| 91人妻丝袜无码| 中国熟女91| 九九九精品成人免费视频小说| 亚洲精品人妻吞精av | 奶水 人妻 哺乳 在线| 中文字幕精品日韩中文字幕| 亚洲天堂色图| 欧美精品97| 日本高清一区二区在线| 裸体美女久久久| 九九九九免费| 蜜桃臀av在线观看| 男人的天堂视频精品乱在线| 日韩熟女操逼| 热九九精品| 日韩天堂av电影在线观看| 欧美色999| 日韩探花精品在线视频| 天综合网欧美| 樱花蜜乳av| 欧美无圣光在线| 秋霞免费无码视频日韩A片| 久久麻豆一区二区| 天天干18禁| 激情文学网伊人| 亚洲欧美第一页| 国产91美女高潮| 超碰色97| 欧美色图私拍91| 26uuu性| 美女AV一区二区| 日韩欧美福利视频看看| 色欧美亚洲| 人人人人人人少妇| 人人弄人人摸| 98超碰日本| h无码动漫在线观看| 美国三级日本三级久久99| 国产高潮AA片免费看| 91人人| 欧美亚洲丝袜美女电影| 国内毛片无遮挡国产| 蜜桃久久久久久久| 日韩在线观看中文字幕视频| 亚洲欧美人妻| 99re在线精品78| 91超级碰碰| aaa亚无码专区| 秋霞福利网| 乱伦a片视频| 欧美另类丝袜熟女| 欧美日韩国产在线| 国产啊v在线免费播放| 亚洲操操操无码| 91网18| 日本黄色大片一级视频免费麻豆| 一二三区精品视频| 2003天天干夜夜操| 黄色不卡视频| AV不卡在线| 精品国模无码| 亚洲久久久久| 久久久久久久9| 超碰午夜| 视频在线观看一二三区| 天天拍天天操| 亚洲AV无码乱码在线观看性色| 久久久久久99AV无码免费网站| 亚洲九九视频| 五月天AV资源| 后入式999| 国产精品视频| 美女97超碰| 6080yy午夜理论三级一区二区三区无码 | ai欧美亚洲小说| 日韩乱插| 亚洲九九夜夜| 欧美视频在线视频免费va| 久久精品亚洲成a人天堂| 免费精品中文字幕| 日韩欧美综合激情| 国产三级中文有码在线视频| 日本免费专区| 伦在线97| 91性| 丰满熟妇大乳做爰| 欧美综合天堂| 91天天综合日韩欧美| 亚洲激情视频| 欧美大香蕉久| 2020中文在线一区二区三区| 可以在线观看的黄色网址| 激情熟女12P| 午夜偷拍久久熟女| 日韩成人大片一区二区| 大香网伊人久久综合| 色情综合| 大香蕉伊人一区在线观看| 爱欲AV| 大屁股熟女一区二区三区| 99热日| 一本色道综合久久欧美日韩精品| 欧美亚洲综合高清在线| 国产av强奸美女| 中文字幕亚洲热播人妻| 人人摸人人干| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 久久激情亚洲精品无码?V| 人妻美腿丝袜日韩| 青青草久草| 不卡中文字幕aⅴ在线| 超碰在线香蕉| 精品四五区| 黑丝日韩av丝袜av| 加勒比海人人操超碰在线| 亚洲国产美女久久久久 | 久久伊人网视频一区二区三区| 91欧美综合在线| 蜜臀久久99精品久久久久久酒店| 天天日天天搞天天干| 亚洲无码99| 制服丝袜第二页| 男人天堂2017| 婷婷视频在线免费观看| 91jk色拍| 亚洲资源吧| 国产一区二区三区视频在线看| 五月丁香婷婷综合| 91蜜桃传媒精品久久久一区二区| 伊人久久在线视频观看| 亚洲综合五月天婷婷丁香| 操b网站亚洲无码| 97鸡把在线视频| 黄色高清无码无码破解免费暗网 | 亚洲Av噜噜一区二区三区妖精| 久久久久国色αv免费观看| 84YTCOM性无码| 伊人精品久久网站| 大香蕉五月天| 熟女熟妇伦久久影院毛片一区二区 | x97av| 台湾一区国产高清在线| 97资源视频| 天堂岛av| 老司机福利青青草| 亚洲大色堂| JIZZJIZZ亚洲女人被躁| 夜夜高潮夜夜爽| 极品国产内射| 久久AV无码1区2区3区| 97在线公开视频| 色婷婷综合视频| 亚洲性高潮| 狠狠色色| 久久久性| 欧美第二页午夜| 国内精品伊人久久久久影院会| 国产乱不卡| 97香焦色区| 久久无码一区二区二三区性色| 1024手机看片欧美日韩| 亚洲一区在线观看欧洲 | 俄罗斯一区二区视频在线观看| 欧美精品偷拍| 女人被添高潮免费视频| 好吊色综合| 美日韩在线不卡人妻| 日韩av影片在线观看| 人妻铁牛TV| 天天摸天天舔天天操| 国产久久av| 99热婷婷一区二区三| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 亚洲熟久久| 蜜乳中文字幕a在线| 九九综合网| 韩国轻伦国内自拍一区| 日本丝袜人妻内射| 在线欧美亚洲| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 久久超碰com| 91成人社区| 天天欧美色| 午夜.DJ高清在线观看免费7| 日天天九九天堂666| 少妇一线天久久久久久| 国产精品婬乱一级毛片彝族| 日本αv| 久久精品国产97欧美精品亚洲 | 大香蕉五月天婷婷| 国产无码精品无码| 天天综合,91入口| 国产精品不卡一区二区三区| 国产白丝在线| 亚洲人在线成线成人| 激情综合久久| 亚州免费啪啪视频| 欧美日韩国产中文精品字幕自在自线, | 人人操人人摸人| 国产高清视频无码在线| 国产青青综合伊人| 亚洲激情欧美色图 | 欧洲精品二区| 超碰97欧美日韩| AV天堂男人的天堂| 毛片视频白嫩| 99自拍B亚洲 | 一区二区三区麻豆| 日韩啪啪啪视频| 99抽插| 草伊人高潮喷水超碰| 熟妇人妻一区二区三区| 一区二区久久天天干狠狠| 精品国产乱码久久久久久影片| 激情五月丁香五月| 国产 v乱码一区二| 国产强奸超碰AV| AV污污污污| 激情久久av一区av二区av| 婷婷干黄色| 伊人五月天激情| 3P乱轮视频| 99精品久久久久久久婷婷蜜桃| 一区二区三区视频在线观看免费| 亚洲欧洲网站免费观看| 玖玖视频在线资源一区二区三区| 色色色综合| 国产欧美日韩在线观看麻豆传媒公司 | 亚洲日产专区| 久久夜色一区二区| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 97在线观看免费| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 激情九月婷婷| 最新AVzaixian| 懂色综合久久久| 欧美九九爱| 制服丝袜第二页| 超碰在线综合97| 欧美裸体美女日麻屄| 欧美五十路熟| 日韩美女啪啪一区| 国产又粗又又黄又猛| 精品国产国产AV| 久久久久久久国产| 免费视频一二三区| 国产精品午夜高潮呻吟久久av| av操操不卡| 日本久久999| 免费人成毛片乱码| 中文字幕 码 自拍 视频 区| 超碰天天操你比| 日日不卡av| 欧美性爱十八禁| 欧美国产有色电影| 少妇三p| 秋霞视频一区二区| 国产亚洲精品美女| 欧美日本成人一区二区| 看一级黄色视频| 老司机午夜福利视频一区二区| 婷婷久久五月综合激情| 国产在线激情视频| 97色97好| 好吊色一区| 精品久| 五月天黄色激情视频| 欧美色自拍| 欧美国产精品| 精品人妻一区二区三区视频| 久综合国内精品自在自线| 色女综合| 亚洲午夜福利在线影院| 欧美男人亚洲天堂| 插欧洲美女欧美精品| 亚洲人精品久久久| 九热视频| 亚洲男人的天堂网| 亚洲国产丝袜熟女av| 9/A片| 欧美天天干| 超碰 av 女人天堂| 国产乱码精品一区二区三区四川| 91成人亚洲色图| 精品高清av中文字幕| 成人在线视频一区| 色色色色网站| 玖玖久久久| 五月丁香啪啪网| 人妻少妇久久| 久99久视频| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 大香蕉视频一二三区| 亚洲日韩黑丝| 99热这里是精品| 欧美一二三级精品在线| 久久久久久人| 国产精品丝袜久久亚洲不卡| 男人天堂2012| 亚州AV无码国产精品| 人妻精品视频一区二区三区| 九九人妻| 国产精品久久久久久久久久久久久久久久 | 午夜爽爽爽在线观看永久入口姬片| 亚洲av无线观看| 91N综合网| 抽查国产福利主播| 欧美人体性爱互联网第一页婷婷日本| 久久精品国产精品| 亚洲春色激情小说| 欧美成人午夜免费福利785| 韩国一级做a久久久久| 97操97干| 日韩久草| 日韩精品99久久久久久中文字幕| 精品v日韩欧美国产| 欧美五十路熟| www久久国产精品| 综合色好色| 性欧美91| 国产成人亚洲精品无码古代早漏男| 激情欧美97| 老熟女阿 国产91| av草草在线电影| 91欧美性| 9999久久久久| 韩国毛片一区二区三区| 精品中文一区二区| WWW美腿丝袜香蕉中文| 少妇高潮99p| 欧亚洲精品有视频| 欧美熟妇乱码在线一区| 97资源超碰| 色女综合| 人妻少妇精品久久久| 青青草五月天| 中文久久96| 懂色av中文字幕| 久久久久久加勒比| 日韩性爱小视频| 日韩无码视频黄色| 最新岛国大片| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 噜噜噜狠狠色综合| 久久久爆乳翘臀一线天伦理视频| 欧美久久九九| 亚洲人妻av| 欧洲中文字幕| 久久人妻无码毛片A片麻豆| 97国产|免费| 无码137片内射在线影院| 可以在线观看的黄色网址| 在线国产一区二区av| 人人看欧美性爱| a网站免费观看| 欧洲精品人妻| 91日韩网站| 在线免费观看高清无码视频| 色臀AV| 久久久久久久久久久免费精品| 被体育老师抱着c到高潮| 亚洲av总站| 一区二区无码视频| 最新岛国大片| 操比国产| 麻豆国产av网| 91青青| 国产成人无码a| 国产11页| 91蜜臀人妻中文字幕在线| 操逼日批| 欧美色五月| 日韩 女同 综合| 国产隔壁老王影院在线| 蜜乳av首页| 久久一二三四不卡 | 亚洲中文字幕三级在线| 性性久久| 日韩在线性爱免费视频| 天天综合色电影| 色婷婷日韩精品一区二区三区| 亚洲欧洲日本精品中文a∨| 久久久久精| 黑人综合色| 国产精品一级片在线看| 亚洲精品久久一区二区三区蜜桃臀| 成人精品久久久午夜福利| 久久免费中文字幕在线观看| 超碰久超碰久| 91超级碰碰| 亚洲国产日韩精品久久久| 夜夜操美女| 色女网日韩| 97香蕉网| 97色论| 性爱视频啪啪啪啪| 久草久日| 九九碰九九爱97超碰| 亚洲97资源| 长长久久曰曰夜夜成人网| 久久国产在线一区二区| 欧美色一二三| 免費黃色視頻觀看一| 亚洲欧美小说| 亚洲s色图| 97综合在线观看| 福利伊人玖玖国产| 亚洲久久久久| 人妻熟女一区二区| 中出91| 日本免费人成视频播放120秒| 日韩一级二级三级免费看完整版国语版 | 玖玖爱综合网| 丁香六月啪| 伊人热综合| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 国产人伦精品一区二区三区| 精品性爱一区二区| 国产亚洲精品A在线观看下载| 精品人妻高清麻豆av| 亚洲国产成人7777| 久久激情视频| 欧美在线色图| 人妻啊啊人妻啊| 国产精品久久久无码AV网站| 97啪啪| 91女日逼| 精品国产一区二区三区久久久蜜臀| 91久久婷婷| 岛国片在线观看视频亚洲| 九九精品无码专区免费| 午夜国产综合视频在线观看| 精品人妻一区二区三区视频在线| 韩日巨乳美女免费视频在线观看| 蜜臀久久99精品久久久久免费观| 久久久中文| 五月婷婷丁香中文字幕| 欧美视频一区二区在线| 亚洲 自拍偷拍 欧美| 欧洲在线性爱视频| 一级片视频啪啪| 日本女人久久久| 好吊色青靑草| 99re在线| 啊啊啊好想要| 久久 精品| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 日韩激情毛片一级久久久| 永久电影三级在线观看| 国产精品大屁股999| 日韩精品人妻中文字幕不卡乱码| 亚洲综合色图欧美| 亚州黄站| 日韩欧美加勒比| 欧美大香蕉久| 国产精品蜜臀久久久久无码AV| 日韩中文字幕精品一区在线| 国产精品人妻一区二区| 91精品久久久久五月天精品| 在线观看免费视频国产| 成人aⅴ一区二区三区| 粉嫩av在线一区二区| 91久久久久久| 欧州色图区| 久久99草| 色欧美在线| 操逼操2| 亚洲成a人片在线观看中文!!!| 免费A片三p视频| 啪啪视频亚洲第一| 99在线精品观看99| 夜夜騷av、一區二區| 啊啊啊 在线| 91亚洲色人| 欧美成人精品A片免费一区99| 好吊色一区| 97chaopengongkai| 色在线综合| 亚洲色堂免费视频| 夜夜爽夜夜摸夜夜操免费视频| 99999精品| 五月丁香六月婷| 欧美久久婷婷| 国产精品直播在线观看直播| 黄片在线免费在线观看| 午夜福利久久久噜久噜久久综合 | 五月丁香综合啪啪| 熟女欧美日韩综合婷婷| 日产操逼| 天美传媒国产原创中文字幕亚洲欧美另类 | 美美91成人国产精品欧美精品久久久久久久| 色欲久久99精品久久| 久久久久亚洲av综合波多野制衣| 夜夜爽77777| 人人九九精| 天天色综亚洲91污| 精品176精品2| 粉嫩av平台| 欧美亚洲激情小说| 精品人妻一区二区三区鲁大师| 国产做?爰片久久毛片?片美国| 久久精品视| 无码精品人妻一区二区三区妖精| 伊人久久大香线综合无码| 性暴力欧美猛交在线直播| 国产欧美美女免费观看视频| 亚洲欧美综合| 蜜桃视频精品一区二区三区| 91成人18| 久久久久久夜夜夜夜夜| 中国一级αV| 欧美性战999| 日日夜夜精品| 香蕉大久久久| 激情综合五月丁香| 色综91| 免费看污网站| 超碰国产精品无码| 高清肉丝中文无码| 偷看洗澡一二三区美女| 亚州,欧美在线| Av色五月| 成人亚欧免费视频| 久久精品高清无码一区| 婷婷在线视频| 亚洲**2021在线观看| 综合日本女人伊人| 国产操偷| 啊啊啊啊好疼| 日本最新免费韩国1区2区视频播放| 精品国产人成在线| 丰满人妻一区二区三区| 国产青青美女玩逼视频| 五月婷婷六月色| 久久首页| 婷婷五月天激情四射| 草伊人高潮喷水超碰| 大香蕉黄色一区| 欧美精品23| 淫纸中9区| 中文幕97| 97视频在线免费播放| 欧美日韩在线小说| 亚洲综合图文| 97干在线| 特级丰满少妇一级AAAA爱毛片| 97免费在线| 亚洲欧美日产国产91毛片| 一区二区激情国产熟女 | 国语人妻精彩刺激| 久久久九九网站| 久久香蕉综合一本到3atv| 亚洲在线a| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 欧洲综合色| 久久久久久久久国产| 老熟妇一区二区三区啪啪| 蜜臀99999| 欧美另类色| 欧美精品第3页| 亚洲操操| 性爱av网站| 乱伦av麻豆| 一区二区影院| 性爱Av免费| 国产精品91ai| 亚洲视频,小说| 久久久久久中文版| 日韩在线人妻网站| 精品无吗久久| 麻豆av一区二区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 99精品网站| 亚码人妻| 青青草在线视频美女| 欧美偷| 哈哈操 大香蕉| 日本一区不卡| 91久久久亚洲| 久久这里只精品免费福利| 国模无码人体一区二区三| 走光一区92下载| 亚洲人精品久久久| 亚洲色图欧美色18直播在线| 天久久久噜噜噜久久国产精品爽爽| 大香蕉99999| 免费a v| 成年女人黄网站| 丁香五月婷婷基地| 精久久久91| 日韩欧美蜜桃精品久久中文字幕久久| 乱人乱色一区二区三区免费| 国产精品一二三区18| 日本黄页视频在线观看| 久久r精品| 国产丝袜欧美在线视频| 色欲日韩欧美在线一区| 丁香五月激情啪啪| 国产中文福利| 精品少妇99| 一级@啪啪视频| 丁香五月影院| 亚拍在线| 精品国模无码| 女人爽到高潮潮喷18禁网站| 97se综合网| 欧美性性性| 日韩丝袜二区| 日产中文字幕2020| 超碰97COm中文| 90后性网国产欧美| 蜜桃久久久久久久久久久久| 亚州性色| 婷婷六月色开| 蜜臀aV午夜一区二区三区| 国模艳艳啪啪一区| 亚洲久热| 日韩射图| 国产成人 综合亚洲 天堂| 国产欧美日韩在线观看麻豆传媒公司 | 久久精品高清无码一区| 美国精品国产精品| 欧美日韩人人精品| 国产h小视频在线观看免费| 91狠狠综合久久| 天天操妹子| 高清在线偷拍自拍视频| 日韩 欧美 国产 麻豆| 国产精品无套内谢| 日本免费一区二区不卡| 377p欧洲日本亚洲大胆| 99啪啪| 啪啪免费| 一区超碰一区| 九色在线熟女国产黑人|