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

DDPG算法輕松解決AI醫(yī)療機(jī)器人技術(shù)難題:連續(xù)動作控制

譯文 精選
人工智能
本文旨在探索DDPG算法如何解決連續(xù)動作控制難題,從而進(jìn)一步提升生物工程領(lǐng)域AI驅(qū)動的醫(yī)療機(jī)器人的強(qiáng)大功能。

譯者 | 朱先忠

審校 | 重樓

引言

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

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

  • 釋放

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

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

  • 旋轉(zhuǎn)手腕15°以調(diào)整切口角度

該怎么辦呢?

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

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

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

DDPG算法架構(gòu)

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

但是,DPG算法面臨兩個主要挑戰(zhàn):

  • 它是一種確定性算法,限制了對動作空間的探索。
  • 由于學(xué)習(xí)過程不穩(wěn)定,它無法有效地使用神經(jīng)網(wǎng)絡(luò)。

DDPG算法通過Ornstein-Uhlenbeck過程引入探索噪聲,并使用批量歸一化和DQN技術(shù)(如重放緩沖區(qū)和目標(biāo)網(wǎng)絡(luò))穩(wěn)定訓(xùn)練,從而改進(jìn)了DPG算法。

借助這些增強(qiáng)功能,DDPG算法非常適合在連續(xù)動作空間中訓(xùn)練AI代理,例如在生物工程應(yīng)用中控制機(jī)器人系統(tǒng)。

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

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

  • 演員(策略網(wǎng)絡(luò)):根據(jù)代理所處的狀態(tài)告訴代理要采取哪種操作。網(wǎng)絡(luò)的參數(shù)(即權(quán)重)用θμ表示。

【提示】將演員網(wǎng)絡(luò)視為決策者:它將當(dāng)前狀態(tài)映射到單個動作。

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

提示!將CriticNetwork視為評估者,它為每個動作分配一個質(zhì)量分?jǐn)?shù),并幫助改進(jìn)演員的策略,以確保它確實在每個給定狀態(tài)下生成最佳動作。

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

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

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

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

2. 通過最小化下面的損失函數(shù)來改進(jìn)其自己的網(wǎng)絡(luò)(評論家Q值網(wǎng)絡(luò)更新)。

其中,N是在小批量中采樣的經(jīng)驗數(shù),y_i是按如下方式計算的目標(biāo)Q值。

重放緩沖區(qū)

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

問題!重放緩沖區(qū)實際上如何減少不穩(wěn)定性?

通過隨機(jī)抽取經(jīng)驗,重放緩沖區(qū)打破了連續(xù)樣本之間的相關(guān)性,減少了偏差并帶來了更穩(wěn)定的訓(xùn)練。

目標(biāo)網(wǎng)絡(luò)

目標(biāo)網(wǎng)絡(luò)是演員和評論家的緩慢更新副本。它們提供穩(wěn)定的Q值目標(biāo),防止快速變化并確保平穩(wěn)、一致的更新。

【問題】目標(biāo)網(wǎng)絡(luò)實際上如何減少不穩(wěn)定性?

如果沒有評論家目標(biāo)網(wǎng)絡(luò),則目標(biāo)Q值直接從評論家Q值網(wǎng)絡(luò)計算,該網(wǎng)絡(luò)會不斷更新。這會導(dǎo)致目標(biāo)Q值在每一步都發(fā)生變化,從而產(chǎn)生“移動目標(biāo)”問題。因此,評論家最終會追逐不斷變化的目標(biāo),導(dǎo)致訓(xùn)練不穩(wěn)定。

此外,由于演員依賴于評論家的反饋,因此一個網(wǎng)絡(luò)中的錯誤會放大另一個網(wǎng)絡(luò)中的錯誤,從而形成相互依賴的不穩(wěn)定循環(huán)。

通過引入使用軟更新規(guī)則逐步更新的目標(biāo)網(wǎng)絡(luò),我們確保目標(biāo)Q值保持更一致,從而減少突然變化并提高學(xué)習(xí)穩(wěn)定性。

