精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制 原創

發布于 2025-1-2 08:20
瀏覽
0收藏

本文旨在探索DDPG算法如何解決連續動作控制難題,從而進一步提升生物工程領域AI驅動的醫療機器人的強大功能。

引言

想象一下,你正在手術過程中控制著一臺機械臂。此機械臂的離散動作可能有:

  • 向上移動
  • 向下移動
  • 抓取

  • 釋放

這些都是明確、直接的命令,在簡單情況下是易于執行的。但是,如果執行精細的動作,例如:

  • 將手臂移動0.5毫米以避免損傷組織
  • 施加3N的力以壓縮組織

  • 旋轉手腕15°以調整切口角度

該怎么辦呢?

在這些情況下,你需要的不僅僅是選擇一個動作——你必須決定需要多少動作。這是連續動作空間的世界,也是深度確定性策略梯度(DDPG)算法大放異彩的地方!

像深度Q網絡(DQN)這樣的傳統方法在離散動作方面效果很好,但在連續動作方面卻舉步維艱。另一方面,確定性策略梯度(DPG)算法解決了這個問題,但面臨著探索性差和不穩定的挑戰。DDPG算法最早是在TP.Lillicrap等人的論文中提出的,它結合了DPG算法和DQN算法的優勢,以提高連續動作空間環境中的穩定性和性能。

在本文中,我們將討論DDPG算法背后的理論和架構,研究它在Python上的實現,評估其性能(通過在MountainCarContinuous游戲上進行測試),并簡要討論如何在生物工程領域使用DDPG算法。

DDPG算法架構

與評估每個可能的“狀態-動作”對以找到最佳動作(由于組合無限,在連續空間中不可能)的DQN算法不同,DPG算法使用的是“演員-評論家(Actor-Critic)”架構。演員學習一種將狀態直接映射到動作的策略,避免詳盡的搜索并專注于學習每個狀態的最佳動作。

但是,DPG算法面臨兩個主要挑戰:

  • 它是一種確定性算法,限制了對動作空間的探索。
  • 由于學習過程不穩定,它無法有效地使用神經網絡。

DDPG算法通過Ornstein-Uhlenbeck過程引入探索噪聲,并使用批量歸一化和DQN技術(如重放緩沖區和目標網絡)穩定訓練,從而改進了DPG算法。

借助這些增強功能,DDPG算法非常適合在連續動作空間中訓練AI代理,例如在生物工程應用中控制機器人系統。

接下來,讓我們深入探索DDPG模型的關鍵組成!

演員-評論家(Actor-Critic)框架

  • 演員(策略網絡):根據代理所處的狀態告訴代理要采取哪種操作。網絡的參數(即權重)用θμ表示。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

【提示】將演員網絡視為決策者:它將當前狀態映射到單個動作。

  • 評論家(Q值網絡):通過估計該狀態-動作對的Q值來評估演員采取的行動有多好。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

提示!將CriticNetwork視為評估者,它為每個動作分配一個質量分數,并幫助改進演員的策略,以確保它確實在每個給定狀態下生成最佳動作。

注意!評論家將使用估計的Q值做兩件事:

1. 改進演員的策略(演員策略更新)。

演員的目標是調整其參數(θμ),以便輸出最大化評論家的Q值的動作。

為此,演員需要了解所選動作a如何影響評論家的Q值,以及其內部參數如何影響其策略,這通過此策略梯度方程完成(它是從小批量計算出的所有梯度的平均值):

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

2. 通過最小化下面的損失函數來改進其自己的網絡(評論家Q值網絡更新)。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

其中,N是在小批量中采樣的經驗數,y_i是按如下方式計算的目標Q值。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

重放緩沖區

當代理探索環境時,過去的經驗(狀態、動作、獎勵、下一個狀態)會作為元組(s,a,r,s′)存儲在重放緩沖區中。在訓練期間,會隨機抽取由其中一些經驗組成的小批量來訓練代理。

