雷鋒網 AI 科技評論按:在機器學習和深度強化學習研究中,可重複性成為了最近最為熱門、最常被人詬病的話題之一。復現一篇基於強化學習的文章遠比想像的難,具體分析可參照《lessons learned from reproducing a deep RL paper》。
事實上,一般情況下,原始碼庫並不總是被完整發布的,科學性的論文中時常會省略部分實現技巧。近期,Herderson 等人對造成復現困難的各種參數進行了深入的調查。他們使用了當下熱門的深度強化學習的算法,如 DDPG、ACKTR、TRPO 和 PPO 等,並結合 OpenAI Gym 中的經典基準測試,如 Half-Cheetah, Hopper 和 Swimmer 等,研究代碼庫、網絡大小、激活函數、獎勵縮放或隨機種子對性能產生的影響。結果中最令人驚訝的是,同樣的算法、用同一組超參數進行訓練時,每一次運行後的結果也會大相逕庭。
也許最令人驚訝的是:使用相同的超參數和 10 個不同的隨機種子運行相同的算法 10 次,其中 5 個種子的表現做平均和另外 5 個種子做平均,得到的兩條學習曲線仿佛是來自兩個不同的統計分布的。然後,他們展示了這樣一個表格:
該表顯示了 Henderson 等人參考的所有深度 RL 論文使用了少於5粒種子。更糟糕的是,一些論文實際上展現了最佳表現的平均值!正如 Henderson 等人剛才展示的那樣,算法表現的不穩定性使得研究者可以通過挑選種子的方式聲稱某個算法比另一個算法的表現更好,即便事實上並不是這樣。這個問題的解決方案是使用更多隨機種子,以平均更多不同試驗的結果,最終獲得更穩健的算法性能度量。那麼,到底使用多少才是合適的呢?應該使用 10 個,還是應該像 Mania 等人提出的那樣使用 100?答案當然是,看情況。
如果您閱讀此博客,我猜您肯定處於以下情況:您希望比較兩種算法的性能,以確定哪種算法在給定環境中表現最佳。不幸的是,相同算法的兩次運行通常會產生不同的性能數值。這可能是由於各種因素造成的,例如隨機發生器產生的種子(隨機種子,簡稱種子)、智能體的初始條件、環境的隨機性等。
本文中描述的部分統計過程可以在 Github 上找到。這篇文章可在 ArXiv 上找到。雷鋒網 AI 科技評論對全文進行了編譯。
一段算法的表現可以通過數學建模成一個隨機的變量並且在環境中運行該算法可以得到實現將這個過程重複遍,可以得到統計樣本。一個隨機變量通常可以用其平均值和其標準偏差
來表示特徵。當然了,平均值和偏差都是未知的。但是可以計算的是它們的期望值和:
其中,被稱為經驗平均值,被稱為經驗標準偏差。樣本越大,估算結果的置信度就越高。
比較兩個表現分別為和的算法。如果和遵循正態分布。描述它們差值的隨機變量也滿足正態分布,並且,。在這種情況下,平均值的估算值為,並且的估算值為。影響效果可以用兩個表現的平均差值來表示:。
測試兩個算法的性能差在數學上等同於測試它們運行結果的差值與的差。那麼,根據上面的推理,從隨機變量和產生的兩個樣本和相減得到的變量所得的進行計算即為所需的樣本。
示例一
為了說明本文中提出的概念,採用兩種算法(Algo1 和 Algo2),並在 OpenAI Gym 框架中的 Half-Cheetah 環境中進行比較。所使用的實際算法在這裡並不那麼重要,稍後會公布。首先,進行初步研究,對每個算法設定 N = 5 個隨機種子,並在圖2中繪製結果。該圖顯示了平均學習曲線與 95% 置信區間。學習曲線的每個點是 10 個評價時段中的獎勵的累積值。該算法性能的度量值是過去 10 個點(即最後 100個評價時段)的平均性能。從圖中可以看出,Algo1 的表現似乎優於 Algo2;而且,越靠近結尾的位置,置信區間的重疊也並不多。當然,我們需要在得出任何結論之前進行統計學的測試。
在差異測試中,統計學家首先定義零假設和替代假設。設定如下:
這些假設指的是雙尾的情況。如果你有一個先驗的算法表現最好,假設為Algo1,也可以使用單尾版本:
在一開始,統計學家經常會使用零假設。一旦一個樣本從獲得了,可以估算觀測數據的概率為極值。極值的含義是遠離零假設的數值,即的數值遠離0。概率的值可以回答下面的問題:觀測一個樣本或更加極端的樣本出現的概率,假設兩個算法的表現沒有本質的不同時。在數學上,可以使用單尾版本的公式來描述這一過程:
同樣的,也可雙尾描述:
當這個概率變得非常低時,這意味著兩個沒有性能差異的算法產生收集的樣本是非常不可能的。差異明顯可以表現為概率在單尾情況下比的值小,並在雙尾情況下比的數值小。通常將的數值設置為0.05或者更低。值得注意的是,儘管概率很低,依然是二十分之一的機率出現誤報,即在聲稱沒有差異時存在真正地差異。
另一種看待這種情況的方法是考慮置信區間。可以計算兩種置信區間:
統計中可以出現兩種類型的錯誤:
為了進行性能評估,必須首先確認需要使用的統計實驗。在 Herderson 的論文中,two-sample t-test 和自舉置信區間試驗可用於此目的。Herderson 等人也同時推薦了 Kolmogorov-Smirnov 實驗,用於測試兩個樣本是否來自同一個分布區間。但這種測試不能用於比較 RL 算法,因為它不能證明任何順序關係。
T-test 和 Welch's test
為了驗證兩個種群具有相同的均值的假設(零假設)。一個 2-sample t-test 可以在兩個種群的變量假設為一致時進行測試。但是,這種假設在對比兩個不同的算法時並不是每次都成立的(比如 DDPG 和 TRPO 算法)。在這種情況下,2-sample t-test的變種 Welch's test 被提出了。T-test 包含幾個假設:
數據測量的規模必須是連續的和有序的,強化學習是滿足條件的;
數據是通過從種群中收集代表性樣本獲得的,在強化學習中,是合理的;
測量是獨立分開的,在強化學習中,看起來也是合理的;
數據是正態分布的,或至少呈鍾型分布。正態法則是一個涉及無窮大的數學概念,沒有任何事物是完全正常分布的。此外,算法性能的測量可能遵循多模態分布。
基於這些假設,可以通過如下公式對統計值 t 和自由度 v 進行描述,這裡使用 Welch–Satterthwaite公式:
同時,,是兩個樣本的經驗標準偏差,N 為樣本的大小(兩個樣本的大小是一樣的)。那麼 t-statistics 默認遵循 t-distribution,是鍾型的,同時其寬度取決於自由度。自由度越高,分布越扁平。
如下圖,可以讓人更好的理解這個原理。值得注意的是,這邊是在單尾情況下,並得到了正差值。
t-distribution 由其概率密度函數(圖中左側曲線)定義。累積分布函數為的概率總和,即為:
在上圖中,代表在單尾情況下滿足的 t-value。當時,概率p 小於 α,實驗結果否定了零假設。另一方面,當小於時,概率p 的值大於α,實驗未否定零假設。從圖片上可以看出,將閾值設置為,會導致上文所提到的第二種錯誤。出現錯誤的機率是圖中深藍色陰影所表示的部分,可以用數學的方式表達如下:
使用積分的轉換屬性,可以將β重寫為:
總結一下,給定兩個樣本使用 Welch's t-test 實驗的步驟為:
值得注意的是,並不意味著兩個算法之間沒有差異。只能表明沒有足夠的證據證明在置信度的基礎下差異是存在的(也可能意味著第二種錯誤的情況)。噪音可能會妨礙測試檢測差異的能力。在這種情況下,增加樣本量N 可以幫助發現差異。
選擇 t-test 的顯著級別 α 會導致第一種錯誤的情況。但是,上圖顯示的是減少這種概率歸結為提高的值,這最終導致了第二種錯誤的出現。通過提高樣本的數量N,降低β,同時保持 α 為恆定值,可以使估算的更加準確,這最終使得圖片中的分布曲線更為扁平,更小的 β 值。下一部分介紹了在同時滿足α和 β 的情況下,選擇合適的樣本數量N 的方法。
Bootstrapped 置信區間是一種不對性能差異的分布做出任何假設的方法。它通過在實際收集的樣本中重新採樣並通過計算每個生成的樣本的平均值來估計置信區間。
給定正態分布的真實平均μ和標準偏差σ,一個簡單的公式給出95%置信區間。但在這裡,考慮一個未知的分布F(給定一個算法的性能分布)。正如我們上面看到的,經驗平均值是其真實均值的無偏估計,但是我們如何計算的置信區間?一種解決方案是使用Bootstrapp原理。
假設有一個測試樣本,其中N 是樣本的數量。通過原始樣本內的置換採樣,可以得到經驗bootstrap的樣本,標記為,其樣本數量與原測試數量是相同的。在bootstrap原理中,對於原始樣本上和自舉樣本上計算的任何統計數據,其變化是保持一致的。更多的解釋和理由可以從麻省理工學院的這份文章中找到。因此,可以通過bootstrap樣本的變化量來近似經驗平均值的變化(這裡可以值變化範圍)。
計算過程由如下幾步實現:
Bootstrap的樣本數量B 需要選擇相對較大的值(如1000)。如果置信區間的範圍不包含0,這就意味著置信為時,差值只為正或者負(範圍最大值最小值均為正或均為負)。通過這種方式,可以清楚的獲得兩個算法的性能表現的統計顯著差值。可以通過如下連結,參考一個實際應用。
繼示例一
這裡,設置α=0.05會導致第一種錯誤的出現。對兩個有5個隨機種子樣本進行Welch's test和bootstrap置信區間測試,p-value 為0.031,。由於p-value 低於α,同時CI1置信區間並不包含0,兩個測試都是通過的。這意味著兩個實驗結果都表明了算法Algo1和Algo2的性能表現有顯著不同,且有95%的置信度。若真的檢測失敗,即僅僅存在 5% 的可能性會誤報出算法性能有顯著不同的結果。
事實上,在實驗時,確實碰到了第一種錯誤。如此確信的原因是:
它們都是權威的DDPG的實現算法。代碼庫可以從資料庫下載。這就意味著是一個真假設,並且兩個算法的平均值是相同的。第一個結論是錯誤的,必須要承認,在這裡實驗結果是第一種錯誤,即在正確的時候否認了。但是,統計測試通常伴隨著一些假設,這導致最終實驗碰到第一種錯誤。
在實驗實現環節,強制選擇 α 作為顯著等級的選擇。第二種錯誤β現在需要進行估算。β是在為真的否認失敗的概率。當影響因子和第一種錯誤的概率 α 是常數時,β 是樣本數量 N 的函數。選擇樣本的數量 N 來滿足 β 的需求就稱為統計功率分析(statistical power analysis)。這回答了文章最一開始提出的問題:若顯著等級為 α ,選擇多大的樣本容量來滿足 1-β 的概率發現影響因子?下一章節將會介紹在Welch's test中選擇合適的 N 的步驟。
如前文中描述的那樣,β 可以使用公式進行分析:
在這裡,為以0為中心點t-distribution的累積分布函數,為臨界值,為影響因子的t-value。
示例二
為了更好的理解本文的含義,使用兩個DDPG的算法:一個有執行擾動(Algo1),一個有參數擾動(Algo2)。兩個算法都在OpenAI Gym框架下的Half-Cheetah環境中執行。
步驟1 - 畫圖學習
為了實際的獲得β,首先需要進行兩個算法的標準偏差的估算。在這個步驟中,算法在環境中計算,並獲得兩個大小為 n 的樣本 x1 和 x2 。然後對其經驗平均值和標準偏差進行計算。
繼示例二
這裡,設置樣本容量為n=5,經驗平均值為(3523,4905),經驗標準偏差=(1341,990),如下圖描述,其中紅色曲線表示Algo2,藍色曲線標識Algo1。從圖中可以看出,兩個算法的表現有輕微的不同,並且。
步驟2 - 選擇樣本大小
給定一個統計測試(如Welch's test),一個顯著等級α(如 α =0.05)和Algo1、Algo2的經驗估算標準偏差,可以計算得到β,通過基於樣本容量 N 和影響因子。
繼示例二
若N 在[2, 50]中取,取自於,通過前文公式計算,V 和。最後,通過前文公式計算第二種錯誤的概率β 。下圖展示了β 在不同的時的數值變化曲線。黑色虛線是 從圖中可以讀取到,N=5 時,β=0.51。這意味著當影響因子為1382時,有51%的概率得到第二種錯誤的實驗結果。為了使錯誤概率降低到20%以下,N 的選擇需要大於10(圖中,β=0.19 的點)。
上述實驗中,當N=10時,滿足影響因子為1382的概率條件,並在welch's test的前提之下,使用的經驗估算值為。但是,需要值得注意的是,這樣的實驗結果是基於多個近似,包括,並假設了t-value的鐘形分布。
步驟三 - 進行統計測試
兩個算法都需要被執行,以獲取一個容量為 N 的新的樣本,從而可以應用統計測試。
繼示例二
這裡,設置N=10,並執行Welch's test和bootstrap測試。通過實驗,獲得Algo1和Algo2的經驗平均值和經驗標準偏差。這兩個實驗結果都否定了,Welch's test的p-value 為0.0037,並且bootstrap測試的差值置信區間為。兩個實驗都通過了。在下圖中,N=5 和N=10 的曲線都繪製了。將樣本容量提高到10時,原本在樣本容量為5的情況下不能被識別的顯著差異就顯示出來了。有更多的隨機種子,估算的更具魯棒性,更多的證據可以證明Algo2的性能比Algo1算法的性能好,這可以通過圖片中的尖峰進行識別。
給定相應的假設,t-test 和 bootstrap 實驗在選擇顯著等級為α 時,都面臨第一種錯誤的問題。為了得到正確的錯誤概率信息,這些假設都需要被仔細的檢查。首先,基於實驗數據,需要計算第一種錯誤概率的經驗評估,並展示:1)bootstrap測試對小樣本容量極度敏感;2)t-test的結果可能會對非正太分布的數據有偏差。然後,在實驗中,也驗證了,低樣本數導致了s1和s2的估算值的不準確性,並造成β 計算較大的誤差,最終造成從實驗中反饋的樣本數量需求也偏低。
第一種錯誤的經驗估算
給定樣本數量N ,第一種錯誤的概率可以通過如下幾個步驟進行估算:
使用示例二中的Algo1算法。經過42次實驗,如上的過程,N 的選擇範圍為[2,21]。下圖展現了實驗的結果。在α=0.05的情況下,當N取值過小時,經驗估算的false positive的機率比基準值高出很多。
在實驗中,bootstrap測試的置信區間不能使用在小樣本量的計算中(<10)。即使是在這種情況下,產生第一種錯誤的概率在實驗中被低估了(應為10%,而實驗結果為5%)。Welch's test降低了這種影響力,但在樣本容量很小的時候,反而更難得到正確的結果了。綜上,在實驗時,需將α 的值設置為0.05以下,以確保true positive的概率低於0.05。在示例一中,N=5,則遇到了第一種錯誤。在上圖中,這種可能性在bootstrap測試中得到約10%的計算結果,Welch's測試中獲得了高於5%的結果。
基於樣本容量 N 和標準偏差的經驗估算值,Welch's test計算了 t 的統計信息和自由度 V 。當 N 的值很低時,S1和S2估算值低於實際的標準偏差值。這導致了更小的 V 和 更低的,並最終影響了低 β 值。最後,更低的β 在環路中影響了樣本容量的選擇。這對樣本容量N 的計算有著顯著影響。下圖在兩個分布和中,false positive機率β 。圖中兩個結果的區別是,左側的圖片使用了真實的數值進行計算,而右側的圖片使用了經驗評估值。從實驗結果可以看出,不管使用哪一種數值,基於β 的樣本容量的選擇是一致的。
重要的是:
不應該盲目相信統計測試結果。這些測試是基於假設並不總是合理的。
α 必須是經驗估計的,因為統計測試可能低估它,因為錯誤假設的基礎分布或因為小樣本容量。
第一種錯誤的Bootstrap測試評價強烈依賴於樣本大小。不應使用Bootstrap測試進行低於20數量的樣本。
小樣本也會造成算法標準偏差估算的不準確,並最終導致對樣本容量需求的低估。
在本文中,詳細的介紹了在比較兩個強化算法的時候遇到的統計問題。並定義了第一種錯誤和第二種錯誤,同時還提出了ad-hoc統計測試的方法進行性能對比測試。最後,作者還介紹了在測試中選擇正確的樣本數量的方法,並通過實際案例進行了分析和描述。
本文最重要的意義並不僅限於方法和應用的介紹,而是基於本文的理論進行的後續的研究。通過挑戰Welch's test和bootstrap測試的假設,作者發現了幾個問題。首先,作者發現了在實驗中,經驗推斷值和理論實際值的顯著差異。為了規避這個問題,作者提出了N=20的最低樣本容量要求,指出bootstrap測試必須使用在樣本數量N>20的情況下,只有滿足這樣的要求,才能符合false positive機率的要求(<0.05)。其次,樣本容量N的要求在計算中很大的取決於的精度。為了順利的進行推算和計算,在實驗一開始就需要選擇系統的大於功率分析的規定。
使用 Welch's test 進行 bootstrap 置信區間的計算;
降低 α(<0.05)的值,來確保第一種錯誤出現的概率低於0.05;
正確的多重比較,以避免隨著實驗的數量線性增長的 false positive 機率;
使用至少 n=20 的樣本進行曲線繪製,以獲得基於兩個算法的魯棒的估算;
使用超過功率分析的樣本數量。這可以帶來更準確的準備偏差估算值並降低第二種錯誤出現的概率。
最後,作者非常謙虛的留言:需要注意的是,本文的作者並不是一個專業的統計學者,如果在文中發現任何統計學上的問題,請隨時與作者聯繫~
via openlab-flowers.inria.fr,雷鋒網(公眾號:雷鋒網) AI 科技評論編譯
雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。