強化學習可以幫助我們在給定的環境中找出最佳解,在自駕車與遊戲AI設計上已經取得了非常多的成就。使用強化學習訓練模型需要使用非常多的互動資料,不幸的是蒐集資料在很多情況下是非常花時間的。以下我會介紹如何使模型從他人的經驗學習,以節省蒐集資料所需的時間。
為什麼強化學習需要很多資料?
強化學習的概念是讓模型在環境中盡量的嘗試,然後根據環境的回饋調低出現壞行為的機率、提高好行為的機率。模型必然要嘗試夠多種不同的行為,才能知道哪些行為是比較好的。
從歷史中學習的好處
最顯而易見的好處是可以節省下蒐集資料的時間。一般而言用來更新模型的資料是從模型自己與環境互動而來的。我們的目標是讓模型知道不同行為之間的好壞差異,並不要求這些行為必須由模型自己做一遍,所以我們也可以用從其他地方蒐集而來的資料來更新模型。這一類的模型稱為off-policy algorithm,字面上的意思是可以不從自己的行為模式(policy)學習的演算法。常見的有Deep Deterministic Policy Gradient(DDPG)、Twin Delayed DDPG(TD3)、Soft Actor-Critic([1], [2])。
並不是所有的模型都能夠從歷史中學習
若要讓模型能夠從他人的行為資料學習,模型本身需要滿足一些條件。其中最重要的是模型的損失函數(Loss function)必須要足夠穩定。一般來說,如果損失函數的時間跨度越長、模型所需的輸入資料越多,模型都會變得不穩定。這類模型稱為on-policy algorithm,字面上的意思是總是在自己的行為模式(policy)學習的演算法,像是Asynchronous Advangtage Actor-Critic(A3C)、Proximal Policy Optimization(PPO)、以及大部分的Recurrent Reinforcement Learning Model。
存放歷史的地方﹔Replay Buffer
模型和環境互動時,我們可以記錄下環境的狀態以及當時所做的操作,並且存在一個叫做Replay Buffer的地方。以DDPG為例,每一筆資料必須包含:當時的狀態$s_{t}$、當時所做的行為$a_{t}$、環境的回饋$r_{t}$、以及下一個時間點的狀態$s_{t+1}$。這是常見的最基本的Replay Buffer之一。根據模型的不同,Replay Buffer內的資料格式也需要做相對應的修正。
Replay Buffer內的資料從哪裡來?
通常是來自過去的模型與環境的互動。由於模型的參數在訓練的過程中不斷地被更新。更新前的模型與更新後的模型應該被當作兩個不同的模型。因此on-policy模型的資料效率是比較差的,所有的資料用過一次就要丟掉,因為模型的參數總是在被更新。
Replay Buffer的大小也是有限制的,通常受限於兩個原因:環境的多樣性以及模型的穩定度。如果環境越多樣,那麼Replay Buffer就必須越大,以避免模型忘記曾經做過的壞行為;如果模型不穩定,Replay Buffer內的行為模式就不能跟目前的行為模式差太多,所以Replay Buffer必須變小。經驗上一百萬筆資料是個在大部分情況都沒問題的數字。
我可以把專家的行為放入Replay Buffer嗎?
可以,但又不可以。專家的行為模式與模型的行為模式可能相差甚遠,使得損失函數變得不穩定。所以如果使用專家的行為資料對模型做Policy Gradient或Q-Learning等常用的強化學習參數更新法的話,失敗的機率很高。
通常專家的行為資料會被用來當作範本,讓模型直接拷貝專家的行為,稱為模仿學習(Imitation Learning)。其實就是監督式學習(Supervised Learning),令模型看到這樣的環境,就做出相對應的行為。
小結
Off-policy algorithm相較於on-policy algorithm有著更高的資料效率,可以加速訓練模型。但是其穩定性較低、對模型設計的要求也更多,並不是在所有時候都能得到更好的效果。
所有文章分類