問題!重放緩沖區實際上如何減少不穩定性?

通過隨機抽取經驗,重放緩沖區打破了連續樣本之間的相關性,減少了偏差并帶來了更穩定的訓練。

目標網絡

目標網絡是演員和評論家的緩慢更新副本。它們提供穩定的Q值目標,防止快速變化并確保平穩、一致的更新。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

【問題】目標網絡實際上如何減少不穩定性?

如果沒有評論家目標網絡,則目標Q值直接從評論家Q值網絡計算,該網絡會不斷更新。這會導致目標Q值在每一步都發生變化,從而產生“移動目標”問題。因此,評論家最終會追逐不斷變化的目標,導致訓練不穩定。

此外,由于演員依賴于評論家的反饋,因此一個網絡中的錯誤會放大另一個網絡中的錯誤,從而形成相互依賴的不穩定循環。

通過引入使用軟更新規則逐步更新的目標網絡,我們確保目標Q值保持更一致,從而減少突然變化并提高學習穩定性。

批量歸一化

批量歸一化將輸入歸一化到神經網絡的每一層,確保平均值為零且方差為1個單位。

【問題】批量歸一化實際上如何減少不穩定性?

從重放緩沖區中提取的樣本可能具有與實時數據不同的分布,從而導致網絡更新期間不穩定。

批量歸一化確保輸入的一致縮放,以防止由輸入分布變化引起的不穩定更新。

探索噪聲

由于演員的策略是確定性的,因此在訓練期間將探索噪聲添加到動作中,以鼓勵代理探索盡可能多的動作空間。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

在DDPG論文中,作者使用Ornstein-Uhlenbeck過程生成時間相關噪聲,以模擬現實世界的系統動態。

DDPG算法偽代碼:分步分解

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

此偽代碼取自http://arxiv.org/abs/1509.02971(參見“參考文獻1”)。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

  • 定義演員和評論家網絡:
class Actor(nn.Module):
    """
    針對DDPG算法的演員網絡。
    """
    def __init__(self, state_dim, action_dim, max_action,use_batch_norm):
        """
        初始化演員的策略網絡

        :參數state_dim: 狀態空間的維度
        :參數action_dim: 動作空間的維度
        :參數max_action: 動作的最大值
        """
        super(Actor, self).__init__()
        self.bn1 = nn.LayerNorm(HIDDEN_LAYERS_ACTOR) if use_batch_norm else nn.Identity()
        self.bn2 = nn.LayerNorm(HIDDEN_LAYERS_ACTOR) if use_batch_norm else nn.Identity()

        self.l1 = nn.Linear(state_dim, HIDDEN_LAYERS_ACTOR)
        self.l2 = nn.Linear(HIDDEN_LAYERS_ACTOR, HIDDEN_LAYERS_ACTOR)
        self.l3 = nn.Linear(HIDDEN_LAYERS_ACTOR, action_dim)
        self.max_action = max_action

    def forward(self, state):
        """
        通過網絡正向傳播。

        :參數state: 輸入狀態
        :返回值: 動作
        """

        a = torch.relu(self.bn1(self.l1(state)))
        a = torch.relu(self.bn2(self.l2(a)))
        return self.max_action * torch.tanh(self.l3(a))

class Critic(nn.Module):
    """
    針對DDPG算法的評論家網絡。
    """
    def __init__(self, state_dim, action_dim,use_batch_norm):
        """
        初始化評論家的值網絡。

        :參數state_dim: 狀態空間的維度
        :參數action_dim: 動作空間的維度
        """
        super(Critic, self).__init__()
        self.bn1 = nn.BatchNorm1d(HIDDEN_LAYERS_CRITIC) if use_batch_norm else nn.Identity()
        self.bn2 = nn.BatchNorm1d(HIDDEN_LAYERS_CRITIC) if use_batch_norm else nn.Identity()
        self.l1 = nn.Linear(state_dim + action_dim, HIDDEN_LAYERS_CRITIC)

        self.l2 = nn.Linear(HIDDEN_LAYERS_CRITIC, HIDDEN_LAYERS_CRITIC)
        self.l3 = nn.Linear(HIDDEN_LAYERS_CRITIC, 1)

    def forward(self, state, action):
        """
        通過網絡的正向傳播。

        :參數state:輸入狀態
        :參數action: 輸入動作
        :返回值: “狀態-動作”對的Q-值
        """
        q = torch.relu(self.bn1(self.l1(torch.cat([state, action], 1))))
        q = torch.relu(self.bn2(self.l2(q)))
        return self.l3(q)
  • 定義重放緩沖區

