0
雷鋒網 AI 科技評論按:強化學習(reinforcement learning)是機器學習界近幾年的一大研究熱點,無需先驗知識、在環(huán)境中反復摸索嘗試獲得高反饋(reward)進行學習的根本思維符合人類的直覺,DeepMind 的 AlphaGo 系列更是強化學習成功案例的正面典型。不過,強化學習訓練極為不穩(wěn)定、樣本利用率非常低、泛化性不好等問題也一直困擾著研究人員們,自蒙特卡洛、策略梯度以來大家也繼續(xù)找到了 Actor-Critic、Deep-Q Learning 等算法嘗試獲得更好的表現(xiàn)。
UC 伯克利大學電子工程和計算機系副教授、《Machine Learning Research》雜志編委 Ben Recht 近期就在自己的個人博客上撰寫了一系列強化學習的入門介紹文章,從各個角度剖析講解強化學習領域的重要知識和概念。其中有一篇《The Policy of Truth》(真正的策略)詳細聊了聊強化學習中廣泛使用的策略梯度為什么是個不好的算法,并將其喻為「偽裝在數學符號和數學黑話里的隨機搜索」。雷鋒網 AI 科技評論把這篇文章編譯如下。
對于各種強化學習問題,人們第一個想到的通用解決方案就是策略梯度(Policy Gradient)。不過讓我震驚的是 1993 年的時候人們并沒有把策略梯度看作一個糟糕的方法并且棄之不用。策略梯度確實有相當的吸引力,因為它看起來可以用來精細調節(jié)一個程序,無需任何領域內知識就可以解決任意問題。任何這樣夸下海口的都肯定是為了吹捧自己,實際上當你仔細去研究的時候,你就會發(fā)現(xiàn)策略梯度其實就是偽裝在數學符號和數學黑話里的隨機搜索,僅此而已。
我有必要提前說聲抱歉,因為這篇文章接下來會有不少公式。策略梯度中需要用到如此之多的公式,讓我們誤以為其中仿佛真的有什么嚴肅深入的東西。我猜策略梯度之所以一直還是活躍的研究課題的原因就是人們并不會嘗試實現(xiàn)它,以及這些數學公式單獨看來還是很有吸引力的。這其實會迷惑我們的雙眼,讓我們忽視了真正把方法寫成代碼之后可能發(fā)生的事情。跟我來一起看看那些需要鋼鐵般信念的關頭吧。
我們就從人們用策略梯度解決的最通用的問題開始。在這里我們把動態(tài)系統(tǒng)生成的一系列狀態(tài) xk 和控制動作 uk 合稱為軌跡(trajectory) τ
而策略(policy)就是函數 π,它的輸入是一個軌跡,然后輸出一個新的控制動作。我們的目標就是找到一個能讓 L 個時間步驟后的反饋最大化的策略。
在策略梯度中,我們只關注參數化的、隨機化的策略。策略 π 中有一系列參數 ? 需要調節(jié)。以及,相比于輸出某一個具體的控制動作,我們通常假設 π 是一個多種控制動作上的概率分布;在實際操作中,按照每個時間步驟對 π 的分布進行采樣,然后得出一個控制動作。你可能要問了,為什么要有采樣的這一步?這個問題很棒,不過我們先暫且放下這個無比合理的問題,過一會兒再說。
為了體現(xiàn)出策略 π 對參數 ? 的依賴,我們把它寫作 π? 。由于 π? 是一個概率分布,把 π? 作為策略就引入了一個基于軌跡的概率分布:
進一步地,我們可以再增加幾個符號,把軌跡的反饋定義為:
那么,這個強化學習優(yōu)化問題就變成了看起來很整齊的:
如果我們繼續(xù)做如下定義的話還可以再簡潔一點:
這樣,我們的強化學習目標就終于可以寫成簡短的:
用簡潔的公式表述了這個問題之后,策略梯度就可以用下面這樣的技巧推導得到:
這個式子表明了 J 相對于 ? 的梯度是下面這個式子的預期值
這樣,當我們執(zhí)行策略 π? 對軌跡 τ 采樣的時候,我們就可以計算 G(τ,?) ,從而得到對 J 的梯度的無偏差估計值。沿著這個方向下去我們就可以對 J 做隨機梯度下降。
更神奇的是,計算 G(τ,?) 時可以無需知道整個動態(tài)系統(tǒng)的運轉規(guī)律方程。我們觀察到
不是參數組 ? 的函數,因此
只要 π? 是可微的。以及你安裝了最新版的 autograd,這些導數就都是可以計算的。
總結一下,我們就這樣得到了下面這個非常美妙的方法,我們可以在不知道系統(tǒng)的任何動態(tài)特性的情況下用它優(yōu)化一個最優(yōu)化問題。
選擇一組初始的猜測值 ?0 和步驟序列 ak。初始 k=0。
在模擬器中運行策略 π?k,采樣得到軌跡 τk。
令
迭代 k=k+1,回到第 2 步
策略梯度吸引人的主要原因就是因為看起來很簡單。如果你可以從 π? 高效地采樣,理論上你就可以用這個算法解決任何問題。可以飛四旋翼,可以冷卻數據中心,也可以教機器人開門。那么理所當然的下一個問題就是,能做到多好呢?下面我簡單提一下線性化法則(Linearization Principle),你馬上就會看清真實狀況,從此以后再也不會想要選策略梯度了。
在聊線性模型之前,我們暫且退一步,考慮一個純優(yōu)化問題。我們用一堆符號把強化學習變得公式化,以至于到了最后似乎我們只需要關注一個無限制函數的最大化問題。我們先把所有系統(tǒng)的動態(tài)特性撇開不談,考慮單步最優(yōu)化問題。給定一個函數 R(u),我要找到讓函數值盡可能大的 u。也就是說我要解決這個優(yōu)化問題
容我說幾句可能看起來有點離題的,任何這個形式的優(yōu)化問題都等價于 u 的概率分布之上的優(yōu)化問題
做這個等價變換的目標是:如果 u? 是最優(yōu)解,那么當我們在 u? 附近施加一個 Delta 函數的話也可以得到同樣的反饋。進一步地,如果 p 是一個概率分布,那么就很明確,可期待的反饋值永遠都不會大于固定的 u 得到的最大反饋。所以我們要優(yōu)化的要么是 u,要么是 u 的分布。
這里,我們就來到了策略梯度中的第一個邏輯跳躍的地方了。相比于對所有可能的分布構成的空間做優(yōu)化,我們優(yōu)化的是一組參數的分布 p(u;?)。如果這組參數中含有所有的 Delta 函數,那么得到的最優(yōu)解就會和不含隨機的優(yōu)化問題的解一樣。而如果參數中不含有 Delta 函數,我們就只能得到優(yōu)化反饋的下界而已,不管我們找到的概率分布有多好;在這種情況下,如果從策略中采樣 u,可以期待得到的反饋肯定是次優(yōu)的。
這種基于分布的優(yōu)化范式有一個重大問題,就是我們需要給這一組參數平衡許多不同的要求。我們需要的概率分布應當:
足夠豐富,可以逼近 Delta 函數
不難通過基于梯度的方法搜索
易于采樣
這其實就對分布提出了很高的要求了,尤其是當你的模型輸出的控制動作是連續(xù)值的時候。對于連續(xù)動作,多數時候人們都會從各種高斯分布中找一個以便讓
在這里,f 是某個非線性函數,gt 是一個高斯隨機向量。像這樣的參數化形式里沒有哪個是帶有 Delta 函數的。并且做這樣的參數化動作的時候我們并不知道到底會損失多少,因為我們并沒有辦法對強化學習中發(fā)生的一切建模。
現(xiàn)在就需要重新強調一件重要的事情,在我們研究的基本最優(yōu)控制問題中并不需要隨機化的策略。簡單的 LQR (線性二次調節(jié)器)問題中當然也不需要。概率策略確實是一種建模的方法,但它永遠都不會比確定性策略更好。
所以上面這樣的策略梯度算法實際上是一個找到如下形式的式子的隨機梯度的通用方法
它的對數似然也具有完全的泛化性
所以下面這個方法也就是一個完全通用化的方法,用來找到關于參數分布的最大化反饋
選擇某個初始猜測值 ?0 和步驟序列 αk。初始 k=0。
從概率分布 p(u;?k) 中獨立同分布采樣 uk
令
迭代 k=k+1,回到第 2 步
這種形式的算法就可以被稱為「強化」(reinforce)。它看起來很奇怪:我們得到的是一個隨機梯度,然而我們想要優(yōu)化的函數 R 只能通過函數評估訪問。我們從來都不計算 R 自己的梯度。
那么這個算法有任何好處么?答案取決于你想要什么。如果你想要的是一個能和梯度相提并論的算法,那就一點也不好,是一個糟透了的算法。而如果你想要的是能和 R 的有限差分近似相提并論,那么…… 那么它仍然是一個糟透了的算法。只不過其中的數學計算還挺討人喜歡。
這里要說明的是,線性化法則提醒我們幾乎是馬上就需要拋棄這個算法。我們來看一個最平凡的線性二次調節(jié)器例子:R(u)=?||u?z||2 。設 p(u;?) 為均值為 ?、方差為 σ2I 的多元高斯分布。那么策略梯度能起到什么作用呢?首先我們注意到
很顯然,此時此刻我們的最佳選擇是讓 ?=z。同時我們注意到預期反饋中含有減去 σ2d 的一項,不過起碼現(xiàn)在是一個對 u 的不錯的猜測值了。并且,J 作為 ? 的函數,明顯是凸的,以及需要知道的最重要的事是這樣的梯度的預期標準值控制著迭代次數。那么現(xiàn)在,如果你從 ?=0 開始,那么梯度就是
其中 ω 是一個正態(tài)分布的隨機向量,均值為 0,方差為 σ2I。然后這個隨機梯度的預期標準值是…… 哦算了吧,你要算一個 6 次的式子,這一點都不好玩。如果忽略一下不重要的細節(jié),你會發(fā)現(xiàn)預期標準值大概和這個式子是同階的:
這個式子很大了!隨著維度變高,它的拓展問題也會讓人頭疼。
很多人都分析過這種方法的復雜性,當然一點都不理想,而且高度取決于搜索空間的維度數目大小。反饋的最大大小 B 也有影響。如果函數值里有很多噪聲,那么即便對于凸函數,收斂速率也只是 ,這還是在假定了算法的各個參數都剛好設置恰當的情況下。對于非常凸的函數,你有可能能湊出一個
級別的函數解,但是這個結果對于參數的選擇將會非常敏感。最后,我們注意到僅僅給反饋加入一個負的常數項就會大大降低算法的速度。如果你選擇的反饋函數的取值在 [0,1],然后你給每個反饋值都減去 106 的話,這就會讓算法的運行時間變長 106 倍,即便每次的反饋值的大小關系是不變的。
我們還需要看到,當我們在動態(tài)系統(tǒng)中考慮這些因素的時候情況只會變得更糟糕。線性二次調節(jié)器的策略梯度更新里會含有非常多的噪聲,而且它的方差會隨著模擬步數 L 增大。更麻煩的是,如果要找一個簡單的靜態(tài)策略的話,搜索 ? 的過程顯然是非凸的。即便實際操作中能看到一些結果,我們面前如此之多的困難還是提醒著我們可能最好換一換別的方法。
為什么這么多人都說在強化學習中取得了巨大成功?
我們已經看到有許許多多的論文,把策略梯度用在各種各樣的問題上,然后得到各種各樣的好看的結果。但我希望我們現(xiàn)在都能看清他們其實只是把隨機搜索打扮得漂漂亮亮了而已。尤其當你看到另外一批論文里的基因算法和你的算法得到了近似的成果的時候,你需要明白這并不代表著基因算法有了新的發(fā)展,它更可能是在告訴你,你的方法只不過是隨機搜索的一次糟糕的實現(xiàn)而已。
畢竟,基因算法和策略梯度需要的樣本數目都多到夸張。如果你已經準備好了在亞馬遜 AWS 上花上百萬美元訓練,并且根本不打算調節(jié)一個實體化的系統(tǒng)的話,想用其實也可以。但是我們肯定是有更好的辦法的。
策略梯度和強化學習并沒有什么神奇的魔力,我想我已經強調得夠多了。不過我還是要繼續(xù)說,策略梯度和它的各種變體真的是糟糕得很合理的算法。想讓它們順利運行得出結果需要很多的技巧??墒悄憷潇o想想,難以調試、難以復現(xiàn),而且還不能勝過原原本本的基因算法的算法,真的可以算是很差的算法了。
在這個系列文章中我還會多次談起這個觀點:任選一個策略梯度能得到好結果的問題,都能再找到一個簡單得多、魯棒得多的算法,而且能匹敵或者超越策略梯度的表現(xiàn)。策略梯度從來就不是一個好點子,但我也許一輩子都弄不清為什么它會如此流行。
下篇文章我會繼續(xù)講線性二次調節(jié)器,以及討論幾個可能會比策略梯度更成功的策略。
(完)
via argmin.net,雷鋒網 AI 科技評論編譯
相關文章:
Uber論文5連發(fā)宣告神經演化新時代,深度強化學習訓練勝過SGD和策略梯度
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。