批量歸一化

批量歸一化將輸入歸一化到神經(jīng)網(wǎng)絡(luò)的每一層,確保平均值為零且方差為1個單位。

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

從重放緩沖區(qū)中提取的樣本可能具有與實時數(shù)據(jù)不同的分布,從而導(dǎo)致網(wǎng)絡(luò)更新期間不穩(wěn)定。

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

探索噪聲

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

在DDPG論文中,作者使用Ornstein-Uhlenbeck過程生成時間相關(guān)噪聲,以模擬現(xiàn)實世界的系統(tǒng)動態(tài)。

DDPG算法偽代碼:分步分解

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

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

        :參數(shù)state_dim: 狀態(tài)空間的維度
        :參數(shù)action_dim: 動作空間的維度
        :參數(shù)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):
        """
        通過網(wǎng)絡(luò)正向傳播。

        :參數(shù)state: 輸入狀態(tài)
        :返回值: 動作
        """

        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算法的評論家網(wǎng)絡(luò)。
    """
    def __init__(self, state_dim, action_dim,use_batch_norm):
        """
        初始化評論家的值網(wǎng)絡(luò)。

        :參數(shù)state_dim: 狀態(tài)空間的維度
        :參數(shù)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):
        """
        通過網(wǎng)絡(luò)的正向傳播。

        :參數(shù)state:輸入狀態(tài)
        :參數(shù)action: 輸入動作
        :返回值: “狀態(tài)-動作”對的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)
  • 定義重放緩沖區(qū)

實現(xiàn)ReplayBuffer類來存儲和采樣上一節(jié)中討論的轉(zhuǎn)換元組(s,a,r,s’),以實現(xiàn)小批量離策略學(xué)習(xí)。

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類來生成探索噪聲,幫助代理更有效地探索動作空間。

"""
節(jié)選自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類,它負(fù)責(zé)封裝代理的行為:

初始化:創(chuàng)建演員和評論家網(wǎng)絡(luò),以及它們的目標(biāo)對應(yīng)方和重放緩沖區(qū)。

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

        :參數(shù)state_dim: 狀態(tài)空間的維度
        :參數(shù)action_dim: 動作空間的維度
        :參數(shù)max_action: 動作的最大值
        """
        # [第0步]
        #初始化演員的策略網(wǎng)絡(luò)
        self.actor = Actor(state_dim, action_dim, max_action,use_batch_norm)
        # 使用與演員的策略網(wǎng)絡(luò)相同的權(quán)重初始化演員目標(biāo)網(wǎng)絡(luò)
        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)

        #初始化評論家的值網(wǎng)絡(luò)
        self.critic = Critic(state_dim, action_dim,use_batch_norm)
        #使用與評論家的值網(wǎng)絡(luò)相同的權(quán)重初始化評論家的目標(biāo)網(wǎng)絡(luò)
        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)

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

動作選擇:select_action方法根據(jù)當(dāng)前策略選擇動作。

def select_action(self, state):
        """
        根據(jù)當(dāng)前狀態(tài)選擇一個動作。

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

訓(xùn)練:訓(xùn)練方法定義了如何使用重放緩沖區(qū)中的經(jīng)驗來更新網(wǎng)絡(luò)。

