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

基于TensorFlow打造強化學習API:TensorForce是怎樣煉成的?

移動開發(fā) 開發(fā)
TensorForce 是一個構(gòu)建于 TensorFlow 之上的新型強化學習 API。強化學習組件開發(fā)者 reinforce.io 近日發(fā)表了一篇博客文章介紹了 TensorForce 背后的架構(gòu)和思想。

本文將圍繞一個實際的問題進行介紹:應(yīng)用強化學習的社區(qū)可以如何從對腳本和單個案例的收集更進一步,實現(xiàn)一個強化學習 API——一個用于強化學習的 tf-learn 或 skikit-learn?在討論 TensorForce 框架之前,我們將談一談啟發(fā)了這個項目的觀察和思想。如果你只想了解這個 API,你可以跳過這一部分。我們要強調(diào)一下:這篇文章并不包含對深度強化學習本身的介紹,也沒有提出什么新模型或談?wù)撟钚碌淖罴阉惴ǎ虼藢τ诩冄芯空邅碚f,這篇文章可能并不會那么有趣。

開發(fā)動機

假設(shè)你是計算機系統(tǒng)、自然語言處理或其它應(yīng)用領(lǐng)域的研究者,你一定對強化學習有一些基本的了解,并且有興趣將深度強化學習(deep RL)用來控制你的系統(tǒng)的某些方面。

對深度強化學習、DQN、vanilla 策略梯度、A3C 等介紹文章已經(jīng)有很多了,比如 Karpathy 的文章(http://karpathy.github.io/2016/05/31/rl/)對策略梯度方法背后的直觀思想就進行了很好的描述。另外,你也能找到很多可以幫助上手的代碼,比如 OpenAI 上手智能體(https://github.com/openai/baselines)、rllab(https://github.com/openai/rllab)以及 GitHub 上許多特定的算法。

但是,我們發(fā)現(xiàn)在強化學習的研究框架開發(fā)和實際應(yīng)用之間還存在一個巨大的鴻溝。在實際應(yīng)用時,我們可能會面臨如下的問題:

  • 強化學習邏輯與模擬句柄的緊密耦合:模擬環(huán)境 API 是非常方便的,比如,它們讓我們可以創(chuàng)建一個環(huán)境對象然后將其用于一個 for 循環(huán)中,同時還能管理其內(nèi)部的更新邏輯(比如:通過收集輸出特征)。如果我們的目標是評估一個強化學習思想,那么這就是合理的,但將強化學習代碼和模擬環(huán)境分開則要艱難得多。它還涉及到流程控制的問題:當環(huán)境就緒后,強化學習代碼可以調(diào)用它嗎?或者當環(huán)境需要決策時,它會調(diào)用強化學習智能體嗎?對于在許多領(lǐng)域中實現(xiàn)的應(yīng)用強化學習庫,我們往往需要后者。
  • 固定的網(wǎng)絡(luò)架構(gòu):大多數(shù)實現(xiàn)案例都包含了硬編碼的神經(jīng)網(wǎng)絡(luò)架構(gòu)。這通常并不是一個大問題,因為我們可以很直接地按照需求加入或移除不同的網(wǎng)絡(luò)層。盡管如此,如果有一個強化學習庫能夠提供聲明式接口的功能,而無需修改庫代碼,那么情況就會好得多。此外,在有的案例中,修改架構(gòu)(出人意外地)要難得多,比如當需要管理內(nèi)部狀態(tài)的時候(見下文)。
  • 不兼容狀態(tài)/動作接口:很多早期的開源代碼都使用了流行的 OpenAI Gym 環(huán)境,具有平坦的狀態(tài)輸入的簡單接口和單個離散或連續(xù)動作輸出。但 DeepMind Lab 則使用了一種詞典格式,一般具有多個狀態(tài)和動作。而 OpenAI Universe 則使用的是命名關(guān)鍵事件(named key events)。理想情況下,我們想讓強化學習智能體能處理任意數(shù)量的狀態(tài)和動作,并且具有潛在的不同類型和形狀。比如說,TensorForce 的一位作者正在 NLP 中使用強化學習并且想要處理多模態(tài)輸入,其中一個狀態(tài)在概念上包含兩個輸入——一張圖像和一個對應(yīng)的描述。
  • 不透明的執(zhí)行設(shè)置和性能問題:寫 TensorFlow 代碼的時候,我們很自然地會優(yōu)先關(guān)注邏輯。這會帶來大量重復/不必要的運算或?qū)崿F(xiàn)不必要的中間值。此外,分布式/異步/并行強化學習的目標也有點不固定,而分布式 TensorFlow 需要對特定的硬件設(shè)置進行一定程度的人工調(diào)節(jié)。同樣,如果最終有一種執(zhí)行配置只需要聲明可用設(shè)備或機器,然后就能在內(nèi)部處理好其它一切就好了,比如兩臺有不同 IP 的機器可以運行異步 VPG。

明確一下,這些問題并不是要批評研究者寫的代碼,因為這些代碼本來就沒打算被用作 API 或用于其它應(yīng)用。在這里我們介紹的是想要將強化學習應(yīng)用到不同領(lǐng)域中的研究者的觀點。

TensorForce API