實現ReplayBuffer類來存儲和采樣上一節中討論的轉換元組(s,a,r,s’),以實現小批量離策略學習。

class ReplayBuffer:
    def __init__(self, capacity):
        self.buffer = deque(maxlen=capacity)

    def push(self, state, action, reward, next_state, done):
        self.buffer.append((state, action, reward, next_state, done))

    def sample(self, batch_size):
        return random.sample(self.buffer, batch_size)

    def __len__(self):
        return len(self.buffer)
  • 定義OU噪聲類

添加OUNoise類來生成探索噪聲,幫助代理更有效地探索動作空間。

"""
節選自??https://github.com/vitchyr/rlkit/blob/master/rlkit/exploration_strategies/ou_strategy.py??
"""
class OUNoise(object):
    def __init__(self, action_space, mu=0.0, theta=0.15, max_sigma=0.3, min_sigma=0.3, decay_period=100000):
        self.mu           = mu
        self.theta        = theta
        self.sigma        = max_sigma
        self.max_sigma    = max_sigma
        self.min_sigma    = min_sigma
        self.decay_period = decay_period
        self.action_dim   = action_space.shape[0]
        self.low          = action_space.low
        self.high         = action_space.high
        self.reset()

    def reset(self):
        self.state = np.ones(self.action_dim) * self.mu

    def evolve_state(self):
        x  = self.state
        dx = self.theta * (self.mu - x) + self.sigma * np.random.randn(self.action_dim)
        self.state = x + dx
        return self.state

    def get_action(self, action, t=0): 
        ou_state = self.evolve_state()
        self.sigma = self.max_sigma - (self.max_sigma - self.min_sigma) * min(1.0, t / self.decay_period)
        return np.clip(action + ou_state, self.low, self.high)
  • 定義DDPG代理

定義了一個DDPG類,它負責封裝代理的行為:

初始化:創建演員和評論家網絡,以及它們的目標對應方和重放緩沖區。

class DDPG():
    """
    深度確定性策略梯度(DDPG)代理。
    """
    def __init__(self, state_dim, action_dim, max_action,use_batch_norm):
        """
        初始化DDPG算法代理。

        :參數state_dim: 狀態空間的維度
        :參數action_dim: 動作空間的維度
        :參數max_action: 動作的最大值
        """
        # [第0步]
        #初始化演員的策略網絡
        self.actor = Actor(state_dim, action_dim, max_action,use_batch_norm)
        # 使用與演員的策略網絡相同的權重初始化演員目標網絡
        self.actor_target = Actor(state_dim, action_dim, max_action,use_batch_norm)
        self.actor_target.load_state_dict(self.actor.state_dict())
        self.actor_optimizer = optim.Adam(self.actor.parameters(), lr=ACTOR_LR)

        #初始化評論家的值網絡
        self.critic = Critic(state_dim, action_dim,use_batch_norm)
        #使用與評論家的值網絡相同的權重初始化評論家的目標網絡
        self.critic_target = Critic(state_dim, action_dim,use_batch_norm)
        self.critic_target.load_state_dict(self.critic.state_dict())
        self.critic_optimizer = optim.Adam(self.critic.parameters(), lr=CRITIC_LR)

        #初始化重放緩沖區
        self.replay_buffer = ReplayBuffer(BUFFER_SIZE)

動作選擇:select_action方法根據當前策略選擇動作。

