labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗?
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處——知乎專欄“機器學(xué)習(xí)與控制論”。
讀過DDPG論文[1]的同學(xué)幾乎都會有一個問題,論文中使用Ornstein-Uhlenbeck噪聲用于探索,比較難理解,參數(shù)又多,真的會比簡單的高斯噪聲等更有效嗎?
由于大部分回答都沒有說清楚甚至完全相反地解釋該部分,本文會嘗試從噪聲在強化學(xué)習(xí)中的應(yīng)用背景、Ornstein-Uhlenbeck過程的定義、產(chǎn)生作用的原因、實驗四部分闡述原因。
先放結(jié)論:相比于獨立噪聲,OU噪聲適合于慣性系統(tǒng),尤其是時間離散化粒度較小的情況,此外,它可以保護實際系統(tǒng),如機械臂。之所以大家覺得OU噪聲沒用,是因為強化學(xué)習(xí)benchmark都是仿真任務(wù),而且往往都不用考慮時間離散化的問題。另外,即使遇到時間離散粒度小的問題,一般直接增大離散化粒度之后獨立噪聲也可以起到很好的效果。
1.DDPG中的探索噪聲
我們知道,DDPG是典型的off-policy的方法,可疊加噪聲的執(zhí)行策略會獨立于評估/學(xué)習(xí)的策略。也就是說,DDPG學(xué)習(xí)的策略是確定性策略,即確定性的Actor網(wǎng)絡(luò),而探索部分可以自定義探索噪聲。
先不考慮文中的OU噪聲,一提到噪聲,首先想到的是簡單又易于實現(xiàn)的高斯噪聲。并且,確定性策略加上高斯噪聲后,形式上就和REINFORCE等Actor-Critic的隨機策略一致了。
(1)高斯噪聲
策略網(wǎng)絡(luò)直接的輸出,作為均值,疊加上高斯分布
即可。此時執(zhí)行策略實際上就成了 。有需要的話,還可以進行截斷。action顯然,高斯噪聲是時序上不相關(guān)的,前一步和后一步選取動作的時候噪聲都是獨立的。前后兩動作之間也只是通過狀態(tài)使其獨立。
其實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過程產(chǎn)生時序相關(guān)的探索,以提高在慣性系統(tǒng)中的控制任務(wù)的探索效率。這里的慣性系統(tǒng)是指的環(huán)境。
另外一處,同樣提到OU噪聲是為了在有momentum的環(huán)境中探索得更好。
先不談控制理論,這個環(huán)境大概怎么理解呢?你可以想象為一個慢響應(yīng)的環(huán)境,比如夏天在一個悶熱的房間,你打開空調(diào)制冷10秒鐘,溫度不會馬上降下來,維持它原來的狀態(tài),還是很熱。再比如說,控制一輛高速行駛的卡車,你踩一腳剎車,車子不會立馬停下來。Deepmind說,這種情況下用OU noise比較好。
為什么?先來看看定義。
2.什么是Ornstein-Uhlenbeck過程
OU 過程是一種隨機過程,微分方程[3]如下,形式上很簡單。其連續(xù)形式為
其中是
均值, 和 都大于0, 是維納過程(布朗運動)。 是狀態(tài),常見1維標(biāo)量。右邊第二項是擾動,暫不考慮。其離散形式為
為什么說OU過程是均值回歸?當(dāng)
比均值 大的時候,下一步狀態(tài)就會變小;反之,下一步狀態(tài)會變大。也就是說,狀態(tài)偏離的時候會被拉到靠近均值。此外,不考慮維納過程, 直接積分得到(3)式。
的作用就很明確了,其值越大,向均值靠近的速度就越快。而且是指數(shù)倍的靠近。再考慮擾動項,維納過程,每一段時間間隔內(nèi)的增量,是服從高斯分布的。
則是維納過程的參數(shù),表示方差。在OU過程中,它也決定擾動的放大倍數(shù)。數(shù)學(xué)形式上,維納過程是高斯白噪聲的積分。
注意,和上面說的高斯噪聲不一樣,是積分!也就是說,即使我們只考慮第二項維納過程,得到的每一步的噪聲會是從0時刻開始高斯噪聲的累加,建議自己畫個圖。
直觀理解
這兩個參數(shù)的影響,一圖勝千言,其中 就是上面的 。圖片來自于[3]代碼很簡單:
class非常感謝 @pb博 的指出,以上代碼不完善,默認(rèn)公式(2)OU過程中
,但實際上這里進行前向差分計算, 的時候,直接取采樣時間1s可能相對于原始OU過程會有較大誤差,剛看了下OPENAI的baseline, 設(shè)為參數(shù),的默認(rèn)值是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)總結(jié),作為強化學(xué)習(xí)的噪聲,OU噪聲和高斯噪聲相比,有什么區(qū)別?
由(2)式可以看到,OU noise是自相關(guān)的,后一步的噪聲受前一步的影響(且是馬爾科夫的)。而第一部分闡述的高斯噪聲,前后兩步都是完全獨立的。
OU過程mu=0,sigma=1,theta=0.15(上)、標(biāo)準(zhǔn)正態(tài)分布(下)所以,從圖上看,OU noise往往不會高斯噪聲一樣相鄰的兩步的值差別那么大,而是會繞著均值附近正向或負(fù)向探索一段距離,就像物價和利率的波動一樣,這有利于在一個方向上探索。
參考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)慣性系統(tǒng)(環(huán)境)(2)保護實際機械臂/機器人
對于之前提到的慣性系統(tǒng),為什么自相關(guān)的OU噪聲會比高斯噪聲更有作用呢?
回到之前的例子,現(xiàn)在30°,學(xué)習(xí)控制空調(diào)溫度到26°,產(chǎn)生了一系列的不相關(guān)的在0均值附近高斯噪聲,比如開10秒制熱,再開10秒制冷,這樣反復(fù)地在原地振蕩,產(chǎn)生的作用就被平均了。而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.
簡單來說,機器人中我們控制的是力,力作用到物體的速度或位移,這個動態(tài)過程(環(huán)境)是一個積分過程,積分過程正是常說的“慣性系統(tǒng)”。
積分過程是典型的低通濾波,高斯噪聲這種獨立的噪聲前后兩步差別太大,會被過濾掉:
高斯噪聲使得速度和位移的探索極為有限,而OU噪聲由之前說的特點,則可以探索的更遠:
DDPG中引用的這篇文獻[4]從另一方面探討了關(guān)于機器人控制中引入自相關(guān)噪聲的問題:
作者推導(dǎo)公式得出的結(jié)論是:
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.如果使用獨立的噪聲,當(dāng)時間離散的粒度越小,要維持同樣的隨機程度,則需要每一步噪聲幅度(方差)就要越大,這就會導(dǎo)致前后兩步相差極其的遠,并不適合真實的機械臂。
文中聲稱,自相關(guān)的噪聲能使得控制信號較為連續(xù),可以在時間粒度小的時候,達到類似的效果,不過相比于采樣時間大+獨立噪聲的方案,訓(xùn)練可能會慢些——其實也很好理解,采樣時間較大的時候,即使是獨立的噪聲,動作帶來的效果也很容易被驗證,從而可以快速調(diào)整策略。而采樣時間小的時候,自相關(guān)噪聲走連續(xù)的幾步才能得到驗證,調(diào)整的周期也更長。
所以!不要再抱怨OU噪聲沒用了,只是你們不合適而已。你的環(huán)境可能不是慣性環(huán)境,即使是,也可能不用考慮離散時間的問題,即使離散時間小了,往往也可以增大離散時間的粒度解決。另外,大多數(shù)人不會將強化學(xué)習(xí)用于實際系統(tǒng),也就跑跑仿真維持生活的樣子(圍笑)。
4.實驗
我們設(shè)計實驗看看兩種不同的探索噪聲,在不同的離散化時間粒度(采樣時間)下的表現(xiàn)。
任務(wù):
設(shè)定值跟蹤(setpoints tracking)任務(wù),使得系統(tǒng)(環(huán)境)的輸出達到預(yù)先設(shè)定的目標(biāo)值。
環(huán)境是一階系統(tǒng)(也是慣性系統(tǒng)),輸入輸出都是一維,傳遞函數(shù)如下:
方案:
DDPG算法,訓(xùn)練時配合兩種探索噪聲,分別是高斯噪聲和Ornstein-Uhlenbeck噪聲。其中,高斯噪聲
,而OU過程參數(shù) . 二者的scale基本一致。狀態(tài)、動作都是1維。獎賞可以認(rèn)為就是絕對誤差,即設(shè)定值減輸出取絕對值后的相反數(shù)。
訓(xùn)練140回合,注意reward圖中展示的是回報(一個回合內(nèi)的累積獎賞)。
結(jié)果:
(1)采樣時間=0.04s
圖1. OU噪聲實驗結(jié)果(采用時間=0.04s)圖2.高斯噪聲實驗結(jié)果(采用時間=0.04s)我們可以看到,當(dāng)采樣時間較小的時候(0.04s),DDPG采用OU噪聲的結(jié)果是會比高斯噪聲更好的。簡便起見,我只展示一個random seed結(jié)果,線下?lián)Q了seed結(jié)果類似。
(2)采樣時間=0.1s
圖3. OU噪聲實驗結(jié)果(采用時間=0.1s)圖3. 高斯噪聲實驗結(jié)果(采用時間=0.1s)結(jié)果顯示,當(dāng)采樣時間擴大到0.1s的時候,高斯噪聲完全也可以完成任務(wù),甚至訓(xùn)練到后期每個回合內(nèi)的累積獎賞比OU噪聲略微高一點點。這樣就印證了之前的分析。
5.結(jié)論
相比于獨立噪聲,OU噪聲適合于慣性系統(tǒng),尤其是時間離散化粒度較小的情況,此外,它可以保護實際系統(tǒng),如機械臂。之所以大家覺得OU噪聲沒用,是因為強化學(xué)習(xí)benchmark都是仿真任務(wù),而且往往都不用考慮時間離散化的問題。另外,即使遇到時間離散粒度小的問題,一般直接增大離散化粒度之后獨立噪聲也可以起到很好的效果。
參考
總結(jié)
以上是生活随笔為你收集整理的labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity game和scene效果不一
- 下一篇: tictoc正方形网络模型_Trick