首頁(yè) 資訊 > 金融 > 正文

策略梯度強(qiáng)化學(xué)習(xí)算法實(shí)現(xiàn)A/B優(yōu)化?_世界熱頭條

本文將以可視化方式向您一步一步解釋使用策略梯度方法實(shí)現(xiàn)A/B優(yōu)化。


(資料圖片)

譯者 | 朱先忠

審校 | 重樓

在本文中,我們將探討如何將策略梯度強(qiáng)化學(xué)習(xí)應(yīng)用于A/B優(yōu)化。本文將給出一個(gè)觀察策略梯度方法的簡(jiǎn)單演示;其中,我們將深入了解有關(guān)潛在的機(jī)制,并逐步可視化學(xué)習(xí)過(guò)程。

簡(jiǎn)介

與監(jiān)督、自監(jiān)督和無(wú)監(jiān)督學(xué)習(xí)一樣,強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)基本概念。在強(qiáng)化學(xué)習(xí)中,主體試圖在環(huán)境中找到一組最佳的動(dòng)作,以最大限度地獲得獎(jiǎng)勵(lì)。強(qiáng)化學(xué)習(xí)作為一種可以在圍棋和國(guó)際象棋中擊敗最優(yōu)秀棋手的方法,與神經(jīng)網(wǎng)絡(luò)作為高度靈活的代理相結(jié)合,已經(jīng)廣為人知。

其中,用作代理的神經(jīng)網(wǎng)絡(luò)能夠通過(guò)使獲得的獎(jiǎng)勵(lì)最大化來(lái)逐步學(xué)習(xí)優(yōu)化策略。目前,人們已經(jīng)開(kāi)發(fā)了幾種策略來(lái)更新神經(jīng)網(wǎng)絡(luò)的參數(shù),例如策略梯度、q學(xué)習(xí)或ActorCritic(演員-評(píng)判家)學(xué)習(xí)。其中,策略梯度方法最接近反向傳播,它通常用于神經(jīng)網(wǎng)絡(luò)的監(jiān)督和自監(jiān)督學(xué)習(xí)。然而,在強(qiáng)化學(xué)習(xí)中,我們并不像在監(jiān)督學(xué)習(xí)中那樣直接評(píng)估每個(gè)動(dòng)作,而是試圖最大化總回報(bào),并讓神經(jīng)網(wǎng)絡(luò)決定要采取的個(gè)人動(dòng)作。這個(gè)動(dòng)作是從概率分布中選擇的,這為進(jìn)一步探索提供了高度的靈活性。在優(yōu)化開(kāi)始時(shí),操作是隨機(jī)選擇的,代理探索不同的策略。隨著時(shí)間的推移,一些行動(dòng)被證明比其他行動(dòng)更有用,概率分布最終表現(xiàn)為明確的決策。與其他強(qiáng)化學(xué)習(xí)方法不同,用戶不必控制探索和開(kāi)發(fā)之間的這種平衡,最佳平衡是由梯度策略方法本身找到的。

通常,使回報(bào)最大化的最佳策略是通過(guò)一系列行動(dòng)來(lái)實(shí)現(xiàn)的,其中每個(gè)行動(dòng)都會(huì)導(dǎo)致環(huán)境的新?tīng)顟B(tài)。然而,梯度策略方法也可以用來(lái)尋找在統(tǒng)計(jì)上給予最高獎(jiǎng)勵(lì)的最佳行動(dòng)。在執(zhí)行A/B優(yōu)化時(shí)經(jīng)常會(huì)發(fā)現(xiàn)這種情況,這是一種非常常見(jiàn)的從兩個(gè)選項(xiàng)中選擇其一的更好的技術(shù)。例如,在市場(chǎng)營(yíng)銷中,A/B測(cè)試用于選擇能帶來(lái)更高銷售額的廣告方案。你更愿意點(diǎn)擊哪個(gè)廣告?選項(xiàng)A:“充分利用您的數(shù)據(jù):我是一名專業(yè)的數(shù)據(jù)科學(xué)家,我可以幫助您分析您的數(shù)據(jù)”或選項(xiàng)B“與您的數(shù)據(jù)作斗爭(zhēng)?專業(yè)數(shù)據(jù)分析師可以免費(fèi)幫助您自動(dòng)化數(shù)據(jù)分析”?

