首頁 資訊 > 投資 > 正文

策略梯度強化學習算法實現(xiàn)A/B優(yōu)化?

譯者 | 朱先忠


(資料圖片)

審校 | 重樓

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

簡介

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

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

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

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

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

實例展示

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

運行機制解析

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

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

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

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

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

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

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

STEPS = 1000LR = 0.5

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

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

總的來說,上圖中顯示的1000個廣告印象的活動總共導致了393次點擊,這相當接近400次——這個數(shù)字等于如果我們只選擇更好的廣告B時我們期望的點擊次數(shù)。

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

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

學習率的影響

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

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

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

因此,有一個最佳的學習率可供選擇,這在實踐中可能很難找到,因為事先對點擊概率一無所知。將學習率從0.01變化到10.0表明,對于0.1到2.0之間的學習率,獲得了點擊總次數(shù)的最大值。更高的學習率顯然會增加標準差,這表明學習過程的不穩(wěn)定性,也會導致平均點擊量的減少。

學習率對廣告活動期間獲得的總點擊量的影響。(圖片由作者創(chuàng)作)

總結(jié)

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

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

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

原文標題:A/B Optimization with Policy Gradient Reinforcement Learning,作者:Dr. Bernd Ebenhoch

鏈接:

https://towardsdatascience.com/a-b-optimization-with-policy-gradient-reinforcement-learning-b4a3527f849

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團隊 版權(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號-3