<img src="./images/rl_gambling.jpg">
狀態
行爲
獎勵
狀態到動作
狀態、動作到獎勵關係
動作到狀態
都是隨機變量
目標函數
通過調整參數更新參數,讓模型的參數最小。
我們需要將問題變爲一個優化問題,
調整的,在系統中,可以改變就是策略,所以能夠改變,
這裏有一個問題,這個問題是什麼,如果要優化策略時間點和最大目標時間點是否一致,這個是需要考慮,我們那 alphaGo 來解釋這個問題,在 alphaGo 每下一局會得到 reward,但是對於每一步是沒有 reward 的。但是我們在 AlphaGo 優化策略是每一步上,這也就是優化難點,
例如現在努力學習,要考研,就要放下當前找工作來獲得 reward ,探索與利用之間矛盾。
湯普森採樣
Beta 分佈
Beta 布可以看作是一個概率的分佈,當我們不知道一個東西的具體概率是多少時,給出了所有概率出現的可能性大小,可以理解爲概率的概率分佈。
棒球運動的一個指標就是棒球擊球率,就是用一個運動員擊中的球數除以總的擊球數,一般認爲 0.27 是一個平均的擊球水平,如果擊球率達到 0.3 就會認爲非常優秀了。如果我們要預測一個棒球運動員,他整個賽季的棒球擊球率,怎麼做呢?你可以直接計算他目前的棒球擊球率,用擊中數除以擊球數。但是,這在賽季開始階段時是很不合理的。假如這個運動員就打了一次,還中了,那麼他的擊球率就是100%;如果沒中,那麼就是 0%,甚至打 5、6 次的時候,也可能運氣爆棚全中擊球率 100%,或者運氣很糟擊球率 0%,所以這樣計算出來的擊球率是不合理也是不準確的。
當運動員首次擊球沒中時,沒人認爲他整個賽季都會一次不中,所以擊球率不可能爲 0。因爲我們有先驗期望,根據歷史信息,我們知道擊球率一般會在 0.215到0.36之間。如果一個運動員一開始打了幾次沒中,那麼我們知道他可能最終成績會比平均稍微差一點,但是一般不可能會偏離上述區間,更不可能爲 0。
一個最好的方法來表示這些先驗期望(統計中稱爲先驗(prior))就是beta,表示在運動員打球之前,我們就對他的擊球率有了一個大概範圍的預測。假設我們預計運動員整個賽季的擊球率平均值大概是 0.27左右,範圍大概是在 0.21 到0.35之間。那麼用 Beta 分佈來表示,我們可以取參數 ,,因爲 ,圖形分佈也主要集中在0.21~0.35之間,非常符合經驗值,也就是我們在不知道這個運動員真正擊球水平的情況下,我們先給一個平均的擊球率的分佈。
假設運動員一次擊中,那麼現在他本賽季的記錄是“1次打中;1次打擊”。那麼我們更新我們的概率分佈,讓概率曲線做一些移動來反應我們的新信息。
湯普森採樣
湯普森採樣的背後原理正是上述所講的 Beta 分佈,把 Beta 分佈的 a 參數看成是推薦後用戶點擊的次數,把分佈的 b 參數看成是推薦後用戶未點擊的次數,則湯普森採樣過程如下
- 取出每一個候選對應的參數 a 和 b
- 爲每個候選用 a 和 b 作爲參數,用 Beta 分佈產生一個隨機數
- 按照隨機數排序,輸出最大值對應的候選
- 觀察用戶反饋,如果用戶點擊則將對應候選的 a 加 1,否則 b 加 1
實際上在推薦系統中,要爲每一個用戶都保存一套參數,比如候選有 m 個,用戶有 n 個,那麼就要保存 個參數。
1)如果一個候選被選中的次數很多,也就是 a+b 很大了,他的分佈會很窄,換句話說這個候選的收益已經非常確定了,就是說不管分佈中心接近 0 還是 1 都幾乎比較確定了。用他產生隨機數,基本上就在中心位置附近,接近平均收益。
2)如果一個候選,不但 a+b 很大,即分佈很窄,而且 a/(a+b) 也很大,接近 1,那就確定這是個好的候選項,平均收益很好,每次選擇很佔優勢,就進入利用階段。反之則有可能平均分佈比較接近與0,幾乎再無出頭之日。
3)如果一個候選的 a+b 很小,分佈很寬,也就是沒有被選擇太多次,說明這個候選是好是壞還不太確定,那麼分佈就是跳躍的,這次可能好,下次就可能壞,也就是還有機會存在,沒有完全拋棄。那麼用它產生隨機數就有可能得到一個較大的隨機數,在排序時被優先輸出,這就起到了前面說的探索作用。
choice = numpy.argmax(pymc.rbeta(1 + self.wins, 1 + self.trials - self.wins))
首先我們有一個先驗概率,然後通過做實驗會有一個後驗概率,
具體來說,我們就考慮 Beta-Bernoulli Bandit,也就是說,對於 我們的先驗分佈(prior distribution)是 Beta 分佈,而每個 arm reward 的分佈是以 爲參數的 Bernoulli 分佈。容易知道,在這種情況下,的後驗分佈仍然是 Beta 分佈。
這裏只用到了最基本的概率論和統計的知識,以防大家有些失憶,我寫一些關鍵的公式出來。假設現在我們有 K 個機器,那麼平均的 reward 事先是不知道的。在一開始,算法會選擇一個 A 然後會觀察到 reward 這是一個從Bernoulli分佈進行 sample
此外對於 Bernoulli 的