def select_action(self, state):
        """
        根據當前狀態選擇一個動作。

        :參數state:當前狀態
        :返回值:選擇的動作
        """
        state = torch.FloatTensor(state.reshape(1, -1))
        action = self.actor(state).cpu().data.numpy().flatten()
        return action

訓練:訓練方法定義了如何使用重放緩沖區中的經驗來更新網絡。

注意:由于本文介紹了使用目標網絡和批量歸一化來提高穩定性,因此我設計了訓練方法,允許我們打開或關閉這些方法。這讓我們可以比較代理在使用和不使用它們的情況下的性能。請參閱下面的代碼以了解詳細的實現。

def train(self, use_target_network,use_batch_norm):
        """
        訓練DDPG代理

        :參數use_target_network: 是否使用目標網絡
        :參數use_batch_norm: 是否使用批量歸一化
        """
        if len(self.replay_buffer) < BATCH_SIZE:
            return

        # [第4步]. 從重放緩沖區中抽取一批樣本
        batch = self.replay_buffer.sample(BATCH_SIZE)
        state, action, reward, next_state, done = map(np.stack, zip(*batch))

        state = torch.FloatTensor(state)
        action = torch.FloatTensor(action)
        next_state = torch.FloatTensor(next_state)
        reward = torch.FloatTensor(reward.reshape(-1, 1))
        done = torch.FloatTensor(done.reshape(-1, 1))

        #評論家網絡更新#
        if use_target_network:
            target_Q = self.critic_target(next_state, self.actor_target(next_state))
        else:
            target_Q = self.critic(next_state, self.actor(next_state))

        # [第5步]. 計算目標Q-value (y_i)
        target_Q = reward + (1 - done) * GAMMA * target_Q
        current_Q = self.critic(state, action)
        critic_loss = nn.MSELoss()(current_Q, target_Q.detach())

        # [第6步]. 使用梯度下降來更新評論家網絡的權重
        #以最小化損失函數
        self.critic_optimizer.zero_grad()
        critic_loss.backward()
        self.critic_optimizer.step()

        #更新演員網絡#
        actor_loss = -self.critic(state, self.actor(state)).mean()

        # [第7步]. 使用梯度下降來更新演員網絡的權重
        #以最小化損失函數和最大化Q-value => 選擇產生最高累積獎勵的動作
        self.actor_optimizer.zero_grad()
        actor_loss.backward()
        self.actor_optimizer.step()

        # [第8步]. 更新目標網絡
        if use_target_network:
            for param, target_param in zip(self.critic.parameters(), self.critic_target.parameters()):
                target_param.data.copy_(TAU * param.data + (1 - TAU) * target_param.data)

            for param, target_param in zip(self.actor.parameters(), self.actor_target.parameters()):
                target_param.data.copy_(TAU * param.data + (1 - TAU) * target_param.data)
  • 訓練DDPG代理

將所有定義的類和方法整合在一起,我們就可以訓練DDPG代理。我的train_dppg函數遵循偽代碼和DDPG模型圖結構。

提示:為了讓你更容易理解,我已將每個代碼部分標記為偽代碼和圖表中相應的步驟編號。希望對你有所幫助!

def train_ddpg(use_target_network, use_batch_norm, num_episodes=NUM_EPISODES):
    """
    訓練DDPG代理

    :參數use_target_network: 是否使用目標網絡
    :參數use_batch_norm: 是否使用批量歸一化
    :參數num_episodes: 需要訓練的回合數
    :返回值: 回合獎勵列表
    """
    agent = DDPG(state_dim, action_dim, 1,use_batch_norm)

    episode_rewards = []
    noise = OUNoise(env.action_space)

    for episode in range(num_episodes):
        state= env.reset()
        noise.reset()
        episode_reward = 0
        done = False
        step=0
        while not done:
            action_actor = agent.select_action(state)
            action = noise.get_action(action_actor,step) # Add noise for exploration
            next_state, reward, done,_= env.step(action)
            done = float(done) if isinstance(done, (bool, int)) else float(done[0])
            agent.replay_buffer.push(state, action, reward, next_state, done)

            if len(agent.replay_buffer) > BATCH_SIZE:
                agent.train(use_target_network,use_batch_norm)

            state = next_state
            episode_reward += reward
            step+=1

        episode_rewards.append(episode_reward)

        if (episode + 1) % 10 == 0:
            print(f"Episode {episode + 1}: Reward = {episode_reward}")

    return agent, episode_rewards

