推薦系統(17)—— 強化學習方法概述


0、什么是強化學習

  強化學習是一類算法, 是讓計算機實現從一開始什么都不懂, 腦袋里沒有一點想法, 通過不斷地嘗試, 從錯誤中學習, 最后找到規律, 學會了達到目的的方法. 這就是一個完整的強化學習過程。

  原來計算機也需要一位虛擬的老師, 這個老師比較吝嗇, 他不會告訴你如何移動, 如何做決定, 他為你做的事只有給你的行為打分, 那我們應該以什么形式學習這些現有的資源, 或者說怎么樣只從分數中學習到我應該怎樣做決定呢? 很簡單, 我只需要記住那些高分, 低分對應的行為, 下次用同樣的行為拿高分, 並避免低分的行為.比如老師會根據我的開心程度來打分, 我開心時, 可以得到高分, 我不開心時得到低分. 有了這些被打分的經驗, 我就能判斷為了拿到高分, 我應該選擇一張開心的臉, 避免選到傷心的臉. 這也是強化學習的核心思想. 可以看出在強化學習中, 一種行為的分數是十分重要的. 所以強化學習具有分數導向性. 我們換一個角度來思考.這種分數導向性好比我們在監督學習中的正確標簽.

  我們知道監督學習, 是已經有了數據和數據對應的正確標簽, 比如這樣. 監督學習就能學習出那些臉對應哪種標簽. 不過強化學習還要更進一步, 一開始它並沒有數據和標簽.他要通過一次次在環境中的嘗試, 獲取這些數據和標簽, 然后再學習通過哪些數據能夠對應哪些標簽, 通過學習到的這些規律, 竟可能地選擇帶來高分的行為 (比如這里的開心臉). 這也就證明了在強化學習中, 分數標簽就是他的老師, 他和監督學習中的老師也差不多.

  方法匯總:

  (1)Modelfree 和 Modelbased 

  Modelfree:不嘗試去理解環境, 環境給了我們什么就是什么;方法有很多, 像 Q learningSarsaPolicy Gradients 都是從環境中得到反饋然后從中學習,機器人只能按部就班, 一步一步等待真實世界的反饋, 再根據反饋采取下一步行動。

  Modelbased:model 就是用模型來表示環境, 那理解了環境也就是學會了用一個模型來代表環境;只是多了一道程序, 為真實世界建模, 也可以說他們都是 model-free 的強化學習, 只是 model-based 多出了一個虛擬環境, 我們不僅可以像 model-free 那樣在現實中玩耍,還能在游戲中玩耍, 而玩耍的方式也都是 model-free 中那些玩耍方式, 最終 model-based 還有一個殺手鐧是 model-free 超級羡慕的. 那就是想象力他能通過想象來預判斷接下來將要發生的所有情況. 然后選擇這些想象情況中最好的那種. 並依據這種情況來采取下一步的策略。

  (2)基於概率 和 基於價值

  基於概率:強化學習中最直接的一種, 他能通過感官分析所處的環境, 直接輸出下一步要采取的各種動作的概率, 然后根據概率采取行動, 所以每種動作都有可能被選中, 只是可能性不同。我們現在說的動作都是一個一個不連續的動作, 而對於選取連續的動作, 基於價值的方法是無能為力的. 我們卻能用一個概率分布在連續動作中選取特定動作, 這也是基於概率的方法的優點之一。方法有:Policy Gradients

  基於價值:輸出則是所有動作的價值, 我們會根據最高價值來選着動作, 相比基於概率的方法, 基於價值的決策部分更為鐵定, 毫不留情, 就選價值最高的, 而基於概率的, 即使某個動作的概率最高, 但是還是不一定會選到他.方法有: Q learningSarsa 

  我們還能結合這兩類方法的優勢之處, 創造更牛逼的一種方法, 叫做 Actor-Critic, actor 會基於概率做出動作, 而 critic 會對做出的動作給出動作的價值, 這樣就在原有的 policy gradients 上加速了學習過程.

  (3)回合更新 和 單步更新

  回合更新:游戲開始后, 我們要等待游戲結束, 然后再總結這一回合中的所有轉折點, 再更新我們的行為准則;

  單步更新:在游戲進行中每一步都在更新, 不用等待游戲的結束, 這樣我們就能邊玩邊學習了;因為單步更新更有效率, 所以現在大多方法都是基於單步更新. 比如有的強化學習問題並不屬於回合問題.Qlearning, Sarsa, 升級版的 policy gradients 等都是單步更新制。

  (4)在線學習和離線學習

  在線學習:指我必須本人在場, 並且一定是本人邊玩邊學習,方法: Sarsa 了, 還有一種優化 Sarsa 的算法, 叫做 Sarsa lambda;

  離線學習:你可以選擇自己玩, 也可以選擇看着別人玩, 通過看別人玩來學習別人的行為准則, 離線學習 同樣是從過往的經驗中學習, 但是這些過往的經歷沒必要是自己的經歷, 任何人的經歷都能被學習. 或者我也不必要邊玩邊學習, 我可以白天先存儲下來玩耍時的記憶, 然后晚上通過離線學習來學習白天的記憶。方法:Q learning, 后來人也根據離線學習的屬性, 開發了更強大的算法, 比如讓計算機學會玩電動的 Deep-Q-Network.  

