開發者自述:我是這樣理解強化學習的

2020-12-25 雷鋒網

雷鋒網按:本文作者楊熹,原載於作者個人博客,雷鋒網(公眾號:雷鋒網)經授權發布。

雖然是周末,也保持充電,今天來看看強化學習,不過不是要用它來玩遊戲,而是覺得它在製造業,庫存,電商,廣告,推薦,金融,醫療等與我們生活息息相關的領域也有很好的應用,當然要了解一下了。

  定義

強化學習是機器學習的一個重要分支,是多學科多領域交叉的一個產物,它的本質是解決 decision making 問題,即自動進行決策,並且可以做連續決策。

它主要包含四個元素,agent,環境狀態,行動,獎勵,強化學習的目標就是獲得最多的累計獎勵。

讓我們以小孩學習走路來做個形象的例子:

小孩想要走路,但在這之前,他需要先站起來,站起來之後還要保持平衡,接下來還要先邁出一條腿,是左腿還是右腿,邁出一步後還要邁出下一步。

小孩就是 agent,他試圖通過採取行動(即行走)來操縱環境(行走的表面),並且從一個狀態轉變到另一個狀態(即他走的每一步),當他完成任務的子任務(即走了幾步)時,孩子得到獎勵(給巧克力吃),並且當他不能走路時,就不會給巧克力。

  和監督式學習, 非監督式學習的區別

在機器學習中,我們比較熟知的是監督式學習,非監督學習,此外還有一個大類就是強化學習:

強化學習和監督式學習的區別

監督式學習就好比你在學習的時候,有一個導師在旁邊指點,他知道怎麼是對的怎麼是錯的,但在很多實際問題中,例如 chess,Go,這種有成千上萬種組合方式的情況,不可能有一個導師知道所有可能的結果。

而這時,強化學習會在沒有任何標籤的情況下,通過先嘗試做出一些行為得到一個結果,通過這個結果是對還是錯的反饋,調整之前的行為,就這樣不斷的調整,算法能夠學習到在什麼樣的情況下選擇什麼樣的行為可以得到最好的結果。

就好比你有一隻還沒有訓練好的小狗,每當它把屋子弄亂後,就減少美味食物的數量(懲罰),每次表現不錯時,就加倍美味食物的數量(獎勵),那麼小狗最終會學到一個知識,就是把客廳弄亂是不好的行為。

兩種學習方式都會學習出輸入到輸出的一個映射,監督式學習出的是之間的關係,可以告訴算法什麼樣的輸入對應著什麼樣的輸出,強化學習出的是給機器的反饋 reward function,即用來判斷這個行為是好是壞。

另外強化學習的結果反饋有延時,有時候可能需要走了很多步以後才知道以前的某一步的選擇是好還是壞,而監督學習做了比較壞的選擇會立刻反饋給算法。

而且強化學習面對的輸入總是在變化,每當算法做出一個行為,它影響下一次決策的輸入,而監督學習的輸入是獨立同分布的。

通過強化學習,一個 agent 可以在探索和開發(exploration and exploitation)之間做權衡,並且選擇一個最大的回報。 

exploration 會嘗試很多不同的事情,看它們是否比以前嘗試過的更好。 

exploitation 會嘗試過去經驗中最有效的行為。

一般的監督學習算法不考慮這種平衡,就只是是 exploitative。

強化學習和非監督式學習的區別:

非監督式不是學習輸入到輸出的映射,而是模式。例如在向用戶推薦新聞文章的任務中,非監督式會找到用戶先前已經閱讀過類似的文章並向他們推薦其一,而強化學習將通過向用戶先推薦少量的新聞,並不斷獲得來自用戶的反饋,最後構建用戶可能會喜歡的文章的「知識圖」。

  主要算法和分類

從強化學習的幾個元素的角度劃分的話,方法主要有下面幾類:

  • Policy based, 關注點是找到最優策略。

  • Value based, 關注點是找到最優獎勵總和。

  • Action based, 關注點是每一步的最優行動。

我們可以用一個最熟知的旅行商例子來看,

我們要從 A 走到 F,每兩點之間表示這條路的成本,我們要選擇路徑讓成本越低越好:

那麼幾大元素分別是:

  • states ,就是節點 {A, B, C, D, E, F}

  • action ,就是從一點走到下一點 {A -> B, C -> D, etc}

  • reward function ,就是邊上的 cost

  • policy,就是完成任務的整條路徑 {A -> C -> F}

有一種走法是這樣的,在 A 時,可以選的 (B, C, D, E),發現 D 最優,就走到 D,此時,可以選的 (B, C, F),發現 F 最優,就走到 F,此時完成任務。 

這個算法就是強化學習的一種,叫做 epsilon greedy,是一種 Policy based 的方法,當然了這個路徑並不是最優的走法。

此外還可以從不同角度使分類更細一些:

如下圖所示的四種分類方式,分別對應著相應的主要算法:

Model-free:不嘗試去理解環境, 環境給什麼就是什麼,一步一步等待真實世界的反饋, 再根據反饋採取下一步行動。

Model-based:先理解真實世界是怎樣的, 並建立一個模型來模擬現實世界的反饋,通過想像來預判斷接下來將要發生的所有情況,然後選擇這些想像情況中最好的那種,並依據這種情況來採取下一步的策略。它比 Model-free 多出了一個虛擬環境,還有想像力。

Policy based:通過感官分析所處的環境, 直接輸出下一步要採取的各種動作的概率, 然後根據概率採取行動。

Value based:輸出的是所有動作的價值, 根據最高價值來選動作,這類方法不能選取連續的動作。

Monte-carlo update:遊戲開始後, 要等待遊戲結束, 然後再總結這一回合中的所有轉折點, 再更新行為準則。

Temporal-difference update:在遊戲進行中每一步都在更新, 不用等待遊戲的結束, 這樣就能邊玩邊學習了。

On-policy:必須本人在場, 並且一定是本人邊玩邊學習。

Off-policy:可以選擇自己玩, 也可以選擇看著別人玩, 通過看別人玩來學習別人的行為準則。

主要算法有下面幾種,今天先只是簡述:

1. Sarsa

Q 為動作效用函數(action-utility function),用於評價在特定狀態下採取某個動作的優劣,可以將之理解為智能體(Agent)的大腦。

SARSA 利用馬爾科夫性質,只利用了下一步信息, 讓系統按照策略指引進行探索,在探索每一步都進行狀態價值的更新,更新公式如下所示:

s 為當前狀態,a 是當前採取的動作,s』 為下一步狀態,a』 是下一個狀態採取的動作,r 是系統獲得的獎勵, α 是學習率, γ 是衰減因子。

2. Q learning

Q Learning 的算法框架和 SARSA 類似, 也是讓系統按照策略指引進行探索,在探索每一步都進行狀態價值的更新。關鍵在於 Q Learning 和 SARSA 的更新公式不一樣,Q Learning 的更新公式如下:

3. Policy Gradients

系統會從一個固定或者隨機起始狀態出發,策略梯度讓系統探索環境,生成一個從起始狀態到終止狀態的狀態-動作-獎勵序列,s1,a1,r1,.....,sT,aT,rT,在第 t 時刻,我們讓 gt=rt+γrt+1+... 等於 q(st,a) ,從而求解策略梯度優化問題。

4. Actor-Critic

算法分為兩個部分:Actor 和 Critic。Actor 更新策略, Critic 更新價值。Critic 就可以用之前介紹的 SARSA 或者 Q Learning 算法。

5. Monte-carlo learning

用當前策略探索產生一個完整的狀態-動作-獎勵序列: 

s1,a1,r1,....,sk,ak,rk~π

在序列第一次碰到或者每次碰到一個狀態 s 時,計算其衰減獎勵:

最後更新狀態價值:

6. Deep-Q-Network

DQN 算法的主要做法是 Experience Replay,將系統探索環境得到的數據儲存起來,然後隨機採樣樣本更新深度神經網絡的參數。它也是在每個 action 和 environment state 下達到最大回報,不同的是加了一些改進,加入了經驗回放和決鬥網絡架構。

 

  應用舉例

強化學習有很多應用,除了無人駕駛,AlphaGo,玩遊戲之外,還有下面這些工程中實用的例子:

1. Manufacturing

