色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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版本以實際安裝為準典型調(diào)試周期CartPole 級別分鐘級MuJoCo 級別小時級適合場景連續(xù)控制、機器人仿真、游戲 AI、推薦策略優(yōu)化、對話策略學(xué)習(xí)這里要提前說清楚一個容易混淆的點很多教程把 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ù)學(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)計回報當然可以但那樣必須等回合結(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 的評價越準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)境準備與最小可運行工程骨架Actor-Critic 對環(huán)境的依賴其實很輕它不需要 CUDA 編譯、不需要下載大模型權(quán)重甚至不需要顯卡。真正容易出問題的地方在于包版本不匹配導(dǎo)致的 API 變更尤其是 Gymnasium 從 Gym 分叉出來之后step 的返回值從四項變成五項很多老教程直接復(fù)制過來就會報解包錯誤?;A(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 組合為準 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ù)一個是標量價值兩者的輸出層設(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ù)標準差。均值通常經(jīng)過 tanh 壓到 [-1, 1]再按動作上下限縮放對數(shù)標準差用可學(xué)習(xí)參數(shù)并且要 clamp 到一個合理區(qū)間否則訓(xùn)練中期可能出現(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]損失看起來在下降但學(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ù)控制一律分離。判斷標準很簡單如果訓(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 本身不準但因為只用一步真實獎勵方差極小。另一個極端是蒙特卡洛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 當價值目標這是錯的因為價值網(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而不是重新前向計算這是同策略算法的標準做法但要記得 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ù)是確定性策略加目標網(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 就失效了算法退化成沒有約束的策略梯度訓(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)控的四個指標第一是平均回合回報看趨勢不看單點用最近 20 到 100 回合的滑動平均。第二是策略熵它反映探索程度CartPole 上健康的曲線是從 0.69 左右緩慢下降到 0.3 附近如果十幾輪就掉到 0.05說明策略過早確定通常需要加大熵系數(shù)或降低學(xué)習(xí)率。第三是價值損失它應(yīng)該整體下降但允許波動如果持續(xù)上升說明價值目標尺度有問題。第四是梯度范數(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è)備的拷貝。判斷標準很直接用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()在訓(xùn)練循環(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學(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ò)會幾乎只對大量級維度敏感小量級維度相當于被屏蔽表現(xiàn)為怎么調(diào)都不學(xué)。加一層 running 均值方差歸一化通常一次就解決。9. 最佳實踐與下一步Actor-Critic 這一套東西寫對一次之后復(fù)用價值很高。下面是幾條從實際調(diào)試里總結(jié)出來的、能明顯減少踩坑時間的做法。第一條永遠先在 CartPole 上跑通再換環(huán)境。這不是偷懶而是建立一條已知正確的基線。當你在 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 出來而不是在當前腳本上反復(fù)改數(shù)字。Actor-Critic 調(diào)參很容易陷入改了 A 又影響 B的循環(huán)有基線配置才能判斷某次改動是真的有效還是隨機波動。第四條批量任務(wù)和長訓(xùn)練要加斷點保存。訓(xùn)練腳本里定期保存模型參數(shù)、優(yōu)化器狀態(tài)和當前 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ū)、目標網(wǎng)絡(luò)和雙 Critic去處理真實采樣代價高的連續(xù)控制問題。如果要在這兩條路上做選擇判斷依據(jù)就一句話你的環(huán)境能不能便宜地并行采樣。能就走同策略不能就走異策略。這個判斷比看任何算法排行榜都可靠。Actor-Critic 的骨架在這兩條路上是共通的先把它吃透后面換算法只是替換幾個模塊的事。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
伊人五月天青青草婷婷| av一区二区三区四区| 综合亚洲情色| 日韩天堂av电影在线观看| 好吊色在线观看| 欧美制服网站美腿丝袜| 久久9亚洲| 亚洲人久久久网| 少好三P| 久超碰这里只有精品| 伊人91| 欧美性xxxxx狂欢| 免费视频在线一区二区不卡| 超碰亚洲欧美日韩无| 欧美激情 一区| 精品一区二区三区18| 大胆91| 欧亚揄拍偷拍精品视频| 欧洲性爱无码区| 男女啪啪啪18禁网站| 久久久久成人网| 日韩成人无码| 九九av| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 超碰在线91| 色999亚洲人成色| 欧美日韩亚洲一区二区在线观看| 麻豆成人影音在线| 高精欧美色| 中文日韩欧美熟| 99只有精品| 东北操逼| 精品国产a∨一区天美传媒| 无码操逼天堂| 免费在线视频97| 少好三P| 91天天美女| 久久熟女精品不卡一区| 中文字幕AV中出| 欧美99999| 立川理惠被中出无码| 国产精品爆乳懂色蜜乳| 97资源站日韩| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 中欧人妻丝袜中文字幕| 精品9区| 亚洲AV成人无码一区二区三区在线观看| 少妇高潮九九九九| 九九九偷拍| 99热这里只有是精品10| 免费看美国人人爽,人人操| 国产成人综合网| 青青草玖玖爱| 国产久9| 精品国产91av一区二区三区| 精品一区二区三区最新| 美女露胸露奶头| 激情久久av一区av二区av| 岛国色情视频在线观看| 看免费的黄片| 超碰97久久| 亚洲国产综合视频| 亚洲第一黄色av网站| 中字幕人妻一区二区三区| 爱射综合| 免费视频一二三区| 久久精品一区一起草| 国产极品一区二区三区三州| 国产精品天美传媒| 国产视频不卡在线观看| nuu12国产麻豆精品| 老熟女91视频| 欧美偷拍| 999岛国大片| 超碰九7免费| 久久东京热久久| 女人香蕉久久毛毛片精品| 91高潮喷水美女| 欧亚成人在线视频| 91bbb| 9Ⅰ超碰| 69少妇一区二区| 欧美中文字幕一区| 国产精品一二三区18| 色婷婷在线视频| 7月婷婷综合| 亚洲欧美97√| 久久日本熟妇熟色一区| 中文字幕午夜精品久久久| 国产小u女在线观看| 99在线免费公开视频| 色网在线| 情侣操 逼视频99| 丝袜喷水在线| 人妻9117c| 人人操人人搞人人草| 伊人综合色网| 猛交交| 国产一| 欧美性爱一内片一区二区三区| 99蜜月精品久久| 久久精9| 热99re69精品8在线播放| 久久毛卡| 青青草国产一区二区三区| 人人操人人爽人人操人人| 五月天伊人| 无码精品久久久天天影视| 人人妻人人澡人人爽久久av| 中文字幕欧美日本乱码一线二线| 精品夜夜澡人妻无码| 无码区蜜乳| 久草毛片| 欧美日韩丝袜 | 亚洲激情片| 秋霞视频一区二区 | 国产啊v在线免费播放| 欧美强奸乱能| 天天综合青苹果| 中文字幕视频2区| 亚洲αv一区二区三区| 欧美日韩另类在线| 黄人人操人人操| 一牛一区二区三区久久| 日本三级日本三级99| 青娱乐淫乱1314| 天天天干977| 熟女91网| 天天插夜夜爽| 日韩美女高潮喷水视频| 亚洲91综合| 大香蕉青青9| 物业黑人 AV一区| 久久久久9999精品九九九| 亚州成人a∨| 亚洲国产精品9999在线观看| 91搞逼视频| 亚洲天堂男人网| 精品黄色电影| 99精品久久久久久| 91麻豆天美国产欧美高潮| 欧美美女视频| 国产风韵犹存熟妇三区| 国产亚洲精品玖玖玖在线观看| 福利在线视频一区二区| 久久宗合亚洲| 加勒比色综合| 2020中文字幕在线观看| 国产在线播放成人免费| 精品国产三级av韩国在线| 熟妇熟女一区二区三区| 翔田千里AⅤHD无码| 欧美综合网在线| 婷婷涩嫩草鲁丝久久午夜精品| 91国产操逼视频| 丁香婷婷大香蕉| 女人天堂AV五区在线| 天天天天天超碰| 国内一级精品| 天天搞在线综合网| 亚洲 图片 欧美 色图| 国产蜜臀在线| 久久久久久国产手机AV| 国产丝袜美女诱惑| 一本大道青青| 精品区国产区一区二区三区| 色色综合97| 尤物视频视频官网| 91黑丝露脚| 99啪啪视频| 亚洲欧美日韩不卡人妻| 精品四五区| 国产91福利小视频在线观看| 天天插天天干| 天天天乱色综合全| 婷婷五月成人| 日本熟妇精品九九| 最新岛国大片| 大香蕉伊然在亚洲91| 高清无码一区二区三区| 白丝jkav| 中国国产精品一区视频| 男人的天堂.com| 性色av大全| 无码人妻丰满熟妇奶水区毛片| 天天爱天天操| 青青网三级视频| 好涩综合| yiren97| 免费看黄片现成| 又黄又粗又硬又长又大| 一级黄色牲爱A级片| 色娱乐色呦呦夜夜夜夜av| 岛国在线一区二区三区| 久草毛片| 日韩国产十八禁| av日韩在线观看电影| 九九九九精品视频| 中文字幕91综合| 高清无码在线播放网站| 骚人妻少妇视频| 超碰三级秋霞| 两性色网| www亚洲免费| 欧美九一精品久久久熟妇| 性久久久| 亚洲第2页| 啪一啪免费视频| 日韩欧美蜜桃精品久久中文字幕久久 | a级免费在线观看| 亚洲成成熟女人综合一区二区| 少好三P| 青青草在线视频播放器| 欧美超碰在线| 91东京热男人的天堂| 中文字幕,人妻,日韩| 亚洲一曲日韩精品| 澳门特级毛片免费观看| 韩国一区二区精品亚洲| 75大香蕉| 一二区在线观看视频| av天堂电影网| 岛国大片在线观看网站入口| 一区二区三区激情在线观看| 嗯嗯啊在线视频| 国产丰满少妇久久久精品影院| 99re这里| 伊人国产成人av网站| 高潮的A片激情扒开一区| 亚洲天堂热| 亚洲男人在线观看天堂| 亚洲开心网| 干婷婷综合网| 人妻丰满熟妇av无码区蜜桃| 久久精品亚洲婷婷| 色97欧美| 在线天堂资源亚洲| 天天操人人操狠狠插| 亚洲国产精品无码AV久久| 99久久99九九99九九九| 精彩视频日韩| 色九区| 98超碰日本| 婷婷情色五月天| 男女性感激情网站| 欧洲站一级二级三级h| 欧美一区二区三区日韩| 日韩97| 偷拍欧美综合| 丝袜六区| 久久综合日韩亚洲欧美| 国产亚洲美日韩Aⅴ中文字幕无码成人| 91男人天堂网| 亚洲蜜臀懂色| 欧美视频在线第3页| 大香樵伊人网| 欧洲一区二区三区四区在线观看| 国产久久av| 亚洲情色综合网| 99e久久国产精品| 91美女网站| 五码视频在线观看| 97操97干| 亚洲美女精品九九视频| 先锋女优在线观看视频| 97视频7| 日韩乱伦视频| 中文字幕第二页| 另类亚洲一区二区三区| 伦理日韩国产久久| 校园春色综合网| 奇米狠999| 国产91会所女技师在线观看| 综合亚州欧美| 精品国产一区二区三区久久久蜜臀| 发朗少妇买婬全视频中文| 啊啊啊啊啊舒服| 亚州乱码中文字幕综合久久久| 色五月大香蕉| 亚洲一区日韩精品| 亚洲,日韩,欧美,成人播放 | xxx亚洲午夜天堂| 日韩无码视频黄色| 99热只有这里有精品| 久久东京热成人| 欧美在线官网| 天天日日夜夜| 97免费在线观看| 国产怡红院| 欧美亚洲手机在线| 色偷偷超碰亚洲| 99国产在线 精品 视频| 超碰1024久久| 91网站视频在线观看| 欧美另类精品xxxx| 欧美美女视频| 青草青青久久久久久国产| 久久久精| 亚洲色图20p| 日韩性爱播放| 国产精品福利资源在线尤物| 黄呦呦在线| 国产精品女久久久久av爽| 乱码人妻一区二区三区| 粉嫩av在线一区二区| 中日韓欧美高清| 四虎影视在线| 9国产超碰| 91 综合 色| 亚洲黄色影视| 日韩一级特黄av毛片| 天天综合网亚洲综合网| 精品国产91久久久久久一区黄无| 久久天天艹| 日韩精品一区二区人人人| 丝袜亚洲91| 91美女丝袜诱惑视频| 综合 欧美 亚洲 日本| 97av在线观看| 超碰久超碰久| 欧洲亚洲人妻无码久久三区四区| 亚洲成人妻日韩在线| 精品免费一区二区三区在线亚洲人成 | 99色悠悠| 亚洲色图a| 97在线国产精品| 这里只有精品视频在线| 国产做?爰片久久毛片?片美国| 大香焦A片| 黄色激情电影在线观看| 岛国视频一二三区| 免费av在线播放二区| 一区超碰一区| 欧美高清91| 二三四区精品| 激情内射| 操久久久久| 精品人妻久久久| 成人九九| 91麻豆天美| 日本国产二线女色| 78m啪啪啪| 五月天伊人网| 亚洲激情在线观看一区| 欧美A片中文字幕| 亚洲欧美色图小说| 丁香六月激情| 久久大香蕉| 在线岛国新天堂8| 亚洲国产成人精品999| 婷婷五月天激情网| 亚洲色图欧美色图制服丝袜| 毛片17S| 久久AV无码1区2区3区| 97精品97| 亚洲天堂性爱| 学生妹天天看| 国产美女自拍视频| 欧美激情视频在线一区| 亚洲欧洲综合av在线| 日本一区二区做爱的视频| 超碰成人免费| 99re8超碰| 综合情欲网| 久草午夜| 337p大胆噜噜噜噜噜91Av| 97人肏| 亚洲综合图片在线| 97天天| 成人麻豆av电影网站| 超碰在线91| 97在线无精品| 啪啪啪精品| 丝袜 亚洲 偷拍| 在线色资源| 人人操人人操人人人操| 强上我不卡卡| 伊人网在线点播| 欧美色视频在线| 国产a级精品| 欧美综合狠| 日韩色欲久久一二三四区| 伊人成人中文字幕久久网| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 亚洲女毛多水多21P| 亚洲欧洲第二视频在线观看色图| 亚洲精品成人动漫在线| 久久久久久久综合,国产| 另类小说五月天| 午夜乱轮操逼视频免费看| 91少妇通奸网站| 激情自拍 校园春色| 尤物网址| 日本一区不卡| 无码人妻精品一区二区三区九九| 国内三级自拍小视频在线观看| 东京热毛片177b2viP| 麻豆天美在线喷水AV| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲人体视频在线观看| 欧美综合色站| 丁香五月天堂网| 日操粉逼逼| 国产综合在线视频网站| 欧美色人| 欧美强奸乱能| 国产传媒一区二区三区| 亚洲欧洲无码一区夜| 亚洲成人网站在线观看| 韩日性爱av| 深喉吞精| 劲爆欧美人妖三区91| 91麻豆天美国产欧美| 九九干| 欧美性暴力猛交| 亚洲一二三四区| 日韩性爱免费视频在线网站| 成人A片男人的天堂| 亚洲熟女乱综合一区二区三区| 91日产桃蜜| 老熟女搡BBBB搡BBBB视频| 嫩草一区二区在线观看| 精品一区二区成人动漫| 天天爽夜夜操| 99久久久无码| 日本超碰在线国产一区| 久99热| 蜜臀国产AV中文字幕| 久久久婷| 成人色女网| 污电影在线观看| 欧美综合色综合| 老熟女阿 国产91| 色婷婷一区二区三区久久| 国产强奸无码乱伦| 人人干黄色| 岛国艾薇凹凸视频天堂| 天天插天天插| 大香蕉综合久久| 久久后入制服| 91性情| 亚洲成人免费中文字幕| 五月天激情四射| 亚洲情色1区| 午夜福利一区二区三区四区五区色婷婷| 亚洲伊人青青草| 一二三区操逼国产91| 国产黄色 A 片免费看| 香蕉久久国产AV一区二区| AV丝袜少妇| 日韩九九九| 91天堂色男人的天堂| 久久天天躁日日躁狠狠躁 | 欧成人精品一区二区三区| 久艹伊人精品综合在线| 精品一二三区女同| julia高潮后不停追击中出| 96精品久久久久久久久| 久久亚洲天堂| 亚洲中文人妻色| 九九热精品视频六| 中国熟女老妇仑乱一区二区三区| 骚货人妻偷情自拍在线视频| 美女裸体无遮挡永久免费观看网站| 男人天堂综合| 国产精品成人福利在线| 九九视品黄色| 白嫩少妇| 国产精品分类在线观看| 久男人久久| 色色五月天婷婷| 国产女性无套 免费观看| 深夜视频| 玖玖爱影院| 欧美日韩高潮喷水91| 人人色人人射人人妻| 天天日天天干天天操| 强奸乱伦免费网站| 精品9区| 男人的天堂2019AV| 嗯啊免费视频| 人妻熟女午夜精品在线| 人妻夜夜爽天天爽麻豆三区网站 | 97欧美色综合| 江都AV在线| 久久久111| 啊啊啊啊啊在线视频| 久久精品性| 日韩免费中文字幕视频| 99热在线播放| 国产乱弄免费在线视频。| 大香蕉AV在线| 91xingse| 欧美特大黄一级片片免费| 中文字幕 国产区| 少妇3P性爱自拍| 99热这里只有精品1| 99国产精品在线观看| 欧美熟妇乱码在线一区| 97电影院超碰| 日韩啪啪啪啪啪| 国产精品日韩在线一区| 美女啊啊啊啊pc| 爽爽歪在线视频| 伊人激情五月天一区二区| 青春草莓视频在线观看网址| 大香蕉视频一二三区| 射久久| 亚洲久9| 大稥蕉免费视频这里只有精品| 一卡二卡三卡| 野狼福利社区| 久久久久久91香蕉国产| 欧美A片中文字幕| 伊人黄色片| 中文字幕蜜乳av| 成人综合色网| 秋霞一集毛片观看| 国产中午字一暮区| 丁香五月综合| 亚洲欧美国产其他二区| 精品传媒在线一区| 一区| 亚洲操逼视频网站| 无码一区免费在线不卡| 91亚洲欧美综合高清在线| 亚洲综合春色| 一本道综合色图| 欧美激情另类一区二区| 夜夜嗨视频| 九草九九九| 亚洲图片欧美制度| 97色五月天完| 日韩成人免费电影| 第一高清av中文字幕| 伊人一区二区在线播放| 老妇女91| 亚洲性天堂| 人妻五十路在线| 国产视频三区四区| 老鸭窝亚洲毛片| 九九久久精品| AV天天在线观看| 天天射影院| 口爆综合网| 亚洲男人天堂Av| 蜜臀少妇一区二区| 91扒丝袜综合在线| 91色黑人少妇| 亚洲国产青青| 蜜桃久久久久久久久久久久| 日本精品九九九| 97久久精品亚洲中六字幕| 久久久不能久久久久| 精品亚洲国产成人AV制服丝袜| 涩五月婷婷| 草久久久| 狠狠爱夜夜| 亚洲乱码尤物193YW| 欧美日韩岛国大片在线观看| 国产乱人伦AVA麻豆软件.| 丝袜熟女一区二区三区| 久久婷综合| 久久久精品成人国产| 亚洲啪啪视频一区二区| 天天干天天爽| 亚洲自拍欧美色综合| 日本ZZ高免费A级视频| 1区2区3区视频| 国产91精品福利在线| 99视频在线| 日韩av色图| 人妻久久一区二区三区 | 国产久久一区二区午夜| 久久999久| 少妇大屁屁| 高潮毛片无遮挡高清免费| 九九色热| 后入福利视频| 午夜.DJ高清在线观看免费7| 69人妻精品一区二区绯色| 黄呦呦在线| 亚洲天堂久久久久久粉红视频| 国产传媒操逼视频| 大香蕉啪啪啪| 91国产丝袜白虎| 国产操逼视频在线观看| 欧美日本久久精品一区 | 亚洲日韩精品在线播放| se,,,亚洲欧美| 一级岛国大片| 国产传媒美日韩av| 欧美激情性久久久久久| 青青操在线亚洲视频观看欧美在线| 不卡av免费在线网址| 在线99热| 久久夜夜| 日韩钢筋无码高清啾啾啾| 国产精品久久妻无码网站| 欧美亚洲国产自久久| 波多野结衣AV无码一区| 日本久久综合| 日本护士高潮| 91少妇人妻| 亚洲天堂区| 国产精品分类在线观看| 久久九精品| 欧美一级色| 亚洲欧美高清无码| 91伊人久久在线| 丁香五月成人| 欧美日韩大黄片| 久草老司机| 综合久久欧美| 国产呦精品系列在线观看| 熟妇国产免费一区| 丁香成人五月天| 亚洲乱码精品一区二区| 神马久久69| 大香蕉97久久| 精品国产乱码久久久久久口爆网站 | 亚洲性爱电影| 香蕉国产97| 强奸少妇AV导航网| 久久草在线综合视频| 国产美女高潮| 青青草原av| 日韩欧美丝袜诱惑| 日本免费专区| 网站A V在线| 国产一区在线播放| 亚州男人天堂| 亚洲 暴爽 AV人人爽日日碰| 经典丝袜一区| 久久蜜桃综合网| 乱精品一区字幕二区| 曰韩无码777| 日本成人在线不卡一区二区三区| 亚洲欧美九九九| 91女网站| 欧美色图亚洲特色| 素人美腿视频网站| 人人色97| 欧美色棕合| 91啪啪视频| 熟女突然公开看18禁影片 | 久久九九一区二区三区成人| 久久婷婷五月天| 久久露脸国产老熟女| 91在线超高颜值国产| 色视频蜜乳| 亚洲密乳AV| 在线国产福利网址导航| 中文字幕一区二区在线日韩精品| 综合国产影视三级| 1禁看欧美黄片免费看| 久久九九视频九九视频| 啪一啪免费视频| 欧美麻豆成人同性GⅤ在线| 日韩不卡a级视频专区| 在免费jIzzjIzz在线视频| 91人人臊| 99国内精品| 综合91网| 97综合激情| 精品国产91内射久久| 久久精品人人做人人看| 久草免费在线一区二区| 偷窥自拍亚洲天堂网爆| 曰韩欧美国产传媒麻豆第一区| 精品国产99| 色天天野狼综合社区| 亚洲欧洲日本精品中文a∨| 免费的黄片有限公司| av在线不卡一区二区三区| aaa一级黄片| 高清不卡一二三区视频......| 日韩精品中文字幕人妻| 成人在线日韩| 91老熟女老女人国产老太| 91爱看| 老司机福利青青草| 天天日少妇逼AV| 99在线精品视频| 成人在线视频网| 91高清日| 国产超碰| 97干综合网| 亚洲欧洲综合av在线| 亚洲少妇在线影音| 欧美偷偷网| 婷婷伊人五月| 大香伊人在线一区| 99re视频这里只有精品| 人妻熟女一区在| 久热这里| 综合网色| 亚洲欧美日韩不卡人妻| 国产原创自拍| 国产麻豆91欧美一区二区久久婷婷国产精品 | 日本天天干天天操一区| 亚洲色人妻综合| 亚洲91色| 婷婷国产精品九区| 午夜福利1区2区3区| 区日韩亚洲乱码av电影| 丰满人妻区一区二区三| 操九九九九九九| 国内亚洲高清无码| 2000亚洲男人天堂| www黄片免费看com| 久久精品一区一起草| 在线可观看的黄色网址| 天堂综合网| 内射日韩大臀美女| 最新国内自拍av免费| 激情小说亚洲图片| 色综合久久久久| 激情色图| 国产99999久久精品| 欧美精品人妻视频| 日韩av不卡在线看| 熟女精品日韩一区二区三区| 夜夜中出国产| 操逼逼中文字幕| 欧美性91| 久久久久久久久久久久欧美日| 国产亚洲精品自在线亚洲情侣| 成人国产二区三区在线,男女精品。| 欧美精品成人亚洲| 日韩AV熟女乱伦| 新亚洲无码| 成人青青草原伊人| 国产污视频麻豆传媒一区二区 | 手机看片日韩人妻| 日韩紧密久久| 中文字幕在线24| 中文字幕精品一区二区精品| 亚洲黄色影视| 天天操夜夜操| 97啪啪| 日本欧美亚洲高清在线看| 成全在线观看免费观看| 韩国免费播放一级毛片| 亚洲一区操| 免费AV中文网在线观看| 亚洲人妻爽爽爽| 五月天精品| 五十路熟女,国产欧美精品区一区二区三区 | 久久一区无码| 中文字幕 人妻不满 在线视频| 国产精品无套内谢| 国产美女自拍AV| 九九色婷婷| 嫩草一区二区在线观看| 在线观看av区| 九九色精品| 女人妻一区| 欧美综合狠| 色哟哟 日韩精品| 久久久亚洲欧美综合| 3p国产色噜噜一区| 啊啊啊好湿国产一二| 51一区二区三区| 免费在线看黄片av| 自拍大香蕉乱插| 不卡人妻少妇精品毛片一区23区视频 | 大粗鳼巴久久久久| 欧美国产精品| 天美AV片| 四虎免费在线播放| 中文字幕精品一区欧美| www.色五月| 欧美黑人91| 亚欧无码在线| 九九精品美女高溯喷水| 91精品人妻一区二区三区蜜臀| 亚洲国产尤物yw在线观看| 久久麻豆一区二区| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 亚洲a色| 亚洲欧美日韩精品久| 久久精品国产99国产精品亚洲| 视频不卡中文字幕| 精品久久久亚洲AV成人网站| 超碰97欧美日韩| av强奸乱轮| 久久香蕉超碰97国产精品| 偷拍 欧美 日韩| 免费看污网站| 强奸乱伦AV一天堂网| 欧美老熟另类| 人人干人人操人人爱| 蜜色网色哟哟| 久久一区,青青青青草视频在线播放| 色综合中文字幕不卡| 伊香蕉综合久久久久久久噜噜噜| 97干在线| 国产又粗又长的视频| 美女黄频a美女大全免费皮| 天天综合网入口~91| 在线有码中文字幕| 久久精品72| 国产精品久久aV| 中文字幕乱碼在线| 91色人妻| 天堂伊人久久| 99日精品欧美国产| 好涩综合| 极品少妇99| 亚洲九月丁香| 欧美精品黑人猛交高潮| 中文字幕国产精品1区| 成年无码动漫av片无尽在线| 性欧美91| 日本亚洲熟女视频| 亚洲欧美首页| 欧美暴力猛交| 任你爽视频| 高潮的A片激情扒开一区| 超碰色97| 超碰97最新人妻| 91 丝袜在线| 簧片免费看视频| 美国精品国产精品| 91美女在线| 51一区二区三区| 日韩精品9999| 久久综合精品一区二区三区| 日本欧美国内在线| 成人性爱全视频观看| 四虎午夜影院| 久久一级无码精品毛片6| 亚洲中亚日激情视频| 久久 久久国内精品亚洲| 大香蕉免费3| 91粉芽高清在线一区二区| 中文字幕在线第二页| 老外又粗又长一晚做五次| 欧美在线伊人色| 手机看片91人妻| 麻豆AV一区二区| 99久久国产精品免费高潮| 精品久久視頻在线| 变态综合色| 国产精品交换一区二区| 色综合91好| 精品人人| 黄色免费一级在线毛片| 精品国产99| 搞中出久久| 伊人网在线视频| 欧美日韩性爱无码| 自拍第一页| 久操婷婷| 97干97色| 久久亚州高清| 国产成人一级av88| 2020中文字幕在线| 色色婷| 日韩欧美女求操每天更新| 精品久久久久久亚洲| 国产在线视频午夜精华在| 欧美亚洲丝袜美女电影| 中文字幕一二区二三区人妻专区| 色网1| 日本 欧美 国产一区| 天天干18禁| 欧美男人的天堂| 屌逼麻豆| 国产日韩色综合| 国产和美国毛片| 精品人妻美妇91job| 人妻一区二区三区熟女| 97se综合网| 亚洲欧综合另类无码一区| 青青草依人大香蕉| 欧美少妇一区二区三区| 亚洲天堂中文字| 日本三级精品| 密臀在线免费观看| 丝袜剧情| 91美女网站| 人妻内射一区二区在线视频| 国产激情视频在线观看| 囯产精品久久久久久久久久梁医生| 成人热久久精品| 久99热| 国产精品久久久久久高清无码免费看| 久久久一区二区| 久久大香蕉手机高清视频| 国产AV精久久| 亚洲男人天堂av| 久久久一区二区| 顶级少妇BT天堂| 九九激情网| 免费观看国产小粉嫩喷水精品午| 欧美97av| 中国小夫妻勾搭露脸淫荡对白| 久99热| 国产日韩在线播放| 国产成人亚洲精品无码最新在线| 成人开心网在线视频| 青青青国产| 在线日韩视频| 婷婷视频在线免费观看| 香蕉国产精品麻豆亚洲欧美日韩| 欧美日韩亚洲少妇寂寞影院正在播放 | 日本精品一区二区中文字幕| 国产精品午夜福利亚洲综合网| 97操B| 成年人免费观看网站| 嗯嗯,好大,好爽,好骚 | 欧美加勒比| 91国产丝袜白虎| 日韩色女精品| 亚洲天堂人人妻| 久久av色| 中文字幕丝袜人妻| 中文字幕二区日韩天堂| 丁香六月婷婷久久综合| 99精品久久久久久久婷婷蜜桃| 萌白酱自拍视频| 成人av影院在线观看| 超碰在线欧美性爱激情| 国产高清自拍视频| 日本一区不卡| 97国产人人| 久久大| 综合网91| 日韩视频中文字幕| 久久精品一区二区三区四区五区| 亚洲高清欧美总合| www亚洲欧美| 69一区二区三区 | 麻豆婷婷成人一二三| 欧美 中文字幕 一区| 欧美嫩性色| 97操97色| 亚洲影院小综合| 青春草A| 操亚州| ...日韩成人一区二区三区字幕| 夜夜操一区二区| 精品无码产区一区二| 青青久久久| 欧美激情精品久久久久久| 久久久久成人网| 国产一区二区在线播放| 农村女一级毛卡片| 成人av毛片在线观看| 成人免费看吃奶视频网站| 日韩美女啪啪一区| 国产亲戚伦亲在线| 99九九精品| 欧美亚涩| 四虎884a| 果冻传媒A片一二三区| 黑人精品欧美一区二区蜜桃| 欧美 亚洲精品首页| 无码人妻精品酒店| 国产强奸乱伦xd| 在线视频免费播放一区| www五月| 精品免费1| 久日91在线| 97操B| 色欲天天婬色婬香WWW夜色| 亚洲欧洲综合av在线| 亚洲最大网站av| http://qxhbdz.com| 美日韩在线不卡人妻| 色九九九九九九| 熟妇乱伦一区二区| 一区二区影院| 夜夜嗨AV一区天天| 亚洲色图欧美另类在线| 欧洲视频在线| 国产又猛又粗又爽又黄| 欧美一级做a爰片免费视频| 美女黄页| 熟女久久久| 欧美一区二区三区不卡高清视频| 熟女精品va中文字幕| 91蜜臀熟女| 欧美玖玖爱免费玖玖| 中文字幕精品码亚洲| 亚洲免费成人在线高清无码视频| 欧美久热| 蜜桃一区二区三区| 91久久青青草原精品| 日本操逼视频导航| 欧美老熟另类| 久久大香蕉97| 日韩人妻一二三区视频| 夜夜嗨一区二区| 一摸二插三插| 国产午夜福利电影免费在线观看| 成人精品在线| 亚洲性少妇| 狠狠婷婷亚洲中文综合久久| 久久99人妖视频国产| 亚州人妻| 欧美爱爱97| www久| 国产热av| 日韩综合无码色欲vv| 荡小穴在线观看| 人妻激情视频| 国产精品宅男免费| 亚洲视频,小说| 国内外内射高清视频| 五月综合久久| 神马久久免费电影观看| 亚洲囯产精品女人久久久| 99青草| 9Ⅰ超碰| 99久久综合网| 一本色道久久综合狠狠操| 久久东京伊人一本到鬼色| 天天日日日射| 黑人娇小av在线播放| 五月丁香综合激情| 欧美三四五区| 亚欧高清v| 亚洲一二三四区在线免费看视频| 国产一级特黄大片处女| 少妇与黑人高潮在线| 大香蕉一级黄色片久久| 久久天天摸| 精品78| 超碰亚洲欧美日韩无| 东京热毛片177b2viP| 开心五月天激情网| 青青草大香蕉视频| 丁香六月啪啪| 精品人妻一区二区三区视频在线| 超碰成人免费| 91色欧美| 亚洲中文字幕97久久精品少妇| 国产激情在线| 99热这里是精品| 人妻一区二区三区熟女| 91熟女熟妇视频网站| 中文字幕乱亚洲美女精品一区| 人人操AV| 久久超碰网| 欧亚乱色熟一区二区三四区| 波多野结衣之双飞调教在线播放| 天天干天天日天天射黄色大片 | 91啪9色| 亚洲一区中文精品| 欧美精品偷拍| 久草视频在线视频在线视频在线观看| 是还免费视频1727我| 精品v日韩欧美国产| 大香蕉手机在线| 天堂岛av| 无码不卡八戒| 岛国不卡超碰护士AV在线播放| 國產尤物AV尤物在線觀看| 久久伊人东京热| 六六久久日韩不卡| 国产精品久久久久久高清无码免费看| 精品无码一二三四区| 亚洲图片欧洲图片aⅴ| 中文字幕福利视频一区二区三区在线观看| 丁香五月天堂网| 欧美成人性爱视频在线播放| 日日干男人的天堂| www欧美性爱| 日本阿v天堂在线观看| 和协影院中文字幕三区| 国产精品三级视频网站| 久久啊啊啊| 北条麻妃性愛视频| 97精品综合久久| 97精品一区二区视频| 熟女露脸激情自拍视频| 亚洲欧美精品一区天堂久久 | 欧美 中文字幕 一区| 久草免费福利在线播放| 超碰99在线| 日韩 成人 有码| 99久久久久| 伊人一区二区在线播放| 极品出轨视频网站| 麻豆区99999| 插欧洲美女欧美精品| 四虎午夜影院| 青青草大香蕉视频| 欧洲精品一区二区三区| 91操碰| 超碰在线观看av不卡| 97Ai亚洲| 2017超碰| 不卡码视频| 天天日夜夜爽| 国产精品自在线发布| 亚洲欧美日韩制服另类| 久久有码视频| 欧美性生活内射| 99久久这里只有精品| 亚洲操逼无码| 两女互慰AV高潮喷水在线观看| 超碰99在线| WWW美腿丝袜香蕉中文| 青青草视频久久久久| 水野优香在线观看| 中文字幕亚韩| 偷拍三区| 久久伊人最新网址视频| 日日骚一区二区三区| 97在线资源| 99精品伊人| 欧洲Au麻豆| 日韩AV电影网站| 亚洲五月婷| 日本色色的视频| 日本操逼二区| 国产日韩在线播放av| 丁香婷婷五月| 久久精品熟妇丰满人妻99| 午夜福利合集| 国产三级中文字幕粉嫩| 超碰午夜| 国产精品久久久九九九| 国产男女无套97| 久久9精品视频| 日本久久久久久久久| 人妻啊啊人妻啊啊| 日韩精品国产精品五码一区二区| 欧亚免费视频| 男女真人网18| 国产 v乱码一区二| 欧美久久伊人| 操逼网站视频漫画国产| 色情乱伦AV| 日本熟妇人妻中出视频| 屁屁影院一区二区三区国产| 无码精品一区二区三区潘金莲| 18禁中文字幕| 做爱A级亚欧| 欧美性爱三区二区| 伊人黄色视频免费观看| 日韩欧美亚洲一区二区三区影院 | 春色综合免费| 人妻丰满熟妇av无码区蜜桃| 日本不卡免费二区| 日本不卡中文| 欧美激情精品| 色婷婷一区二区三区久久| 香蕉视频欧美一卡二卡| 污色区网站| 国产极品精品美女视频| 日韩卡一卡二卡三在线| 肉嘟嘟www视频在线观看高清| 国产小u女在线观看| 五月婷丁香| 91黑丝少妇|