TensorForce 提供了一種聲明式接口,它是可以使用深度強化學習算法的穩(wěn)健實現(xiàn)。在想要使用深度強化學習的應(yīng)用中,它可以作為一個庫使用,讓用戶無需擔心所有底層的設(shè)計就能實驗不同的配置和網(wǎng)絡(luò)架構(gòu)。我們完全了解當前的深度強化學習方法往往比較脆弱,而且需要大量的微調(diào),但這并不意味著我們還不能為強化學習解決方案構(gòu)建通用的軟件基礎(chǔ)設(shè)施。

TensorForce 并不是原始實現(xiàn)結(jié)果的集合,因為這不是研究模擬,要將原始實現(xiàn)用在實際環(huán)境的應(yīng)用中還需要大量的工作。任何這樣的框架都將不可避免地包含一些結(jié)構(gòu)決策,這會使得非標準的事情變得更加惱人(抽象泄漏(leaky abstractions))。這就是為什么核心強化學習研究者可能更傾向于從頭打造他們的模型的原因。使用 TensorForce,我們的目標是獲取當前最佳研究的整體方向,包含其中的新興見解和標準。

接下來,我們將深入到 TensorForce API 的各個基本方面,并討論我們的設(shè)計選擇。

創(chuàng)建和配置智能體

我們首先開始用 TensorForce API 創(chuàng)建一個強化學習智能體:

from tensorforce import Configuration
from tensorforce.agents import DQNAgent
from tensorforce.core.networks import layered_network_builder

# Define a network builder from an ordered list of layers
layers = [dict(type='dense', size=32),
          dict(type='dense', size=32)]
network = layered_network_builder(layers_config=layers)

# Define a state
states = dict(shape=(10,), type='float')

# Define an action (models internally assert whether
# they support continuous and/or discrete control)
actions = dict(continuous=False, num_actions=5)

# The agent is configured with a single configuration object
agent_config = Configuration(
    batch_size=8,
    learning_rate=0.001,
    memory_capacity=800,
    first_update=80,
    repeat_update=4,
    target_update_frequency=20,
    states=states,
    actions=actions,
    network=network
)
agent = DQNAgent(config=agent_config)

這個示例中的狀態(tài)和動作是更一般的狀態(tài)/動作的短形式(short-form)。比如由一張圖像和一個描述構(gòu)成多模態(tài)輸入按如下方式定義。類似地,也可以定義多輸出動作。注意在整個代碼中,單個狀態(tài)/動作的短形式必須被持續(xù)不斷地用于與智能體的通信。

states = dict(
    image=dict(shape=(64, 64, 3), type='float'),
    caption=dict(shape=(20,), type='int')
)

配置參數(shù)依賴于所用的基本智能體和模型。每個智能體的完整參數(shù)列表可見于這個示例配置:https://github.com/reinforceio/tensorforce/tree/master/examples/configs

TensorForce 目前提供了以下強化學習算法:

  • 隨機智能體基線(RandomAgent)
  • 帶有 generalized advantage estimation 的 vanilla 策略梯度(VPGAgent)
  • 信任區(qū)域策略優(yōu)化(TRPOAgent)
  • 深度 Q 學習/雙深度 Q 學習(DQNAgent)
  • 規(guī)范化的優(yōu)勢函數(shù)(NAFAgent)
  • 對專家演示的深度 Q 學習(DQFDAgent)
  • Asynchronous Advantage Actor-Critic(A3C)(可以隱含地通過 distributed 使用)

最后一項的意思是說并沒有 A3CAgent 這樣的東西,因為 A3C 實際上描述的是一種異步更新的機制,而不是一種特定的智能體。因此,使用分布式 TensorFlow 的異步更新機制是通用 Model 基類的一部分,所有智能體都衍生于此。正如論文《Asynchronous Methods for Deep Reinforcement Learning》中描述的那樣,A3C 是通過為 VPGAgent 設(shè)置 distributed flag 而隱含地實現(xiàn)的。應(yīng)該指出,A3C 并不是對每種模型而言都是最優(yōu)的分布式更新策略(對一些模型甚至完全沒意義),我們將在本文結(jié)尾處討論實現(xiàn)其它方法(比如 PAAC)。重要的一點是要在概念上將智能體和更新語義的問題與執(zhí)行語義區(qū)分開。

我們還想談?wù)勀P停╩odel)和智能體(agent)之間的區(qū)別。Agent 類定義了將強化學習作為 API 使用的接口,可以管理傳入觀察數(shù)據(jù)、預處理、探索等各種工作。其中兩個關(guān)鍵方法是 agent.act(state) 和 agent.observe(reward, terminal)。agent.act(state) 返回一個動作,而 agent.observe(reward, terminal) 會根據(jù)智能體的機制更新模型,比如離策略記憶回放(MemoryAgent)或在策略批處理(BatchAgent)。注意,要讓智能體的內(nèi)在機制正確工作,必須交替調(diào)用這些函數(shù)。Model 類實現(xiàn)了核心強化學習算法,并通過 get_action 和 update 方法提供了必要的接口,智能體可以在相關(guān)點處內(nèi)在地調(diào)用。比如說,DQNAgent 是一個帶有 DQNModel 和額外一行(用于目標網(wǎng)絡(luò)更新)的 MemoryAgent 智能體。