兩個(gè)廣告創(chuàng)意選項(xiàng)。你更愿意點(diǎn)擊哪一個(gè)?(圖片由作者創(chuàng)作)

A/B優(yōu)化的困難在于點(diǎn)擊率是可變的。例如,在網(wǎng)站上看到廣告后,每個(gè)用戶可能有不同的偏好,處于不同的情緒中,因此反應(yīng)也不同。由于這種可變性,我們需要統(tǒng)計(jì)技術(shù)來(lái)選擇更好的廣告方案。比較選項(xiàng)A和B的常用方法是假設(shè)檢驗(yàn),如t檢驗(yàn)。要進(jìn)行t檢驗(yàn),廣告的兩個(gè)潛在版本必須顯示一段時(shí)間,以收集用戶的點(diǎn)擊率。為了對(duì)優(yōu)選的廣告方案進(jìn)行顯著的評(píng)估,需要相當(dāng)長(zhǎng)的探索時(shí)間,其缺點(diǎn)是潛在的收入損失,因?yàn)樵谔剿鬟^(guò)程中,更好和更差的廣告同樣頻繁地隨機(jī)顯示。通過(guò)盡快更頻繁地顯示更好的廣告來(lái)最大限度地提高點(diǎn)擊率是有利的。通過(guò)使用梯度策略方法執(zhí)行A/B優(yōu)化,代理將首先隨機(jī)探索變體A和變體B,那個(gè)將獲得更高的廣告獎(jiǎng)勵(lì),從而導(dǎo)致更高的點(diǎn)擊率,因此代理將很快學(xué)會(huì)更頻繁地向用戶展示更好的廣告,并最大化點(diǎn)擊率和收入。

實(shí)例展示

在我們的例子中,我們有兩個(gè)廣告創(chuàng)意選項(xiàng),其中我們假設(shè)選項(xiàng)A的點(diǎn)擊概率為30%,選項(xiàng)B的點(diǎn)擊概率是40%。我們開(kāi)展了一場(chǎng)廣告活動(dòng),有1000個(gè)廣告印象。如果我們只進(jìn)行探索,并且同樣頻繁地顯示這兩個(gè)選項(xiàng),我們可以預(yù)期平均點(diǎn)擊率為35%,總共平均點(diǎn)擊350次。如果我們知道B會(huì)被更多地點(diǎn)擊,我們只會(huì)顯示B,平均點(diǎn)擊400次。然而,如果我們運(yùn)氣不好,選擇只顯示A,我們平均只能獲得300次點(diǎn)擊。我們稍后將更詳細(xì)地探討策略梯度方法,我們可以實(shí)現(xiàn)平均391次點(diǎn)擊,這清楚地表明,快速應(yīng)用學(xué)習(xí)到的策略會(huì)導(dǎo)致點(diǎn)擊次數(shù)幾乎與我們最初選擇更好的選項(xiàng)B一樣高。

運(yùn)行機(jī)制解析

我們使用TensorFlow庫(kù)在小型神經(jīng)網(wǎng)絡(luò)上使用梯度策略方法運(yùn)行A/B優(yōu)化。首先,我們需要導(dǎo)入一些第三方庫(kù)。

import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tf

神經(jīng)網(wǎng)絡(luò)只包含一層,由一個(gè)神經(jīng)元決定播放哪一則廣告。由于我們沒(méi)有關(guān)于用戶偏好、位置、時(shí)間或其他任何信息,因此決策是基于對(duì)神經(jīng)網(wǎng)絡(luò)的零輸入,并且我們不需要使用大型神經(jīng)網(wǎng)絡(luò)所實(shí)現(xiàn)的非線性。訓(xùn)練是通過(guò)調(diào)整這個(gè)神經(jīng)元的偏置來(lái)實(shí)現(xiàn)的。