例如一家日本公司 Fanuc,工廠機器人在拿起一個物體時,會捕捉這個過程的視頻,記住它每次操作的行動,操作成功還是失敗了,積累經驗,下一次可以更快更準地採取行動。

2. Inventory Management

在庫存管理中,因為庫存量大,庫存需求波動較大,庫存補貨速度緩慢等阻礙使得管理是個比較難的問題,可以通過建立強化學習算法來減少庫存周轉時間,提高空間利用率。

3. Dynamic pricing

強化學習中的 Q-learning 可以用來處理動態定價問題。

4. Customer Delivery

製造商在向各個客戶運輸時,想要在滿足客戶的所有需求的同時降低車隊總成本。通過 multi-agents 系統和 Q-learning,可以降低時間,減少車輛數量。

5. ECommerce Personalization

在電商中,也可以用強化學習算法來學習和分析顧客行為,定製產品和服務以滿足客戶的個性化需求。

6. Ad Serving

例如算法 LinUCB (屬於強化學習算法 bandit 的一種算法),會嘗試投放更廣範圍的廣告,儘管過去還沒有被瀏覽很多,能夠更好地估計真實的點擊率。

再如雙 11 推薦場景中,阿里巴巴使用了深度強化學習與自適應在線學習,通過持續機器學習和模型優化建立決策引擎,對海量用戶行為以及百億級商品特徵進行實時分析,幫助每一個用戶迅速發現寶貝,提高人和商品的配對效率。還有,利用強化學習將手機用戶點擊率提升了 10-20%。

7. Financial Investment Decisions

例如這家公司 Pit.ai,應用強化學習來評價交易策略,可以幫助用戶建立交易策略,並幫助他們實現其投資目標。

8. Medical Industry

動態治療方案(DTR)是醫學研究的一個主題,是為了給患者找到有效的治療方法。 例如癌症這種需要長期施藥的治療,強化學習算法可以將患者的各種臨床指標作為輸入 來制定治療策略。

  學習資料

上面簡單地介紹了強化學習的概念,區別,主要算法,下面是一些學習資源,供參考:

  • Udacity 課程:Machine Learning: Reinforcement Learning,Reinforcement Learning;

  • 經典教科書:Sutton & Barto Textbook: Reinforcement Learning: An Introduction 被引用2萬多次

    http://t.cn/Raif2sl

  • UC Berkeley開發的經典的入門課程作業-編程玩「吃豆人」遊戲:Berkeley Pac-Man Project (CS188 Intro to AI)

  • Stanford開發的入門課程作業-簡化版無人車駕駛:Car Tracking (CS221 AI: Principles and Techniques) 

  • 5.CS 294: Deep Reinforcement Learning, Fall 2015 CS 294 Deep Reinforcement Learning, Fall 2015。

  • David Silver強化學習:

    http://t.cn/Rw0rwtU

  參考文章

http://www.jianshu.com/p/14625de78455

http://www.jianshu.com/p/2100cc577a46

https://www.marutitech.com/businesses-reinforcement-learning/ 

https://www.analyticsvidhya.com/blog/2017/01/introduction-to-reinforcement-learning-implementation/

https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/4-02-RL-methods/ 

https://www.zhihu.com/question/41775291 

http://www.algorithmdog.com/reinforcement-learning-model-free-learning

雷鋒網相關閱讀:

環境也能強化學習,智能體要找不著北了,UCL汪軍團隊提出環境設計的新方法