def observe(self, reward, terminal):
    super(DQNAgent, self).observe(reward, terminal)
    if self.timestep >= self.first_update \
            and self.timestep % self.target_update_frequency == 0:
        self.model.update_target()

神經(jīng)網(wǎng)絡(luò)配置

強化學習的一個關(guān)鍵問題是設(shè)計有效的價值函數(shù)。在概念上講,我們將模型看作是對更新機制的描述,這有別于實際更新的東西——在深度強化學習的例子中是指一個(或多個)神經(jīng)網(wǎng)絡(luò)。因此,模型中并沒有硬編碼的網(wǎng)絡(luò),而是根據(jù)配置不同的實例化。

在上面的例子中,我們通過編程創(chuàng)造了一個網(wǎng)絡(luò)配置作為描述每一層的詞典列表。這樣的配置也可以通過 JSON 給出,然后使用一個效用函數(shù)將其變成一個網(wǎng)絡(luò)構(gòu)建器(network constructor)。這里給出了一個 JSON 網(wǎng)絡(luò)規(guī)范的例子:

[
    {
        "type": "conv2d",
        "size": 32,
        "window": 8,
        "stride": 4
    },
    {
        "type": "conv2d",
        "size": 64,
        "window": 4,
        "stride": 2
    },
    {
        "type": "flatten"
    },
    {
        "type": "dense",
        "size": 512
    }
]

和之前一樣,這個配置必須被添加到該智能體的配置(configuration)對象中:

from tensorforce.core.networks import from_json

agent_config = Configuration(
    ...
    network=from_json('configs/network_config.json')
    ...
)

默認的激活層是 relu,但也還有其它激活函數(shù)可用(目前有 elu、selu、softmax、tanh 和 sigmoid)。此外也可以修改層的其它性質(zhì),比如,可以將一個稠密層(dense layer)改成這樣:

[
    {
        "type": "dense",
        "size": 64,
        "bias": false,
        "activation": "selu",
        "l2_regularization": 0.001
    }
]

我們選擇不使用已有的層實現(xiàn)(比如來自 tf.layers),從而能對內(nèi)部運算施加明確的控制,并確保它們能與 TensorForce 的其余部分正確地整合在一起。我們想要避免對動態(tài) wrapper 庫的依賴,因此僅依賴于更低層的 TensorFlow 運算。

我們的 layer 庫目前僅提供了非常少的基本層類型,但未來還會擴展。另外你也可以輕松整合你自己的層,下面給出了一個批規(guī)范化層的例子:

def batch_normalization(x, variance_epsilon=1e-6):
    mean, variance = tf.nn.moments(x, axes=tuple(range(x.shape.ndims - 1)))
    x = tf.nn.batch_normalization(x, mean=mean, variance=variance,
                                  variance_epsilon=variance_epsilon)
    return x
{
    "type": "[YOUR_MODULE].batch_normalization",
    "variance_epsilon": 1e-9
}

到目前為止,我們已經(jīng)給出了 TensorForce 創(chuàng)建分層網(wǎng)絡(luò)的功能,即一個采用單一輸入狀態(tài)張量的網(wǎng)絡(luò),具有一個層的序列,可以得出一個輸出張量。但是在某些案例中,可能需要或更適合偏離這樣的層堆疊結(jié)構(gòu)。最顯著的情況是當要處理多個輸入狀態(tài)時,這是必需的,使用單個處理層序列無法自然地完成這一任務(wù)。

我們目前還沒有為自動創(chuàng)建對應(yīng)的網(wǎng)絡(luò)構(gòu)建器提供更高層的配置接口。因此,對于這樣的案例,你必須通過編程來定義其網(wǎng)絡(luò)構(gòu)建器函數(shù),并像之前一樣將其加入到智能體配置中。比如之前的多模態(tài)輸入(image 和 caption)例子,我們可以按以下方式定義一個網(wǎng)絡(luò):

def network_builder(inputs):
    image = inputs['image']  # 64x64x3-dim, float
    caption = inputs['caption']  # 20-dim, int

    with tf.variable_scope('cnn'):
        weights = tf.Variable(tf.random_normal(shape=(3, 3, 3, 16), stddev=0.01))
        image = tf.nn.conv2d(image, filter=weights, strides=(1, 1, 1, 1))
        image = tf.nn.relu(image)
        image = tf.nn.max_pool(image, ksize=(1, 2, 2, 1), strides=(1, 2, 2, 1))

        weights = tf.Variable(tf.random_normal(shape=(3, 3, 16, 32), stddev=0.01))
        image = tf.nn.conv2d(image, filter=weights, strides=(1, 1, 1, 1))
        image = tf.nn.relu(image)
        image = tf.nn.max_pool(image, ksize=(1, 2, 2, 1), strides=(1, 2, 2, 1))

        image = tf.reshape(image, shape=(-1, 16 * 16, 32))
        image = tf.reduce_mean(image, axis=1)

    with tf.variable_scope('lstm'):
        weights = tf.Variable(tf.random_normal(shape=(30, 32), stddev=0.01))
        caption = tf.nn.embedding_lookup(params=weights, ids=caption)
        lstm = tf.contrib.rnn.LSTMCell(num_units=64)
        caption, _ = tf.nn.dynamic_rnn(cell=lstm, inputs=caption, dtype=tf.float32)
        caption = tf.reduce_mean(caption, axis=1)

    return tf.multiply(image, caption)