model = tf.keras.models.Sequential()model.add(tf.keras.layers.Dense(1, activatinotallow="sigmoid", input_shape=(1,)))model.summary()

我們編寫(xiě)了一個(gè)函數(shù),它用于使用神經(jīng)網(wǎng)絡(luò)選擇動(dòng)作,顯示選項(xiàng)A或選項(xiàng)B。該函數(shù)使用tf.function()進(jìn)行修飾,它創(chuàng)建了一個(gè)靜態(tài)計(jì)算圖,使其運(yùn)行速度比在Eager模式(走一步看一步,能夠立即輸出結(jié)果)下快得多。通過(guò)使用TensorFlow的GradientTape函數(shù),我們?cè)趶V告選擇過(guò)程中收集梯度。每次用戶進(jìn)入網(wǎng)站時(shí),神經(jīng)網(wǎng)絡(luò)都會(huì)產(chǎn)生一個(gè)輸出,該輸出被視為選擇要呈現(xiàn)給用戶的廣告變體A或變體B的概率。

由于我們只有一個(gè)神經(jīng)元具有S形激活,因此輸出是0到1之間的單個(gè)數(shù)字。如果輸出為0.5,則有50%的機(jī)會(huì)顯示廣告B,并且有50%的可能性顯示廣告A。如果輸出為0.8,則顯示廣告B的可能性為80%,顯示廣告A的可能性為20%。通過(guò)將神經(jīng)網(wǎng)絡(luò)的輸出與0和1之間的均勻分布的隨機(jī)數(shù)進(jìn)行比較來(lái)選擇動(dòng)作。如果隨機(jī)數(shù)小于輸出,則動(dòng)作為True(1),并且選擇廣告B;如果隨機(jī)數(shù)大于輸出,則操作為False(0),并選擇廣告A。損失值使用binary_crosentropy_loss測(cè)量神經(jīng)網(wǎng)絡(luò)的輸出和所選動(dòng)作之間的差。然后,我們創(chuàng)建相對(duì)于模型參數(shù)的損失梯度。

@tf.function()def action_selection(model): with tf.GradientTape() as tape: output = model(np.array([[0.0]])) # [0 ... 1] action = (tf.random.uniform((1, 1)) < output) # [0 or 1] loss = tf.reduce_mean(tf.keras.losses.binary_crossentropy(action, output)) grads = tape.gradient(loss, model.trainable_variables) return output, action, loss, grads

我們進(jìn)行了超過(guò)1000次廣告展示的訓(xùn)練。在每個(gè)步驟中,廣告都會(huì)出現(xiàn)一次,新用戶有機(jī)會(huì)點(diǎn)擊廣告。為了評(píng)估學(xué)習(xí)過(guò)程,我們統(tǒng)計(jì)這段時(shí)間后的點(diǎn)擊總數(shù)。學(xué)習(xí)率定義為0.5。我們稍后將討論學(xué)習(xí)率對(duì)總點(diǎn)擊次數(shù)的影響。

STEPS = 1000LR = 0.5

現(xiàn)在,讓我們來(lái)做廣告宣傳。隨著時(shí)間的推移,神經(jīng)網(wǎng)絡(luò)將改進(jìn)其預(yù)測(cè)能力。通過(guò)強(qiáng)化學(xué)習(xí),訓(xùn)練和應(yīng)用同時(shí)發(fā)生。在實(shí)踐中,選擇的廣告現(xiàn)在顯示在網(wǎng)站上,我們必須等待,看看用戶是點(diǎn)擊了廣告還是沒(méi)有點(diǎn)擊就離開(kāi)了網(wǎng)站。在代碼中,我們只是模擬用戶是否點(diǎn)擊。如上所述,廣告A被點(diǎn)擊的概率為30%,而廣告B被點(diǎn)擊的概率為40%。點(diǎn)擊可以直接作為訓(xùn)練神經(jīng)網(wǎng)絡(luò)的獎(jiǎng)勵(lì)來(lái)處理。獎(jiǎng)勵(lì)用于修改梯度。如果用戶點(diǎn)擊了廣告,則該動(dòng)作的梯度保持不變,但如果用戶沒(méi)有點(diǎn)擊廣告,則梯度反轉(zhuǎn)。最后,梯度下降通過(guò)給神經(jīng)網(wǎng)絡(luò)分配新的權(quán)重和偏差值來(lái)更新神經(jīng)網(wǎng)絡(luò)的參數(shù)。

