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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

增强学习之入门 这个很明白

發(fā)布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 增强学习之入门 这个很明白 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文首發(fā)于集智:https://jizhi.im/blog/post/intro_q_learning

“機(jī)器學(xué)習(xí)”的話題一直很火熱,相關(guān)的概念也是層出不窮,為了不落后于時代,我們都還是要學(xué)習(xí)一個。

第一次聽到“增強(qiáng)學(xué)習(xí)”(Reinforcement Learning)的時候,我以為只是在“深度學(xué)習(xí)”的基礎(chǔ)上又玩兒的新花樣。后來稍微了解了一下,發(fā)現(xiàn)其實是完全不同的概念,當(dāng)然它們并非互斥,反而可以組合,于是又有了“深度增強(qiáng)學(xué)習(xí)”(Deep Reinforcement Learning)

這讓人不由得感慨起名的重要性,“增強(qiáng)”這個名稱就給人感覺是在蹭“深度”的熱點(diǎn),一個下五洋,一個上九天。而“卷積神經(jīng)網(wǎng)絡(luò)”(Convolutional Neural Network)這個名字就好的多,其實這里的“卷積”跟平時說的那個卷積并不是一回事,但是就很有科技感、Geek范。更好的還有“流形學(xué)習(xí)”(Manifold Learning),洋溢著古典人文主義氣息。

天地有正氣,雜然賦流形。——文天祥《正氣歌》


軍師,就是掌握了決策藝術(shù)的人。


增強(qiáng)學(xué)習(xí)是關(guān)于決策優(yōu)化的科學(xué),其背后正是生物趨利避害的本能。


“熊瞎子掰苞米”就是一個典型的決策過程。因為胳肢窩只能夾一個苞米,所以對每個苞米,熊瞎子都要做一個決策——掰,還是不掰?這是個問題。

在俗話故事里,熊瞎子并不知道自己掰一個丟一個,所以他的決策就是“掰掰掰”(Buy, Buy, Buy),最后結(jié)果就是拿了一個很小的苞米,后悔地想要剁手。而聰明的智人卻選擇“只掰比自己胳肢窩里大的”,那么理想狀況下,就是得到了最大的。


熊瞎子不高興

這里,熊瞎子或智人表示Agent,也就是決策過程里的行為主體。玉米地就是Environment,而現(xiàn)在胳肢窩里的苞米大小則是State,而眼前一個等待采摘的苞米,是熊瞎子對環(huán)境的Obervation。掰還是不掰?無論哪一種,都是對環(huán)境做出的Action。

當(dāng)你走出玉米地時,最終拿到的苞米,才是自己的,這是你的Reward。“掰掰掰”,“只掰大的”或是“只掰貴的,不掰貴對的”——這些都是Policy。以上就是增強(qiáng)學(xué)習(xí)里的幾個核心基本概念。



增強(qiáng)學(xué)習(xí)所解決的問題,介于“有監(jiān)督”和“無監(jiān)督”之間。決策是有目標(biāo)的,或是“最大的苞米”,或是“贏下這盤棋”,這就與聚類任務(wù)不同。但是這個“目標(biāo)”又不是固定明確的,最終獲勝的棋路,就一定是最佳的嗎?未必,不像圖片分類或是價格預(yù)測,能評判個準(zhǔn)確率。

如果要用知乎的方式來描述增強(qiáng)學(xué)習(xí),應(yīng)該是“如何評價”。比如一手“炮五平二”,是好是壞呢?不是立即就能得到反饋的,而可能是在終盤才能體現(xiàn)出來,這就是Reward的滯后性。所以做增強(qiáng)學(xué)習(xí),心里應(yīng)該時刻裝著“婆婆婆婆這是真的嗎?我不信,等反轉(zhuǎn)!”

你從昏迷中醒來,發(fā)現(xiàn)自己被鎖著,面前一個電視自動打開了。畫面上有一個眼神和善的玩偶,用Kaiser一樣的山東口音說"I wanna to play a game."


Game的規(guī)則是這樣的,一個4x4的方格代表迷宮。你是奪寶奇兵、摸金校尉、古墓麗影,從左上角出發(fā),直到右下角挖寶。但是這個迷宮里面不太平,有很多陷阱,踩上就是一個“大俠請重新來過”。


總有一款適合你



這里的方格,就是Environment。雖然對于電腦前的我們,似乎很容易,但是對Agent來說,他尚且對力量一無所知的。不過,只要Agent知道生命的可貴(Reward),就可以訓(xùn)練出一個Policy。

游戲的目的是讓分?jǐn)?shù)最大化,比如踩到陷阱了,-10。拿到寶貝了,+10。同樣是最終拿到了寶貝,我們希望的是最短路徑,那么如果走了多余的路,就要?-1。

Q-Learning的目的就是學(xué)習(xí)特定State下、特定Action的價值。Q并不是某個本質(zhì)騎士取的字母,而是表示Quality。

Q-Learning的方法是建立一個表,以state為行、action為列。迷宮共有16個格,每個格子都有5個方向,所以Q-table就是16x5的一個表,對應(yīng)總共80種可能的決策。