agent_config = Configuration(
    ...
    network=network_builder
    ...
)

內(nèi)部狀態(tài)和 Episode 管理

和經(jīng)典的監(jiān)督學習設(shè)置(其中的實例和神經(jīng)網(wǎng)絡(luò)調(diào)用被認為是獨立的)不同,強化學習一個 episode 中的時間步取決于之前的動作,并且還會影響后續(xù)的狀態(tài)。因此除了其每個時間步的狀態(tài)輸入和動作輸出,可以想象神經(jīng)網(wǎng)絡(luò)可能有內(nèi)部狀態(tài)在 episode 內(nèi)的對應(yīng)于每個時間步的輸入/輸出。下圖展示了這種網(wǎng)絡(luò)隨時間的工作方式:

工作方式

這些內(nèi)部狀態(tài)的管理(即在時間步之間前向傳播它們和在開始新 episode 時重置它們)可以完全由 TensorForce 的 agent 和 model 類處理。注意這可以處理所有的相關(guān)用例(在 batch 之內(nèi)一個 episode,在 batch 之內(nèi)多個 episode,在 batch 之內(nèi)沒有終端的 episode)。到目前為止,LSTM 層類型利用了這個功能:

[
    {
        "type": "dense",
        "size": 32
    },
    {
        "type": "lstm"
    }
]

在這個示例架構(gòu)中,稠密層的輸出被送入一個 LSTM cell,然后其得出該時間步的最終輸出。當向前推進該 LSTM 一步時,其內(nèi)部狀態(tài)會獲得更新并給出此處的內(nèi)部狀態(tài)輸出。對于下一個時間步,網(wǎng)絡(luò)會獲得新狀態(tài)輸入及這個內(nèi)部狀態(tài),然后將該 LSTM 又推進一步并輸出實際輸出和新的內(nèi)部 LSTM 狀態(tài),如此繼續(xù)……

對于帶有內(nèi)部狀態(tài)的層的自定義實現(xiàn),該函數(shù)不僅必須要返回該層的輸出,而且還要返回一個內(nèi)部狀態(tài)輸入占位符的列表、對應(yīng)的內(nèi)部狀態(tài)輸出張量和一個內(nèi)部狀態(tài)初始化張量列表(這些都長度相同,并且按這個順序)。以下代碼片段給出了我們的 LSTM 層實現(xiàn)(一個簡化版本),并說明了帶有內(nèi)部狀態(tài)的自定義層的定義方式:

def lstm(x):
    size = x.get_shape()[1].value
    internal_input = tf.placeholder(dtype=tf.float32, shape=(None, 2, size))
    lstm = tf.contrib.rnn.LSTMCell(num_units=size)
    state = tf.contrib.rnn.LSTMStateTuple(internal_input[:, 0, :],
                                          internal_input[:, 1, :])
    x, state = lstm(inputs=x, state=state)
    internal_output = tf.stack(values=(state.c, state.h), axis=1)
    internal_init = np.zeros(shape=(2, size))
    return x, [internal_input], [internal_output], [internal_init]

預處理狀態(tài)

我們可以定義被應(yīng)用于這些狀態(tài)(如果指定為列表的詞典,則可能是多個狀態(tài))的預處理步驟,比如,為了對視覺輸入進行下采樣。下面的例子來自 Arcade Learning Environment 預處理器,大多數(shù) DQN 實現(xiàn)都這么用:

config = Configuration(
    ...
    preprocessing=[
        dict(
            type='image_resize',
            kwargs=dict(width=84, height=84)
        ),
        dict(
            type='grayscale'
        ),
        dict(
            type='center'
        ),
        dict(
            type='sequence',
            kwargs=dict(
                length=4
            )
        )
    ]
    ...
)

這個 stack 中的每一個預處理器都有一個類型,以及可選的 args 列表和/或 kwargs 詞典。比如 sequence 預處理器會取最近的四個狀態(tài)(即:幀)然后將它們堆疊起來以模擬馬爾可夫?qū)傩浴kS便一提:在使用比如之前提及的 LSTM 層時,這顯然不是必需的,因為 LSTM 層可以通過內(nèi)部狀態(tài)建模和交流時間依賴。

探索

探索可以在 configuration 對象中定義,其可被智能體應(yīng)用到其模型決定所在的動作上(以處理多個動作,同樣,會給出一個規(guī)范詞典)。比如,為了使用 Ornstein-Uhlenbeck 探索以得到連續(xù)的動作輸出,下面的規(guī)范會被添加到配置中。

config = Configuration(
    ...
    exploration=dict(
        type='OrnsteinUhlenbeckProcess',
        kwargs=dict(
            sigma=0.1,
            mu=0,
            theta=0.1
        )
    )
    ...
)

以下幾行代碼添加了一個用于離散動作的 epsilon 探索,它隨時間衰減到最終值:

config = Configuration(
    ...
    exploration=dict(
        type='EpsilonDecay',
        kwargs=dict(
            epsilon=1,
            epsilon_final=0.01,
            epsilon_timesteps=1e6
        )
    )
    ...
)

用 Runner 效用函數(shù)使用智能體