性能和結果:DDPG算法有效性評估

至此,我們已經在MountainCarContinuous-v0環境中測試了DDPG算法在連續動作空間中的有效性。在該環境中,代理學會了如何獲得動力以將汽車開上陡峭的山坡。結果表明,與其他配置相比,使用目標網絡和批量歸一化可以實現更快的收斂、更高的獎勵和更穩定的學習。

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

作者本人生成的圖表

DDPG算法輕松解決AI醫療機器人技術難題:連續動作控制-AI.x社區

作者本人生成的GIF動畫

注意:你可以通過運行從我的?GitHub代碼倉庫??下載的代碼并根據需要更改環境名稱,然后在你選擇的任何環境中自行實現此功能!

生物工程領域的DDPG算法:高精度和適應性

通過本文的介紹,我們已經看到DDPG是一種強大的算法,可用于在具有連續動作空間的環境中訓練代理。通過結合DPG算法和DQN算法的技術,DDPG算法可以提高探索、穩定性和性能——這正是機器人手術和生物工程應用的關鍵因素。

想象一下,像達芬奇系統(da Vinci system)這樣的機器人外科醫生使用DDPG實時控制精細動作,確保精確調整而不會出現任何錯誤。借助DDPG算法,機器人可以以毫米為單位調整手臂的位置,在縫合時施加精確的力,甚至可以輕微旋轉手腕以獲得最佳切口。這種實時精度可以改變手術結果,縮短恢復時間,并最大限度地減少人為錯誤。

