|
多臂山君機問题[1]是几率论中一個經典問题,也属于强化進修的范围.假想,一個赌徒眼前有N個山君機,事前他不晓得每台山君機的真實红利环境,他若何按照每次玩山君機的成果来選擇下次拉哪台或是不是遏制打赌,来最大化本身的從頭至尾的收益.
關于多臂山君機問落款字的来历,是由于山君機[2]在之前是有一個操控杆,就像一只手臂(arm),而玩山君機的成果常常是口袋被掏空,就像碰到了匪贼(bandit)同样,而在多臂山君機問题中,咱们面临的是多個山君機.
在贸易中,多臂山君機問题有着遍及的利用,包含告白展現,醫學實验和金融等范畴[3].好比在举薦體系中,,咱们有N個物品,事前不晓得用户U對N個物品的反响,咱们必要每次举薦给用户某個物品,来最大化用户的价值(或說尽可能使得用户U转化),好比用户的采辦.
每一個物品 Item_i \in \{Item_i\}_{i=1}^n 被用户U转化的事務,對應一個伯努利散布 Bernoulli(p_i),f(k;p_i) = \begin{cases} p_i & \text{if $k = 1$}, \\ 1 - p_i & \text{if $k = 0$}. \end{cases}
p_i 咱们叫做 Item_i 的被转化率.换句话說,就是對付每一個物品,用户U转化的几率為 p_i ,此中 p_i \in [0, 1] .
咱们事前是不晓得每一個物品對應的被转化率 p_i 的.
想對伯努利散布和二項式散布,泊松散布,指数散布的瓜葛有所领會的同窗请戳
EE(Exploration a增強記憶力保健品,nd Exploitation,摸索和操纵)問题在這個情形下,摸索(Exploration)山楂片,指的是举薦新的物品给用户,開辟用户的樂趣點;而操纵(Exploitation)指的是操纵當前收成的信息来最大化收益,包管用户當前的體验,好比咱们在前几回举薦中,發明用户很喜好物品i,咱们以後操纵這個信息来多举薦物品i.
EE問题(Exploration and Exploitation Dile妹妹e)
對應得,咱们有 \ep檬山楂脂流茶,silon-greedy (叫做epsilon-greedy),指的是在N個物品之間選擇一個给用户举薦(拉哪台山君機)時,
此中\epsilon \in [0, 1], \epsilon 越大,摸索的水平越大.
如下是简化的代码實現
- import numpy as np
- N = 3
- T = 100
- epsilon = 0.1
- P = [0.5, 0.6, 0.55]
- def pull(N, epsilon, P):
- """經由過程epsilon-greedy来選擇物品(拉山君機)
- Returns:
- 本次選擇的物品
- """
- # 經由過程一致散布的随機数来肯定是搜刮仍是操纵
- exploration_flag = True if np.random.uniform() <= epsilon else False
- 減肥方法, # 若是選擇摸索
- if exploration_flag:
- i = int(min(N-1, np.floor(N*np.random.uniform())))
- # 若是選擇操纵
- else:
- i = np.argmax(P)
- return i
- def trial_vanilla(rounds=T):
- 毛囊炎藥膏, """做rounds轮實验
- rewards来記實重新到位的嘉奖数
- """
- rewards = 0
- for t in range(rounds):
- i = pull(N, epsilon, P)
- reward = np.random.binomial(1, P[i])
- rewards += reward
- return rewards
複製代碼
在 \epsilon-greedy 章中,咱们供给了简化的代码.這個代码简化的地方在于:咱们假如已晓得了每一個物品的转化率 \{p_i\}_{i=1}^N ,但現實上這是不晓得的.
為了估量\{p_i\}_{i=1}^N,凡是有两種做法:
2. Thompson Sampling
關于這两種做法,後面的文章我會具體先容. |
|