讓我們使用一個智能體,這個代碼是在我們測試環(huán)境上運行的一個智能體:https://github.com/reinforceio/tensorforce/blob/master/tensorforce/environments/minimal_test.py,我們將其用于連續(xù)積分——一個為給定智能體/模型的工作方式驗證行動、觀察和更新機制的最小環(huán)境。注意我們所有的環(huán)境實現(xiàn)(OpenAI Gym、OpenAI Universe、DeepMind Lab)都使用了同一個接口,因此可以很直接地使用另一個環(huán)境運行測試。

Runner 效用函數(shù)可以促進一個智能體在一個環(huán)境上的運行過程。給定任意一個智能體和環(huán)境實例,它可以管理 episode 的數(shù)量,每個 episode 的最大長度、終止條件等。Runner 也可以接受 cluster_spec 參數(shù),如果有這個參數(shù),它可以管理分布式執(zhí)行(TensorFlow supervisors/sessions/等等)。通過可選的 episode_finished 參數(shù),你還可以周期性地報告結(jié)果,還能給出在最大 episode 數(shù)之前停止執(zhí)行的指標。

environment = MinimalTest(continuous=False)

network_config = [
    dict(type='dense', size=32)
]
agent_config = Configuration(
    batch_size=8,
    learning_rate=0.001,
    memory_capacity=800,
    first_update=80,
    repeat_update=4,
    target_update_frequency=20,
    states=environment.states,
    actions=environment.actions,
    network=layered_network_builder(network_config)
)

agent = DQNAgent(config=agent_config)
runner = Runner(agent=agent, environment=environment)

def episode_finished(runner):
    if runner.episode % 100 == 0:
        print(sum(runner.episode_rewards[-100:]) / 100)
    return runner.episode < 100 \
        or not all(reward >= 1.0 for reward in runner.episode_rewards[-100:])

runner.run(episodes=1000, episode_finished=episode_finished)

為了完整,我們明確給出了在一個環(huán)境上運行一個智能體的最小循環(huán):

episode = 0
episode_rewards = list()

while True:
    state = environment.reset()
    agent.reset()

    timestep = 0
    episode_reward = 0
    while True:
        action = agent.act(state=state)
        state, reward, terminal = environment.execute(action=action)
        agent.observe(reward=reward, terminal=terminal)

        timestep += 1
        episode_reward += reward

        if terminal or timestep == max_timesteps:
            break

    episode += 1
    episode_rewards.append(episode_reward)

    if all(reward >= 1.0 for reward in episode_rewards[-100:]) \
            or episode == max_episodes:
        break

正如在引言中說的一樣,在一個給定應(yīng)用場景中使用 runner 類取決于流程控制。如果使用強化學習可以讓我們合理地在 TensorForce 中查詢狀態(tài)信息(比如通過一個隊列或網(wǎng)絡(luò)服務(wù))并返回動作(到另一個隊列或服務(wù)),那么它可被用于實現(xiàn)環(huán)境接口,并因此可以使用(或擴展)runner 效用函數(shù)。

更常見的情況可能是將 TensorForce 用作驅(qū)動控制的外部應(yīng)用庫,因此無法提供一個環(huán)境句柄。對研究者來說,這可能無足輕重,但在計算機系統(tǒng)等領(lǐng)域,這是一個典型的部署問題,這也是大多數(shù)研究腳本只能用于模擬,而無法實際應(yīng)用的根本原因。

另外值得提及的一點是聲明式的中心配置對象使得我們可以直接用超參數(shù)優(yōu)化為強化學習模型的所有組件配置接口,尤其還有網(wǎng)絡(luò)架構(gòu)。

進一步思考

我們希望你能發(fā)現(xiàn) TensorForce 很有用。到目前為止,我們的重點還是讓架構(gòu)先就位,我們認為這能讓我們更持續(xù)一致地實現(xiàn)不同的強化學習概念和新的方法,并且避免探索新領(lǐng)域中的深度強化學習用例的不便。

