日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【EasyRL学习笔记】第十一章 模仿学习

發布時間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【EasyRL学习笔记】第十一章 模仿学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、前言
  • 二、行為克隆
  • 三、逆強化學習
  • 四、第三人稱視角模仿學習
  • 五、序列生成和聊天機器人
  • 六、關鍵詞總結
  • 七、習題


一、前言

模仿學習 (imitation learning,IL) 討論的問題是,假設我們連獎勵都沒有,要怎么進行更新以及讓智能體與環境交互呢? 模仿學習又被稱為示范學習 (learning from demonstration),學徒學習 (apprenticeship learning),觀察學習 (learning by watching) 。

在模仿學習中有一些專家的示范,智能體也可以與環境交互,但它無法從環境里得到任何的獎勵,它只能通過專家的示范來學習什么是好的,什么是不好的。其實,在多數情況下,我們都無法從環境里得到非常明確的獎勵。例如,如果是棋類游戲或者是電玩,我們將會有非常明確的獎勵。但是多數的情況都是沒有獎勵的,以聊天機器人為例, 機器人與人聊天,聊得怎樣算是好,聊得怎樣算是不好,我們是無法給出明確的獎勵的。

當然,雖然我們無法給出明確的獎勵,但是我們可以收集專家的示范。例如,在自動駕駛汽車方面,雖然我們無法給出自動駕駛汽車的獎勵,但我們可以收集很多人類開車的記錄。在聊天機器人方面,我們可能無法定義什么是好的對話,什么是不好的對話,但我們可以收集很多人的對話當作范例。因此模仿學習的實用性非常高。

假設我們不知道該怎么定義獎勵,就可以收集專家的示范。如果我們可以收集到一些示范,可以收集到一些很厲害的智能體(比如人) 與環境實際上的交互,就可以考慮采用模仿學習

在模仿學習里面,我們介紹兩個方法: 行為克隆 (behavior cloning, BC) 和逆強化字習 (inverse reinforcement learning,IRL) 。逆強化學習也被稱為逆最優控制 (inverse optimal control) 。


二、行為克隆

其實行為克隆與監督學習較為相似。以自動駕駛汽車為例,如下圖所示,我們可以收集到人開自動駕駛汽車的數據,比如可以通過行車記錄器進行收集。看到下圖所示的觀測的時候,人會決定向前,智能體也采取與人一樣的行為,即也向前。專家做什么,智能體就做一模一樣的事,這就稱為行為克隆

怎么讓智能體學會與專家一模一樣的行為呢? 我們可以把它當作一個監督學習的問題,先收集很多行車記錄器的數據,再收集人在具體情境下會采取什么樣的行為 (訓練數據) 。我們知道人在狀態 s1s_1s1? 會采取動作 a1a_1a1? ,人在狀態 s2s_2s2? 會采取動作 a2a_2a2? ,人在狀態 s3s_3s3? 會采取動作 a3…….a_3 \ldots \ldots .a3?…….. 接下來,我們就學習一個網絡。這個網絡就是演員,輸入 sis_isi? 的時候,我們希望它的輸出 是 aia_iai?

行為克隆雖然非常簡單,但它的問題是,如果我們只收集專家的示范,可能我們看過的觀測以及狀態是非常有限的。例如,如下圖所示,假設我 們要學習自動駕駛一輛汽車通過圖中的彎道。如果是專家,它將順著紅線通過彎道。但假設智能體很笨,它開車的時候撞墻了,它永遠不知道撞墻這種狀況要怎么處理。因為訓練數據里面從來沒有撞墻相關的數據,所以它根本就不知道撞墻這種情況要怎么處理。打電玩也是一樣的,讓專家去玩《超級馬里奧》,專家可能非常強,它從來不會跳不上水管,所以智能體根本不知道跳不上水管時要怎么處理。所以僅僅使用行為克隆是不夠的,只觀察專家的示范是不夠的,還需要結合另一個方法: 數據集聚合 (dataset aggregation,DAgger)

我們希望收集更多樣的數據,而不是只收集專家所看到的觀測我們希望能夠收集專家在各種極端的情況下所采取的行為