for step in range(STEPS): output, action, loss, grads = action_selection(model) if action == False: # Action A reward = float(np.random.random() < 0.4) if action == True: # Action B reward = float(np.random.random() < 0.5) grads_adjusted = [] for var_index in range(len(model.trainable_variables)): grads_adjusted.append((reward-0.5)*2 * grads[var_index]) model.trainable_variables[0].assign(model.trainable_variables[0]-LR*grads_adjusted[0]) model.trainable_variables[1].assign(model.trainable_variables[1]-LR*grads_adjusted[1])

下圖總結(jié)了學(xué)習(xí)過(guò)程的演變。

使用策略梯度強(qiáng)化學(xué)習(xí)的A/B優(yōu)化學(xué)習(xí)過(guò)程的演變。(圖片由作者創(chuàng)作)

總的來(lái)說(shuō),上圖中顯示的1000個(gè)廣告印象的活動(dòng)總共導(dǎo)致了393次點(diǎn)擊,這相當(dāng)接近400次——這個(gè)數(shù)字等于如果我們只選擇更好的廣告B時(shí)我們期望的點(diǎn)擊次數(shù)。

我們首先通過(guò)觀察初始步驟=1的所有圖表來(lái)回顧學(xué)習(xí)過(guò)程。我們觀察到,神經(jīng)網(wǎng)絡(luò)輸出從0.5開(kāi)始,導(dǎo)致廣告B和廣告A分別以50%的概率隨機(jī)選擇廣告。binary_crosentropy_loss測(cè)量模型輸出和所采取的行動(dòng)之間的差異。由于動(dòng)作要么是0要么是1,因此初始損失值是模型輸出0.5的負(fù)對(duì)數(shù),約為0.7。由于我們的神經(jīng)網(wǎng)絡(luò)中只有一個(gè)神經(jīng)元,因此梯度包含該神經(jīng)元的權(quán)重和偏差的兩個(gè)標(biāo)量值。如果選擇廣告A,則偏置的梯度為正數(shù),如果選擇廣告B,則偏置梯度為負(fù)數(shù)。權(quán)重參數(shù)的梯度總是零,因?yàn)樯窠?jīng)網(wǎng)絡(luò)的輸入是零。獎(jiǎng)勵(lì)是高度隨機(jī)的,因?yàn)閺V告被點(diǎn)擊的幾率只有30%-40%。如果點(diǎn)擊廣告,我們會(huì)得到獎(jiǎng)勵(lì),梯度不變;否則,我們會(huì)反轉(zhuǎn)梯度。將調(diào)整后的梯度乘以學(xué)習(xí)率,并從神經(jīng)網(wǎng)絡(luò)的初始參數(shù)中減去。我們可以看到,偏置值從零開(kāi)始,當(dāng)施加正調(diào)整梯度時(shí)變得更負(fù),而當(dāng)施加負(fù)調(diào)整梯度時(shí)則變得更正。

在廣告活動(dòng)期間,神經(jīng)網(wǎng)絡(luò)的輸出傾向于1,增加了廣告B被選中的機(jī)會(huì)。然而,即使模型輸出已經(jīng)接近1,顯示廣告A的機(jī)會(huì)仍然很小。隨著模型輸出接近1,如果選擇動(dòng)作B,則損失值很小,并且我們獲得了小的負(fù)梯度,但在選擇廣告A的罕見(jiàn)情況下,獲得了更大的損失值——表現(xiàn)為偶爾的峰值和大的正梯度。在收集獎(jiǎng)勵(lì)之后,可以觀察到這些正峰值中的一些在調(diào)整后的梯度中被反轉(zhuǎn),因?yàn)檫@些動(dòng)作沒(méi)有導(dǎo)致點(diǎn)擊。由于廣告B具有更高的點(diǎn)擊概率,較小的負(fù)調(diào)整梯度比源于廣告A上的點(diǎn)擊的正梯度更頻繁地應(yīng)用。因此,模型的偏差值以小的步長(zhǎng)增加,并且在廣告A被選擇和點(diǎn)擊的罕見(jiàn)情況下,偏差值減小。模型的輸出由應(yīng)用于模型偏置值的S形函數(shù)提供。