在這樣一個快速發(fā)展的領(lǐng)域,要決定在實際的庫中包含哪些功能是很困難的。現(xiàn)在的算法和概念是非常多的,而且看起來在 Arcade Learning Environment (ALE) 環(huán)境的一個子集上,每周都有新想法得到更好的結(jié)果。但也有一個問題存在:許多想法都只在易于并行化或有特定 episode 結(jié)構(gòu)的環(huán)境中才有效——對于環(huán)境屬性以及它們與不同方法的關(guān)系,我們還沒有一個準確的概念。但是,我們能看到一些明顯的趨勢:

  • 策略梯度和 Q 學習方法混合以提升樣本效率(PGQ、Q-Prop 等):這是一種合乎邏輯的事情,盡管我們還不清楚哪種混合策略將占上風,但是我們認為這將成為下一個「標準方法」。我們非常有興趣理解這些方法在不同應(yīng)用領(lǐng)域(數(shù)據(jù)豐富/數(shù)據(jù)稀疏)的實用性。我們一個非常主觀的看法是大多數(shù)應(yīng)用研究者都傾向于使用 vanilla 策略梯度的變體,因為它們易于理解、實現(xiàn),而且更重要的是比新算法更穩(wěn)健,而新算法可能需要大量的微調(diào)才能處理潛在的數(shù)值不穩(wěn)定性(numerical instabilities)。一種不同的看法是非強化學習研究者可能只是不知道相關(guān)的新方法,或者不愿意費力去實現(xiàn)它們。而這就激勵了 TensorForce 的開發(fā)。最后,值得考慮的是,應(yīng)用領(lǐng)域的更新機制往往沒有建模狀態(tài)、動作和回報以及網(wǎng)絡(luò)架構(gòu)重要。
  • 更好地利用 GPU 和其他可用于并行/一步/分布式方法的設(shè)備(PAAC、GA3C 等):這一領(lǐng)域的方法的一個問題是關(guān)于收集數(shù)據(jù)與更新所用時間的隱含假設(shè)。在非模擬的領(lǐng)域,這些假設(shè)可能并不成立,而理解環(huán)境屬性會如何影響設(shè)備執(zhí)行語義還需要更多的研究。我們?nèi)匀辉谑褂?nbsp;feed_dicts,但也在考慮提升輸入處理的性能。
  • 探索模式(比如,基于計數(shù)的探索、參數(shù)空間噪聲……)
  • 大型離散動作空間、分層模型和子目標(subgoal)的分解。比如 Dulac-Arnold 等人的論文《Deep Reinforcement Learning in Large Discrete Action Spaces》。復雜離散空間(比如許多依賴于狀態(tài)的子選項)在應(yīng)用領(lǐng)域是高度相關(guān)的,但目前還難以通過 API 使用。我們預計未來幾年會有大量成果。
  • 用于狀態(tài)預測的內(nèi)部模塊和基于全新模型的方法:比如論文《The Predictron: End-To-End Learning and Planning》。
  • 貝葉斯深度強化學習和關(guān)于不確定性的推理

總的來說,我們正在跟蹤這些發(fā)展,并且將會將此前錯過的已有技術(shù)(應(yīng)該有很多)納入進來;而一旦我們相信一種新想法有變成穩(wěn)健的標準方法的潛力,我們也會將其納入進來。在這個意義上,我們并沒有與研究框架構(gòu)成明確的競爭,而是更高程度的覆蓋。

本文轉(zhuǎn)自機器之心,原文來自reinforce,作者Michael Schaarschmidt、Alexander Kuhnle、Kai Fricke。

責任編輯:張子龍 來源: 機器之心
相關(guān)推薦

2018-02-26 18:54:37

2010-03-24 15:40:39

網(wǎng)管運維管理摩卡軟件

2023-07-20 15:18:42

2014-06-20 10:34:42

開源

2015-09-06 09:09:13

2015-11-10 09:09:23

代碼程序員成長

2024-03-28 08:13:51

GPTsOpenAI人工智能

2013-08-19 16:17:48

CIO

2011-11-25 09:48:04

天線無線

2012-05-28 16:30:27

Web

2021-02-08 23:52:17

CISO安全主管首席信息安全官

2010-12-28 10:40:50

admin

2012-08-29 09:58:34

JavaScriptJavaScript模

2015-08-27 15:06:42

全能渠道華為

2009-02-23 13:05:32

程序員學習方法

2012-12-03 10:22:24

程序員

2021-06-29 08:45:55

邏輯變量法函數(shù)

2023-05-25 09:00:00

人工智能ChatGPTOpenAI

2011-06-30 16:59:06

程序員

2016-01-06 14:43:21

點贊
收藏

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