如下圖所示,以自動駕駛汽車為例,一開始我們有演員 θ1\theta_1θ1? ,并且讓其去駕駛這輛車,同時車上坐了一個專家。這個專家會不斷地告訴智能體,如果在這個情境里面,我會怎么樣開。所以 θ1\theta_1θ1? 自己開自己的,但是專家會不斷地表達它的想法。比如,一開始的時候,專家可能說往前走。在拐彎的時候,專家可能就會 說往右轉。但 θ1\theta_1θ1? 是不管專家的指令的,所以它會繼續撞墻。雖然專家說往右轉,但是不管他怎么下指令都是沒有用的, θ1\theta_1θ1? 會做自己的事情,因為我們要做的記錄的是說,專家在 θ1\theta_1θ1? 看到這種觀測的情況下,它會做什么樣的反應。這個方法顯然是有一些問題的,因為我們每開一次自動駕駛汽車就會犧性一個專家。我們用這個方法,犧牲一個專家以后,就會知道,人類在快要撞墻的時候,會采取什么樣的行為。再用這些數據訓練新的演員 θ2\theta_2θ2? ,并反復進行這個過程,這個方法稱為數據集聚合。

行為克隆還有一個問題: 智能體會完全模仿專家的行為,不管專家的行為是否有道理,就算沒有道理,沒有什么用,就算這是專家本身的習慣,智能體也會把它記下來。如果智能體確實可以記住所有專家的行為,也許還好。因為如果專家這么做,有些行為是多余的。但是沒有問題,假設智能 體的行為可以完全仿造專家行為,也就算了,它就是與專家一樣得好,只是做一些多余的事。但問題是智能體是一個網絡,網絡的容量是有限的。 就算給網絡訓練數據,它在訓練數據上得到的正確率往往也不是 100%100 \%100% ,它有些事情是學不起來的。這個時候,什么該學,什么不該學就變得很重 要

例如,如下圖所示,在學習中文的時候,老師有語音、行為和知識,但其實只有語音部分是重要的,知識部分是不重要的。也許智能體只能學一件事,如果它只學到了語音,沒有問題。如果它只學到了手勢,這樣就有問題了。所以讓智能體學習什么東西是需要模仿的、什么東西是不需要模 仿的,這件事情是很重要的。而單純的行為克隆沒有學習這件事情,因為智能體只是復制專家所有的行為而已,它不知道哪些行為是重要的,是對接下來有影響的,哪些行為是不重要的、是對接下來沒有影響的。

行為克隆的問題還在于: 我們使用行為克隆的時候,訓練數據與測試數據是不匹配的。我們可以用數據集聚合的方法來緩解這個問題。在訓練與測試的時候,數據分布是不一樣的。因為在強化學習中,動作會影響到接下來的狀態。我們先有狀態 s1s_1s1? ,然后采取動作 a1a_1a1?a1a_1a1? 會決定接下來的狀態 s2s_2s2? 。所以在強化學習里有一個很重要的特征,就是我們采取的動作會影響我們接下來的狀態,也就是會影響狀態的分布。如果有行為克隆,我們只 能觀察到專家 θ^\hat{\theta}θ^ 的一些狀態-動作對 (s,a)(s, a)(s,a)

我們希望可以學習一個 θ?\theta^*θ? ,并且希望 θ?\theta^*θ?θ^\hat{\theta}θ^ 越接近越好。如果 θ?\theta^*θ? 可以與 θ^\hat{\theta}θ^ 一模一樣,訓練的時候看到的狀態與測試的時候看到的狀態會是一樣 的。因為雖然動作會影響我們看到的狀態,但假設兩個策略一模一樣,在同一個狀態都會采取同樣的動作,我們接下來看到的狀態都會是一樣的。 但問題就是我們很難讓學習出來的策略與專家的策略一模一樣。專家是一個自然人,網絡要與人一模一樣,有點兒困難。

如果 θ?\theta^*θ?θ^\hat{\theta}θ^ 有一點兒誤差,在一般監督學習問題里面,每一個樣本 (example) 都是獨立的,也許沒什么問題。但對強化學習的問題來說,可能在某個地方就是失之毫厘,謬以千里。可能在某個地方,也許智能體無法完全復制專家的行為,它復制的差了一點兒,也許最后得到的結果就會差很 多。所以行為克隆并不能夠完全解決模仿學習的問題,我們還有另外一個比較好的方法,稱為逆強化學習


三、逆強化學習

為什么叫逆強化學習? 因為原來的強化學習里,有一個環境和一個獎勵函數。如下圖所示,根據環境和獎勵函數,通過強化學習這一技術,我們 會找到一個演員,并會學習出一個最優演員。

但逆強化學習剛好是相反的,如下圖所示,它沒有獎勵函數,只有一些專家的示范,但還是有環境的。逆強化學習假設現在有一些專家的示范, 用 τ^\hat{\tau}τ^ 來代表專家的示范。如果是在玩電玩,每一個 τ\tauτ 就是一個很會玩電玩的人玩一場游戲的記錄。如果是自動駕駛汽車,就是人開自動駕駛汽車的 記錄。這些就是專家的示范,每一個 τ\tauτ 是一個軌跡。