1、Q-learning

(1)算法原理

  假設現在我們處於寫作業的狀態而且我們以前並沒有嘗試過寫作業時看電視, 所以現在我們有兩種選擇 , 1, 繼續寫作業, 2, 跑去看電視. 因為以前沒有被罰過, 所以我選看電視, 然后現在的狀態變成了看電視, 我又選了 繼續看電視, 接着我還是看電視, 最后爸媽回家, 發現我沒寫完作業就去看電視了, 狠狠地懲罰了我一次, 我也深刻地記下了這一次經歷, 並在我的腦海中將 “沒寫完作業就看電視” 這種行為更改為負面行為, 我們在看看 Q learning 根據很多這樣的經歷是如何來決策的吧.

  假設我們的行為准則已經學習好了, 現在我們處於狀態s1, 我在寫作業, 我有兩個行為 a1, a2, 分別是看電視和寫作業, 根據我的經驗, 在這種 s1 狀態下, a2 寫作業 帶來的潛在獎勵要比 a1 看電視高, 這里的潛在獎勵我們可以用一個有關於 s 和 a 的 Q 表格代替, 在我的記憶Q表格中, Q(s1, a1)=-2 要小於 Q(s1, a2)=1, 所以我們判斷要選擇 a2 作為下一個行為. 現在我們的狀態更新成 s2 , 我們還是有兩個同樣的選擇, 重復上面的過程, 在行為准則Q 表中尋找 Q(s2, a1) Q(s2, a2) 的值, 並比較他們的大小, 選取較大的一個. 接着根據 a2 我們到達 s3 並在此重復上面的決策過程. Q learning 的方法也就是這樣決策的.

(2)策略更新

  所以我們回到之前的流程, 根據 Q 表的估計, 因為在 s1 中, a2 的值比較大, 通過之前的決策方法, 我們在 s1 采取了 a2, 並到達 s2, 這時我們開始更新用於決策的 Q 表, 接着我們並沒有在實際中采取任何行為, 而是再想象自己在 s2 上采取了每種行為, 分別看看兩種行為哪一個的 Q 值大, 比如說 Q(s2, a2) 的值比 Q(s2, a1) 的大, 所以我們把大的 Q(s2, a2) 乘上一個衰減值 gamma (比如是0.9) 並加上到達s2時所獲取的獎勵 R (這里還沒有獲取到我們的棒棒糖, 所以獎勵為 0), 因為會獲取實實在在的獎勵 R , 我們將這個作為我現實中 Q(s1, a2) 的值, 但是我們之前是根據 Q 表估計 Q(s1, a2) 的值. 所以有了現實和估計值, 我們就能更新Q(s1, a2) , 根據 估計與現實的差距, 將這個差距乘以一個學習效率 alpha 累加上老的 Q(s1, a2) 的值 變成新的值. 但時刻記住, 我們雖然用 maxQ(s2) 估算了一下 s2 狀態, 但還沒有在 s2 做出任何的行為, s2 的行為決策要等到更新完了以后再重新另外做. 這就是 off-policy 的 Q learning 是如何決策和學習優化決策的過程.

  

