Discuz! Board

 找回密碼
 立即註冊
搜索
熱搜: 活動 交友 discuz
查看: 141|回復: 0
打印 上一主題 下一主題

多臂老虎機問题

[複製鏈接]

2070

主題

2070

帖子

6244

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
6244
跳轉到指定樓層
樓主
發表於 2023-9-19 13:17:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
多臂山君機(Multi-Armed Bandit, MAB)問题属于經典的摸索與操纵(Exploration and Exploitation)問题,理解它可以或许帮忙咱们進修以後强化進修內容。

假如如今有 K 台山君機或一個 K 根拉杆的山君機,每台山君機都對應着一個嘉奖几率散布,咱们但愿在未知嘉奖几率散布的环境下操作 T 次山君機以後可以或许得到最大的累计嘉奖。

多臂山君機問题可以暗示為一個元组 <A, R> ,此中:

多臂山君機問题的方针是最大化 T 時候步內积累的嘉奖,即 max\sum_{t=1}^{T}{r_{t}}

對付每台山君機界說其指望嘉奖 Q(a) = E_{r\sim R(r|a)}[r] ,最優指望嘉奖 Q^{*}=max_{a\epsilon A}Q(a) ,後悔界說為當前山君機的指望嘉奖與最優指望嘉奖的差值 R(a)=Q^{*} - Q(a) ,积累後悔為操作T次後的後悔总量,假如T時候步內操作山君機  \left\{ {a_{1},a_{2},...a_{T}} \right\} ,积累後悔為 \sigma_{R} = \sum_{t=1}^{T}{R(a_{t})} 。多臂山君機問题最大化 T 時候步內积累的嘉奖的方针等价于最小化积累後悔。

為了晓得哪台山君即可以或许得到最高嘉奖,必要對每台山君機的嘉奖散布指望举行估量,估量法子是對每台山君機都反复举行 N 次拉杆操作,然後将每台山君機均匀嘉奖作為指望嘉奖的估量。 此外,增量式均匀数法子是一種不必要一次性對所有嘉奖乞降然後再除以次数的法子,其长處是可以節流內存開消,推导進程以下 。Q_{k}=\frac{1}{k} \sum_{k=1}^{K}{r_{i}}=\frac{1}{k}(r_{k}+\sum_{i=1}^{k-1}{r_{i}})=\frac{1}{k}(r_{k}+(k-1)Q_{k-1})=\frac{1}{k}(r_{k}+kQ_{k-1}-Q_{k-1}) =Q_{k-1} + \frac{1}{k}[r_{k}-Q_{k-1}]

下面先容解决MAB問题的几種法子,包含ϵ-贪默算法、上置信界算法 、汤普森采样算法

思绪:每次以 \varepsilon 几率随機選擇山君機,以1- \varepsilon 几率從現有山君機指望嘉奖估量當選擇最大山君機, \varepsilon 會跟着迭代的举行逐步缩小,可以令 \varepsilon = 1/T , T 為迭代時候步数

  1. import numpy as np
  2. from numpy import 中古機械買賣,random as rd
  3. class Arms:
  4. def __init__(self, arm_nums):
  5. self.arm_nums = arm_nums
  6. self.arm_probs = rd.random(arm_nums)
  7. self.best_index = np.argmax(self.arm_probs)
  8. self.best_prob = self.arm_probs[self.best_index]
  9. self.actions = []
  10. self.steps = np.zeros(arm_nums)
  11. self.estimates = np.ones(arm_nums)
  12. self.regret = 0
  13. self.regrets = []
  14. return
  15. def reward(self, a):
  16. # simulate arm random
  17. if self.arm_probs[a] < rd.random():
  18. return 0
  19. else:
  20. return 1
  21. def update_estimates(self, a, reward=None):
  22. if reward is None:
  23. reward = self._reward(a)
  24. self.actions.append(a)
  25. self.steps[a] += 1
  26. # update estimates by incremental average
  27. self.estimates[a] += 1 / self.steps[a] * (reward - self.estimates[a])
  28. # accumulate total regrets
  29. self.regret += self.best_prob - self.arm_probs[a]
  30. self.regre種植電鑽,ts.append(self.regret)
  31. return
  32. class EpsilonGreedy(Arms):
  33. def __init__(self, arm_nums, iter_nums):
  34. super(EpsilonGreedy, self).__init__(arm_nums)
  35. self.iter_nums = iter_nums
  36. self.eps = 0
  37. return
  38. def policy(self):
  39. self.eps += 1
  40. if rd.random() < 1 / self.eps:
  41. return rd.randint(0, self.arm_nums)
  42. else:
  43. return np.argmax(self.estimates)
  44. def run(self):
  45. for i in range(self.iter_nums):
  46. a = self.policy()
  47. # update estimated expected reward
  48. self.update_estimates(a)
  49. print('accumulate regret:', self.regret)
  50. plot_regret(self.regrets, 'epsilon_greedy')
  51. return
複製代碼

