日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗?

發布時間:2025/4/16 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎轉載,轉載請注明出處——知乎專欄“機器學習與控制論”。

讀過DDPG論文[1]的同學幾乎都會有一個問題,論文中使用Ornstein-Uhlenbeck噪聲用于探索,比較難理解,參數又多,真的會比簡單的高斯噪聲等更有效嗎?

由于大部分回答都沒有說清楚甚至完全相反地解釋該部分,本文會嘗試從噪聲在強化學習中的應用背景、Ornstein-Uhlenbeck過程的定義、產生作用的原因、實驗四部分闡述原因。

先放結論:相比于獨立噪聲,OU噪聲適合于慣性系統,尤其是時間離散化粒度較小的情況,此外,它可以保護實際系統,如機械臂。之所以大家覺得OU噪聲沒用,是因為強化學習benchmark都是仿真任務,而且往往都不用考慮時間離散化的問題。另外,即使遇到時間離散粒度小的問題,一般直接增大離散化粒度之后獨立噪聲也可以起到很好的效果。

1.DDPG中的探索噪聲

我們知道,DDPG是典型的off-policy的方法,可疊加噪聲的執行策略會獨立于評估/學習的策略。也就是說,DDPG學習的策略是確定性策略,即確定性的Actor網絡,而探索部分可以自定義探索噪聲。

先不考慮文中的OU噪聲,一提到噪聲,首先想到的是簡單又易于實現的高斯噪聲。并且,確定性策略加上高斯噪聲后,形式上就和REINFORCE等Actor-Critic的隨機策略一致了。

(1)高斯噪聲

策略網絡直接的輸出,作為均值,疊加上高斯分布

即可。此時執行策略實際上就成了 。有需要的話,還可以進行截斷。action

顯然,高斯噪聲是時序上不相關的,前一步和后一步選取動作的時候噪聲都是獨立的。前后兩動作之間也只是通過狀態使其獨立。

其實TD3算法[2]中正是采用這種探索噪聲,他們聲稱:

Unlike the original implementation of DDPG, we used uncorrelated noise for exploration as we found noise drawn from the Ornstein-Uhlenbeck (Uhlenbeck & Ornstein, 1930) process offered no performance benefits.

真的是這樣嗎?

(2)Ornstein-Uhlenbeck噪聲

DDPG中對引入OU噪聲的說明如下圖,即利用OU過程產生時序相關的探索,以提高在慣性系統中的控制任務的探索效率。這里的慣性系統是指的環境。

另外一處,同樣提到OU噪聲是為了在有momentum的環境中探索得更好。

先不談控制理論,這個環境大概怎么理解呢?你可以想象為一個慢響應的環境,比如夏天在一個悶熱的房間,你打開空調制冷10秒鐘,溫度不會馬上降下來,維持它原來的狀態,還是很熱。再比如說,控制一輛高速行駛的卡車,你踩一腳剎車,車子不會立馬停下來。Deepmind說,這種情況下用OU noise比較好。

為什么?先來看看定義。

2.什么是Ornstein-Uhlenbeck過程

OU 過程是一種隨機過程,微分方程[3]如下,形式上很簡單。其連續形式為

其中是

均值, 和 都大于0, 是維納過程(布朗運動)。 是狀態,常見1維標量。

右邊第二項是擾動,暫不考慮。其離散形式為

為什么說OU過程是均值回歸?當

比均值 大的時候,下一步狀態就會變小;反之,下一步狀態會變大。也就是說,狀態偏離的時候會被拉到靠近均值。

此外,不考慮維納過程, 直接積分得到(3)式。

的作用就很明確了,其值越大,向均值靠近的速度就越快。而且是指數倍的靠近。

再考慮擾動項,維納過程,每一段時間間隔內的增量,是服從高斯分布的。

則是維納過程的參數,表示方差。在OU過程中,它也決定擾動的放大倍數。

數學形式上,維納過程是高斯白噪聲的積分。

注意,和上面說的高斯噪聲不一樣,是積分!也就是說,即使我們只考慮第二項維納過程,得到的每一步的噪聲會是從0時刻開始高斯噪聲的累加,建議自己畫個圖。

直觀理解

這兩個參數的影響,一圖勝千言,其中 就是上面的 。

圖片來自于[3]

代碼很簡單:

class

非常感謝 @pb博 的指出,以上代碼不完善,默認公式(2)OU過程中

,但實際上這里進行前向差分計算, 的時候,直接取采樣時間1s可能相對于原始OU過程會有較大誤差,剛看了下OPENAI的baseline, 設為參數,的默認值是0.01s。class OrnsteinUhlenbeckActionNoise(ActionNoise):def __init__(self, mu, sigma, theta=.15, dt=1e-2, x0=None):self.theta = thetaself.mu = muself.sigma = sigmaself.dt = dtself.x0 = x0self.reset()def __call__(self):x = self.x_prev + self.theta * (self.mu - self.x_prev) * self.dt + self.sigma * np.sqrt(self.dt) * np.random.normal(size=self.mu.shape)self.x_prev = xreturn xdef reset(self):self.x_prev = self.x0 if self.x0 is not None else np.zeros_like(self.mu)

總結,作為強化學習的噪聲,OU噪聲和高斯噪聲相比,有什么區別?

由(2)式可以看到,OU noise是自相關的,后一步的噪聲受前一步的影響(且是馬爾科夫的)。而第一部分闡述的高斯噪聲,前后兩步都是完全獨立的。

OU過程mu=0,sigma=1,theta=0.15(上)、標準正態分布(下)

所以,從圖上看,OU noise往往不會高斯噪聲一樣相鄰的兩步的值差別那么大,而是會繞著均值附近正向或負向探索一段距離,就像物價和利率的波動一樣,這有利于在一個方向上探索。

參考quora的這個回答(強烈建議配合該回答食用):

Imagine trying to swim by nervously shaking your arms and legs in every direction in some chaotic and out of sync manner. That wouldn’t be very efficient, would it?

3.什么時候可能有作用

兩種情況:(1)慣性系統(環境)(2)保護實際機械臂/機器人

對于之前提到的慣性系統,為什么自相關的OU噪聲會比高斯噪聲更有作用呢?

回到之前的例子,現在30°,學習控制空調溫度到26°,產生了一系列的不相關的在0均值附近高斯噪聲,比如開10秒制熱,再開10秒制冷,這樣反復地在原地振蕩,產生的作用就被平均了。而OU噪聲,會往制冷方向多探索幾步,這樣積累的效果能探索到更低的溫度。

quora的這個回答從機器人控制的角度進行了解釋:

DDPG is mainly used for continuous control tasks, such as locomotion. In this setting, the actions aa often correspond to exerting forces so as to move a physical body. Forces directly translate to accelerations, so they need to be integrated twice to affect the position xx of the system that we wish to control.
mx¨=amx¨=a
x=1m∫∫ax=1m∫∫a
Yet, the integration operator is a low-pass filter, which means that any high-frequency present in the action aa will be dampened.

簡單來說,機器人中我們控制的是力,力作用到物體的速度或位移,這個動態過程(環境)是一個積分過程,積分過程正是常說的“慣性系統”。

積分過程是典型的低通濾波,高斯噪聲這種獨立的噪聲前后兩步差別太大,會被過濾掉:

高斯噪聲使得速度和位移的探索極為有限,而OU噪聲由之前說的特點,則可以探索的更遠:

DDPG中引用的這篇文獻[4]從另一方面探討了關于機器人控制中引入自相關噪聲的問題:

作者推導公式得出的結論是:

The finer time discretization, the less significant each particular action is, and the more noise it should contain. That leads to excessively discontinuous control signal, inappropriate for robotic applications.

如果使用獨立的噪聲,當時間離散的粒度越小,要維持同樣的隨機程度,則需要每一步噪聲幅度(方差)就要越大,這就會導致前后兩步相差極其的遠,并不適合真實的機械臂。

文中聲稱,自相關的噪聲能使得控制信號較為連續,可以在時間粒度小的時候,達到類似的效果,不過相比于采樣時間大+獨立噪聲的方案,訓練可能會慢些——其實也很好理解,采樣時間較大的時候,即使是獨立的噪聲,動作帶來的效果也很容易被驗證,從而可以快速調整策略。而采樣時間小的時候,自相關噪聲走連續的幾步才能得到驗證,調整的周期也更長。

所以!不要再抱怨OU噪聲沒用了,只是你們不合適而已。你的環境可能不是慣性環境,即使是,也可能不用考慮離散時間的問題,即使離散時間小了,往往也可以增大離散時間的粒度解決。另外,大多數人不會將強化學習用于實際系統,也就跑跑仿真維持生活的樣子(圍笑)。

4.實驗

我們設計實驗看看兩種不同的探索噪聲,在不同的離散化時間粒度(采樣時間)下的表現。

任務:

設定值跟蹤(setpoints tracking)任務,使得系統(環境)的輸出達到預先設定的目標值。

環境是一階系統(也是慣性系統),輸入輸出都是一維,傳遞函數如下:

方案:

DDPG算法,訓練時配合兩種探索噪聲,分別是高斯噪聲和Ornstein-Uhlenbeck噪聲。其中,高斯噪聲

,而OU過程參數 . 二者的scale基本一致。

狀態、動作都是1維。獎賞可以認為就是絕對誤差,即設定值減輸出取絕對值后的相反數。

訓練140回合,注意reward圖中展示的是回報(一個回合內的累積獎賞)。

結果:

(1)采樣時間=0.04s

圖1. OU噪聲實驗結果(采用時間=0.04s)

圖2.高斯噪聲實驗結果(采用時間=0.04s)

我們可以看到,當采樣時間較小的時候(0.04s),DDPG采用OU噪聲的結果是會比高斯噪聲更好的。簡便起見,我只展示一個random seed結果,線下換了seed結果類似。

(2)采樣時間=0.1s

圖3. OU噪聲實驗結果(采用時間=0.1s)

圖3. 高斯噪聲實驗結果(采用時間=0.1s)

結果顯示,當采樣時間擴大到0.1s的時候,高斯噪聲完全也可以完成任務,甚至訓練到后期每個回合內的累積獎賞比OU噪聲略微高一點點。這樣就印證了之前的分析。

5.結論

相比于獨立噪聲,OU噪聲適合于慣性系統,尤其是時間離散化粒度較小的情況,此外,它可以保護實際系統,如機械臂。之所以大家覺得OU噪聲沒用,是因為強化學習benchmark都是仿真任務,而且往往都不用考慮時間離散化的問題。另外,即使遇到時間離散粒度小的問題,一般直接增大離散化粒度之后獨立噪聲也可以起到很好的效果。

參考

  • ^https://arxiv.org/abs/1509.02971
  • ^https://arxiv.org/abs/1802.09477
  • ^http://web.math.ku.dk/~susanne/StatDiff/Overheads1b
  • ^http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.696.1149&rep=rep1&type=pdf
  • 總結

    以上是生活随笔為你收集整理的labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。