(3)整體算法

  這一張圖概括了我們之前所有的內容. 這也是 Q learning 的算法, 每次更新我們都用到了 Q 現實和 Q 估計, 而且 Q learning 的迷人之處就是 在 Q(s1, a2) 現實 中, 也包含了一個 Q(s2) 的最大估計值, 將對下一步的衰減的最大估計和當前所得到的獎勵當成這一步的現實, 很奇妙吧. 最后我們來說說這套算法中一些參數的意義. Epsilon greedy 是用在決策上的一種策略, 比如 epsilon = 0.9 時, 就說明有90% 的情況我會按照 Q 表的最優值選擇行為, 10% 的時間使用隨機選行為. alpha是學習率, 來決定這次的誤差有多少是要被學習的, alpha是一個小於1 的數. gamma 是對未來 reward 的衰減值. 我們可以這樣想象.

  公式中gamma的理解:為了讓rl不僅看眼前利益,也看長遠利益。

  Q(s1) 是有關於之后所有的獎勵, 但這些獎勵正在衰減, 離 s1 越遠的狀態衰減越嚴重. 不好理解? 行, 我們想象 Qlearning 的機器人天生近視眼, gamma = 1 時, 機器人有了一副合適的眼鏡, 在 s1 看到的 Q 是未來沒有任何衰變的獎勵, 也就是機器人能清清楚楚地看到之后所有步的全部價值, 但是當 gamma =0, 近視機器人沒了眼鏡, 只能摸到眼前的 reward, 同樣也就只在乎最近的大獎勵, 如果 gamma 從 0 變到 1, 眼鏡的度數由淺變深, 對遠處的價值看得越清楚, 所以機器人漸漸變得有遠見, 不僅僅只看眼前的利益, 也為自己的未來着想.

3、Sarsa

4、DQN(Deep Q Network )

  一種融合了神經網絡和 Q learning 的方法, 名字叫做 Deep Q Network 。

(1)算法原理

  我們使用表格來存儲每一個狀態 state, 和在這個 state 每個行為 action 所擁有的 Q 值. 而當今問題是在太復雜, 狀態可以多到比天上的星星還多(比如下圍棋). 如果全用表格來存儲它們, 恐怕我們的計算機有再大的內存都不夠, 而且每次在這么大的表格中搜索對應的狀態也是一件很耗時的事. 不過, 在機器學習中, 有一種方法對這種事情很在行, 那就是神經網絡. 我們可以將狀態和動作當成神經網絡的輸入, 然后經過神經網絡分析后得到動作的 Q 值, 這樣我們就沒必要在表格中記錄 Q 值, 而是直接使用神經網絡生成 Q 值. 還有一種形式的是這樣, 我們也能只輸入狀態值, 輸出所有的動作值, 然后按照 Q learning 的原則, 直接選擇擁有最大值的動作當做下一步要做的動作. 我們可以想象, 神經網絡接受外部的信息, 相當於眼睛鼻子耳朵收集信息, 然后通過大腦加工輸出每種動作的值, 最后通過強化學習的方式選擇動作.

 

(2)策略更新

  接下來我們基於第二種神經網絡來分析, 我們知道, 神經網絡是要被訓練才能預測出准確的值. 那在強化學習中, 神經網絡是如何被訓練的呢? 首先, 我們需要 a1, a2 正確的Q值, 這個 Q 值我們就用之前在 Q learning 中的 Q 現實來代替. 同樣我們還需要一個 Q 估計 來實現神經網絡的更新. 所以神經網絡的的參數就是老的 NN 參數 加學習率 alpha 乘以 Q 現實 和 Q 估計 的差距. 我們整理一下.

  我們通過 NN 預測出Q(s2, a1) 和 Q(s2,a2) 的值, 這就是 Q 估計. 然后我們選取 Q 估計中最大值的動作來換取環境中的獎勵 reward. 而 Q 現實中也包含從神經網絡分析出來的兩個 Q 估計值, 不過這個 Q 估計是針對於下一步在 s' 的估計. 最后再通過剛剛所說的算法更新神經網絡中的參數. 但是這並不是 DQN 會玩電動的根本原因. 還有兩大因素支撐着 DQN 使得它變得無比強大. 這兩大因素就是 Experience replay 和 Fixed Q-targets.

 

(3)關鍵問題

  簡單來說, DQN 有一個記憶庫用於學習之前的經歷. 在之前的簡介影片中提到過, Q learning 是一種 off-policy 離線學習法, 它能學習當前經歷着的, 也能學習過去經歷過的, 甚至是學習別人的經歷. 所以每次 DQN 更新的時候, 我們都可以隨機抽取一些之前的經歷進行學習. 隨機抽取這種做法打亂了經歷之間的相關性, 也使得神經網絡更新更有效率. Fixed Q-targets 也是一種打亂相關性的機理, 如果使用 fixed Q-targets, 我們就會在 DQN 中使用到兩個結構相同但參數不同的神經網絡, 預測 Q 估計 的神經網絡具備最新的參數, 而預測 Q 現實 的神經網絡使用的參數則是很久以前的. 有了這兩種提升手段, DQN 才能在一些游戲中超越人類.

 5、Policy Gradients

  強化學習是一個通過獎懲來學習正確行為的機制. 家族中有很多種不一樣的成員, 有學習獎懲值, 根據自己認為的高價值選行為, 比如 Q learningDeep Q Network, 也有不通過分析獎勵值, 直接輸出行為的方法, 這就是今天要說的 Policy Gradients 了. 甚至我們可以為 Policy Gradients 加上一個神經網絡來輸出預測的動作. 

