據(jù)思科統(tǒng)計(jì)數(shù)據(jù),互聯(lián)網(wǎng)視頻流在網(wǎng)絡(luò)帶寬中占有很大份額,到2022年將增長(zhǎng)到消費(fèi)互聯(lián)網(wǎng)流量的82%以上。視頻服務(wù)已經(jīng)成為人們生活中不可或缺的一部分。
為了克服網(wǎng)絡(luò)抖動(dòng)帶來(lái)不必要的播放卡頓,自適應(yīng)多碼率被公認(rèn)為最有效的手段之一,例如MPEG-DASH、Apple的HLS、快手的LAS等。ABR算法自適應(yīng)多碼率方案的核心,依據(jù)網(wǎng)絡(luò)狀態(tài)、播放狀態(tài)等信息,動(dòng)態(tài)調(diào)整請(qǐng)求視頻流的清晰度(碼率),從而在流暢度、清晰度和平滑性上取得平衡,最大化用戶體驗(yàn)。
ABR算法可以分為兩大類,一類是基于啟發(fā)式的策略,通過(guò)建立各種模型或規(guī)則來(lái)控制碼率的選擇,然而這些算法通常需要仔細(xì)調(diào)參以適應(yīng)多變的網(wǎng)絡(luò)環(huán)境。另一類則是采用機(jī)器學(xué)習(xí)的方式,讓播放器通過(guò)與現(xiàn)實(shí)中的網(wǎng)絡(luò)交互,“自主地”學(xué)習(xí)出一個(gè)適應(yīng)當(dāng)前網(wǎng)絡(luò)狀態(tài)的ABR算法。
任何算法在落地前都需要經(jīng)歷漫長(zhǎng)從理論到實(shí)踐的調(diào)試與優(yōu)化,特別是解決各種各樣“實(shí)驗(yàn)室中認(rèn)為不重要但是在落地階段非常重要”的問(wèn)題。
鑒此,快手音視頻技術(shù)部聯(lián)合清華大學(xué)孫立峰教授團(tuán)隊(duì)對(duì)基于學(xué)習(xí)的ABR算法在兩方面進(jìn)行了研究和改進(jìn),并分別發(fā)表在國(guó)際頂級(jí)會(huì)議IEEE INFOCOM 2020與國(guó)際頂級(jí)期刊IEEE JSAC。
論文地址:https://ieeexplore.ieee.org/abstract/document/9109427
自適應(yīng)多碼率
圖1 碼率自適應(yīng)傳輸架構(gòu)圖
自適應(yīng)多碼率的傳輸架構(gòu)分為基于分片(MPEFG-DASH、HLS)和基于流式(LAS)兩類,本文以基于分片為例,如圖1所示:視頻在發(fā)布前,會(huì)先進(jìn)行切片和轉(zhuǎn)碼,得到不同碼率和清晰的分片,在客戶端,每次當(dāng)當(dāng)前切片下載完成時(shí),客戶端上的ABR算法將綜合考慮帶寬、緩沖情況以及用戶信息等信息,選擇下一個(gè)切片的碼率,從而實(shí)現(xiàn)自適應(yīng),提升用戶的體驗(yàn)(QoE)。用戶的QoE通常由以下指標(biāo)組成(如公式1所示)。
公式1 自適應(yīng)碼率傳輸中的QoE定義
其中代表視頻的碼率,代表視頻的卡頓時(shí)長(zhǎng),最后一項(xiàng)為平滑項(xiàng):即不希望視頻碼率頻繁切換。μ和τ為懲罰系數(shù)。對(duì)ABR算法來(lái)說(shuō),該優(yōu)化是一種長(zhǎng)時(shí)優(yōu)化(long-term optimization)。例如在某個(gè)時(shí)刻ABR算法“貪心地”選擇了高碼率,然而網(wǎng)絡(luò)在之后變差了,導(dǎo)致之后幾個(gè)時(shí)刻ABR算法都只能“被迫”選擇較低的碼率或造成卡頓,那么綜合來(lái)說(shuō),這次選擇就是不合適的。
基于學(xué)習(xí)的ABR
機(jī)器學(xué)習(xí)是否能解決這個(gè)問(wèn)題呢?答案是肯定的。例如Pensieve(SIGCOMM‘17)將碼率自適應(yīng)過(guò)程建模為了一個(gè)馬爾可夫決策過(guò)程(MDP),并使用深度強(qiáng)化學(xué)習(xí)算法(Deep Reinforcement Learning, DRL) 從零開(kāi)始訓(xùn)練,最終學(xué)習(xí)到的策略在QoE指標(biāo)上超越了過(guò)去最優(yōu)算法18%。然而,盡管Pensieve在“性能”上獲得了巨大的突破,但是該算法由于諸多限制很難在現(xiàn)實(shí)中部署:
開(kāi)銷:為了減少客戶端上的開(kāi)銷,Pensieve將整個(gè)模型推理放在了服務(wù)器上,并作為服務(wù)運(yùn)行。然而在實(shí)際部署中,大多數(shù)的ABR算法部署在客戶端上以避免額外的消耗,例如端到端延遲,服務(wù)器上作為服務(wù)的消耗等。故如何進(jìn)一步從機(jī)理上降低模型的開(kāi)銷將成為其部署的一大挑戰(zhàn)。
效率:Pensieve使用強(qiáng)化學(xué)習(xí)算法進(jìn)行訓(xùn)練,通常需要至少8小時(shí)才能訓(xùn)練收斂一個(gè)策略。如何改善訓(xùn)練效率,使其始終能適應(yīng)當(dāng)前網(wǎng)絡(luò)狀態(tài)是ABR任務(wù)的另一大挑戰(zhàn)。
1、結(jié)合領(lǐng)域知識(shí),降低整體開(kāi)銷
面對(duì)第一個(gè)挑戰(zhàn),我們提出了“結(jié)合領(lǐng)域知識(shí)”這一概念。基本動(dòng)機(jī)是:雖然AlphaZero等突破性的算法在摒棄了人類領(lǐng)域知識(shí)后獲得了更高的水準(zhǔn)。但是考慮到ABR算法是一個(gè)“狀態(tài),動(dòng)作空間較小,物理意義明確”的任務(wù),是否過(guò)去優(yōu)秀的ABR算法已經(jīng)挖掘出足夠的“領(lǐng)域特征了”?
圖2 BBA算法原理介紹
BBA(Buffer-Based Approach,SIGCOMM’14)是優(yōu)秀的代表之一,其原理如圖2所示。BBA算法內(nèi)部有兩個(gè)閾值(RESEVIOR和CUSHION)。在當(dāng)前緩沖小于閾值RESEVIOR時(shí)(偏左的紅色虛線),BBA算法恒選擇最小的視頻碼率;當(dāng)緩沖區(qū)儲(chǔ)存的視頻時(shí)長(zhǎng)大于RESEVIOR+CUSHION(偏右的紅色虛線)時(shí),BBA會(huì)選擇最大的視頻碼率;在緩沖區(qū)處于其他狀態(tài)下時(shí),BBA算法會(huì)使用線性擬合的方式,根據(jù)當(dāng)前的緩沖選擇一個(gè)適合的視頻碼率。由此可知,BBA算法的性能非常依賴RESEVIOR和CUSHION這兩個(gè)值的取值。在本文中,我們嘗試是否可以將BBA算法和基于學(xué)習(xí)的算法可以有機(jī)地結(jié)合在一起,即,我們能通過(guò)深度學(xué)習(xí)方法增強(qiáng)BBA算法,與此同時(shí),BBA算法又能給學(xué)習(xí)算法帶來(lái)更多的領(lǐng)域知識(shí),從而降低模型開(kāi)銷。
圖3 Stick系統(tǒng)架構(gòu)圖
我們提出了Stick,一種融合了傳統(tǒng)基于緩沖區(qū)方法和基于學(xué)習(xí)的方法的自適應(yīng)碼率方案。該方案的系統(tǒng)框架圖如圖3所示,模塊主要由兩大部分組成,分別是:1) 基本Stick模塊。該模塊主要利用一個(gè)線下訓(xùn)練完的神經(jīng)網(wǎng)絡(luò),根據(jù)當(dāng)前客戶端接收的狀態(tài)輸出連續(xù)值,該值用于控制傳統(tǒng)的BBA算法的閾值。2) Trigger模塊。Trigger模塊是一個(gè)輕量級(jí)的神經(jīng)網(wǎng)絡(luò),部署在Stick啟動(dòng)之前,用于決策是否開(kāi)啟基本Stick模塊,從而進(jìn)一步降低Stick神經(jīng)網(wǎng)絡(luò)的整體開(kāi)銷。
圖4 Stick神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
Stick模塊:采用連續(xù)值下的深度強(qiáng)化學(xué)習(xí)算法DDPG來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò),將過(guò)去的碼率決策,過(guò)去一段時(shí)間的帶寬大小,下載時(shí)長(zhǎng),未來(lái)視頻大小,剩余時(shí)長(zhǎng),當(dāng)前緩沖區(qū)大小等輸入神經(jīng)網(wǎng)絡(luò),并輸出一個(gè)單值,代表允許下最大碼率的緩沖值。隨后我們采用經(jīng)典的BBA方案,該值將被擴(kuò)展為一個(gè)緩沖表,用于決策每一個(gè)緩沖下的對(duì)應(yīng)下載碼率。之后的實(shí)驗(yàn)表明,運(yùn)用領(lǐng)域知識(shí)可以大幅度降低神經(jīng)網(wǎng)絡(luò)的開(kāi)銷,最高可將模型大小縮減88%。
Trigger模塊:在使用領(lǐng)域知識(shí)縮減了模型大小后,我們進(jìn)一步通過(guò)實(shí)驗(yàn)挖掘出BBA的潛力:由于Stick使用緩沖表去選擇碼率,很明顯,它比一般的輸出攜帶了更多的信息,所以在大多數(shù)網(wǎng)絡(luò)情況下,只有30%到40%的情形需要去開(kāi)啟Stick神經(jīng)網(wǎng)絡(luò)去推端新的閾值,在其他時(shí)候,只需要沿用上一個(gè)閾值即可。故我們可以在Stick神經(jīng)網(wǎng)絡(luò)之前再部署一個(gè)非常輕量級(jí)的小型神經(jīng)網(wǎng)絡(luò),使用簡(jiǎn)單的結(jié)構(gòu)決定是否需要更新當(dāng)前閾值參數(shù)。在此我們使用的模仿學(xué)習(xí),即在訓(xùn)練時(shí)實(shí)時(shí)求解最優(yōu)解并引導(dǎo)神經(jīng)網(wǎng)絡(luò)漸漸“靠近”最優(yōu)策略。
實(shí)驗(yàn)結(jié)果:我們比較了Stick與經(jīng)典的buffer-based算法(包括BBA和BOLA)的性能,結(jié)果表明Stick分別提升了44.26%和25.93%的QoE。隨后在進(jìn)一步和過(guò)去多個(gè)算法的比較中,Stick也表現(xiàn)出了更好的性能,總體提升了3.5%-25.86%的QoE。于此同時(shí),與Pensieve相比,Stick減少了88%的模型開(kāi)銷。
圖5 Stick實(shí)驗(yàn)結(jié)果
圖6 Trigger實(shí)驗(yàn)結(jié)果
我們隨后對(duì)Trigger三個(gè)不同的數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn)測(cè)試。結(jié)果表明Trigger會(huì)明顯減少Stick的綜合開(kāi)銷,總體節(jié)省幅度在39%-61%。此外我們可以看到Trigger甚至幫助過(guò)去的一些經(jīng)典算法提升了性能,包括Rate-based和經(jīng)過(guò)改進(jìn)的Pensieve。
更詳細(xì)的內(nèi)容請(qǐng)參考我們的IEEE INFOCOM2020的論文《Stick: A Harmonious Fusion of Buffer-based and Learning-based Approach for Adaptive Streaming》。
2、改善訓(xùn)練效率,在線終身學(xué)習(xí)
第二個(gè)挑戰(zhàn)來(lái)自強(qiáng)化學(xué)習(xí)的低訓(xùn)練效率。在強(qiáng)化學(xué)習(xí)方案中,智能體通過(guò)與環(huán)境交互獲得{狀態(tài),動(dòng)作,回報(bào)}集合,隨后通過(guò)學(xué)習(xí)增大每次動(dòng)作獲得的回報(bào)。然而,在學(xué)習(xí)過(guò)程中,智能體無(wú)法獲取在當(dāng)前狀態(tài)下的最優(yōu)動(dòng)作,因此不能為神經(jīng)網(wǎng)絡(luò)提供準(zhǔn)確的梯度方向更新,基于強(qiáng)化學(xué)習(xí)的ABR算法也遭受著這個(gè)缺點(diǎn)。
圖7 LifeLong-Comyco系統(tǒng)架構(gòu)
針對(duì)這些問(wèn)題,我們提出了Lifelong-Comyco,一種終身模仿學(xué)習(xí)的ABR算法。Lifelong-Comyco的系統(tǒng)架構(gòu)如圖7所示。該系統(tǒng)由外循環(huán)系統(tǒng)(Outer-loop)和內(nèi)循環(huán)(Inner-loop)系統(tǒng)兩部分組成。其中內(nèi)循環(huán)系統(tǒng)使用模仿學(xué)習(xí)方法更快更有效地從專家序列中學(xué)到策略;外循環(huán)系統(tǒng)則給予了系統(tǒng)持續(xù)更新能力,采用終身學(xué)習(xí)的方式自主“查缺補(bǔ)漏”,學(xué)習(xí)有必要的數(shù)據(jù)。該系統(tǒng)的系統(tǒng)流程為:在視頻開(kāi)始之前,位于客戶端的視頻播放器從ABR模型服務(wù)器下載最新的神經(jīng)網(wǎng)絡(luò)模型。每次當(dāng)視頻在客戶端上播放完成后,播放器將通過(guò)過(guò)去的下載塊大小和下載時(shí)間生成帶寬數(shù)據(jù)。隨后,收集到的帶寬數(shù)據(jù)將被提交到位于服務(wù)器端的外循環(huán)系統(tǒng)。外環(huán)系統(tǒng)將即時(shí)估計(jì)當(dāng)前策略與最優(yōu)策略之間的差距。根據(jù)該差距,我們可以確定該網(wǎng)絡(luò)帶寬數(shù)據(jù)是否需要加入訓(xùn)練集中。隨后在每個(gè)時(shí)間段(例如1小時(shí)),在內(nèi)循環(huán)系統(tǒng)將被調(diào)用并通過(guò)終身模仿學(xué)習(xí)有效地更新神經(jīng)網(wǎng)絡(luò)。最后,每隔一段時(shí)間,我們會(huì)將訓(xùn)練好的模型凍結(jié)并提交給ABR模型服務(wù)器。
圖8 內(nèi)循環(huán)系統(tǒng)架構(gòu)
內(nèi)循環(huán)系統(tǒng):在內(nèi)循環(huán)系統(tǒng)中,我們充分利用了自適應(yīng)碼率任務(wù)的特點(diǎn),即可以通過(guò)線下模擬器,在給定的網(wǎng)絡(luò)和視頻的條件下準(zhǔn)確地判斷出當(dāng)前的最優(yōu)或者接近最優(yōu)的解。在獲取到最優(yōu)解后,我們便可以使用傳統(tǒng)的監(jiān)督學(xué)習(xí)方法高效地對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行更新。大致方法如下:首先,我們使用蒙特卡洛采樣,即從相同的狀態(tài)開(kāi)始,將過(guò)程推演到N步之后。隨后我們選擇得到地QoE得分最高地那條軌跡中地第一個(gè)選擇作為未來(lái)地碼率選擇。之后,我們將{狀態(tài),最優(yōu)選擇}保存入經(jīng)驗(yàn)池中。最后,每次訓(xùn)練開(kāi)啟,我們需要訓(xùn)練的智能體就會(huì)從經(jīng)驗(yàn)池中隨機(jī)選出數(shù)據(jù)進(jìn)行訓(xùn)練。這里我們可以注意到,與強(qiáng)化學(xué)習(xí)不同,模仿學(xué)習(xí)做到了采樣和訓(xùn)練解耦,從而更能提升并行效率,達(dá)到高效訓(xùn)練。
圖9 外循環(huán)系統(tǒng)架構(gòu)
外循環(huán)系統(tǒng):外循環(huán)子系統(tǒng)的核心思想是進(jìn)一步減少訓(xùn)練時(shí)所需地訓(xùn)練集。我們會(huì)先對(duì)客戶端上報(bào)的帶寬數(shù)據(jù)進(jìn)行整理,核算線下最優(yōu)解。隨后我們查看當(dāng)前線上策略與線下最優(yōu)解所取得的QoE的差距,當(dāng)差距超過(guò)某個(gè)值時(shí),我們會(huì)將當(dāng)前帶寬數(shù)據(jù)放入要訓(xùn)練的數(shù)據(jù)集中。最后,我們會(huì)采用終身學(xué)習(xí)的訓(xùn)練方法訓(xùn)練神經(jīng)網(wǎng)絡(luò),這是一種經(jīng)典的主動(dòng)學(xué)習(xí)(Active Learning)方案,可以在不忘記過(guò)去表現(xiàn)良好的帶寬數(shù)據(jù)的情況下,記住表現(xiàn)不好的帶寬數(shù)據(jù)。
圖13 內(nèi)循環(huán)系統(tǒng)訓(xùn)練曲線
圖14 內(nèi)循環(huán)系統(tǒng)實(shí)驗(yàn)結(jié)果。算法在FCC和HSDPA數(shù)據(jù)集上進(jìn)行了細(xì)致地測(cè)試
實(shí)驗(yàn)結(jié)果:首先我們測(cè)試了內(nèi)循環(huán)系統(tǒng)訓(xùn)練出的神經(jīng)網(wǎng)絡(luò)的性能。如圖10 所示,我們看到了模仿學(xué)習(xí)有效并快速的學(xué)習(xí)到了更好的策略:整體訓(xùn)練步數(shù)相較于強(qiáng)化學(xué)習(xí)的訓(xùn)練步數(shù)減少了1700倍,同時(shí),整體訓(xùn)練時(shí)長(zhǎng)減少了16倍。于此同時(shí)算法的整體性能還有提升。在HSDPA數(shù)據(jù)集上,我們測(cè)得模仿學(xué)習(xí)訓(xùn)練處的策略比過(guò)去的方法高出了7.5%-17.99%的QoE。
圖15 外循環(huán)系統(tǒng)實(shí)驗(yàn)結(jié)果
隨后我們對(duì)外循環(huán)系統(tǒng)進(jìn)行了測(cè)試。測(cè)試數(shù)據(jù)是我們搜集12小時(shí)帶寬序列數(shù)據(jù)。我們會(huì)在整點(diǎn)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行更新,并在其他時(shí)候記錄需要使用的帶寬數(shù)據(jù)集。實(shí)驗(yàn)結(jié)果表示,使用終身學(xué)習(xí)算法將有效避免災(zāi)難性遺忘問(wèn)題,并且能夠跟隨網(wǎng)絡(luò)分布的變化實(shí)時(shí)更新自己的策略,使其性能用于處于較好的狀態(tài)。反觀其他算法,包括實(shí)時(shí)fine-tune,重新訓(xùn)練,與只是用內(nèi)循環(huán)系統(tǒng),都不能很好地做到這一點(diǎn)。實(shí)驗(yàn)表明,使用外循環(huán)系統(tǒng)更新能比只使用內(nèi)循環(huán)系統(tǒng)的方案再高出1.07%到9.81%的性能。
更詳細(xì)的內(nèi)容請(qǐng)參考我們的JSAC的論文《Quality-aware Neural Adaptive Video Streaming with Lifelong Imitation Learning》。
結(jié)語(yǔ)
基于機(jī)器學(xué)習(xí)的ABR算法在落地上還有很多的內(nèi)容需要被探索,包括可解釋性,魯棒性,以及更小巧的模型等??焓钟型晟频臄?shù)據(jù)集、AB測(cè)試平臺(tái)、優(yōu)秀的算法團(tuán)隊(duì),非常歡迎各位同行、學(xué)者和我們一起研究、探討、合作,做落地有效的算法,提升用戶體驗(yàn)。
評(píng)論
查看更多