井字遊戲例子

讓我們用一個井字遊戲(Tic-Tac-Toe)例子來引入強化學習的概念

假設你正在與朋友玩井字遊戲,每次遊戲中,贏家都可以從輸家那裡獲得一顆糖。每次你對會對當前局面進行估計,下出自己認為最好的那一步同時觀察你的朋友是怎麼應對的。每次你贏得對局獲得一顆糖時,你都會更加堅信自己的下法時正確的,但是有時候你也會輸掉對局,失去糖果的痛苦讓你反思,你會根據朋友的落子方式來調整自己對不同局面的估計和自己的下法。

強化學習

從這個例子我們可總結出強化學習的各個要素:

  • 智能體(agent):在遊戲中落子的你
  • 環境(environment):當前局面,遊戲本身和你的朋友
  • 策略(policy):你自己的下法
  • 獎勵信號(reward signal):贏還是輸一顆糖
  • 價值函數(value function):你對當前局面是否樂觀的估計
  • 模型(model):你觀察到的朋友的下法

所以強化學習是指智能體通過行動與環境交互,學習從環境到行為的映射,從而使得獎勵信號最大化。

井字問題簡單的解法

你發現對於這樣一個小規模的井字問題,你完全可以窮舉所有的可能局面。為了對各種局面進行準確估計以便找到最佳下法,你將不同的局面記為 S 根據勝率進行了不同的賦值 V(s), s in S 。將必勝或者必輸的局面賦值為1或者0,而將其他局面你目前還不確信它們的好壞,於是將它們都賦值為0.5。

勝率0或1的局面給了你很強的指導,但是你發現勝率為0.5的局面卻無法為你提供有效信息,於是你在思考能不能在不斷的遊戲中更新這些勝率估計讓他們更加準確,能夠真實的反映當前局面的好壞,你寫出了一個非常簡單的勝率更新公式:

V(s) = V(s) + alpha left[V(s^{})-V(s) 
ight]

其中 V(s) 是落子前局面的勝率估計, V(s{}) 是落子後局面的勝率估計, alpha 是一個小正數,作為學習率(learning rate),決定了勝率更新的速度。這是之後會提到的時間差分學習(temporal-difference learning)的一個例子。在不斷的遊戲過程中, V(s) 會逐漸收斂到接近真實的勝率估計。

但是你發現單純的按照 V(s) 最高的局面進行落子並不能確保勝利,因為很多潛在勝率很高的局面因為你沒有在上面落子過,從而很少經歷勝率更新。你發現自己可以通過時不時的隨機落子來為這些局面進行勝率的更新,從而獲得所有局面下對勝率更加準確估計。這也是之後會提及的利用-探索(exploit-explore)問題。應用了以上技巧之後,你發現自己在井字遊戲中已經所向披靡了。

其中帶*為 V(s) 最大的落子,否則為隨機落子

參考資料:Reinforcement Learning: An Introduction, Second edition

推薦閱讀:

相关文章