(1)算法原理

  對比起以值為基礎的方法, Policy Gradients 直接輸出動作的最大好處就是, 它能在一個連續區間內挑選動作, 而基於值的, 比如 Q-learning, 它如果在無窮多的動作中計算價值, 從而選擇行為, 這, 它可吃不消. 有了神經網絡當然方便, 但是, 我們怎么進行神經網絡的誤差反向傳遞呢? Policy Gradients 的誤差又是什么呢? 答案是! 哈哈, 沒有誤差! 但是他的確是在進行某一種的反向傳遞. 這種反向傳遞的目的是讓這次被選中的行為更有可能在下次發生. 但是我們要怎么確定這個行為是不是應當被增加被選的概率呢? 這時候我們的老朋友, reward 獎懲正可以在這時候派上用場。

  觀測的信息通過神經網絡分析, 選出了左邊的行為, 我們直接進行反向傳遞, 使之下次被選的可能性增加, 但是獎懲信息卻告訴我們, 這次的行為是不好的, 那我們的動作可能性增加的幅度 隨之被減低. 這樣就能靠獎勵來左右我們的神經網絡反向傳遞. 我們再來舉個例子, 假如這次的觀測信息讓神經網絡選擇了右邊的行為, 右邊的行為隨之想要進行反向傳遞, 使右邊的行為下次被多選一點, 這時, 獎懲信息也來了, 告訴我們這是好行為, 那我們就在這次反向傳遞的時候加大力度, 讓它下次被多選的幅度更猛烈! 這就是 Policy Gradients 的核心思想了. 很簡單吧.

  優勢:輸出的這個 action 可以是一個連續的值, 之前我們說到的 value-based 方法輸出的都是不連續的值, 然后再選擇值最大的 action. 而 policy gradient 可以在一個連續分布上選取 action.

 6、Actor Critic

  強化學習中的一種結合體 Actor Critic (演員評判家), 它合並了 以值為基礎 (比如 Q learning) 和 以動作概率為基礎 (比如 Policy Gradients) 兩類強化學習算法.

  我們有了像 Q-learning 這么偉大的算法, 為什么還要瞎折騰出一個 Actor-Critic? 原來 Actor-Critic 的 Actor 的前生是 Policy Gradients, 這能讓它毫不費力地在連續動作中選取合適的動作, 而 Q-learning 做這件事會癱瘓. 那為什么不直接用 Policy Gradients 呢? 原來 Actor Critic 中的 Critic 的前生是 Q-learning 或者其他的 以值為基礎的學習法 , 能進行單步更新, 而傳統的 Policy Gradients 則是回合更新, 這降低了學習效率.

  現在我們有兩套不同的體系, Actor 和 Critic, 他們都能用不同的神經網絡來代替 . 在 Policy Gradients 的影片中提到過, 現實中的獎懲會左右 Actor 的更新情況. Policy Gradients 也是靠着這個來獲取適宜的更新. 那么何時會有獎懲這種信息能不能被學習呢? 這看起來不就是 以值為基礎的強化學習方法做過的事嗎. 那我們就拿一個 Critic 去學習這些獎懲機制, 學習完了以后. 由 Actor 來指手畫腳, 由 Critic 來告訴 Actor 你的那些指手畫腳哪些指得好, 哪些指得差, Critic 通過學習環境和獎勵之間的關系, 能看到現在所處狀態的潛在獎勵, 所以用它來指點 Actor 便能使 Actor 每一步都在更新, 如果使用單純的 Policy Gradients, Actor 只能等到回合結束才能開始更新.

  但是事物終有它壞的一面, Actor-Critic 涉及到了兩個神經網絡, 而且每次都是在連續狀態中更新參數, 每次參數更新前后都存在相關性, 導致神經網絡只能片面的看待問題, 甚至導致神經網絡學不到東西. Google DeepMind 為了解決這個問題, 修改了 Actor Critic 的算法,將之前在電動游戲 Atari 上獲得成功的 DQN 網絡加入進 Actor Critic 系統中, 這種新算法叫做 Deep Deterministic Policy Gradient, 成功的解決的在連續動作預測上的學不到東西問題. 所以之后, 我們再來說說什么是這種高級版本的 Deep Deterministic Policy Gradient 吧.