思绪:UCB 是一種經典的基于不肯定性的计谋算法。它的思惟用到了一個很是聞名的数學道理:霍夫丁不等式(hoeffding's inequality),經由過程将選擇最大指望嘉奖估量转化為最大化上界来解决MAB問题。推导以下

P\left\{ E[x]\geq \tilde{x}+u \right\} \leq e^{-2nu^{2}}

P\left\{ E[x] \leq \tilde{x}+u \right\} \geq1- e^{-2nu^{2}}  \Rightarrow P\left\{ Q_{t}(a)<  \bar{Q_{t}}(a) +\bar{U}(a)  \right\}  \geq 1- e^{-2nu^{2}}

令 \frac{1}{T} = 1- e^{-2nu^{2}}  \Rightarrow \bar{U}(a)=\sqrt{\frac{log T}{2(N_{t}(a)+1)}} \Rightarrow a=argmax(\bar{Q_{t}}(a) + c \cdot \bar{U}(a) )

系数 c 節制不肯定性的比重, N_{t}(a) 暗示动作 a 在 t 時刻的履行次数

  1. class UCB(Arms):
  2. def __init__(self, arm_nums, iter_nums, coef):
  3. super(UCB, self).__init__(arm_nums)
  4. self.total_steps = 0
  5. self.iter_nums = iter_nums
  6. self.coef = coef
  7. return
  8. def policy(self):
  9. self.total_steps += 1
  10. # upper bound
  11. upper_bd = self.estimates + self.coef * np.sqrt(np.log(self.total_steps) / (2 * (self.steps + 1)))
  12. return np.argmax(upper_bd)
  13. def run(self):
  14. for 檸檬山楂荷葉茶,i in range(self.iter_nums):
  15. a = self.policy()
  16. self.update_estimates(a)
  17. print('accumulate regret:', self.regret)
  18. plot_regret(self.regrets, 'ucb')
  19. return
複製代碼

思绪:假如每一個山君機的嘉奖散布合适Beta散布,某台山君機履行了 k 次操作,此中 m 次嘉奖為 1,n 次嘉奖為 0,则该拉杆的嘉奖從命参数為(m + 1, n + 1)的 Beta 散布。從多台山君機依照Beta散布采样成果當選擇最大成果對應的山君機便可。

  1. class ThompsonSampling(Arms):
  2. def __init__(self, arm_nums, iter_nums):
  3. super(ThompsonSampling, self).__init__(arm_nums)
  4. self.iter_nums = iter_nums
  5. self.beta_a = np.ones(arm_nums)
  6. self.beta_b = np.ones(arm_nums)
  7. return
  8. def policy(self):
  9. samples = rd.beta(self.beta_a, self.beta_b)
  10. a = np.argmax(samples)
  11. r = self.reward(a)
  12. self.beta_a[a] += r
  13. self.beta_b[a] += (1 - r)
  14. return a, r
  15. def run(self):
  16. for i in range(self.iter_nums):
  17. a, r = 電動清潔刷,self.policy()
  18. self.update_estimates(a, reward=r)
  19. print('accumulate regret:', self.regret)
  20. plot_regret(self.regrets, 'thompson_sampling')
  21. return
複製代碼
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|台灣線上娛樂城假期交流評價論壇  

悠遊卡套, 刷卡換現金, 未上市, 未上市股票, 滑鼠墊, 信用卡換現金, 堆高機, 空壓機, 翻譯社LPG, 音波拉皮, 隆乳, 割雙眼皮, 音波拉皮, 酸梅湯, 隨身煙灰缸, 資料擷取DAQ, 傳感器, 荷重元, 壯陽藥呼吸照護, 封口機, 廚具工廠微晶瓷, 創業加盟推薦, 鹹酥雞推薦, 房屋二胎搬家公司, 百家樂預測, 百家樂賺錢, 捕魚機遊戲, 九州娛樂app, leo官網, LEO娛樂, 運彩場中, 歐冠杯投注, 歐冠盃投注, 歐冠杯下注, 歐冠盃下注, 歐冠杯決賽, 歐冠盃決賽, 3A娛樂城, Force Sensors, load cell, 贈品, 禮品, 搬家公司, 台中搬家, 台中搬家公司, 呼吸照護, 沙發修理廚餘回收再利用機關廚餘回收Tshirt夾克, polo衫, 團體制服, 制服, 團體服, 百家樂, 廢鐵回收補魚機, 板橋汽車美容, 基隆支票貼現, 汽機車借款, 平鎮當舖, 通馬桶, 抽水肥, 飲水機雙層紙杯, 沙發工廠台北招牌設計m 抽脂價格, 汐止機車借款, 南港當舖, 汽車借款免留車, 機車借款免留車, 台北植牙, 台北借錢, 小額借款支票貼現支票借錢翻譯社邱大睿, 刷卡換現, 北京賽車幸運飛艇台灣運動彩券首頁運動彩場中投注場中投注時間表美體SPA, 素描畫室屏東汽機車借款三峽當舖房屋二胎台中搬家台中搬家公司未上市,

GMT+8, 2024-4-28 19:36 , Processed in 0.064592 second(s), 4 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表