把所有專家的示范收集起來,再使用逆強化學習這一技術。使用逆強化學習技術的時候,智能體是可以與環境交互的。但它得不到獎勵,它的獎勵 必須從專家那里推出來。有了環境和專家的示范以后,可以反推出獎勵函數。強化學習是由獎勵函數反推出什么樣的動作、演員是最好的。逆強化 學習則反過來,我們有專家的示范,我們相信它是不錯的,我就反推,專家是因為什么樣的獎勵函數才會采取這些行為。有了獎勵函數以后,接下 來,我們就可以使用一般的強化學習的方法去找出最優演員。所以逆強化學習是先找出獎勵函數,找出獎勵函數以后,再用強化學習找出最優演 員

把這個獎勵函數找出來,相較于原來的強化學習有什么好處呢? 一個可能的好處是也許獎勵函數是比較簡單的。即雖然專家的行為非常復雜,但也許簡單的獎勵函數就可以導致非常復雜的行為。一個例子就是人類本身的獎勵函數就只有活著這樣,每多活一秒,我們就加一分。但人類有非常復雜的行為,但是這些復雜的行為都只是圍繞看要從這個獎勵函數里面得到分數而已。有時候很簡單的獎勵函數也許可以推導出非常復雜的行為。

逆強化學習實際上是怎么做的呢? 如下圖所示,首先,我們有一個專家 θ^\hat{\theta}θ^ ,這個專家與環境交互,產生很多軌跡 {τ^1,τ^2,?,τ^N}。?\left\{\hat{\tau}_1, \hat{\tau}_2, \cdots, \hat{\tau}_N\right\}_{\text {。 }}{τ^1?,τ^2?,?,τ^N?}?? 如果我們玩游戲,就讓某個電玩高手去玩 NNN 場游戲,把 NNN 場游戲的狀態與動作的序列都記錄下來。接下來,我們有一個演員 θ\thetaθ ,一開始演員很爛,這個演員也 與環境交互。它也去玩了 NNN 場游戲,它也有 NNN 場游戲的記錄。接下來,我們要反推出獎勵函數。怎么反推出獎勵函數呢? 原則就是專家永遠是最棒的,是先射箭,再畫靶的概念。專家去玩一玩游戲,得到這些游戲的記錄,演員也去玩一玩游戲,得到這些游戲的記錄。接下來,我們要定一個獎勵函數,這個獎勵函數的原則就是專家得到的分數要比演員得到的分數高(先射箭,再畫靶),所以我們就學習出一個獎勵函數,這個獎勵函數會使專家得到的獎勵大于演員得到的獎勵。有了新的獎勵函數以后,我們就可以使用一般強化學習的方法學習一個演員,這個演員會針對獎勵函數 最大化它的獎勵。它也會采取一些的動作。這個演員可以最大化獎勵函數,采取大量的動作,得到大量游戲的記錄。

接下來,我們更改獎勵函數。這個演員就會很生氣,它已經可以在這個獎勵函數得到高分。但是它得到高分以后,我們就改獎勵函數,仍然讓專 家可以得到比演員更高的分數。這就是逆強化學習。有了新的獎勵函數以后,根據這個新的獎勵函數,我們就可以得到新的演員,新的演員再與環 境交互。它與環境交互以后,我們又會重新定義獎勵函數,讓專家得到的獎勵比演員的大。

怎么讓專家得到的獎勵大過演員呢? 如上圖所示,我們在學習的時候,獎勵函數也許就是神經網絡。神經網絡的輸入為 τ\tauτ ,輸出就是應該要給 τ\tauτ 的分數。或者假設我們覺得輸入整個 τ\tauτ 太難了,因為 τ\tauτsssaaa 的一個很長的序列。也許就向它輸入一個 sssaaa 的對,它會輸出一個實數。把整 個 τ\tauτ 會得到的實數加起來就得到 R(τ)R(\tau)R(τ) 。在訓練的時候,對于 {τ^1,τ^2,?,τ^N}\left\{\hat{\tau}_1, \hat{\tau}_2, \cdots, \hat{\tau}_N\right\}{τ^1?,τ^2?,?,τ^N?} ,我們希望它輸出的 RRR 值越大越好。對于 {τ1,τ2,?,τN}\left\{\tau_1, \tau_2, \cdots, \tau_N\right\}{τ1?,τ2?,?,τN?} ,我 們就希望 RRR 值越小越好。