注意:由于本文介紹了使用目標(biāo)網(wǎng)絡(luò)和批量歸一化來提高穩(wěn)定性,因此我設(shè)計了訓(xùn)練方法,允許我們打開或關(guān)閉這些方法。這讓我們可以比較代理在使用和不使用它們的情況下的性能。請參閱下面的代碼以了解詳細(xì)的實現(xiàn)。

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

        :參數(shù)use_target_network: 是否使用目標(biāo)網(wǎng)絡(luò)
        :參數(shù)use_batch_norm: 是否使用批量歸一化
        """
        if len(self.replay_buffer) < BATCH_SIZE:
            return

        # [第4步]. 從重放緩沖區(qū)中抽取一批樣本
        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))

        #評論家網(wǎng)絡(luò)更新#
        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步]. 計算目標(biāo)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步]. 使用梯度下降來更新評論家網(wǎng)絡(luò)的權(quán)重
        #以最小化損失函數(shù)
        self.critic_optimizer.zero_grad()
        critic_loss.backward()
        self.critic_optimizer.step()

        #更新演員網(wǎng)絡(luò)#
        actor_loss = -self.critic(state, self.actor(state)).mean()

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

        # [第8步]. 更新目標(biāo)網(wǎng)絡(luò)
        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)
  • 訓(xùn)練DDPG代理

將所有定義的類和方法整合在一起,我們就可以訓(xùn)練DDPG代理。我的train_dppg函數(shù)遵循偽代碼和DDPG模型圖結(jié)構(gòu)。

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

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

    :參數(shù)use_target_network: 是否使用目標(biāo)網(wǎng)絡(luò)
    :參數(shù)use_batch_norm: 是否使用批量歸一化
    :參數(shù)num_episodes: 需要訓(xùn)練的回合數(shù)
    :返回值: 回合獎勵列表
    """
    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

性能和結(jié)果:DDPG算法有效性評估

至此,我們已經(jīng)在MountainCarContinuous-v0環(huán)境中測試了DDPG算法在連續(xù)動作空間中的有效性。在該環(huán)境中,代理學(xué)會了如何獲得動力以將汽車開上陡峭的山坡。結(jié)果表明,與其他配置相比,使用目標(biāo)網(wǎng)絡(luò)和批量歸一化可以實現(xiàn)更快的收斂、更高的獎勵和更穩(wěn)定的學(xué)習(xí)。

作者本人生成的圖表

作者本人生成的GIF動畫

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

生物工程領(lǐng)域的DDPG算法:高精度和適應(yīng)性

通過本文的介紹,我們已經(jīng)看到DDPG是一種強(qiáng)大的算法,可用于在具有連續(xù)動作空間的環(huán)境中訓(xùn)練代理。通過結(jié)合DPG算法和DQN算法的技術(shù),DDPG算法可以提高探索、穩(wěn)定性和性能——這正是機(jī)器人手術(shù)和生物工程應(yīng)用的關(guān)鍵因素。

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

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

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

參考文獻(xiàn)

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

譯者介紹

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

原文標(biāo)題Understanding DDPG: The Algorithm That Solves Continuous Action Control Challenges,作者:Sirine Bhouri

責(zé)任編輯:姜華 來源: 51CTO內(nèi)容精選
相關(guān)推薦

2020-10-29 17:37:14

人工智能

2021-07-16 23:18:14

機(jī)器人人工智能垃圾分類

2021-07-08 16:04:40

人工智能AI機(jī)器人

2022-07-28 11:26:41

人工智能機(jī)器人

2022-07-12 09:00:00

深度學(xué)習(xí)人工智能機(jī)器人

2021-05-21 11:11:40

機(jī)器人醫(yī)療技術(shù)

2017-04-02 09:30:15

機(jī)器人駕校機(jī)器人教學(xué)

2021-04-06 11:33:08

機(jī)器人醫(yī)療保健人工智能

2021-10-31 15:51:30

機(jī)器人人工智能監(jiān)控

2025-02-08 12:45:08

2016-06-02 11:45:34

2024-11-25 19:04:21

2021-08-17 16:06:57

機(jī)器人人工智能AI

2017-08-21 13:31:44

AI聊天機(jī)器人facebook

2023-02-28 07:59:19

OpenAI聊天機(jī)器人

2024-01-05 19:44:48

谷歌機(jī)器人憲法AI

2017-04-17 14:16:02

2020-10-15 15:42:00

人工智能

2021-05-13 06:21:21

人工智能AI機(jī)器人

2021-08-05 06:54:04