女人高潮被爽到呻吟在线观看| 亚洲精品无码久久久| 九九综合在线| 欧美精品丝袜中出| 91麻豆天美传媒在线| 日本人妻丰满熟妇久久久久久| 老鸭窝91久久精品色噜噜导演| 亚洲最新视频在线| 动漫av在线免费观看| 成人一区福利| 亚洲综合一区二区三区| 日韩精品极品视频在线观看免费| 国产男女无套免费网站| 亚洲视频1区| 日韩在线播放av| 91av在线免费| 国产麻豆精品| 在线观看亚洲精品| 男人的天堂视频在线| 国产私拍精品| 粉嫩嫩av羞羞动漫久久久| 国产成人精品久久二区二区91 | 1024精品视频| 黄色网页在线免费看| 99久久久久久99| 91视频九色网站| 国产一卡二卡三卡| 亚洲精品影院在线观看| 欧美成人精品h版在线观看| 中文字幕在线观看免费高清| 国产精品久久久网站| 欧美猛男男办公室激情| 欧美 日本 亚洲| www红色一片_亚洲成a人片在线观看_| 26uuu亚洲综合色欧美 | 97av视频在线观看| 伊人精品影院| 日韩久久一区二区| 亚洲日本精品国产第一区| 四虎在线观看| 94色蜜桃网一区二区三区| 91在线视频精品| 91在线你懂的| 日本最新不卡在线| 日本精品免费一区二区三区| 国产在线观看免费视频今夜| 亚洲人成免费网站| 一区二区在线视频播放| 欧美做受高潮6| 性欧美lx╳lx╳| 国产婷婷色综合av蜜臀av | 91高潮大合集爽到抽搐| 免费在线成人网| 国产久一一精品| www.av88| 久久99精品久久久久久| 国产精品户外野外| 中文字幕资源网| 美女脱光内衣内裤视频久久网站| 日本精品久久久| 日本免费在线观看视频| 日韩精品91亚洲二区在线观看| 国产成人精品电影| 亚洲性生活大片| 国产在线视频一区二区| 大波视频国产精品久久| 免费观看的毛片| 91视频91自| 欧美在线视频二区| 国产黄在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 在线视频欧美精品| 999精彩视频| 色综合久久久| 精品成人a区在线观看| 中文字幕第3页| 一本色道久久综合狠狠躁的番外| 精品在线观看国产| 美国一级黄色录像| 一区二区三区在线| 97精品久久久中文字幕免费| 69视频免费在线观看| 日日夜夜一区二区| 成人中心免费视频| 懂色av一区二区三区四区| 99久久99久久精品国产片果冻| 欧美精品一区二区三区四区五区 | 99精品久久免费看蜜臀剧情介绍| 精品一区二区三区日本| 欧美在线观看在线观看| 国产精品成人免费| 日韩av在线播放不卡| 日韩高清在线| 精品免费国产二区三区 | 自拍偷拍国产精品| 欧美精品一区二区三区三州| 精品成人免费一区二区在线播放| 欧美美女激情18p| 亚洲激情 欧美| 日韩精品中文字幕第1页| 欧美日产国产成人免费图片| 欧美一区免费看| 国产精品羞羞答答xxdd| 久久久一本精品99久久精品66| 99re在线视频| 午夜精品久久久久| 欧美大片久久久| 少妇高潮一区二区三区| 久久天天躁狠狠躁夜夜躁2014| 中文字幕亚洲精品在线| 国产在线视视频有精品| 欧美高清视频一区| 黄色成人在线网| 欧美绝品在线观看成人午夜影视| 超碰97在线资源站| 亚洲澳门在线| 国产精品入口免费视频一| 可以免费观看的毛片| 国产精品少妇自拍| www黄色日本| aaa国产精品视频| 久久久成人av| 伊人免费在线观看| 久久久久久亚洲综合影院红桃| 无码人妻精品一区二区蜜桃百度| 久久av影院| 国产一区二区欧美日韩| 日本视频在线观看免费| 成人一级片网址| 91精品一区二区三区四区| 播放一区二区| 一本一道久久a久久精品逆3p | 夜夜嗨网站十八久久| 亚洲在线免费观看| 日本a级在线| 色就色 综合激情| 丰满少妇一区二区| 在线亚洲国产精品网站| 国产精品一级久久久| 怡红院在线播放| 日韩三级视频在线看| 久久嫩草捆绑紧缚| 毛片一区二区三区| 亚洲精品中字| av成人免费看| 日韩在线一区二区三区免费视频| 亚洲综合成人av| 日本一区二区三区在线观看| 亚洲精品无码久久久久久| 欧美调教网站| 91av在线影院| 青青草在线免费观看| 精品久久久久国产| 偷拍女澡堂一区二区三区| 性色一区二区三区| 日韩亚洲视频| 超碰这里只有精品| 久久精品国产精品亚洲| 国产特级aaaaaa大片| 樱花草国产18久久久久| 国产成人精品综合久久久久99| 欧美日本一区二区高清播放视频| 波多野结衣成人在线| 欧美人与禽猛交乱配| 日韩av在线免费观看一区| 色av性av丰满av| 中文在线一区二区| 亚洲自拍第三页| 欧美视频在线观看| 精品日产一区2区三区黄免费| 亚洲性色av| 中文字幕在线观看亚洲| av官网在线观看| 亚洲成人手机在线| 99久久精品免费视频| 激情久久久久久久久久久久久久久久| 性做爰过程免费播放| 女同久久另类99精品国产| 日韩av免费在线播放| av基地在线| 精品精品国产高清a毛片牛牛| 日操夜操天天操| 国产欧美视频一区二区| 在线a免费观看| 国产欧美综合一区二区三区| 日韩片电影在线免费观看| 99久久这里有精品| 韩国国内大量揄拍精品视频| 成人在线免费看| 欧美一级午夜免费电影| 黄色片网站在线免费观看| **网站欧美大片在线观看| 精品国产一区在线| 久久99国产精品麻豆| 男人日女人视频网站| 日韩一区三区| 国产一区在线免费| 成人豆花视频| 亲子乱一区二区三区电影| 国产激情小视频在线| 精品爽片免费看久久| 国产xxxxxx| 色综合久久天天| 麻豆chinese极品少妇| 国产拍欧美日韩视频二区| 特级特黄刘亦菲aaa级| 蜜臀久久久99精品久久久久久| 国产真实老熟女无套内射| 青青草成人影院| 久久久神马电影| av综合网页| 成人免费黄色网| 在线国产成人影院| 午夜精品视频网站| 国产在线观看av| 一色桃子一区二区| 深夜福利视频网站| 91精品国产91久久久久久一区二区 | 欧美国产一级| 日本黑人久久| 美国成人xxx| 国产精品区一区二区三在线播放| 欧美日韩免费电影| 国产精品va在线| 日韩欧美精品一区二区三区| 九九热精品视频国产| 老司机福利在线视频| 在线观看国产精品淫| 国产在线电影| 亚洲精品在线视频| 午夜av免费观看| 精品国产91亚洲一区二区三区婷婷| 国产男男gay体育生网站| 欧美视频一区二区三区在线观看| 成人毛片在线播放| 精品久久久国产精品999| 男人天堂中文字幕| 一区二区三区**美女毛片| 免费成年人视频在线观看| 国产精品久久久久四虎| 国产馆在线观看| 中文字幕av一区 二区| 任你操精品视频| 亚洲欧洲国产日韩| 精品国产精品国产精品| 中文字幕制服丝袜成人av| 亚洲精品国产精品国自产网站| 国产性天天综合网| 日本猛少妇色xxxxx免费网站| 久久精品视频在线免费观看| 在线国产视频一区| 中文文精品字幕一区二区| 成年人在线免费看片| 国产精品理伦片| 日本aⅴ在线观看| 亚洲综合久久久| 国产污片在线观看| 欧美日韩国产影院| 四虎成人在线观看| 欧美主播一区二区三区| 一二三四区在线| 欧美精品日韩一区| 成人av无码一区二区三区| 亚洲高清久久网| 蝌蚪视频在线播放| 少妇久久久久久| 中文字幕在线观看播放| 78色国产精品| 亚洲www免费| 91九色单男在线观看| 国产精品白浆| 日韩在线第一区| 91综合在线| 青青草视频在线免费播放| 亚洲欧美日韩国产一区| 天天干天天综合| 国产成人在线观看| 免费黄色在线视频| 亚洲欧美日韩精品久久久久| 精品无码久久久久久久| 欧美午夜女人视频在线| 一级做a爰片久久毛片16| 日韩女优av电影在线观看| 日本免费一区二区三区最新| 中文字幕综合一区| av手机免费在线观看| 国产精品高清在线观看| 国产精品一区二区三区www| 精品国产乱码久久久久久88av | 亚洲欧美在线看| 黄色成人影院| 日韩美女激情视频| 精品一区二区三区视频在线播放 | 亚洲成av人片在线观看无码| 国产精品免费无遮挡无码永久视频| 欧美一卡二卡三卡| 国产精品秘入口| 欧美激情在线观看| 成人全视频在线观看在线播放高清| 91精品视频观看| 亚洲欧美tv| 日本五级黄色片| 久久精品国产精品亚洲精品| 人妻无码中文久久久久专区| 亚洲视频在线观看三级| 国产精品免费精品一区| 精品国产一区二区三区av性色| 日本在线免费网| 欧美中文字幕视频| 伊人久久大香线蕉av超碰| 夜夜春亚洲嫩草影视日日摸夜夜添夜 | www.av精品| 天天色影综合网| 日本乱人伦一区| 天堂av2024| 欧美极品美女电影一区| 欧美黄色成人| 日韩精品欧美专区| 亚洲一区亚洲| 日本一级片在线播放| 一区二区三区视频在线看| 一级黄色片网站| 在线观看视频亚洲| 日本少妇一区| 日本高清一区| 日日摸夜夜添夜夜添国产精品| 国产一卡二卡三卡四卡| 亚洲激情中文1区| 国产露脸91国语对白| 日韩网站免费观看| 99久久婷婷国产综合精品首页| 欧美一区二区在线| 久久成人国产| 欧美熟妇一区二区| 欧美视频不卡中文| 五月天婷婷激情网| 午夜精品99久久免费| 粉嫩av一区二区| 日韩精品一区在线视频| 成人在线视频首页| 日产欧产va高清| 亚洲成人a**站| 精精国产xxxx视频在线野外| 狠狠色狠狠色综合人人| 一本色道久久综合亚洲精品高清 | 亚洲成人黄色片| 欧美肥臀大乳一区二区免费视频| 日韩最新av| 岛国大片在线播放| 99久久99久久免费精品蜜臀| 国产精品999在线观看| 日韩精品中文字幕在线播放| 亚洲最大成人| 无码免费一区二区三区免费播放| 免费人成在线不卡| 亚洲一二三在线观看| 91精品国产综合久久国产大片| 91麻豆免费在线视频| 超碰在线97av| 久久成人一区| 99在线视频免费| 欧美一区二区观看视频| 久色国产在线| 免费观看成人在线| 日本欧美大码aⅴ在线播放| 蜜桃视频最新网址| 日韩美女主播在线视频一区二区三区 | 精品成人自拍视频| 国产福利一区视频| 国产精品久久久久久久蜜臀| 国产精品乱码久久久| 久久久久久久久久久av| 日韩黄色网络| 日韩av在线中文| 亚洲永久精品国产| 亚洲av成人无码网天堂| 国产精品激情自拍| 91av精品| 日韩av无码一区二区三区不卡| 色噜噜狠狠色综合欧洲selulu| 欧美jizz18性欧美| 精品国产综合久久| 蜜臂av日日欢夜夜爽一区| 青青操国产视频| 精品视频久久久| 成人豆花视频| 欧美国产激情视频| 成人欧美一区二区三区视频网页| 熟妇人妻一区二区三区四区| 国产欧美精品日韩精品| 日韩视频一区| 一级免费黄色录像| 亚洲黄色有码视频| 久久青草视频| 男女激情无遮挡| 国产精品麻豆一区二区| 天天摸夜夜添狠狠添婷婷| 国产精品中文字幕久久久| 很黄很黄激情成人| 亚洲欧洲综合网|