什么可以被稱為一個最好的獎勵函數呢? 最后我們學習出來的獎勵函數應該是專家和演員在這個獎勵函數上都會得到一樣高的分數。最終的獎勵函數無法分辯出誰應該會得到比較高的分數。通常在訓練的時候,我們會迭代地去做。最早的逆強化學習對獎勵函數有些限制,它是假設獎勵函數是 線性的 (linear) 。如果獎勵函數是線性,我們可以證明這個算法會收斂(converge)。但是如果獎勵函數不是線性的,我們就無法證明它會收斂

其實我們只要把逆強化學習中的演員看成生成器,把獎勵函數看成判別器,它就是生成對抗網絡。所以逆強化學習會不會收斂就等于生成對抗網絡會不會收斂。如果我們已經實現過,就會知道逆強化學習不一定會收斂。但除非我們對 RRR 執行一個非常嚴格的限制,否則如果 RRR 是一個一般的 網絡,我們就會有很大的麻煩

我們可以把逆強化學習與 生成對抗網絡詳細地比較一下。如下圖所示,在生成對抗網絡 里面,我們有一系列很好的圖、一個生成器和一個判別 器。一開始,生成器不知道要產生什么樣的圖,它就會亂畫。判別器的工作就是給畫的圖打分,專家畫的圖得高分,生成器畫的圖得低分。生成器 會想辦法去騙過判別器,生成器希望判別器也給它畫的圖打高分。整個過程與逆強化學習是一模一樣的。專家畫的圖就是專家的示范。生成器就是 演員,生成器畫很多圖,演員與環境交互,產生很多軌跡。演員與環境交互的記錄其實就等價于 生成對抗網絡 里面的這些圖。然后我們學習一個 獎勵函數。獎勵函數就是判別器。獎勵函數要給專家的示范打高分,給演員交互的結果打低分。接下來,演員會想辦法,從已經學習出的獎勵函數 中得到高分,然后迭代地循環。

逆強化學習有很多的應用,比如可以用于自動駕駛汽車,有人用這個技術來學開自動駕駛汽車的不同風格。每個人在開車的時候會有不同風格,例 如,能不能壓到線、能不能倒退、要不要遵守交通規則等。每個人的風格是不同的,用逆強化學習可以讓自動駕駛汽車學會各種不同的開車風格。

逆強化學習有一個有趣的地方:通常我們不需要太多的訓練數據,訓練數據往往都是個位數。因為逆強化學習只是一種示范,實際上智能體可以與 環境交互多次,所以我們往往會看到只用幾筆數據就可以訓練出一些有趣的結果。

下圖所示為讓自動駕駛汽車學會在停車場中安全停車的例子。 這個例子的示范是這樣的: 藍色是終點,自動駕駛汽車要開到藍色終點停車。給智能體只看一行的4個示范,讓它學習怎么開車,最后它就可以學 出,如果它要在紅色的終點位置停車,應該這樣開。給智能體看不同的示范,最后它學出來的開車的風格就會不太一樣。
例如,下圖第二行所示 為不守規矩的開車方式,因為它會開到道路之外,并且還會穿過其他的車。所以智能體就會學到一些不符合交通規范的行為,例如不一定要走在道路上、可以走非道路的地方等。下圖第三行所示為倒退停車,智能體也會學會說,它可以倒退。

我們也可以用逆強化學習訓練機器人,我們可以讓機器人做一些我們人類想要它做的動作。過去,如果我們要訓練機器人,讓它做我們想要它做的 動作,其實是比較麻煩的。例如,如果我們要操控機械臂,就需要花很多精力編寫程序,這樣才能讓機械臂做一件很簡單的事情。有了逆強化學習 技術,我們自身可以做示范,機器人就通過示范來學習。比如,讓機器人學會擺盤子,拉著機器人的手臂去擺盤子,機器自己動。再如,讓機器人學會倒水,人只教它 20 次,杯子每次放的位置不太一樣。


四、第三人稱視角模仿學習