學(xué)習(xí)率的影響

在這個(gè)演示中,我們觀察到,神經(jīng)網(wǎng)絡(luò)可以學(xué)會(huì)從兩個(gè)選項(xiàng)中選擇更好的選項(xiàng),并更頻繁地應(yīng)用該選項(xiàng)以最大限度地提高回報(bào)。在這種設(shè)置下,平均將獲得391次點(diǎn)擊,其中廣告A的點(diǎn)擊概率為30%,廣告B的點(diǎn)擊幾率為40%。在實(shí)踐中,這些概率會(huì)低得多,它們之間的差異可能更小,這使得神經(jīng)網(wǎng)絡(luò)更難探索更好的選擇。

政策梯度法具有自動(dòng)調(diào)整勘探與開(kāi)發(fā)之間平衡的優(yōu)點(diǎn)。然而,這種平衡受到學(xué)習(xí)率的影響。更高的學(xué)習(xí)率將導(dǎo)致更短的探索階段和更快的學(xué)習(xí)策略應(yīng)用,如下圖所示,其中學(xué)習(xí)率從0.01提高到10。在100個(gè)個(gè)體廣告中平均得到的模型輸出隨著學(xué)習(xí)率的增加而更快地增加,學(xué)習(xí)率高達(dá)1。然而,在較高的學(xué)習(xí)率下,存在適應(yīng)錯(cuò)誤動(dòng)作的風(fēng)險(xiǎn),只有在短暫的探索期內(nèi),錯(cuò)誤動(dòng)作才會(huì)表現(xiàn)得更好。在高學(xué)習(xí)率下,模型輸出調(diào)整過(guò)快,導(dǎo)致決策不穩(wěn)定。

學(xué)習(xí)率對(duì)神經(jīng)網(wǎng)絡(luò)輸出的影響。(圖片由作者創(chuàng)作)

因此,有一個(gè)最佳的學(xué)習(xí)率可供選擇,這在實(shí)踐中可能很難找到,因?yàn)槭孪葘?duì)點(diǎn)擊概率一無(wú)所知。將學(xué)習(xí)率從0.01變化到10.0表明,對(duì)于0.1到2.0之間的學(xué)習(xí)率,獲得了點(diǎn)擊總次數(shù)的最大值。更高的學(xué)習(xí)率顯然會(huì)增加標(biāo)準(zhǔn)差,這表明學(xué)習(xí)過(guò)程的不穩(wěn)定性,也會(huì)導(dǎo)致平均點(diǎn)擊量的減少。

學(xué)習(xí)率對(duì)廣告活動(dòng)期間獲得的總點(diǎn)擊量的影響。(圖片由作者創(chuàng)作)

總結(jié)

本文示例程序演示了如何將強(qiáng)化學(xué)習(xí)用于A/B優(yōu)化。這僅僅是一個(gè)簡(jiǎn)單的例子,用于說(shuō)明策略梯度方法的基本過(guò)程。然后,我們已經(jīng)了解了神經(jīng)網(wǎng)絡(luò)如何根據(jù)所選廣告是否被點(diǎn)擊來(lái)基于調(diào)整后的梯度更新其參數(shù)??焖賾?yīng)用學(xué)習(xí)到的策略可最大限度地提高點(diǎn)擊率。然而,在實(shí)踐中,選擇最佳學(xué)習(xí)率可能很困難。

最后,您可以在huggingface.co網(wǎng)站上找到本文示例工程完整的代碼和流媒體演示:https://huggingface.co/spaces/Bernd-Ebenhoch/AB_optimization。

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團(tuán)隊(duì) 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2023 創(chuàng)投網(wǎng) - mallikadua.com All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號(hào)-3