但DDPG算法的潛力不僅限于醫學手術領域。它已經推動了生物工程的發展,使機器人假肢和輔助設備能夠復制人類肢體的自然運動(有興趣的讀者可以查看這篇有趣的文章:??https://www.tandfonline.com/doi/abs/10.1080/00207179.2023.2201644??)。

現在,我們已經介紹了DDPG算法背后的理論,是時候由你來探索它的實際應用了。你可以從簡單的例子開始,逐漸深入到更復雜的實戰場景!

參考文獻

  • Lillicrap TP、Hunt JJ、Pritzel A、Heess N、Erez T、Tassa Y等人。使用深度強化學習的連續控制(Continuous control with deep reinforcement learning [Internet])。arXiv;2019年。出處:http://arxiv.org/abs/1509.02971

譯者介紹

朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

原文標題??Understanding DDPG: The Algorithm That Solves Continuous Action Control Challenges??,作者:Sirine Bhouri

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
麻豆九一精品爱看视频在线观看免费| 999久久久精品一区二区| 国产亚洲一区二区三区四区| 国产精品久久久久aaaa九色| 四虎精品免费视频| aaa国产精品| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 卡一卡二卡三在线观看| 9999精品免费视频| 欧美日韩国产黄| 亚洲开发第一视频在线播放| 免费观看国产精品| 免费xxxx性欧美18vr| 高清在线视频日韩欧美| 女教师淫辱の教室蜜臀av软件| 视频一区国产| 欧美三级中文字幕| 国产精品裸体瑜伽视频| 免费在线你懂的| 久久久久久久久久久99999| 91在线看网站| 精品国产www| 亚洲日本久久| 久久国产精彩视频| 国产亚洲精品精品精品| 日韩理论电影中文字幕| 日韩一区国产二区欧美三区| 黄色三级视频片| 麻豆视频在线看| 亚洲一区二区三区视频在线| 亚洲一区二区三区欧美| 黑人与亚洲人色ⅹvideos| 成人精品免费网站| 亚洲在线免费视频| 一级黄色短视频| 日日摸夜夜添夜夜添精品视频 | 日韩国产大片| 欧美中文字幕不卡| 成年人小视频网站| 这里有精品可以观看| 亚洲国产日韩一级| 国产肉体ⅹxxx137大胆| 福利在线视频网站| 国产精品久久久久久户外露出| 欧美精品二区三区四区免费看视频| 高h震动喷水双性1v1| 精品欧美国产一区二区三区| 91大神福利视频在线| 永久久久久久久| 奇米影视亚洲| 亚洲一区二区黄| 好吊一区二区三区视频| jizz性欧美23| 精品国产伦一区二区三区免费 | 久久久久久久久久久久久久久久久| 三上亚洲一区二区| 日韩亚洲欧美中文高清在线| 国产视频不卡在线| 精品视频免费| 在线电影中文日韩| 国产黄色片在线| 翡翠波斯猫1977年美国| 中文字幕一区二区三区人妻四季| 欧美一级二区| 国产成人精品电影| 波多野结衣电车| 国产真人真事毛片视频| 在线不卡一区| 91精品中文字幕一区二区三区| 亚洲最大成人在线观看| 欧洲精品久久久久毛片完整版| 欧美日韩精品一区视频| 污视频网址在线观看| 日韩三级网址| 亚洲国产欧美久久| 舐め犯し波多野结衣在线观看| 欧美精品乱码| 久久精品成人欧美大片古装| 久久久久久久九九九九| 国产女优一区| 国产欧美日韩中文| www.亚洲黄色| 2014亚洲片线观看视频免费| 亚洲视频在线观看日本a| 91在线网址| 夜夜嗨av一区二区三区中文字幕| 玩弄中年熟妇正在播放| 91国内在线播放| 精品无码人妻一区二区免费蜜桃| 国产日产一区| 日韩在线视频国产| 精品亚洲永久免费| 国产精品日韩精品欧美精品| 国产精品国产三级国产aⅴ9色| 在线黄色av网站| 国产91精品一区二区麻豆网站 | 久久久777精品电影网影网 | 国产日韩精品视频一区二区三区 | 国模精品一区二区三区| 亚洲精品国产精品国| 成人午夜激情片| 欧洲亚洲一区二区| 50度灰在线| 日韩欧美亚洲一二三区| 日本黄色一级网站| 国产精品欧美日韩一区| 九九久久精品一区| 中国精品一区二区| 不卡av免费在线观看| 一区二区在线高清视频| 女厕盗摄一区二区三区| 欧美一级片免费看| 我不卡一区二区| 亚洲另类自拍| 亚洲综合小说区| 国产三区四区在线观看| 亚洲无人区一区| 狠狠干狠狠操视频| 九九久久婷婷| 国模精品视频一区二区三区| 中文字幕一区二区在线视频 | 中文字幕在线观看二区| 免费日韩av片| 成人免费视频网站入口| 蜜桃av在线免费观看| 色8久久人人97超碰香蕉987| 看全色黄大色黄女片18| 亚洲色图网站| 国产精品揄拍一区二区| 国产资源在线看| 天天综合色天天综合| 国产麻豆剧传媒精品国产| 国产精品久久久久久久久妇女| 日本aⅴ大伊香蕉精品视频| 亚洲经典一区二区三区| 亚洲乱码日产精品bd| 一级做a免费视频| 全球成人免费直播| 国产精品www色诱视频| 五月婷婷在线播放| 亚洲午夜av在线| 稀缺呦国内精品呦| 亚洲高清在线| 高清不卡日本v二区在线| 超碰caoporn久久| 日韩一级免费观看| 天天鲁一鲁摸一摸爽一爽| 免费观看在线色综合| 日韩精品资源| jvid一区二区三区| 综合av色偷偷网| 中文字幕一区二区免费| 国产精品麻豆久久久| 一级片视频免费观看| 欧美日韩在线网站| 国产在线观看精品| 国产成人在线视频免费观看| 欧美一区二区三区婷婷月色 | 大伊人狠狠躁夜夜躁av一区| yy6080午夜| 亚洲在线日韩| 日本高清视频一区二区三区| jizzyou欧美16| 久久精品视频导航| 午夜精品一区二区三| 亚洲午夜电影在线观看| 亚洲蜜桃精久久久久久久久久久久| 亚洲精品国产日韩| 久久99精品久久久久久三级| 在线手机中文字幕| 中文字幕在线日韩 | 亚洲精品天天看| 国产又粗又猛又爽又| 国产精品三级电影| 精产国品一二三区| 一本色道久久综合| 五码日韩精品一区二区三区视频| 日韩精品第二页| 欧美激情网站在线观看| 男人的天堂在线| 欧美日韩中文一区| 久久婷婷综合国产| 国产欧美一区二区在线观看| 免费av不卡在线| 99精品欧美| 中文字幕在线观看一区二区三区| 伊人久久大香线蕉av超碰| 欧美怡春院一区二区三区| av亚洲在线| 精品乱码亚洲一区二区不卡| 精品人妻无码一区二区性色| 亚洲人成小说网站色在线| 亚洲av成人无码一二三在线观看| 青青草97国产精品免费观看无弹窗版| 日韩人妻一区二区三区蜜桃视频| 乱亲女h秽乱长久久久| 国产欧美精品一区二区| av最新在线| 日韩中文字幕视频在线观看| 天天干天天插天天操| 欧美三级乱人伦电影| 日韩av综合在线| 国产精品卡一卡二卡三| 国产精品伦子伦| 久久精品国产久精国产| 91视频最新入口| 中文在线日韩| 深夜福利成人| 国产精品中文字幕制服诱惑| 国产日韩中文字幕| 不卡福利视频| 久久免费视频网站| 免费观看成人高潮| 亚洲欧美精品中文字幕在线| 亚洲第一黄色片| 欧美精品丝袜久久久中文字幕| 成人免费a视频| 亚洲国产综合色| 亚洲不卡在线播放| 中日韩免费视频中文字幕| av无码av天天av天天爽| 国产成人免费在线视频| 欧美国产日韩另类| 日本欧美在线观看| 四虎永久在线精品无码视频| 99热在线精品观看| 国产精品videossex国产高清| 日韩成人综合| 日韩av一区二区三区在线观看| 日韩大胆成人| 精品综合久久久| 国产精品17p| 国产精品亚洲综合| 91精品啪在线观看国产爱臀| 成人网在线视频| 欧美亚洲福利| 国产精品日韩在线一区| 日韩网站中文字幕| 国产精品国产亚洲伊人久久| 国模冰冰炮一区二区| 清纯唯美日韩制服另类| 在线看片福利| 日韩av电影手机在线| 欧美成人精品一区二区男人小说| 欧美亚洲另类制服自拍| 原纱央莉成人av片| 日本精品久久久久久久| 肉色欧美久久久久久久免费看| 日本三级久久久| 欧美一级大黄| 国产精品久久久久久久久久久久久久 | 久久中文字幕av一区二区不卡| 日韩欧美精品一区二区| 日本成人小视频| 亚洲一区二区在| 91精品国产91久久久久久黑人| 中文网丁香综合网| 91精品天堂福利在线观看| 久久久天堂国产精品| 欧美视频久久| 欧美牲交a欧美牲交| 噜噜噜在线观看免费视频日韩| 国产精品免费成人| 老司机精品视频在线| 青青草原播放器| 成人免费毛片片v| 99re久久精品国产| 欧美国产成人精品| 国产高潮国产高潮久久久91| 一二三区精品视频| 亚洲s码欧洲m码国产av| 欧美日韩在线一区二区| 国产成人精品一区二区无码呦 | 岛国精品一区二区三区| 99久久er热在这里只有精品66| 自拍偷拍中文字幕| 成人欧美一区二区三区| 国产主播在线观看| 色婷婷综合激情| 99国产精品欲| 精品一区电影国产| 久久bbxx| 91超碰caoporn97人人| 成人免费网站www网站高清| 成人福利视频在线观看| 久久中文资源| 一区二区三区四区欧美日韩| 激情视频一区| 欧美三级理论片| 成人国产精品免费观看动漫| 熟女少妇内射日韩亚洲| 一区二区三区四区不卡在线| 天堂中文在线网| 欧美肥胖老妇做爰| 人妻一区二区三区免费| 综合网中文字幕| 久久一卡二卡| 91精品久久久久久久久久久久久 | 亚洲精品tv久久久久久久久| 欧美日本中文| youjizzxxxx18| 成人激情校园春色| 欧美特黄一级片| 日本高清免费不卡视频| 日韩在线视频免费| 欧美插天视频在线播放| 日韩在线观看不卡| 精品在线视频一区二区| 欧美在线精品一区| 欧美三级理论片| 91在线观看高清| 欧美成人黄色网| 欧美精品一级二级| 国产美女视频一区二区三区| 韩国福利视频一区| 精品91福利视频| 一区二区三区视频| 日本v片在线高清不卡在线观看| 少妇被狂c下部羞羞漫画| 日韩美女啊v在线免费观看| 免费黄色小视频在线观看| 亚洲国产欧美一区二区丝袜黑人 | 亚洲黄色在线视频| 在线播放成人av| 国产亚洲福利一区| 午夜久久中文| 国产精品日韩高清| 欧美日韩国产免费观看| 午夜免费看毛片| 国产精品三级av在线播放| 一级特黄免费视频| 夜夜躁日日躁狠狠久久88av | 国产女人18毛片水18精品| 国产精品一区二区三区av麻| 欧美爱爱视频免费看| 成人aa视频在线观看| 国产性生活网站| 精品久久久久久最新网址| 黄色片网站在线| 亚洲精品免费一区二区三区| 天天射—综合中文网| www.com黄色片| 国产精品美女视频| 中文字字幕在线中文乱码| 这里只有视频精品| 国产精品原创视频| 一区二区三区四区五区精品| 蜜臀av一级做a爰片久久| 国产一区二区三区视频播放| 欧美日韩一区二区三区四区| 77导航福利在线| 成人黄色午夜影院| 欧美精品首页| 日本免费福利视频| 日韩欧美中文免费| 国产小视频福利在线| 国产精品在线看| 91精品91| 亚洲美女高潮久久久| 婷婷夜色潮精品综合在线| 无码国产精品96久久久久| 日韩av片电影专区| 精品久久91| 午夜国产福利在线观看| 亚洲一区二区三区四区不卡| 污视频网站在线播放| 日本久久中文字幕| 人人狠狠综合久久亚洲婷婷| 久久综合在线观看| 亚洲一区二区四区蜜桃| 日韩大胆人体| 国产欧美一区二区三区久久| 综合日韩在线| 一级性生活毛片| 欧美日韩精品一二三区| 香蕉成人app免费看片| 精品一区久久久| 精品中文字幕一区二区| 精品一区二区三区四| 亚洲日本成人女熟在线观看| 伊人国产精品| 欧美极品欧美精品欧美| 国产精品美女久久久久久久久久久| 国产成人精品亚洲精品色欲| 5566成人精品视频免费| 天堂美国久久| 中文字幕三级电影| 欧美日韩免费不卡视频一区二区三区 | 看全色黄大色大片免费久久久| 久久精品影视大全| 亚洲高清久久久| √天堂资源地址在线官网| 国产精品乱码一区二区三区| 日本 国产 欧美色综合| 日本一区二区不卡在线| 在线播放日韩精品| 国产精品天天看天天狠| 国产精欧美一区二区三区白种人| 精品久久香蕉国产线看观看亚洲| 女女色综合影院|