阿里强化学习重排实践
導(dǎo)讀:AliExpress 搜索重排項(xiàng)目在去年?6 月份時(shí)全量發(fā)布了第一個(gè) fined tuned?的 DNN 版重排模型,本次的工作作為上一版本的升級(jí),在日常、大促時(shí)的表現(xiàn)均有顯著優(yōu)勢(shì)。本文將深入淺出強(qiáng)化學(xué)習(xí)框架重排實(shí)踐,并引出幾個(gè)潛在的提升空間。
01
商品排序中的重排
商品排序的目的,很大一部分是為了讓高效的商品獲得更好的展示機(jī)會(huì),匹配用戶(hù)的需求。一種主流的思路是,商品對(duì)于用戶(hù)的某次請(qǐng)求來(lái)說(shuō),是有好壞之分的。而從展示的位置的角度來(lái)看,越靠前的商品越能夠獲得曝光機(jī)會(huì)上的優(yōu)勢(shì)。于是,通過(guò)模型對(duì)商品打分的思路自然而然的浮現(xiàn)了出來(lái),且似乎只要模型對(duì)商品的打分足夠準(zhǔn)確,AUC 足夠高,之后就可以按照這個(gè)打分從高到低對(duì)商品進(jìn)行排序!在這套經(jīng)典的框架中,有一個(gè)嚴(yán)重的缺陷,這也是絕大多數(shù)重排工作都期望解決的:商品的上下文對(duì)結(jié)果會(huì)產(chǎn)生影響。考慮重排之前的模型,由于候選商品集合太大,想要將上下文信息喂進(jìn)模型十分困難。所以,用重排來(lái)解決上下文影響是一個(gè)普遍的思路,我們可以看到幾乎所有的重排模型都會(huì)在對(duì)商品打分時(shí)考慮上下文。但實(shí)際上,對(duì)商品進(jìn)行打分判斷是否會(huì)產(chǎn)生轉(zhuǎn)化是一個(gè)任務(wù),對(duì)候選商品進(jìn)行排序最大化收益又是另外一個(gè)任務(wù),這兩個(gè)任務(wù)雖有聯(lián)系,但卻截然不同。如果我們單純按打分來(lái)排序,那么原序?qū)?huì)被打亂,而我們無(wú)法從原序 label 還原出新序 label,于是無(wú)法斷定新序的表現(xiàn)如何。除非我們認(rèn)定商品的轉(zhuǎn)化行為不會(huì)因?yàn)樯舷挛陌l(fā)生改變,這顯然是存在問(wèn)題的。
1. 無(wú)視上下文,模型對(duì)商品的打分足夠準(zhǔn)確嗎?
我們?cè)O(shè)計(jì)了三個(gè)模型進(jìn)行實(shí)驗(yàn),來(lái)展示模型上下文信息刻畫(huà)程度對(duì)打分結(jié)果的影響。第一個(gè)模型是目前最為常用的 pointwise 打分模型,模型輸入為商品的特征和用戶(hù)的信息,我們簡(jiǎn)稱(chēng)它為 Simple DNN。第二個(gè)是在重排階段表現(xiàn)穩(wěn)定良好的線(xiàn)上重排模型 AE rerank,它在 Simple DNN 的基礎(chǔ)上,添加了上下文商品的全局統(tǒng)計(jì)信息,例如某些特征分的方差、均值、極值等等。第三個(gè)模型是我們?yōu)榱诉M(jìn)一步刻畫(huà)上下文信息而設(shè)計(jì)的,在 AE rerank 的基礎(chǔ)上額外加入了 CNN 和 RNN 模塊來(lái)捕捉商品序列的信息。模型結(jié)構(gòu)如下圖所示:( Simple DNN 不包含藍(lán)色的 CNN、RNN 以及綠色的全局統(tǒng)計(jì)特征輸入,AE rerank 不包含藍(lán)色的 CNN、RNN)。
評(píng)估模型結(jié)構(gòu)圖
我們使用了 5400 萬(wàn)條日常數(shù)據(jù)作為訓(xùn)練集,將上述三個(gè)模型分別訓(xùn)練了 5 個(gè)epoches(都已收斂)。接著我們計(jì)算了它們?cè)跍y(cè)試集(約 250 萬(wàn)條數(shù)據(jù))的表現(xiàn)結(jié)果,如下表所示。此處的 AEFS 是精排階段產(chǎn)生的精排總分的 alias name。表中的數(shù)據(jù)回答了我們的問(wèn)題, pointwise 模型 Simple DNN 對(duì)商品進(jìn)行的打分對(duì)比帶有上下文信息的AE rerank和新模型來(lái)說(shuō)略遜一籌。由此我們能夠得出結(jié)論,商品打分應(yīng)當(dāng)會(huì)受到它所處的上下文環(huán)境的影響,將上下文信息整合才能預(yù)估得更加準(zhǔn)確。
各評(píng)估模型表現(xiàn)(序列內(nèi)判斷能力)
2. 無(wú)視序的改變,按照原序上的打分排序足夠靠譜嗎?
首先,我們假定模型輸出均在擬合考慮上下文的前提下當(dāng)前商品被購(gòu)買(mǎi)的概率?p(i|L)?,且定義排序結(jié)果L的好壞為其能夠產(chǎn)生的期望購(gòu)買(mǎi)數(shù)?? ,即?p(i|L)?之和:
???
該公式對(duì)于完整考慮上下文的新模型來(lái)說(shuō)是適用的。但是對(duì)于前兩種模型 Simple DNN 和 AE rerank 來(lái)說(shuō),即使將商品隨機(jī)打亂,它們對(duì)于每個(gè)商品的打分或者說(shuō)是預(yù)估的概率?p(i|L)?是不變的,因此直接相加來(lái)作為商品序列的打分一定是失準(zhǔn)的。大致地,我們以類(lèi)似 DCG 的方式,每個(gè)商品的預(yù)估概率乘以位置折扣的和作為排序結(jié)果打分,就能夠自然地避免上述情況發(fā)生,如下所示:
??
我們通過(guò)實(shí)驗(yàn)測(cè)試了該方法判斷 PV 的好壞對(duì)于 Simple DNN 和 AE rerank 來(lái)說(shuō)是否有效。實(shí)驗(yàn)分為分別對(duì)點(diǎn)擊轉(zhuǎn)化和成交轉(zhuǎn)換進(jìn)行了測(cè)試,在理想情況下,好的模型應(yīng)當(dāng)能夠更準(zhǔn)確地判斷兩個(gè)排序中,哪一個(gè)更可能產(chǎn)生點(diǎn)擊行為,或是哪一個(gè)更可能產(chǎn)生成交行為。排除了 label 相同的排序?qū)χ?#xff0c;結(jié)果如下表所示:
各評(píng)估模型表現(xiàn)(序列整體判斷能力)
從上面的測(cè)試數(shù)據(jù)中可以看出,所有的模型都能大致區(qū)分出序列的好壞。從 ??的定義來(lái)看,直接按照商品的打分從高到低進(jìn)行排序,確實(shí)是在評(píng)估下最好的序列。然而,這樣產(chǎn)生的排序結(jié)果是否真的有效,在評(píng)估能力最強(qiáng)的新模型視角來(lái)看,結(jié)論是否一致?于是,我們把這些新生成的“最好的”序列以及數(shù)據(jù)的原始序列一起送到新模型進(jìn)行評(píng)估,如下表所示。每個(gè)值表示新生成序列中有多少比例是比原始序列要更好的。
按模型打分排序表現(xiàn)
新模型認(rèn)為直接按照打分高低排序的策略,最高也只有 66% 左右的比例能夠比原序列更好,對(duì)于直接按照精排總分 AEFS 排序更是比原序列差得多(這是因?yàn)殡x線(xiàn)數(shù)據(jù)中的大部分原序列都是經(jīng)過(guò) AE rerank 模型生成的)。通過(guò)這個(gè)結(jié)果我們認(rèn)定,直接按照商品打分的高低來(lái)排序很可能并不是最優(yōu)的方法。
那么,不能直接通過(guò)打分排序,我們又該如何去尋找最優(yōu)的序列呢?最直接的辦法是通過(guò)枚舉所有可能的序列結(jié)果,讓新模型對(duì)它們逐個(gè)進(jìn)行打分,再把最好的排序挑選出來(lái)作為最終結(jié)果。但由于線(xiàn)上算力遠(yuǎn)遠(yuǎn)不足以讓我們暴力枚舉,所以我們需要對(duì)枚舉的集合進(jìn)行優(yōu)化。啟發(fā)式貪心搜索 beam search 可以作為一種解決方案,在探索過(guò)程中裁剪掉較大部分無(wú)用狀態(tài)。該方法需要在精度和速度之間有一個(gè)權(quán)衡,通常在保證一定精度的條件下,很難達(dá)到令人滿(mǎn)意的速度。在我們的工作中,我們希望能夠用更直接了當(dāng)?shù)姆绞?#xff0c;一步到位地生成序列。
02
商品序列生成器
商品序列生成器是一個(gè)生成序列的模型,它的輸入是?M?個(gè)候選商品,輸出為帶順序的?N(N﹤M) 個(gè)商品。使用 pointer network 是一個(gè)自然的想法,它需要迭代 N?步,在每一步中根據(jù)當(dāng)前狀態(tài),挑選一個(gè)商品,最終得到了 N?個(gè)商品的排序。我們?cè)?pointer network 的基礎(chǔ)上設(shè)計(jì)了網(wǎng)絡(luò)結(jié)構(gòu),最終設(shè)計(jì)的模型如下所示:
生成模型結(jié)構(gòu)圖
具體地,令?? 為商品 i?的特征,商品候選集為 ??。之后,候選集將會(huì)進(jìn)入兩路圖中,一路是經(jīng)過(guò)兩層的 DNN 得到抽象的特征集 ??;另外一路是利用 ?LSTM 來(lái)記住之前挑選過(guò)哪些商品,每一步的輸入就是前一步挑選的商品???再拼接上用戶(hù)的 embedding 信息?U(在第?0?步時(shí),直接用全?0?向量來(lái)代替??)。因此,在每一步中,LSTM 的輸入是 ??,輸出是當(dāng)前的隱狀態(tài) ??。知道當(dāng)前的狀態(tài)就可以用來(lái)計(jì)算選擇每一個(gè)商品的概率。把這個(gè)隱狀態(tài)復(fù)制 m?遍分別與上述的抽象特征集 ???拼接,接著共同過(guò)一個(gè)三層的 DNN 再把選過(guò)的商品 mask 掉,再通過(guò)一個(gè) softmax 即可以得到在這一步選擇每一個(gè)候選商品的概率。
這樣設(shè)計(jì)的模型有兩個(gè)方面的好處。第一個(gè)是它不需要具體限定 M?和 N?的值,模型的參數(shù)與 M,N?的值無(wú)關(guān),當(dāng)模型訓(xùn)練或預(yù)測(cè)時(shí)都可以根據(jù)需要隨意設(shè)置 M?和 N?的值。第二點(diǎn)是經(jīng)過(guò)我們改造后,原來(lái)具有兩個(gè) LSTM 的 pointer network 結(jié)構(gòu)變成了現(xiàn)在的一個(gè),其余全部用 DNN 來(lái)代替,不僅實(shí)現(xiàn)簡(jiǎn)單,預(yù)測(cè)所需時(shí)間也減少了一半(線(xiàn)上的 cpu 環(huán)境運(yùn)行 LSTM 較慢 )。
有了生成模型之后,我們希望它可以生成能讓新模型打分非常好的排序,如此就能夠有大概率比傳統(tǒng)的方式做得更好。傳統(tǒng)的方法可以通過(guò)原序 label 來(lái)監(jiān)督學(xué)習(xí),但由于改變排序有可能會(huì)改變 label,通過(guò)監(jiān)督學(xué)習(xí)方法來(lái)做完成這個(gè)任務(wù)是不夠完美的。一個(gè)替代方法是我們可以通過(guò)隨機(jī)的方式抽樣一些候選序列,然后由新模型打分來(lái)選出最好的序列作為監(jiān)督學(xué)習(xí)的目標(biāo);也可以通過(guò)生成一些備選序列之后取出評(píng)估模型認(rèn)為最好的序列作為結(jié)果。在我們的工作中,我們使用了強(qiáng)化學(xué)習(xí)的方式聯(lián)系起生成和評(píng)估兩個(gè)環(huán)節(jié)。
03
強(qiáng)化學(xué)習(xí)之路
1. 算法設(shè)計(jì)
在本節(jié)中,將上文中生成排列的模型稱(chēng)為生成器,評(píng)估排列的模型稱(chēng)為評(píng)估器,回顧評(píng)估器的計(jì)算方式:
??
因?yàn)樵u(píng)估器在對(duì)序列的期望成交行為數(shù)進(jìn)行預(yù)估,如果我們把這個(gè)結(jié)果看作強(qiáng)化學(xué)習(xí)中的獎(jiǎng)勵(lì),似乎就自然地將生成器和評(píng)估器串聯(lián)起來(lái)了!在生成器訓(xùn)練的過(guò)程中,每一次選擇商品都可以得到評(píng)估器發(fā)出的獎(jiǎng)勵(lì)信號(hào),最終只需要將整條軌跡得到的總獎(jiǎng)勵(lì)最大化即可。
然而,這里還存在一個(gè)問(wèn)題,p(i|L)?是利用上下文的信息計(jì)算出來(lái)的,但每一步選擇商品的時(shí)候我們并不知道后面的商品是如何排序的。因此,我們需要對(duì)?p(i|L)?進(jìn)行簡(jiǎn)化修改,讓它只依賴(lài)于 i?之前已選出的商品,與后面的排序結(jié)果無(wú)關(guān)。換句話(huà)說(shuō),即為假設(shè)用戶(hù)是從上往下瀏覽商品的,他對(duì)當(dāng)前商品的購(gòu)買(mǎi)概率只取決于前面瀏覽過(guò)的商品序列而與后面商品的排列無(wú)關(guān)。具體在之前評(píng)估器的修改就是將 CNN 模塊去掉。
將評(píng)估器模型簡(jiǎn)化后,要做強(qiáng)化學(xué)習(xí)的幾大要素都已經(jīng)具備了。商品生成器就是一個(gè)待訓(xùn)練的agent,它會(huì)根據(jù)當(dāng)前的狀態(tài),做出它認(rèn)為好的動(dòng)作,然后收到評(píng)估器給予的獎(jiǎng)勵(lì),接著它會(huì)轉(zhuǎn)移到下一個(gè)狀態(tài),繼續(xù)做動(dòng)作拿獎(jiǎng)勵(lì)。這樣可以得到 N?個(gè) ???三元組,具體的定義如下:
-
每一步的狀態(tài)??:之前已經(jīng)排好的商品序列和剩余候選的商品集合
-
每一步的動(dòng)作??:候選集中剩余的某一個(gè)商品,為選哪個(gè)商品的離散動(dòng)作
-
每一步的獎(jiǎng)勵(lì)??:在考慮上文的前提下,評(píng)估器預(yù)測(cè)的??被購(gòu)買(mǎi)的概率???
-
軌跡長(zhǎng)度為 N,衰減系數(shù)γ=1
我們主要是考慮用 policy-based 類(lèi)的方法來(lái)對(duì)上述生成器模型進(jìn)行優(yōu)化。沒(méi)有使用 value-based 方法的原因,是我們?cè)趯?shí)驗(yàn)中發(fā)現(xiàn),在這個(gè)問(wèn)題下要準(zhǔn)確的預(yù)估出 V 值或者 Q 值可能是一件困難的事情。
請(qǐng)注意,強(qiáng)化學(xué)習(xí)要讓總回報(bào)最大,也是讓每一步的總回報(bào)最大,而每一步的總回報(bào)是從當(dāng)前商品一直到最后的第 N 個(gè)商品所得到的獎(jiǎng)勵(lì)之和,它被稱(chēng)為 Q?值,定義如下:
??
那么我們從最基本的算法開(kāi)始, reinforce 算法,損失函數(shù)為 :
??
這個(gè)較為簡(jiǎn)潔的模型實(shí)驗(yàn)的結(jié)果并不理想,我們很容易發(fā)現(xiàn)其中的一點(diǎn):如果一些優(yōu)質(zhì)的候選,模型在其中無(wú)論怎么行動(dòng)總回報(bào)都很高,另外還有一些劣質(zhì)的候選集,無(wú)論怎么行動(dòng)總回報(bào)都很低,那么模型就很難找到有用的信息進(jìn)行優(yōu)化。因此,我們可以考慮對(duì) reward 進(jìn)行修改,比如減掉候選集的均值,甚至再減去均值的變化量除以均值(變化率),以達(dá)到能夠判斷行動(dòng)好壞的目的。
均值的計(jì)算,一種方法是可以直接使用原序列在評(píng)估器中的打分。這里再補(bǔ)充解釋一下我們的訓(xùn)練數(shù)據(jù)。比如在實(shí)驗(yàn)中,我們主要關(guān)注的是 30 排 17,那么我們就把線(xiàn)上對(duì)每個(gè) query 真實(shí)展示的前 30 個(gè)商品撈回來(lái)作為我們訓(xùn)練數(shù)據(jù)的候選集,生成器就從這 30 個(gè)中選出 17 個(gè)商品。我們可以知道這 30 個(gè)候選商品的前 17 個(gè)商品就是線(xiàn)上真實(shí)展現(xiàn)的序列。因此,原序列可以拿到在評(píng)估器中的打分 ??,它和上述的 ?? 維度相同,都表達(dá)的是每一步的總回報(bào)或者說(shuō)是 Q 值。因此,我們上述的 reinforce 算法的損失函數(shù)就可以改造為:
?
簡(jiǎn)稱(chēng) reinforce_2 算法。當(dāng)然上述算法還可以繼續(xù)加以改造:
??
簡(jiǎn)稱(chēng)為 reinforce_3 算法(上述的除法可能會(huì)發(fā)生除 0 異常,全部 clip 在 -10 到 10 之中)。
對(duì)強(qiáng)化學(xué)習(xí)比較了解的讀者可能會(huì)產(chǎn)生一個(gè)想法,就是均值可以通過(guò) actor-critic 的方法來(lái)估計(jì)。這就是即將要說(shuō)的第二種估計(jì)均值的方法,本文我們使用了性能強(qiáng)大的 PPO 算法,這樣就可以用 critic 來(lái)估計(jì) V?值,也能算出優(yōu)勢(shì)函數(shù)的 A?值來(lái)更新策略。然而這里隱藏了一個(gè)大問(wèn)題:如何設(shè)計(jì)網(wǎng)絡(luò)來(lái)估計(jì) V?值?
V 值是從當(dāng)前的狀態(tài)開(kāi)始,使用當(dāng)前的策略,平均能拿到多少總獎(jiǎng)勵(lì)的數(shù)值。當(dāng)前的狀態(tài)是當(dāng)前排好的商品和剩余候選的商品,我們需要在保持之前模型的優(yōu)良性質(zhì)(即候選商品集的數(shù)量是可變的)的同時(shí),預(yù)測(cè)出準(zhǔn)確的 V?值。因此,我們采用與之前模型結(jié)構(gòu)類(lèi)似的設(shè)計(jì),即對(duì)剩余候選的商品打分,然后把分?jǐn)?shù)都加起來(lái),模型結(jié)構(gòu)如下所示:
V 值估計(jì)模型圖
該算法的效果和 reinforce_3 算法相差不多。我們認(rèn)為 ppo 算法表現(xiàn)不佳,是由于 V?值較難估計(jì),所以能不能保留 ppo 中的 actor 更新方式,而把 critic 模塊進(jìn)行改變?這里就要說(shuō)到估計(jì)均值的第三種方法,蒙特卡洛采樣。為了實(shí)現(xiàn)方便和高效,我們也對(duì)原始的蒙特卡洛采樣做了一些改進(jìn)。
V 值采樣圖示
對(duì)于每一份數(shù)據(jù)或者說(shuō)是每一組候選商品集,我們都讓模型就根據(jù)它當(dāng)前自身的參數(shù)采樣生成多個(gè)排列,那么這些排列在評(píng)估器中得到的總獎(jiǎng)勵(lì)的均值就可以近似認(rèn)為是當(dāng)前策略下的 V?值了,我們將之稱(chēng)為 PPO_MC 算法,損失函數(shù)定義如下 (??的維度是 ??,如果 std(R) = 0,則將其置為 1 ):
??
??
??
至此,我們一共提到了 5 種強(qiáng)化學(xué)習(xí)算法,從 reinforce 算法一直 PPO 算法及其改進(jìn)版本,它們的訓(xùn)練效果如下圖所示。為了增加算法的探索能力,這 5 種算法都在 loss 中加入了相同的 entropy 獎(jiǎng)勵(lì)。左邊這幅圖表示模型輸出動(dòng)作概率的 entropy 變化情況,越低表示越收斂。右圖表示在測(cè)試集中模型生成的排列有多大的比例比原始排列在評(píng)估器中的總得分更好,我們稱(chēng)這個(gè)百分?jǐn)?shù)為優(yōu)勢(shì)占比或 better percent,簡(jiǎn)稱(chēng) BP,在 Lazada 重排又被稱(chēng)為替換率。在我們的觀(guān)點(diǎn)中,強(qiáng)化學(xué)習(xí)訓(xùn)練時(shí)不看 loss,而看 entropy 和總回報(bào)。
強(qiáng)化學(xué)習(xí)算法表現(xiàn)對(duì)比(左:熵;右:成交 BP)
從左邊的 entropy 對(duì)比圖中可以看出,我們的 PPO_MC 算法是收斂的最快最好;而從右邊的 BP 對(duì)比圖中可以看出,同樣是我們的 PPO_MC 模型可以達(dá)到最好的效果。原版的 PPO 模型不僅在 entropy 上難以收斂,而且生成的序列也僅僅只是比原始序列好一些,反而不如 reinforce_3 算法收斂的效果好。
我們也可以更通俗一些來(lái)看 PPO_MC 算法,它在訓(xùn)練之前會(huì)通過(guò)采樣來(lái)得到多條表現(xiàn)不一的序列,然后更新模型時(shí)就可以更加傾向于表現(xiàn)好的序列。這個(gè)算法其實(shí)也是有改進(jìn)空間的,可以從上面的訓(xùn)練圖中看出,前期 entropy 的收斂是非常快的,也可以想象模型在前期時(shí),隨機(jī)性很大,采樣得到的序列多種多樣,很容易找到有用的梯度更新方向。然而模型在后期 entropy 已經(jīng)變得很小或者基本收斂了,采樣得到的序列基本都差不多,也難以進(jìn)行有用的更新了,可以說(shuō)是這個(gè)時(shí)候的采樣是對(duì)算力的巨大浪費(fèi),做了很多無(wú)用功。那么這個(gè)采樣一定是需要按照它當(dāng)前的模型參數(shù)來(lái)采樣嗎?其實(shí)未必。說(shuō)明一下,這里的采樣是為了算均值,與算法是 on-policy 還是 off-policy 是沒(méi)有任何關(guān)系的,更新模型還是按照原來(lái)的算法邏輯。原則上來(lái)說(shuō),我們是需要一個(gè)多樣性豐富,并且表現(xiàn)能夠比當(dāng)前的策略稍好一些的采樣策略。隨機(jī)采樣肯定是不行,因?yàn)樗沙鰜?lái)的序列可能都很差。如何去得到更好的采樣策略呢?這也是強(qiáng)化學(xué)習(xí)圈子中非常熱門(mén)的研究范疇,就留給各位看官們來(lái)發(fā)揮聰明才智了。
2. 兩組實(shí)現(xiàn)細(xì)節(jié)對(duì)比
數(shù)據(jù)的組織由于離線(xiàn)訓(xùn)練數(shù)據(jù)的保留機(jī)制,如果用戶(hù)只瀏覽過(guò)第一頁(yè),那么我們只能拿到第一頁(yè)的 20 個(gè)商品,只有當(dāng)用戶(hù)瀏覽到第二頁(yè)時(shí),我們才能拿到前兩頁(yè)的 40 個(gè)商品。這兩種數(shù)據(jù)(只有第一頁(yè)、有前兩頁(yè))的分布是有顯著差異的,前者是用戶(hù)只在第一頁(yè)點(diǎn)擊或者購(gòu)買(mǎi),可能是這個(gè)序列已經(jīng)比較好了,后者是用戶(hù)在一直瀏覽到了第二頁(yè),有可能是 top 20 的序列很差造成的。那么,我們應(yīng)當(dāng)如何權(quán)衡數(shù)據(jù)的質(zhì)量和數(shù)量呢?
我們做了三個(gè)測(cè)試模型,一個(gè)是用包含 17 個(gè)候選商品的數(shù)據(jù)來(lái)訓(xùn)練模型;另一個(gè)是用 30 個(gè)商品的數(shù)據(jù)訓(xùn)練;最后一個(gè)是同時(shí)用這兩份數(shù)據(jù)訓(xùn)練(這兩份數(shù)據(jù)都是在 160 萬(wàn)條左右)。最后,由于我們的模型上線(xiàn)時(shí)要考慮到耗時(shí)問(wèn)題,只排第一頁(yè)的 17 個(gè)商品,因此我們讓這三個(gè)測(cè)試模型分別在 17 排 17, 30 排 17, 50 排 17,100 排 17 這四個(gè)環(huán)境中進(jìn)行測(cè)試,與原序列對(duì)比,觀(guān)察它們生成的新序列從我們的評(píng)估器看來(lái)是不是更好的。如下表所示。
數(shù)據(jù)的影響
從上表的數(shù)據(jù)中可以看出,在兩個(gè)訓(xùn)練數(shù)據(jù)集的大小差不多以及訓(xùn)練時(shí)間差不多的情況下,用第一頁(yè)的數(shù)據(jù)集訓(xùn)練效果稍微好一些,當(dāng)然差距也不是很大。從節(jié)約計(jì)算和存儲(chǔ)資源的角度來(lái)看,還是直接用第一頁(yè)的數(shù)據(jù)更為方便。并且通過(guò)上表,我們可以發(fā)現(xiàn)候選商品集合越大越好,只要耗時(shí)能接受。考慮到我們的模型耗時(shí)就相當(dāng)于是普通打分排序耗時(shí)的 N?倍,對(duì)于 N?較小的情況也能夠快速預(yù)測(cè),但對(duì)于上百上千數(shù)量級(jí)的商品,可能就難以接受了。
目標(biāo)的改變?cè)谝陨系膬?nèi)容中,我們的優(yōu)化目標(biāo)都是最大化期望購(gòu)買(mǎi)數(shù),而我們能夠通過(guò)修改 reward 的定義,達(dá)到優(yōu)化其他目標(biāo)的效果。舉例子來(lái)說(shuō),一個(gè)模型如果想要提升總體 GMV,在過(guò)去方法大致可以歸為以下幾類(lèi):
1)模型目標(biāo)不變,在轉(zhuǎn)化率的打分上乘上價(jià)格因子,近似于期望 GMV。這類(lèi)方法通常會(huì)對(duì)排序結(jié)果有一個(gè)較大的改變,有明顯的提價(jià)效果,但線(xiàn)上效果相對(duì)不穩(wěn)定。
2)模型在訓(xùn)練時(shí)使用價(jià)格對(duì)正樣本加權(quán)或改 loss。這類(lèi)方法對(duì)排序結(jié)果的影響不大,在某些情況下可能能夠提升一定的單價(jià),但通常不顯著。
3)將部分非成交(如加購(gòu))樣本當(dāng)作成交樣本進(jìn)行訓(xùn)練。以加購(gòu)樣本為例,從 AE 的統(tǒng)計(jì)數(shù)據(jù)來(lái)看,這些商品的價(jià)格的平均值數(shù)倍高于成交樣本。這是一種在成交樣本中自然添加一定置信度高價(jià)樣本的數(shù)據(jù)增強(qiáng)方法我們能夠看出,以上的幾類(lèi)方法都是在間接地提升 GMV,而強(qiáng)化學(xué)習(xí)模型的一個(gè)強(qiáng)大之處就在于我們幾乎能夠直接對(duì) GMV 建模。我們可以將 reward 修改為:
??
其中,?? 表示第 ???個(gè)商品的價(jià)格。在實(shí)際的訓(xùn)練中,我們并不使用商品的原始價(jià)格作為 ??,而是使用它在這個(gè)商品候選集中價(jià)格分位數(shù)。通過(guò)對(duì)價(jià)格進(jìn)行此變化,能夠防止商品間的因價(jià)格差異過(guò)大而產(chǎn)生不良反應(yīng),但也丟失了商品價(jià)格的一部分原始信息。如何更好地將價(jià)格因素包容進(jìn)模型,也是一個(gè)未來(lái)需要更精細(xì)考慮的問(wèn)題。我們把考慮期望成交數(shù)的模型稱(chēng)為 PAY 版本,考慮期望 GMV 的模型稱(chēng)為 GMV 版本,以及一種是兩者加權(quán)融合的 PAY_GMV 版本,優(yōu)化目標(biāo)變?yōu)?#xff1a;
??
上式中的 λ?是一個(gè)可以調(diào)的系數(shù)。在離線(xiàn)評(píng)估的情況下,三種模型的訓(xùn)練效果如下所示。
目標(biāo)的影響(左:熵;中:成交視角 BP;右:GMV 視角 BP)
圖中的模型都是用 30 個(gè)商品候選集的數(shù)據(jù)來(lái)進(jìn)行訓(xùn)練得到的,其中的 PAY_GMV 版本的 λ=1。意料之中,PAY 版本在成交轉(zhuǎn)化上占據(jù)優(yōu)勢(shì),GMV 版本在 GMV 上占據(jù)優(yōu)勢(shì),PAY_GMV 版本則是會(huì)得到一個(gè)兩者均衡的結(jié)果。
04
線(xiàn)上部署與真實(shí)效果
離線(xiàn)評(píng)測(cè)終究還是存在偏差的,為了證實(shí)生成器模型能夠確實(shí)地提升線(xiàn)上效果,我們將模型通過(guò)定時(shí)調(diào)度的策略,每天進(jìn)行訓(xùn)練和模型重新上傳。模型訓(xùn)練時(shí),會(huì)收集最近兩周所有 bts 實(shí)驗(yàn)桶的離線(xiàn)數(shù)據(jù),使用它們訓(xùn)練評(píng)估器的 5 個(gè)小時(shí),而后再訓(xùn)練生成器,并且在 6 個(gè)小時(shí)后發(fā)布訓(xùn)練好的新生成器模型。評(píng)估器采用的是增量訓(xùn)練的模式,而生成器模型為了避免失去探索能力,會(huì)每次重新初始化訓(xùn)練。
線(xiàn)上實(shí)驗(yàn)方面,我們首次取得線(xiàn)上正向效果是在國(guó)慶節(jié)。當(dāng)時(shí)上線(xiàn)的是 GMV 版本的強(qiáng)化學(xué)習(xí)重排模型,對(duì)比基準(zhǔn)桶取得了較好的單價(jià)提升效果。在線(xiàn)上實(shí)驗(yàn)中,我們發(fā)現(xiàn)這個(gè) GMV 版本的模型會(huì)帶來(lái)轉(zhuǎn)化率的虧損。所以,為了平衡 uv 轉(zhuǎn)化率和 uv 價(jià)值,在國(guó)慶節(jié)后上線(xiàn)了 PAY_GMV 版本的強(qiáng)化學(xué)習(xí)重排模型,使得 uv 轉(zhuǎn)化率和 uv 價(jià)值這兩個(gè)指標(biāo)都取得了提升。值得一提的是,該版本的模型帶來(lái)一定的單價(jià)和轉(zhuǎn)化率置換,損失了部分單價(jià),提升了一定轉(zhuǎn)化率,使總體 GMV 受益。
線(xiàn)上日常表現(xiàn)
在雙十一大促前,用戶(hù)對(duì)高價(jià)的商品的購(gòu)買(mǎi)欲望銳減,更傾向于觀(guān)望和加購(gòu)。因此,我們把加購(gòu)樣本和成交樣本全部當(dāng)作成交樣本來(lái)給評(píng)估器進(jìn)行訓(xùn)練,接著再利用這個(gè)評(píng)估器來(lái)訓(xùn)練生成器模型。在這里我們是希望加購(gòu)商品的數(shù)量越多越好,并且又由于用戶(hù)更傾向于低價(jià)的商品,于是我們是使用上述 PAY 版的生成器模型。在大促前 5 天,對(duì)比基準(zhǔn)桶,我們模型的收藏加購(gòu)率提升約 12.4 %,而在不帶強(qiáng)化學(xué)習(xí)的實(shí)驗(yàn)桶中,最高的加購(gòu)率僅在 11.5% 左右,有 1% 左右的 gap。雙十一首日,帶有強(qiáng)化學(xué)習(xí)重排模型的桶表現(xiàn)最為突出,成交金額提升 6.81%。在雙十一次日中,強(qiáng)化學(xué)習(xí)重排模型的表現(xiàn)略微下降,成交金額提升 5.65%。相對(duì)于實(shí)時(shí)重排桶(僅重排不同,實(shí)時(shí)重排為 AE ?rerank 的實(shí)時(shí)版本),也有超過(guò) 1% 的總體 GMV 提升。
05
階段總結(jié)與未來(lái)展望
在五個(gè)月的時(shí)間里,我們成功地將強(qiáng)化學(xué)習(xí)重排模型從無(wú)到有地搭建了出來(lái),并且經(jīng)過(guò)了雙十一考驗(yàn),展示了它的靈活性、可行性和巨大潛力。本節(jié)中,我們將展望重排的未來(lái)之路。
1. GAIL 強(qiáng)化學(xué)習(xí)重排
目前來(lái)說(shuō),我們重排模型的訓(xùn)練完全依賴(lài)于評(píng)估器,它的準(zhǔn)確與否決定了生成器的好壞,而我們的評(píng)估器又只是由少量的數(shù)據(jù)訓(xùn)練得到的(相比于整個(gè)空間來(lái)說(shuō))。因此,我們猜測(cè)評(píng)估器在訓(xùn)練數(shù)據(jù)附近的分布中是比較可信的,而在與之差別較大的分布中或許是不太可信的。那么,能不能讓生成器產(chǎn)生的序列不僅好而且還要盡可能落在訓(xùn)練數(shù)據(jù)的分布中呢?于是,我們借助了 GAIL 的思想,生成器不僅要接收之前訓(xùn)練好的評(píng)估器給的獎(jiǎng)勵(lì),還要接受同時(shí)訓(xùn)練的判別器給的獎(jiǎng)勵(lì)。這里,判別器的目標(biāo)就是給生成的序列打出盡可能低的分?jǐn)?shù),而給原始序列打出盡可能高的分?jǐn)?shù)。訓(xùn)練的結(jié)果如下圖所示。
GAIL 強(qiáng)化學(xué)習(xí)重排表現(xiàn)(左:熵;中:成交 BP;右:判別器 AUC)
藍(lán)線(xiàn)是之前 PAY 版本的強(qiáng)化學(xué)習(xí)重排模型,可以在第二幅圖中看到它在成交優(yōu)勢(shì)占比的指標(biāo)中是最高的,生成的序列有接近 90% 從評(píng)估器看來(lái)打分更高,而在右圖中判別器也能夠以非常高的準(zhǔn)確率將其與原始序列分辨出來(lái)。橙線(xiàn)是只用判別器來(lái)訓(xùn)練生成器,就是原版 GAIL 的過(guò)程,目標(biāo)就是讓生成的序列與原始的序列差不多。不難發(fā)現(xiàn),在第二幅圖中,它生成的序列在評(píng)估器中的打分不高。綠線(xiàn)就是上述說(shuō)的兩者兼顧的版本,生成的序列既要在評(píng)估器中的打分更高,也要在判別器中的打分更高。
從上面第一幅圖中可以發(fā)現(xiàn),帶有判別器的兩個(gè)模型 entropy 都收斂得很低,這是因?yàn)槲覀冊(cè)谄渲屑尤肓穗S機(jī)探索的策略。具體來(lái)說(shuō),之前每一步是按照策略預(yù)估的概率來(lái)選擇一個(gè)候選商品,而這兩個(gè)模型中是會(huì)有 0.2 的概率隨機(jī)挑選一個(gè)候選商品。實(shí)驗(yàn)發(fā)現(xiàn),這種簡(jiǎn)單的探索策略有助于 GAIL 的訓(xùn)練。
由 11 月 25 日至 11 月 27 日 3 天的線(xiàn)上結(jié)果來(lái)看,GAIL 重排對(duì)比原重排平均能夠提升單量 3.22%,成交總額 3.81%,是個(gè)很不錯(cuò)的提升。
2. 和 AUC 的愛(ài)恨情仇
相信讀者對(duì) AUC 這一指標(biāo)再熟悉不過(guò)了:它是一個(gè)刻畫(huà)了商品打分與商品 label 的方向一致性的指標(biāo)。我們?cè)陔x線(xiàn)的環(huán)境下,想要評(píng)價(jià)一個(gè)排序模型的好壞時(shí),幾乎都會(huì)考慮使用 AUC 進(jìn)行判定,因?yàn)?AUC 的值表達(dá)的是面對(duì)不同 label 的商品對(duì)時(shí),我們將 label 更好的商品打上更高的分的頻率,這和我們對(duì)商品排序的目標(biāo)直覺(jué)上來(lái)說(shuō)是一致的。一個(gè)高 AUC 的模型意味著它能更好地判斷出商品之間的好壞關(guān)系,所以我們通過(guò)不斷地優(yōu)化 AUC,來(lái)探索更好的模型。然而,當(dāng)我們將視線(xiàn)轉(zhuǎn)移到線(xiàn)上的真實(shí)表現(xiàn)時(shí),盡管在通常情況下,能夠提升 AUC 的模型能夠帶來(lái)一定的轉(zhuǎn)化率提升,但我們會(huì)發(fā)現(xiàn) UV 轉(zhuǎn)化率和 AUC 的正向關(guān)系并沒(méi)有那么大。在半年前,我們發(fā)現(xiàn)了這一現(xiàn)象的極端體現(xiàn):一個(gè)大幅提升離線(xiàn) AUC 的模型,它大幅降低了在線(xiàn) AUC,且大幅提升了線(xiàn)上真實(shí)的UV轉(zhuǎn)化率。我們稱(chēng)該現(xiàn)象為排序測(cè)不準(zhǔn)原理。那么,使用 AUC 進(jìn)行評(píng)估究竟有何風(fēng)險(xiǎn)?
1)離線(xiàn) AUC 與線(xiàn)上 UV 轉(zhuǎn)化率并無(wú)直接關(guān)聯(lián)。我們通過(guò) AUC 來(lái)聯(lián)系線(xiàn)上 UV 轉(zhuǎn)化率的基點(diǎn),是上下文對(duì) label 的影響不大,以及 position bias 對(duì)行為產(chǎn)生的損傷是越單調(diào)遞增的這兩點(diǎn),而它們實(shí)際都是不精確的。
2)模型上線(xiàn)改變排序結(jié)果后,展示序列分布發(fā)生變化,原評(píng)估結(jié)果失效。我們可以用 AUC 來(lái)評(píng)價(jià)一個(gè)評(píng)估模型,但是對(duì)于生成模型來(lái)說(shuō),它會(huì)改變?cè)蛏系?label,我們不能夠通過(guò)原序 label 來(lái)判斷它的表現(xiàn)。
3)在線(xiàn) AUC 的問(wèn)題更為嚴(yán)重。本質(zhì)上來(lái)說(shuō),在線(xiàn) AUC 不存在可比性。這里我們舉一個(gè)真實(shí)的例子:在這半年里,我們?cè)幸粋€(gè)桶的策略降低了 10% 的線(xiàn)上 uv 轉(zhuǎn)化率,但是從在線(xiàn) AUC 來(lái)看,它在首頁(yè) GAUC 上漲了 1% 以上,而這一個(gè)點(diǎn)的提升是通過(guò)大多數(shù)正常途徑的優(yōu)化很難達(dá)到的!這個(gè)現(xiàn)象產(chǎn)生的原因,是重排的上游模型產(chǎn)出出現(xiàn)了問(wèn)題,極大稀釋了重排候選集合中優(yōu)質(zhì)商品的占比。
試想一個(gè)更為夸張的情況,當(dāng)一頁(yè) 20 個(gè)商品中的后 10個(gè) 商品很糟糕,永遠(yuǎn)不會(huì)發(fā)生成交時(shí),有一半的 pair 就變成了送分題,從而造成了 GAUC 的虛高。透過(guò)這個(gè)現(xiàn)象,我們找到了一個(gè)能夠急劇增大 GAUC 的模型:它將最可能成交的商品放在首位,然后放一堆最無(wú)關(guān)的商品。這個(gè)模型在理想情況下,GAUC 應(yīng)當(dāng)為 1,在正常情況下也至少能夠大幅提升 GAUC,想要提升 GAUC 的同學(xué)可以嘗試一下,副作用是 UV 轉(zhuǎn)化或許會(huì)跌 90% 左右。被利用的核心漏洞是在不產(chǎn)生成交的情況下,無(wú)論排成什么鬼樣子,都不會(huì)對(duì) GAUC 的值產(chǎn)生影響。所以,線(xiàn)上的所有實(shí)驗(yàn)可能都有著不同的商品排序分布,除了一個(gè)模型大致的水位之外,我們無(wú)法通過(guò)對(duì)比在線(xiàn) AUC 獲得相當(dāng)精細(xì)的信息。發(fā)現(xiàn)以上問(wèn)題之后,我們可能漸漸想要放棄 AUC 這一指標(biāo),但仔細(xì)一想,好像又沒(méi)有其他的指標(biāo)能夠直接代替它。而我們?cè)谧畛醢l(fā)現(xiàn) AUC 的潛在問(wèn)題時(shí),就希望能夠找到另一個(gè)使用簡(jiǎn)易、表現(xiàn)精確、線(xiàn)上線(xiàn)下一致的新指標(biāo)。強(qiáng)化學(xué)習(xí)框架中的評(píng)估器,就有能力作為這樣的指標(biāo)。在我們混合轉(zhuǎn)化率和 GMV 優(yōu)化目標(biāo)的模型中,指標(biāo)顯示我們生成的序列在評(píng)估器看來(lái)占了壓倒性的優(yōu)勢(shì),但 GAUC 僅在 0.5 左右,而正是這樣一個(gè) GAUC ?0.5 的模型,在線(xiàn)上取得了雙向的顯著提升,這證明了 AUC 在某些情況下是缺乏判別能力的。
強(qiáng)化學(xué)習(xí)重排 AUC、BP 對(duì)比
3. World Model:序列評(píng)估器
早在 2016 年的 SIGIR 就被 Thorsten Joachims 提出,而主題 Counterfactual Evaluation and Learning 正是想要消除線(xiàn)上線(xiàn)下不一致性。在他的 tutorial 中,給出了一些簡(jiǎn)單的由于系統(tǒng) selection bias 造成的預(yù)測(cè)不準(zhǔn)確的問(wèn)題的解決方案,主要還是在針對(duì)如何 model 這個(gè) bias 展開(kāi)的 。其中的一個(gè)方法,被稱(chēng)為 Model the world,是通過(guò)用模擬擬合線(xiàn)上真實(shí) reward 來(lái)達(dá)到 unbias 的目的,這和我們強(qiáng)化學(xué)習(xí)中使用的序列評(píng)估器是一致的。通過(guò)一段時(shí)間的線(xiàn)上測(cè)試,我們能夠相信強(qiáng)化學(xué)習(xí)環(huán)境使用的評(píng)估器是具有較好的能力的,否則生成器模型是難以得到線(xiàn)上提升的。所以我們認(rèn)為,序列評(píng)估器可以作為一種有一定判別能力的離線(xiàn)評(píng)估手段。
新老離線(xiàn)評(píng)估對(duì)比
4. 實(shí)時(shí)強(qiáng)化學(xué)習(xí)模型
在我們這一階段的工作中,我們對(duì)生成器的研究探索更多,而評(píng)估模型只是一個(gè)相對(duì)令人滿(mǎn)意的版本。在后續(xù)的工作里,一個(gè)直接思路就是讓我們的評(píng)估器的評(píng)估能力更強(qiáng)。評(píng)估器在訓(xùn)練數(shù)據(jù)包含的已知空間中能夠取得一個(gè)比較好的 AUC,但是對(duì)相對(duì)未知的空間,我們也無(wú)法得知它的表現(xiàn)究竟如何。上面提到的 GAIL 強(qiáng)化學(xué)習(xí)模型是一種方法,讓生成器的產(chǎn)出在已知空間附近。另一種更加主動(dòng)的方法,是去探索這些未知區(qū)域。但我們也不需要太過(guò)嚴(yán)格地去探索整個(gè)空間,而是探索評(píng)估器認(rèn)為比較好的區(qū)域就足夠了,因?yàn)檫@一部分更接近我們想要展示的序列。達(dá)到這一目標(biāo)的方法,可以是在離線(xiàn)的環(huán)境中訓(xùn)練出能夠最大化序列評(píng)估器打分的序列生成器,然后將它上線(xiàn)。這樣一來(lái),序列評(píng)估器的訓(xùn)練數(shù)據(jù)中就會(huì)增加原本它認(rèn)為的高分區(qū)域,從而得到學(xué)習(xí)。然而,由于我們目前的版本是離線(xiàn)訓(xùn)練的,那么當(dāng)它接收到信號(hào)的時(shí)候,已經(jīng)是一到兩天之后了。所以,讓它更加精確的方法,可以是讓它升級(jí)成為一個(gè)實(shí)時(shí)版本,這樣它就能夠做到快速地自我進(jìn)化。一旦評(píng)估器變得更加準(zhǔn)確,生成器也將收獲更好的效果。另一個(gè)思路,是完全放棄評(píng)估器,和線(xiàn)上真實(shí)的環(huán)境進(jìn)行交互,不過(guò)以我們現(xiàn)有的經(jīng)驗(yàn)來(lái)看,在這個(gè)框架下生成器難以得到良好的訓(xùn)練。
總結(jié)
以上是生活随笔為你收集整理的阿里强化学习重排实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于 Flink+Iceberg 构建企
- 下一篇: Embedding在网易严选搜索推荐中的