亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在連續動作空間總和為 1 的情況下如何定義策略?

在連續動作空間總和為 1 的情況下如何定義策略?

弒天下 2022-04-23 17:02:23
我目前正在使用策略梯度方法研究連續狀態-動作空間問題。環境動作空間被定義為在每個時間步必須總和為 1 的比率。因此,在這種情況下,使用高斯策略似乎并不合適。我所做的是嘗試調整 softmax 策略(以確保策略網絡輸出總和為 1),但我很難確定要使用的損失函數以及最終的梯度以更新網絡參數。到目前為止,我已經嘗試過貼現收益加權均方誤差,但結果并不令人滿意。在這種特殊情況下是否可以使用任何其他策略?或者有什么想法可以使用哪個損失函數?這是我的策略網絡(在我的代理類中)在 tensorflow 中的實現。def policy_network(self):        self.input = tf.placeholder(tf.float32,                                    shape=[None, self.input_dims],                                    name='input')        self.label = tf.placeholder(tf.float32, shape=[None, self.n_actions], name='label')        # discounted return        self.G = tf.placeholder(tf.float32, shape=[            None,        ], name='G')        with tf.variable_scope('layers'):            l1 = tf.layers.dense(                inputs=self.input,                units=self.l1_size,                activation=tf.nn.relu,                kernel_initializer=tf.contrib.layers.xavier_initializer())            l2 = tf.layers.dense(                inputs=l1,                units=self.l2_size,                activation=tf.nn.relu,                kernel_initializer=tf.contrib.layers.xavier_initializer())            l3 = tf.layers.dense(                inputs=l2,                units=self.n_actions,                activation=None,                kernel_initializer=tf.contrib.layers.xavier_initializer())            self.actions = tf.nn.softmax(l3, name='actions')        with tf.variable_scope('loss'):            base_loss = tf.reduce_sum(tf.square(self.actions - self.label))            loss = base_loss * self.G        with tf.variable_scope('train'):            self.train_op = tf.train.AdamOptimizer(self.lr).minimize(loss)
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

你有沒有想過使用狄利克雷分布?您的網絡可以輸出濃度參數alpha > 0,然后您可以使用它們生成總和為 1 的樣本。兩者都PyTorch支持TF此發行版,您可以從它們中采樣和獲取logProb。在這種情況下,除了獲取您的樣本之外,由于它是一個概率分布,您還可以了解它的方差,這可以作為代理置信度的衡量標準。對于 3 維的動作,具有alpha={1,1,1}基本上意味著您的代理沒有任何偏好,而具有alpha={100,1,1}意味著它非常確定大部分權重應該轉到第一個維度。


根據評論編輯:

當您使用 Dirichlet 分布時,Vanilla REINFORCE 將很難優化策略。問題是,在普通策略梯度中,您可以通過梯度裁剪和自適應學習率等來控制您在網絡參數空間中更改策略的速度。但是,最重要的是控制概率空間中的變化率. 一些網絡參數可能會比其他參數更改更多的概率。因此,即使您控制學習率以限制網絡參數的增量,您也可能會大大改變 Dirichlet 分布的方差,如果您認為這對您的網絡來說是有意義的。為了最大化您的操作的對數概率,您的網絡可能更多地關注于減少方差,而不是改變您的分配模式,這會在探索和學習有意義的政策時傷害您。緩解此問題的一種方法是通過限制新策略分布與舊策略分布的 KL 散度來限制策略概率分布的變化率。TRPO 或 PPO 是解決此問題和解決約束優化問題的兩種方法。

在實踐中確保這一點也可能很好alpha > 1。您可以通過在將神經網絡輸出輸入到 Drichlet 分發之前在神經網絡輸出上使用 softplus 輕松實現這一點ln(1+exp(x)) + 1。還要監視到達您的圖層的漸變并確保它存在。

您可能還希望將分布的熵添加到您的目標函數中,以確保進行足夠的探索并防止分布具有非常低的方差(非常高的 alpha)。


查看完整回答
反對 回復 2022-04-23
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

在我的腦海中,您可能想嘗試 2D-Gaussian 或 multivariate Gaussian。https://en.wikipedia.org/wiki/Gaussian_function

例如,您可以預測 2D-Gaussian 的 4 個參數 (x_0, x_1, sigma_0, sigma_1),您可以在 2D-Gaussian 平面上生成一對數字,例如 (2, 1.5),然后您可以使用 softmax產生想要的動作softmax([2, 1.5])=[0.62245933 0.37754067]

然后你可以計算這對數字在二維高斯平面上的概率,然后你可以用它來計算負對數概率、優勢等,以制作損失函數并更新梯度。


查看完整回答
反對 回復 2022-04-23
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號