(1)算法原理

  結合了 Policy Gradient (Actor) 和 Function Approximation (Critic) 的方法. Actor 基於概率選行為, Critic 基於 Actor 的行為評判行為的得分, Actor 根據 Critic 的評分修改選行為的概率.

  Actor Critic 方法的優勢: 可以進行單步更新, 比傳統的 Policy Gradient 要快.

  Actor Critic 方法的劣勢: 取決於 Critic 的價值判斷, 但是 Critic 難收斂, 再加上 Actor 的更新, 就更難收斂. 為了解決收斂問題, Google Deepmind 提出了 Actor Critic 升級版 Deep Deterministic Policy Gradient. 后者融合了 DQN 的優勢, 解決了收斂難的問題。

  Actor 在運用 Policy Gradient 的方法進行 Gradient ascent 的時候, 由 Critic 來告訴他, 這次的 Gradient ascent 是不是一次正確的 ascent, 如果這次的得分不好, 那么就不要 ascent 那么多.

 (2)策略更新

 詳見教程:代碼 & github

 7、Deep Deterministic Policy Gradient (DDPG)

  它吸收了 Actor-Critic 讓 Policy gradient 單步更新的精華, 而且還吸收讓計算機學會玩游戲的 DQN 的精華, 合並成了一種新算法, 叫做 Deep Deterministic Policy Gradient. 那 DDPG 到底是什么樣的算法呢, 我們就拆開來分析, 我們將 DDPG 分成 ‘Deep’ 和 ‘Deterministic Policy Gradient’, 然后 ‘Deterministic Policy Gradient’ 又能被細分為 ‘Deterministic’ 和 ‘Policy Gradient’.

  我們在 DQN 的影片當中提到過, 使用一個記憶庫和兩套結構相同, 但參數更新頻率不同的神經網絡能有效促進學習. 那我們也把這種思想運用到 DDPG 當中, 使 DDPG 也具備這種優良形式. 但是 DDPG 的神經網絡形式卻比 DQN 的要復雜一點點.

(1)算法原理

  它其實和我們之前提到的 Actor-Critic 形式差不多, 也需要有基於 策略 Policy 的神經網絡 和基於 價值 Value 的神經網絡, 但是為了體現 DQN 的思想, 每種神經網絡我們都需要再細分為兩個, Policy Gradient 這邊, 我們有估計網絡和現實網絡, 估計網絡用來輸出實時的動作, 供 actor 在現實中實行. 而現實網絡則是用來更新價值網絡系統的. 所以我們再來看看價值系統這邊, 我們也有現實網絡和估計網絡, 他們都在輸出這個狀態的價值, 而輸入端卻有不同, 狀態現實網絡這邊會拿着從動作現實網絡來的動作加上狀態的觀測值加以分析, 而狀態估計網絡則是拿着當時 Actor 施加的動作當做輸入.在實際運用中, DDPG 的這種做法的確帶來了更有效的學習過程.

 

  一句話概括 DDPG: Google DeepMind 提出的一種使用 Actor Critic 結構, 但是輸出的不是行為的概率, 而是具體的行為, 用於連續動作 (continuous action) 的預測. DDPG 結合了之前獲得成功的 DQN 結構, 提高了 Actor Critic 的穩定性和收斂性.

(2)策略迭代

  關於 Actor 部分, 他的參數更新同樣會涉及到 Critic, 上面是關於 Actor 參數的更新, 它的前半部分 grad[Q] 是從 Critic 來的, 這是在說: 這次 Actor 的動作要怎么移動, 才能獲得更大的 Q, 而后半部分 grad[u] 是從 Actor 來的, 這是在說: Actor 要怎么樣修改自身參數, 使得 Actor 更有可能做這個動作. 所以兩者合起來就是在說: Actor 要朝着更有可能獲取大 Q 的方向修改動作參數了

 

  上面這個是關於 Critic 的更新, 它借鑒了 DQN 和 Double Q learning 的方式, 有兩個計算 Q 的神經網絡, Q_target 中依據下一狀態, 用 Actor 來選擇動作, 而這時的 Actor 也是一個 Actor_target (有着 Actor 很久之前的參數). 使用這種方法獲得的 Q_target 能像 DQN 那樣切斷相關性, 提高收斂性.

  網絡結構:

 

具體實現代碼:莫煩代碼庫 

 

參考文獻:

  1、莫煩課程

  2、CSDN相關講解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM