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都是仿真任務,而且往往都不用考慮時間離散化的問題。另外,即使遇到時間離散粒度小的問題,一般直接增大離散化粒度之后獨立噪聲也可以起到很好的效果。
參考
總結
以上是生活随笔為你收集整理的labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity game和scene效果不一
- 下一篇: tictoc正方形网络模型_Trick