回溯算法機(jī)器人
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲福利视频久久| 日韩毛片在线免费观看| 2018国产精品视频| 欧美福利第一页| 国产精品一区二区三区www| 亚洲精品日韩综合观看成人91| 国产精品一区二区免费看| 免费av中文字幕| 最新欧美人z0oozo0| 亚洲精品mp4| 污视频网址在线观看| 2019中文字幕在线电影免费| 欧美国产乱子伦| 影音先锋久久久| 午夜精品视频在线观看| 欧美一区少妇| 亚洲乱码国产乱码精品精软件| 久久人人精品| 久久久亚洲成人| 国产精品免费在线视频| 久久99国产精品视频| 欧美不卡视频一区| 超碰人人草人人| 小视频免费在线观看| 一区二区国产视频| 一区二区不卡在线| 国产在线观看网站| 成人18视频日本| 91传媒免费看| 又污又黄的网站| 国产日韩欧美三区| 国内免费精品永久在线视频| 91嫩草丨国产丨精品| 国产综合久久久| 亚洲精品suv精品一区二区| 初高中福利视频网站| 日日夜夜精品| 欧美系列日韩一区| 欧美激情国产精品日韩| 天堂久久久久久| 午夜黄色小视频| 国产成a人亚洲精| 91欧美日韩一区| 这里只有精品6| 视频一区二区不卡| 欧洲中文字幕国产精品| 日韩特黄一级片| 亚洲天堂男人| 久久久伊人日本| 久草视频精品在线| 激情视频一区| 国模精品视频一区二区三区| 久久久久久免费观看| 欧美一区亚洲| 久久99视频精品| 欧美精品乱码视频一二专区| 综合久久一区| 欧美激情视频给我| 天天插天天操天天干| 18成人免费观看视频| 久久久久久av| 国产精品99re| 国产一区91| 日韩免费黄色av| 日本黄色中文字幕| 麻豆一区二区99久久久久| 日韩理论片网站| 久久久亚洲影院| 久久久久久久黄色片| 亚洲经典视频在线观看| 9.1国产丝袜在线观看| 国产精品黄色大片| 天堂蜜桃一区二区三区| 国产精品麻豆va在线播放| 中文字幕在线播放av| 精品一二三四在线| yellow视频在线观看一区二区| 国产刺激高潮av| 91麻豆国产香蕉久久精品| 日本不卡一区| 韩国中文字幕在线| 亚洲福利一区二区| 日本成人在线免费视频| 亚洲一区二区av| 精品电影一区二区| 日韩中文字幕有码| 中文字幕一区二区三区乱码图片 | 91精品1区2区| 婷婷激情5月天| 国产成人福利av| 国产亚洲精品久久久久动| 欧美性x x x| 夜久久久久久| 国产精品亚洲美女av网站| 国产男男gay体育生白袜| 99精品视频在线播放观看| 精品一区二区三区免费播放| 欧美尤物巨大精品爽| 中文字幕1区2区3区| 国产福利一区二区三区视频 | 国产高清一区二区| 97香蕉超级碰碰久久免费的优势| 国产99免费视频| 国产成人av在线影院| 日本婷婷久久久久久久久一区二区| 久久综合之合合综合久久| 欧美视频二区36p| 肉色超薄丝袜脚交| 欧美三级三级| 久久免费视频在线观看| 亚洲天堂免费av| 成年人国产精品| 免费看av软件| 日日av拍夜夜添久久免费| 日韩欧美中文一区| 99久久久无码国产精品不卡| 新狼窝色av性久久久久久| 91中文在线观看| yjizz视频网站在线播放| 亚洲国产美国国产综合一区二区| 国产原创精品在线| 伊人久久大香线蕉av不卡| 欧美精品videossex性护士| 一区精品在线观看| 久久久久久久av麻豆果冻| 日韩美女爱爱视频| 欧美日韩黄色| 久久人人爽亚洲精品天堂| 久久久久久无码精品大片| 91丨porny丨户外露出| www.一区二区.com| 精品视频在线观看免费观看| 中文字幕亚洲专区| 免费在线不卡av| 久久久不卡网国产精品二区 | 日本成人中文字幕在线视频| 久久久7777| 9999精品成人免费毛片在线看| 欧美一区二区三区四区五区| 日本免费网站视频| 精品一区视频| 麻豆精品一二三| 风间由美久久久| 亚洲91av| 欧美成人a视频| 精品人妻在线播放| 国产·精品毛片| 毛片av在线播放| 亚洲天堂中文字幕在线观看| 九九热视频这里只有精品| 99久久精品国产一区二区成人| 国产精品成人免费在线| 色啦啦av综合| 91精品福利| 亚洲综合色激情五月| 18+视频在线观看| 欧美va天堂va视频va在线| 久久黄色免费视频| 99re这里只有精品6| 日本中文字幕网址| 在线亚洲a色| 国产精品色悠悠| 国产不卡在线| 精品噜噜噜噜久久久久久久久试看 | www.欧美国产| 亚洲国产日韩av| 国产肉体xxxx裸体784大胆| 天堂久久久久va久久久久| 水蜜桃亚洲精品| 高清久久精品| 久久久噜久噜久久综合| 日本不卡视频一区二区| 欧美日韩日本视频| h色网站在线观看| 国产麻豆视频精品| 99热自拍偷拍| 欧美成人自拍| 国产精品一区二区欧美黑人喷潮水 | 成人欧美一区二区三区1314| 国产女主播在线播放| 亚洲影音先锋| 一区二区三区四区欧美| 亚洲国产高清在线观看| 91豆花精品一区| 中文字幕日本在线| 亚洲精品一区二区三区精华液| 最新中文字幕一区| 在线天堂新版最新版在线8| 久久久精品国产99久久精品芒果| 视色视频在线观看| 韩国欧美一区| 亚州欧美一区三区三区在线 | 极品久久久久久| a级精品国产片在线观看| 亚洲免费一级视频| 悠悠资源网久久精品| 手机成人在线| 欧美黄色录像| 成人性生交大片免费看视频直播| 麻豆免费在线| 欧美成人激情图片网| 黄色片视频在线观看| 欧美成人性战久久| 亚洲一区二区三区网站| 五月天激情小说综合| 欧美一级特黄高清视频| 久久久99精品免费观看不卡| 无码国产精品久久一区免费| 日韩av不卡一区二区| 又大又硬又爽免费视频| 色综合五月天| 欧美理论一区二区| 999在线精品| 成人伊人精品色xxxx视频| 日韩电影免费观| 欧美精品xxx| 成人毛片av在线| 国产亚洲一区精品| 欧美zzoo| 亚洲精品电影网在线观看| 国产普通话bbwbbwbbw| 欧美视频精品在线| 久久久久久无码精品大片| 午夜精品成人在线视频| 一区二区视频免费看| 国产精品伦理一区二区| 精品无人区无码乱码毛片国产| 成人av中文字幕| 日本wwwxx| 国产一区二区三区av电影| 三级在线视频观看| 久久久久久自在自线| 国产青青在线视频| 亚洲一级网站| 欧美国产日韩激情| 在线不卡亚洲| 阿v天堂2018| 激情综合亚洲| 人体内射精一区二区三区| 亚洲视频一二| 国产情侣第一页| 红桃视频国产一区| 日本三级中文字幕在线观看| 天天做天天爱天天综合网| 亚洲一区二区三区精品动漫| 日韩精品永久网址| 亚洲精品中字| 久久视频在线| 精品一区二区成人免费视频 | 久久久久久香蕉| 三级亚洲高清视频| 国产天堂在线播放| 奇米精品一区二区三区在线观看一 | 成人看av片| 欧美福利视频在线观看| 欧美黑人猛交的在线视频| 欧美激情精品久久久久久变态| 欧美大胆的人体xxxx| 国内揄拍国内精品少妇国语| www.超碰在线| 日韩av片永久免费网站| www成人在线视频| 国产精品综合网站| 日韩免费高清视频网站| 国产精品一区视频网站| 要久久爱电视剧全集完整观看| 日本精品一区二区| 91久久电影| 隔壁人妻偷人bd中字| 中文亚洲字幕| 在线观看免费成人av| 久久69国产一区二区蜜臀| 韩国三级与黑人| 99精品视频在线观看免费| 亚洲第一视频区| 亚洲欧美日韩系列| 91av在线免费视频| 精品污污网站免费看| 国产偷拍一区二区| 日韩av中文字幕在线免费观看| 国产福利在线| 欧美情侣性视频| 香蕉视频亚洲一级| 亚洲直播在线一区| 欧美**字幕| 国产一二三四五| 亚洲欧美日韩国产综合精品二区 | 国产精品亚洲人在线观看| 国产美女视频免费观看下载软件| 欧美激情资源网| 久久久久无码精品国产| 在线免费观看成人短视频| 99久久亚洲精品日本无码| 日韩高清免费在线| 黄色网页在线免费看| 91av在线国产| 久久免费福利| 日本免费高清一区| 国内自拍视频一区二区三区| 成人黄色一区二区| 成人免费av资源| 五月天婷婷丁香网| 精品成人av一区| av中文字幕第一页| 国产亚洲精品成人av久久ww| 女子免费在线观看视频www| 国产精品流白浆视频| 开心激情综合| 真人做人试看60分钟免费| 日本一不卡视频| 国产麻豆天美果冻无码视频| 亚洲欧美一区二区久久| 久久久国产免费| 精品视频久久久久久久| 中文在线观看免费| 国产一区二中文字幕在线看| 国产麻豆精品久久| heyzo国产| 成年人网站91| 久久精品第一页| 日韩视频在线一区二区| 91社区在线观看播放| 欧美与黑人午夜性猛交久久久| 亚洲视频一起| 4444在线观看| 国产一本一道久久香蕉| 手机av在线不卡| 91久久香蕉国产日韩欧美9色| 午夜视频在线播放| 97在线观看视频| 国产亚洲精品美女久久| 成人毛片100部免费看| 激情综合色综合久久综合| 久久久久亚洲AV成人无在| 色噜噜狠狠成人中文综合| 天天躁日日躁狠狠躁喷水| 国内偷自视频区视频综合 | 亚洲国产精品一区二区久| 日韩少妇视频| av一本久道久久波多野结衣| 亚洲成人99| 国产成人强伦免费视频网站| 亚洲欧洲美洲综合色网| 91欧美日韩麻豆精品| 爽爽爽爽爽爽爽成人免费观看| 精品欧美日韩精品| 亚洲人体一区| 国产一区二区免费看| 91视频青青草| 日韩欧美综合在线| 91www在线| 欧美精品七区| 日韩国产欧美在线视频| 欧美一区二区三区粗大| 欧美日韩一区二区三区高清| 中文字幕在线免费| 亚洲专区在线视频| 影院欧美亚洲| 欧洲美一区二区三区亚洲| 欧美视频日韩视频在线观看| 又爽又大又黄a级毛片在线视频| 成人激情电影一区二区| 欧美欧美全黄| 黄瓜视频污在线观看| 在线视频一区二区三| 日本不卡在线| 国产不卡一区二区三区在线观看| 1024成人| 日本人亚洲人jjzzjjz| 777奇米成人网| 爱看av在线| 欧美日韩国产精品一卡| 美女视频黄频大全不卡视频在线播放| 日韩福利小视频| 亚洲精品美女久久| 播放一区二区| 麻豆映画在线观看| 91美女在线观看| 夜夜爽8888| 97精品在线视频| 久久人人88| 国产吞精囗交久久久| 欧美人与性动xxxx| 国产高清视频色在线www| 亚洲精品国产系列| 成人永久免费视频| 最近国语视频在线观看免费播放| 欧美成人精品一区二区| 亚洲盗摄视频| 中文字幕av一区二区三区人妻少妇| 五月婷婷综合在线| 欧美性天天影视| 久久精品一二三区| 国产精品小仙女| 中文字幕xxxx| 欧美激情网友自拍| 91亚洲成人| 亚洲熟妇无码av| 日韩欧美国产精品一区| 日韩中文在线播放|