其實還有很多與訓練機器人相關的研究,如下圖所示,例如,我們在教機器人做動作的時候,要注意的是也許機器人的視角與我們人類的視角 是不太一樣的。在上面的例子中,人與機器人的動作是一樣的。但是在末來的世界里面,也許機器人是看看人的行為學習的。剛才是人拉著,假設 我們要讓機器人學會打高爾夫球,如果與上面的例子相似,就是人拉看機器人手臂去打高爾夫球,但是在末來有沒有可能,機器人看看人打高爾夫 球,它自己就學會打高爾夫球了呢? 這個時候,要注意的是機器人的視角與它真正去采取這個行為的視角是不一樣的。機器人必須了解到當它是第 三人稱視角的時候,看到另外一個人在打高爾夫球,與它實際上自己去打高爾夫球的視角顯然是不一樣的。但它怎么把它是第三人視角所觀察到的 經驗泛化到它是第一人稱視角的時候所采取的行為,這就需要用到第三人稱視角模仿字習(third person imitation learning) 技術


這怎么做呢? 第三人稱視角模仿學習技術其實不只用到了模仿學習,它還用到了領域對抗訓練 (domain-adversarial training)

領域對抗訓練也是 一種 生成對抗網絡 的技術。如下圖所示,我們希望有一個特征提取器,有兩幅不同領域 (domain) 的圖像,通過特征提取器以后,無法分辨 出圖像來自哪一個領域。第一人稱視角和第三人稱視角模仿學習用的技術是一樣的,希望學習一個特征提取器,智能體在第三人稱的時候與它在第 一人稱的時候的視角其實是一樣的,就是把最重要的東西抽出來就好了。


五、序列生成和聊天機器人

我們其實可以把句子生成 (sentence generation) 或聊天機器人理解為模仿學習。如下圖所示,機器在模仿人寫句子,我們在寫句子的時候,將寫下的每一個字都想成一個動作,所有的字合起來就是一個回合。例如,句子生成里面,我們會給機器看很多人類寫的字。如果要讓機器學會寫 詩,就要給它看唐詩三百首。人類寫的字其實就是專家的示范。每一個詞匯其實就是一個動作。機器做句子生成的時候,其實就是在模仿專家的軌 跡。聊天機器人也是一樣的,在聊天機器人里面我們會收集到很多人交互對話的記錄,這些就是專家的示范

如果我們單純用最大似然 (maximum likelihood) 這個技術來最大化會得到似然 (likelihood),這其實就是行為克隆。行為克隆就是看到一個狀態,接下來預測我們會得到什么樣的動作,有一個標準答案(ground truth) 告訴機器什么樣的動作是最好的。在做似然的時候也是一樣的,給定句子已經產生的部分,接下來機器要預測寫哪一個字才是最好的。所以,其實最大似然在做序列生成 (sequence generation) 的時候,它對應到模仿 學習里面就是行為克隆。只有最大似然是不夠的,我們想要用序列生成對抗網絡(sequence GAN) 。其實序列生成對抗網絡對應逆強化學習,逆強 化學習就是一種 生成對抗網絡 的技術。我們把逆強化學習的技術放在句子生成、聊天機器人里面,其實就是序列生成對抗網絡與它的種種變形。


六、關鍵詞總結

  • 模仿學習 (imitation learning, IL) : 其討論我們沒有獎勵或者無法定義獎勵但是有與環境進行交互 時怎么進行智能體的學習。這與我們平時處理的問題有些類似, 因為通常我們無法從環境中得到明確的獎 勵。模仿學習又被稱為示范學習 (learning from demonstration)、學徒學習 (apprenticeship learning) 以 及觀察學習 (learning by watching) 等。
  • 行為克隆 (behavior cloning):類似于機器學習中的監督學習, 通過收集專家的狀態與動作等對應信 息, 來訓練我們的網絡。在使用時, 輸人狀態就可以輸出對應的動作。
    數據集聚合 (dataset aggregation):用來應對在行為克隆中專家提供不到數據的情況, 其希望收集專 家在各種極端狀態下的動作。
  • 逆強化學習 (inverse reinforcement learning, IRL):逆強化學習先找出獎勵函數, 再用強化學習找出 最優演員。這么做是因為我們沒有環境中的獎勵, 但是有專家的示范, 使用逆強化學習, 我們可以推斷專 家是因為何種獎勵函數才會采取這些動作。有了獎勵函數以后就可以使用一般的強化學習方法找出最優演 員。
  • 第三人稱視角模仿學習 (third person imitation learning):一種把第三人稱視角所觀察到的經驗泛化 為第一人稱視角的經驗的技術。

七、習題

11-1 具體的模仿學習方法有哪些?
11-2 行為克隆存在哪些問題呢? 對應的解決方法有哪些?
11-3 逆強化學習是怎么運行的呢?
11-4 逆強化學習方法與生成對抗網絡在圖像生成中有什么異曲同工之處?

總結

以上是生活随笔為你收集整理的【EasyRL学习笔记】第十一章 模仿学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。