監督學習×強化學習,Facebook讓聊天機器人學會談判

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 強化學習、聯邦學習、圖神經網絡,飛槳全新工具組件詳解
    機器之心發布機器之心編輯部11 月 5 日,在 Wave Summit+2019 秋季深度學習開發者峰會上,飛槳全新發布和重要升級了最新的 21 項進展,在深度學習開發者社區引起了巨大的反響。此外,框架提供了定製化接口,若內置工具、主幹網絡和任務無法滿足需求,開發者可以輕鬆完成相關組件的自定義。框架中內置了豐富的主幹網絡及其預訓練模型(BERT、ERNIE 等)、常見的任務範式(分類、匹配、機器閱讀理解等)和相應的數據集讀取與處理工具。框架運行的基本原理圖如下圖所示:框架支持基於配置和基於 API 這兩種使用方式。
  • 強化學習通俗理解系列一:馬爾科夫獎賞過程MRP
    本文寫作目的:儘量通俗講解強化學習知識,使讀者不會被各種概念嚇倒!本文是第一篇,但是最關鍵的一篇是第二篇馬爾科夫決策過程(Markov Decision Process,MDP),只有充分理解了馬爾科夫決策過程,才能遊刃有餘的學習後續知識,所以希望讀者能夠將MDP深入理解後再去學習後續內容。
  • ASP.NET Core開發者成長路線圖
    (https://github.com/MoienTajik/AspNetCore-Developer-Roadmap/blob/master/ReadMe.zh-Hans.md)2019年ASP.NET Core開發者指南你可以在下面找到一張圖,該圖展示了你可以選取的路徑及你想學習的庫,從而成為一名 ASP.NET Core
  • Android 開發者自述:為什麼我要改用 Kotlin?
    不如讓我們聽聽開發者是怎麼說的。本文原載於,原標題為《為什麼我要改用Kotlin》。本文作者為中國Android研發工程師段建華。極客公園已經獲得轉載授權。droidyue.com(技術小黑屋)Flipboard寫在前面的話,作為一個不熬夜的人,一覺醒來發現Kotlin成為了Android的官方語言,可謂是大喜過望。
  • 強化學習:DQN與Double DQN討論
    這個算法就是著名的 DQN 算法,DQN 是第一個成功地將深度學習和強化學習結合起來的模型,本文將對DQN及其變種進行簡單的討論。本文選自《深入淺出強化學習:原理入門》一書,了解本書詳情請點擊閱讀原文。
  • 【活動回顧】用TensorFlow做強化學習
    這是我們算法的一個細節部分,同樣我們也可以用一些算法來輔助我們強化學習更高效準確的運行,比如一些非監督學習,能夠讓我們環境理解的更好;比如attention and memory一些回放機制可以幫助我們讓強化學習獲得一些性能上的提升;比如multi-agent RL是可以幫我們實現一個多目標多代理的執行,有效的幫我們提高強化學習的運行速度的。最外層就是我們強化學習的一些應用模塊。
  • 強化學習通俗理解系列二:馬爾科夫決策過程MDP
    前面系列一我把馬爾科夫獎賞過程的全部內容講完了,下面開始分析馬爾科夫決策過程,寫作思路依然是參考Divad Silver強化學習課程ppt,由於本人水平有限,如有問題,歡迎指正,我即時修改,謝謝!        本文思路: 1. 馬爾科夫決策過程的基本定義 2. 策略policy 3. 策略policy進階 4. 值函數 5.
  • 互動體驗樂趣多,百度深度學習開發者峰會打造開發者樂園
    NoNoNo,這是12月20日百度在北京舉辦的WAVE SUMMIT+2020深度學習開發者峰會現場實況。(圖:WAVE SUMMIT+2020深度學習開發者峰會展區現場)作為面向深度學習開發者一年兩次的技術盛會,WAVE SUMMIT+2020除了滿滿的技術乾貨和「全明星」嘉賓陣容,現場還設置了「開發者互動」和「生態合作夥伴」兩個展區,十來個玩了還想玩的互動項目吸引著開發者前來體驗。
  • 帶你走進強化學習-Flappy Bird遊戲自學習
    2017年AlphaZero的出現,帶來了強化學習強有力的聲音,展示了一種更接近人類學習方式的方法,「自我訓練」一個帶有科幻色彩的名詞在AI時代變成了可能。今天就通過一個熱門的Flappy Bird遊戲的自學習過程,也就是教程序學會打這個遊戲,通過這個實例帶大家走進強化學習。
  • Java開發者必備十大學習網站
    作為開發者來說,必備的除了對編碼的熱情還要有自己的一套技巧,另外不可缺少的就是平時學習的網站。
  • 百度再放「必殺技」 為開發者提供PaddlePaddle最全教程
    深度學習教育聯盟由百度牽頭成立,旨在全方位支持深度學習人才培養。深度學習教育聯盟將為開發者提供包括內容、渠道、平臺、科研、賽事、資金等多方面支持,幫助感興趣的開發者快速轉型為合格的深度學習工程師。除此之外,深度學習教育聯盟其他合作夥伴也在陸續製作深度學習入門與實踐、PaddlePaddle實戰、PaddlePaddle應用場景、AI趣味課堂等五大部分上百小時的視頻課程,且所有內容均免費向開發者開放,充分滿足開發者全方位的學習需求。作為百度自主研發的深度學習平臺,PaddlePaddle的易學易用和靈活高效極大地降低了開發者的研發門檻。
  • 強化學習總體介紹-初步搭建強化學習理論體系(一)
    前言兩年前接觸強化學習是通過莫煩的課程,那時候對強化學習整體有一個基礎的認識,最近聽了David Silver的課程後又建立起了完整的強化學習體系,故連載
  • 開發者和IT人士成為數據科學家的學習路線
    摘要:這篇指南旨在幫助WEB開發者、軟體工程師以及其他的IT從業者轉行到數據分析/數據科學行業。上周我做客一所印度的知名學府發表演講,超過60%的學生已經是經驗豐富的IT專業人士,這當然一點也不令我驚訝。
  • 關乎更好的決策之強化學習,7日入門有捷徑
    強化學習(Reinforcement Learning)!這是一種基於與環境互動的目標導向的機器學習。在強化學習中,算法要自行作出決策,它並不需要依靠歷史數據,只需要理解當前場景就足夠。那麼強化學習到底能為我們做點什麼呢?科科老師作為百度飛槳強化學習PARL團隊核心成員,所在團隊曾兩度奪得NeurIPS強化學習賽事世界冠軍以及百度最高獎,她在課程中介紹了一系列強化學習"大有可為"的應用領域,同時也指出了此項技術應用的門檻,但是如果企業能夠掌握強化學習這項特技,勢必帶來"護城河"般的核心競爭力。例如,網站或APP的個性化定製中,去中心化的"預測"便可用強化學習實現。
  • Java開發者必備 10 大學習網站
    源 / 網絡作為開發者來說,必備的除了對編碼的熱情還要有自己的一套技巧,另外不可缺少的就是平時學習的網站。
  • 入門Web開發者福音 React學習少走彎路的實用貼
    理解HTTP(S)協議如果想成為Web開發者,那麼必須理解並掌握HTTP協議。我並非讓你去閱讀HTTP標準,而是說至少要熟悉常見的HTTP請求,如GET、POST、PUT、PATCH、DELETE、OPTIONS,以及HTTP/HTTPS的基本工作原理。
  • 三年級閱讀理解強化訓練,例題解析,提高閱讀理解能力這樣做!
    三年級閱讀理解強化訓練,例題解析,提高閱讀理解能力這樣做!本學期期末考試結束了,不少家長發現孩子的閱讀理解能力是硬傷,不管是小學一年級剛開始接觸閱讀理解,還是二、三、四、五、六年級對閱讀理解越來越熟悉,都存在丟分嚴重的情況。要提高閱讀理解能力,其實不單單是能夠通過刷題來實現的,更重要是要增加閱讀量。到底要讀什麼樣的書,才能達到提高閱理解能力呢?
  • 通過Q-learning 深入理解強化學習
    作者:Thomas Simonini   機器之心編譯   參與:Geek AI、劉曉坤   本文將帶你學習經典強化學習算法   那麼問題來了:如何才能夠創建這樣的智能體呢?   下面我將介紹第一個策略。假設智能體試圖走遍每一個方塊,並且將其著色。綠色代表「安全」,紅色代表「不安全」。
  • 開發者,別讓自己孤獨
    剩下的,就是需要開發者自己去思考如何利用好這一切,比如通過主動融入更大範圍的學習、交流、溝通圈子,以及藉助開源社區的能力等方式,讓產生於開發者群體中的「分布式」和「社交方式」的決策形成事實標準,進而讓每一位開發者自己成為推動技術發展浪潮的主角。
  • 【演講實錄】強化學習在 TensorFlow 中的應用 | 個推*GDG
    強化學習英文叫reinforcement learning,強化學習我個人認為通過某種數據搜索能力幫我們做一些類似於人的一些判斷邏輯。這個是強化學習我們說能夠去做到的一些事,基於這樣我們來看一下人是怎麼成長的。