首先以0填充Q-table進(jìn)行初始化,然后觀察每一個決策帶來的回饋,再更新Q-table。更新的依據(jù)是Bellman Equation:

  • s: 當(dāng)前狀態(tài)state
  • a: 從當(dāng)前狀態(tài)下,采取的行動action
  • s': 今次行動所產(chǎn)生的新一輪state
  • a': 次回action
  • r: 本次行動的獎勵reward
  • \gamma : 折扣因數(shù),表示犧牲當(dāng)前收益,換區(qū)長遠(yuǎn)收益的程度。

那么最關(guān)鍵的問題是:如何計算Q?

Agent所做的每一輪決策(即一盤游戲),稱為一個episode,跟美劇里的“集”單位一樣。每一次行動,都會更新Q-table。為了簡化過程方便理解,我們換一個更小的迷宮:


初始Q-table如下(行:state,列:action):


UDLR——上下左右;N——靜靜地看著你。

相應(yīng)的Q-table如下(E表示不可能的行動):

但是這個Q-table是我們希望得出或逼近的,在游戲開始時,Agent所知的Q-table還是一個全0的矩陣。

算法的基本流程:

  • 初始化Q-table矩陣
  • 選擇起始state
  • 選擇當(dāng)前state(s)下的一個可能action(a)
  • 換移到下一個state(s')
  • 重復(fù)第3步
  • 使用Bellman Equation,更新Q-table
  • 將下一個state作為當(dāng)前state
  • 如此迭代三十年,直到大廈崩塌
  • 比如,從state-1開始,可能的action有D, R, N。然后我們選擇了D,到了state-3,這個state踩中了陷阱,所以-10。

    在state-3又有三種可能的action:U, R, N。 又因為此時Q-table還沒有經(jīng)過更新,所以當(dāng)然就是0。假設(shè)折扣因數(shù),則有:

    第一次更新Q-table的結(jié)果是:


    現(xiàn)在,我們來到了state-3,如果選擇R,就到達(dá)了state-4,+10。再次更新Q-table為:


    以上就是一個episode。重復(fù)這個過程,就像中學(xué)生物書里,用電擊訓(xùn)練蚯蚓,去訓(xùn)練我們的Agent。經(jīng)過不斷的練習(xí),Agent一定會變強(qiáng)(當(dāng)然,也可能變禿)。


    實踐環(huán)節(jié):

    以下代碼可以在集智的https://jizhi.im/blog/post/intro_q_learning中的在線代碼運(yùn)行器中直接運(yùn)行和修改,不用再復(fù)制代碼到你的pycharm中了。

    [python]?view plaincopy
  • <span?style="font-size:24px;">import?numpy?as?np??
  • import?random??
  • import?matplotlib.pyplot?as?plt??
  • ??
  • gamma?=?0.7??
  • ??
  • reward?=?np.array([[0,?-10,?0,?-1,?-1],??
  • ???????????????????[0,?10,?-1,?0,?-1],??
  • ???????????????????[-1,?0,?0,?10,?-1],??
  • ???????????????????[-1,?0,?-10,?0,?10]])??
  • ??
  • q_matrix?=?np.zeros((4,?5))??
  • ??
  • transition_matrix?=?np.array([[-1,?2,?-1,?1,?1],??
  • ??????????????????????????????[-1,?3,?0,?-1,?2],??
  • ??????????????????????????????[0,?-1,?-1?,?3,?3],??
  • ??????????????????????????????[1,?-1,?2,?-1,?4]])??
  • ??
  • valid_actions?=?np.array([[1,?3,?4],??
  • ??????????????????????????[1,?2,?4],??
  • ??????????????????????????[0,?3,?4],??
  • ??????????????????????????[0,?2,?4]])??
  • ??
  • ??
  • for?i?in?range(1000):??
  • ????start_state?=?0??
  • ????current_state?=?start_state??
  • ????while?current_state?!=?3:??
  • ????????action?=?random.choice(valid_actions[current_state])??
  • ????????next_state?=?transition_matrix[current_state][action]??
  • ????????future_rewards?=?[]??
  • ????????for?action_nxt?in?valid_actions[next_state]:??
  • ????????????future_rewards.append(q_matrix[next_state][action_nxt])??
  • ????????q_state?=?reward[current_state][action]?+?gamma?*?max(future_rewards)??
  • ????????q_matrix[current_state][action]?=?q_state??
  • ????????#print(q_matrix)??
  • ????????current_state?=?next_state??
  • ??
  • print('Final?Q-table:')??
  • print(q_matrix)</span>??


  • 至此,我們已經(jīng)完成了一個最簡單的增強(qiáng)學(xué)習(xí)應(yīng)用,沒有任何跟神經(jīng)網(wǎng)絡(luò)相關(guān)的概念。那么前面提到的“深度增強(qiáng)學(xué)習(xí)”又是個什么鬼呢?其實就是把神經(jīng)網(wǎng)絡(luò)用在Q-Learning上,后文會詳細(xì)探討。

    總結(jié)

    以上是生活随笔為你收集整理的增强学习之入门 这个很明白的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。