機器學習A-Z~置信區(qū)間上界算法 Upper Confidence Bound or UCB

本文將要開始介紹機器學習中的強化學習蝶锋, 這里首先應用一個多臂老虎機(The Multi-Armed Bandit Problem)問題來給大家解釋什么是強化學習逗旁。

多臂老虎機問題

image

如圖所示,我們有幾個單臂老虎機澎办,組成一起我們就稱作多臂老虎機嘁捷,那么我們需要制定什么樣的策略才能最大化得到的獎勵哀墓。這里假設每個老虎機獎勵的隨機分布是不一樣的。

image

比如第一個分布散怖,D1這個老虎機的分布大概率落在中間這部分菇绵,很小概率在兩頭的地方肄渗。假設用戶是知道這些分布的,那么用戶應當怎么選擇咬最?答案很簡單翎嫡,我們應當選擇D5這個老虎機,因為它的平均值最高永乌,而且有很大概率在靠右也就是正數(shù)范圍內惑申。但現(xiàn)在的問題是,用戶實際上是不知道這些老虎機的概率分布的翅雏。那么我們需要一次次的嘗試圈驼,盡可能快速的找到這五個老虎機的分布,并利用最佳的分布最大化收益望几。這個在機器學習上叫做碗脊,探索利用。

探索和利用這兩步實際上并不是那么的兼容橄妆,為了解釋這個概念衙伶,這里引入一個定義,叫做遺憾害碾。也就是我們知道D5的分布是最高的矢劲,那么最佳策略是應對不停的選擇D5這個機器,但當我們不知道的時候慌随,可能會選擇其他的機器芬沉,當沒有選擇最佳機器時,都會得到一個得到的獎勵和最佳獎勵的差阁猜,這個差就是遺憾丸逸。

那么現(xiàn)在可以解釋為什么探索和利用為什么并不是那么兼容,比如我們探索很多剃袍,每個機器玩了一百次黄刚,對于每個機器都能得到很好的分布估計,但同時也會帶來很多的遺憾民效。如果探索比較少憔维,可能會找不到最佳的分布,探索得到的結論可能是錯的畏邢。所以說业扒,最佳的策略應該是,通過探索找到最佳分布的老虎機舒萎,并且以一種快速而高效的方法找到這個老虎機程储,且不斷的利用它來獲得最大化的獎勵。

在實際上生活或商業(yè)案例上也有很多相似的情形。比如可口可樂公司設計出了5個不同的廣告章鲤,那么現(xiàn)在的問題就是不知道哪個廣告是最好的致板,能帶來最佳的用戶轉換率,即不知道哪一個投放后會吸引用戶點擊或購買產品咏窿。非常傳統(tǒng)的方式就是把每個廣告都投放到市場上幾天斟或,然后看看得到的結果。但這是很消耗人力和財力的集嵌,而且這本質上只進行了探索卻沒進行利用萝挤。因此我們需要對此進行利用,比如其中某個廣告投放第一天就顯然沒有任何的效果根欧,那么后面幾天的投放的意義就不是很大了怜珍,可以考慮不再投放此廣告來節(jié)省人力財力。即應用強化學習可以優(yōu)化成本和支出凤粗,又可以得到最高的收益酥泛。

置信區(qū)間上界算法

現(xiàn)在來介紹強化學習中的一個算法,叫做置信區(qū)間上界算法(UCB)嫌拣。這里依然用上述的多臂老虎機問題引出的廣告案例柔袁。

image

下面來描述下這個算法,現(xiàn)在假設我們知道五臺老虎機的分布,那么我們會不斷的選擇D5這個老虎機异逐。假如說不知道這幾個的概率分布捶索,那么就要開始我們的算法。

第一步灰瞻,在我們開始之前腥例,假設每個老虎機的概率分布是相同的,即平均值或期望是相同的酝润。如圖紅色虛線表示平均值或期望燎竖,縱軸表示老虎機可能帶來的收益。這些彩色的橫線代表每個老虎機實際的平均或期望要销,這些期望我們是不知道的构回,這個問題的核心就是我們要進行不斷的嘗試去估算出每個老虎機的平均期望。

image

置信區(qū)間蕉陋,Confidence Bound捐凭,之前有講過Confidence Interval拨扶,這兩個詞的意義是類似的凳鬓。 這個Confidence Interval指的是當我們有一定的概率分布的時候,置信區(qū)間是和每個概率分布的累積分布曲線有關系患民。對于每個老虎機缩举,我們講置信區(qū)間,用灰色的方框表示。對于每個老虎機仅孩,我們按的概率有很大的概率是在這個區(qū)間當中的托猩。我們每一輪將要選擇的就是擁有最大的區(qū)間上界的老虎機,也就是頂上的這條線最大的老虎機辽慕,我們要在每一輪中選擇它并按下它京腥。在第一輪中,他們的區(qū)間上界是一樣的溅蛉。

比如選擇3號老虎機公浪,按下去,首先會發(fā)現(xiàn)區(qū)間所代表的方框下降了船侧。因為按下去后我們會發(fā)現(xiàn)其給予的獎勵欠气,3號老虎機的實際期望比較低,那么觀察得到的獎勵也是比較低镜撩,那么重新計算觀察到的所有平均值時预柒,那么這個平均值就降低了。第二點袁梗,我們會發(fā)現(xiàn)這個置信區(qū)間變得更小了宜鸯,因為比起上一輪的游戲,我們總共的觀察次數(shù)變多了遮怜,也就是信心升高了顾翼,那么這個置信區(qū)間的長度就會變小。

image

那么此時第三個機器的置信區(qū)間上界比其他的要低奈泪,所以下一輪要選擇其他四個機器适贸,比如選擇第四個,那么它的置信區(qū)間上界會變高涝桅,區(qū)間大小會變小拜姿。

image

在下一步,125三個機器的上界時一樣的冯遂,因此可以在他們三個中間選一個蕊肥,比如第一個,它的實際平均值比較低蛤肌,但當我們按下老虎機的時候壁却,它實際是個隨機事件,因此可能高也可能低裸准。雖然它的平均值展东,但假設此時運氣比較好,投下去的錢翻倍了炒俱,那么他的區(qū)間上限變高盐肃,長度變小爪膊。

image

再然后在25中間選擇一個,比如第二個砸王,此時他的置信區(qū)間上界變低推盛,寬度變小。

image

那么最后按下第五個機器谦铃,這時得到一個非常高的觀察值耘成,那么上限變高,寬度變小驹闰。但由于D5實際上是最佳的機器凿跳,那么就算置信區(qū)間變小了,但它的上界依然比其他的都要高疮方。

image

那么我接下來選擇的老虎機依然是它控嗜,當我們選擇了一個最佳的解時,我們可能在這個選擇上停留很多輪骡显,但由于對他的信心會越來越高疆栏,因此這個區(qū)間會越來越小,此時的區(qū)間上界可能就會變成不是最高惫谤。

image

UCB算法有一個特點壁顶,當我們選擇了一個機器很多次后,他的置信區(qū)間會變得很小溜歪,要給其他的機器一些機會若专,看看其他機器顯示的觀察結果所對應的新的置信區(qū)間上界是否會更高。這樣經過很多輪后蝴猪,最終D5的選擇次數(shù)依然會很多很多调衰,他的置信區(qū)間會越來越扁,一直到最終輪自阱。

image

以上就是置信區(qū)間算法的一個基本原理嚎莉。

代碼實現(xiàn)

這里用一個商業(yè)案例來做例子。假設有一個汽車公司為了一個車做了十個廣告ad1-ad10沛豌,這個公司需要知道哪個廣告投放后趋箩,點擊率最高。這組數(shù)據(jù)集是在模擬環(huán)境得到的加派,若值為1則指的是這個用戶點擊了這個廣告叫确。總結一下問題就是芍锦,我們有十個廣告竹勉,要決定哪個廣告有最高的點擊率,并對逐步得到的信息來決定醉旦,第n個用戶投放哪個廣告得到最高的點擊數(shù)饶米。我們先看看如果對于每一個用戶桨啃,我們隨機抽選廣告车胡,會得到怎樣的點擊數(shù)檬输。這里提供一個隨機選擇的算法,不是此次算法的重點匈棘。

# Importing the libraries
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Ads_CTR_Optimisation.csv')

# Implementing Random Selection
import random
N = 10000
d = 10
ads_selected = []
total_reward = 0
for n in range(0, N):
    ad = random.randrange(d)
    ads_selected.append(ad)
    reward = dataset.values[n, ad]
    total_reward = total_reward + reward

# Visualising the results
plt.hist(ads_selected)
plt.title('Histogram of ads selections')
plt.xlabel('Ads')
plt.ylabel('Number of times each ad was selected')
plt.show()

運行后得到的ads_selected代表對于每一個用戶丧慈,哪一個廣告被選擇,total_reward指的是所有的點擊數(shù)主卫。得到的圖像表示每個廣告被點擊的次數(shù)逃默。每個廣告的到點擊次數(shù)是接近的,大致在1000左右簇搅。

對于UCB算法完域,我們沒有直接的工具包來使用,因此需要自己實現(xiàn)瘩将,下面是算法邏輯:

image

這里就不解釋太多吟税,只貼代碼,最終運行后得到的總的點擊數(shù)為2178姿现,明顯高于上面用隨機得到的結果肠仪。且查看ads_selected會發(fā)現(xiàn)編號4出現(xiàn)的次數(shù)最多,即第五個廣告ad5备典。


import matplotlib.pyplot as plt
import pandas as pd
import math

# import the dataset
dataset = pd.read_csv('Ads_CTR_Optimisation.csv')

# Implementing UCB
N = 10000
d = 10
ads_selected = []
numbers_of_selections = [0] * d
sums_of_rewards = [0] * d
total_reward = 0
for n in range(0, N):
    ad = 0
    max_upper_bound = 0
    for i in range(0, d):
        if numbers_of_selections[i] > 0:
            average_reward = sums_of_rewards[i] / numbers_of_selections[i]
            delta_i = math.sqrt(3/2 * math.log(n + 1) / numbers_of_selections[i])
            upper_bound = average_reward + delta_i
        else:
            upper_bound = 1e400
        if upper_bound > max_upper_bound:
            max_upper_bound = upper_bound
            ad = i
    ads_selected.append(ad)
    reward = dataset.values[n, ad]
    numbers_of_selections[ad] = numbers_of_selections[ad] + 1
    sums_of_rewards[ad] = sums_of_rewards[ad] + reward
    total_reward = total_reward + reward

# Visualising the results
plt.hist(ads_selected)
plt.title('Histogram of ads selections')
plt.xlabel('Ads')
plt.ylabel('Number of times each ad was selected')
plt.show()

以上异旧,就是強化學習置信區(qū)間算法的相關基礎知識。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末提佣,一起剝皮案震驚了整個濱河市吮蛹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拌屏,老刑警劉巖匹涮,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異槐壳,居然都是意外死亡然低,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門务唐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雳攘,“玉大人,你說我怎么就攤上這事枫笛《置穑” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵刑巧,是天一觀的道長喧兄。 經常有香客問我无畔,道長,這世上最難降的妖魔是什么吠冤? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任浑彰,我火速辦了婚禮,結果婚禮上拯辙,老公的妹妹穿的比我還像新娘郭变。我一直安慰自己,他們只是感情好涯保,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布诉濒。 她就那樣靜靜地躺著,像睡著了一般夕春。 火紅的嫁衣襯著肌膚如雪未荒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天及志,我揣著相機與錄音片排,去河邊找鬼。 笑死困肩,一個胖子當著我的面吹牛划纽,可吹牛的內容都是我干的。 我是一名探鬼主播锌畸,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼勇劣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了潭枣?” 一聲冷哼從身側響起比默,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盆犁,沒想到半個月后命咐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡谐岁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年醋奠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伊佃。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡窜司,死狀恐怖,靈堂內的尸體忽然破棺而出航揉,到底是詐尸還是另有隱情塞祈,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布帅涂,位于F島的核電站议薪,受9級特大地震影響尤蛮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜斯议,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一产捞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捅位,春花似錦轧葛、人聲如沸搂抒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽求晶。三九已至焰雕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芳杏,已是汗流浹背矩屁。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爵赵,地道東北人吝秕。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像空幻,于是被迫代替她去往敵國和親烁峭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容