① 隨機梯度下降演算法
以線性回歸為例:
預測函數為:
代價函數:
重復:{
}
當數據量過大時,梯度下降的演算法會變得很慢,因為要對所有的數據進行求和。因為每次重復梯度下降都是所有數據全部求和,所以梯度下降演算法又稱之為 批量梯度下降(Batch Gradient Descent)
隨機梯度下降在每一次迭代中,不用考慮全部的樣本,只需要考慮一個訓練樣本。
針對一個樣本,它的代價函數:
而針對所有樣本的代價函數可以看作是對每個樣本代價函數的平均:
隨機梯度下降演算法如下:
第一步,先隨機打亂訓練集樣本。
第二步,進行梯度下降:
重復 {
循環所有樣本 for i=1,2,3,...,m {
}
}
一開始隨機打亂數據是為了對樣本集的訪問是隨機的,會讓梯度下降的速度快一點。
該演算法一次訓練一個樣本,對它的代價函數進行一小步梯度下降,修改參數 ,使得它對該樣本的擬合會好一點;然後再對下一個樣本進行運算,直到掃描完所有的訓練樣本,最後外部在迭代這個過程。
跟批量梯度下降演算法不同的是,隨機梯度下降不需要等到所有樣本求和來得到梯度項,而是在對每個樣本就可以求出梯度項,在對每個樣本掃描的過程中就已經在優化參數了。
在梯度下降過程中,批量梯度下降的過程趨向於一條直線,直接收斂到全局最小值;而隨機梯度下降不太可能收斂到全局最小值,而是隨機地在其周圍震盪,但通常會很接近最小值。
隨機梯度下降通常需要經過1-10次外部循環才能接近全局最小值。
在批量梯度下降中,要判斷是否收斂,需要在每一次迭代演算法後計算 的值,根據值的變化來判斷收斂。
在執行隨機梯度下降時,不需要計算所有的樣本的代價函數,只用在對某個樣本進行梯度下降前計算該樣本的代價函數 ,為了判斷是否收斂,可以計算多次迭代後 的平均值,例如1000次迭代,在每次更新 前,計算最後1000次的的cost的平均值。
選擇每隔多少次計算成本函數對梯度下降的過程也有影響:
上圖中藍色曲線是每1000次迭代,紅色的是每隔5000次迭代。
因為隨機梯度下降時會出現震盪,當迭代次數少時發現下降的曲線起伏很多,而迭代次數變大時,曲線就會變得平滑許多。缺點是每隔5000個計算,會增加計算成本。
增加迭代次數可以判斷演算法是否正確:
上圖藍色的是1000個迭代次數,通過這條曲線,不能很好的判斷成本函數是否在下降,這時就需要添加迭代次數,當增加到5000次,則可以通過平滑的曲線判斷,當下滑曲線是紅色的時,說明演算法是有效的,代價函數值在下降;當是紫色的曲線時,可以看到是一個平坦的線,這時判斷演算法可能出現問題了。
在隨機梯度下降中,學習率 也會影響演算法,當學習率減小時,下降曲線的震盪就會變小,而且會收斂到一個更好的解:
當看到曲線是上升的時候,可以嘗試減小學習率看看效果。
在隨機梯度下降中,如果想要收斂到全劇最小值,需要隨著時間的變化減小學習率 的值:
學習率等於一個常數除以迭代次數加另一個常數,隨著迭代次數增大,學習率會減小;但這會造成常數1和常數2的選擇問題。
② SAC演算法解析
上一篇文章介紹了利用確定策略來解決連續控制問題的DDPG,現在再來介紹一種非常牛的用隨機策略來做連續控制的方法 Soft Actor Critic (SAC) 。它是一種以off-policy的方式來優化隨機策略的演算法,它的核心特點是 熵正則化 , 策略的訓練在最大化預期回報和最大化熵之間作了個權衡,在這一點上實際也跟exploration還是exploitation有重大關系,增加熵會導致更多探索,這可以加速之後的學習,還可以防止策略過早地收斂到一個糟糕的局部最優。
為了防止有些人不太清楚熵的概念,在正式開始講SAC之前,我稍微介紹一下熵的概念,以及隨機策略的好處。
這里的熵指的是信息熵 ,它代表一個隨機變數 所有可能取值的自信息 的加權求和:
正如上式所示,隨機變數越是隨機,熵就越大。根據熱力學第二定律,自然界本身無時無刻不處在於一個熵增的過程之中,即不斷走向混沌,而人類的奮斗進程則是對抗自然的熵減過程,他期望變得明確和有序,強化學習的過程也是如此。
一般的,強化學習的目標在於最大化獎勵,即最大化動作狀態價值 ,確定策略可以直接選擇最大 的 來行動,但是這樣就會使得操作模式是固化的,比如訓練一個機械臂去撿東西,實際運動軌跡可以多種多樣,而確定策略就會使這個動作變得很單調。 並且如果是在對抗的環境中,這種固定化的操作也容易被對手利用而存在漏洞,而基於策略 隨機采樣的動作 來行動就可以有效避免這一點,並且 的熵越大,也便代表動作越隨機,越能在同一情況下做出不同的動作,讓對手無法輕易預測,當然在訓練時鼓勵熵增帶來的探索優化的好處也是不言而喻的。
actor-critic方法依賴於策略梯度,目標是利用梯度上升來讓 最大化,因為期望不好求,於是就用蒙特卡洛方法來近似:
假設動作 是 維的,那麼策略 使用 個高斯分布 連乘的方式來近似 :
而其中的 和 使用神經網路來近似:
相對於A3C之類的演算法只給策略網路增加了熵正則,SAC給價值網路也增加了熵正則,這樣鼓勵產生更多的狀態空間,進一步增加了探索性,使得模型更具魯棒性。它的做法是通過修改了普通策略學習的目標函數,在每一步的回報中增加了策略的熵,於是目標就變成了
於是策略梯度就變成了:
然後訓練方式基本和普通的actor-critic架構一致...
如果只是像上面那樣的網路來訓練,很明顯會存在高估的問題,在最大化Q值時會導致高估,而在通過自身網路來計算TD目標的時候又將高估無限傳導進一步導致了高估。因此,為了解決高估問題,我們必須要斬斷這種傳導以及最大化帶來的高估。SAC採用了一個一個類似TD3演算法中的clipped double-Q 技巧。
如上圖所示,SAC使用兩個Q網路,並通過取最小的Q值的方式來避免最大化帶來的高估,並且使用延遲的價值網路(通過Polyak平均)來緩解bootstraping帶來的高估無限傳遞。具體是這樣一個訓練過程:
另外,注意一點,上面提到的那個策略熵平衡系數 可以手工設置超參數,也可以使用自動的方式調整的,工業上傾向於自動的方式。
③ 瓚呭儚緔/浣撶礌鍒嗗壊綆楁硶綆浠
鍦ㄥ浘鍍忓勭悊鐨勫囧欎笘鐣岄噷錛岃秴鍍忕礌灝卞儚鏄灝嗗儚緔犱笌鍥懼儚瀵硅薄涔嬮棿鐨勭晫闄愭ā緋婂寲錛屽艦鎴愪竴涓涓綺劇粏鐨勫皬鍖哄煙錛屾瘡涓鍖哄煙閮芥壙杞界潃楂樺害鐩鎬技鐨勫儚緔犵壒鎬с傛兂璞′竴涓嬶紝涓寮犲浘鐗囪鍒嗗壊鎴愬ぇ灝忓悇寮傜殑瓚呭儚緔犲潡錛屼粠寰瑙傚埌瀹忚傦紝瀹冧滑涔嬮棿鐨勫樊寮傚拰鑱旂郴鎮板埌濂藉勩傝╂垜浠涓璧瘋蛋榪涜秴鍍忕礌鐨勪笘鐣岋紝娣卞叆浜嗚В鍏跺熀鏈瀹氫箟銆佸疄鐜版柟娉曚互鍙婅瘎浠鋒爣鍑嗐
鍩虹瀹氫箟
瓚呭儚緔狅紝欏懼悕鎬濅箟錛屾槸鍥懼儚涓姣斿崟涓鍍忕礌澶с佹瘮鐗╀綋灝忕殑鍖哄煙銆傛瘡涓鍖哄潡鍐呯殑鍍忕礌鍏變韓鐩鎬技鐨勭壒寰侊紝渚嬪備笅鍥炬墍紺猴紝閫氳繃璋冩暣涓嶅悓鐨勯槇鍊礆紝鎴戜滑鍙浠ュ緱鍒頒笉鍚屽ぇ灝忕殑瓚呭儚緔犲垝鍒嗭紝濡64鍧椼256鍧楁垨1024鍧楋紝榪欎簺鍒掑垎浣撶幇浜嗗儚緔犻棿鐨勫眰綰х粨鏋勩
瀹炵幇鏂規硶
瓚呭儚緔/浣撶礌鍒嗗壊綆楁硶鐨勪袱澶у熀鐭蟲槸鍩轟簬鍥捐虹殑絳栫暐鍜屾搴︿笂鍗囩殑鏂規硶銆傚浘璁烘柟娉曞閥濡欏湴榪愮敤浜嗗姩鎬佽勫垝鍜岃竟鐣屾槧灝勶紝鏋勫緩鍥懼儚鐨勫叏灞鏈浼樿礬寰勶紝灞曠幇鍑哄己澶х殑鍥炬悳緔㈡ц兘銆傝屾搴︿笂鍗囧垯鏄浠庣矖緋欑殑鍒濆嬭仛綾誨紑濮嬶紝閫氳繃榪浠d紭鍖栵紝閫愭ョ粏鍖栬秴鍍忕礌鐨勮竟鐣岋紝鐩磋嚦杈懼埌鏀舵暃鏍囧噯銆
瀵規瘮榪欎袱縐嶇畻娉曪紝鍥捐烘柟娉曟洿娉ㄩ噸鍏ㄥ矓緇撴瀯錛岃屾搴︿笂鍗囧垯寮鴻皟灞閮ㄧ殑綺劇粏璋冩暣銆傚畠浠鍚勮嚜鍦ㄤ笉鍚岀殑搴旂敤鍦烘櫙涓鍙戞尌鐫鐙鐗圭殑浣滅敤銆
璇勪環鏍囧噯
璇勪環瓚呭儚緔犲垎鍓茬殑鍑嗙『鎬э紝鎴戜滑閫氬父鍏蟲敞浠ヤ笅鍑犱釜鍏抽敭鎸囨爣錛
榪欎簺鎸囨爣鍏卞悓鏋勬垚浜嗚瘎浠瘋秴鍍忕礌/浣撶礌鍒嗗壊綆楁硶鎬ц兘鐨勫氬厓瑙嗚掞紝甯鍔╂垜浠娣卞叆浜嗚В綆楁硶鐨勪紭鍔c
④ 近端策略優化演算法(PPO)
首先我們回顧一下「策略梯度方法(PG)」和「信賴域策略優化(TRPO)」。
1.策略梯度方法(PG)
策略梯度方法通過計算燃肢策略梯度的估計並利用隨機梯度上升演算法來工作。 最常用的梯度估計形式為:隱鋒
其中 為隨機策略, 是優勢函數在時間步 的估計,在使用自動微分器時,我們的損失函數為:
2.信賴域策略優化(TRPO)
要優化的目標函數如下:
3.近端策略優化演算法(PPO)
PPO1:截斷替代目標
首先,我們令 ,所以 。 的替代目標為
上標 指的是 中的保守政策迭代,如果沒有約束,最大化 將會導致非常大幅度的梯度更新灶段晌。為了懲罰策略的變化(即 遠離1,即新舊策略的KL 散度不能太大),提出了如下的目標
論文中 ,直觀示意圖如下
該演算法的意思為:
當A>0時,如果 ,則 ;如果 ,則 ;
當A<0時,如果 ,則 ;如果 ,則 ;
PPO2:自適應KL懲罰系數
在 中,使用「自適應懲罰系數 」 來約束KL散度,在此演算法的最簡單實例中,我們在每個策略更新中執行以下步驟:
實驗中,PPO2的效果沒有PPO1的效果好
4.演算法
其中 , 是系數, 表示熵獎勵, 是平方誤差損失
優勢估計函數為
另外,我們可以使用廣義優勢函數來擴廣 ,當λ= 1時,它會趨近到等式(7)
使用固定長度軌跡段的近端策略優化(PPO)演算法如下所示。 每次迭代時,N個actor中的每個都收集T個時間步長的數據。 然後我們在這些NT時間步長的數據上構建替代損失,並使用 minibatch SGD(或通常為了更好的性能,Adam )進行K個epochs的優化。