聲網(wǎng)深度學(xué)習(xí)時序編碼器的資源預(yù)測實踐丨Dev for Dev 專欄

本文為「Dev for Dev 專欄」系列內(nèi)容,作者為聲網(wǎng)大后端智能運(yùn)營算法團(tuán)隊 算法工程師@黃南薰。
隨著深度學(xué)習(xí)技術(shù)的發(fā)展,編碼器的結(jié)構(gòu)在構(gòu)建神經(jīng)網(wǎng)絡(luò)中成為了熱門之選,在計算機(jī)視覺領(lǐng)域有眾多成功案列。聲網(wǎng)智能運(yùn)營算法團(tuán)隊經(jīng)過調(diào)研后發(fā)現(xiàn),經(jīng)過修改調(diào)整后的時序編碼器在與時間規(guī)律強(qiáng)相關(guān)的數(shù)據(jù)集上展示出很優(yōu)秀的預(yù)測能力。聲網(wǎng)的許多業(yè)務(wù)場景中涉及以運(yùn)籌算法為核心的資源調(diào)度策略,聲網(wǎng)深度學(xué)習(xí)時序編碼器模型可以提供高效而準(zhǔn)確的預(yù)測服務(wù),以支持運(yùn)籌算法根據(jù)未來資源需求進(jìn)行提前規(guī)劃。
01?背景介紹 ? ? ? ?
在聲網(wǎng)的眾多業(yè)務(wù)中,許多業(yè)務(wù)的數(shù)據(jù)往往伴隨著較強(qiáng)的時間規(guī)律性,例如泛娛樂場景下一般周末業(yè)務(wù)會相對較為活躍,教育場景下往往有著相對固定的用量高峰時段。這種跟時間關(guān)聯(lián)在一起的數(shù)據(jù)一般被稱為“時間序列”。時間序列由于在生活中的廣泛應(yīng)用,關(guān)于時間序列的預(yù)測一直是經(jīng)久不衰的話題之一。
聲網(wǎng)的業(yè)務(wù)系統(tǒng)在支持公司業(yè)務(wù)的同時,也實時記錄了這些業(yè)務(wù)所消耗的各個維度的資源情況。經(jīng)過探究后發(fā)現(xiàn),只要業(yè)務(wù)規(guī)模達(dá)到一定程度,對應(yīng)的業(yè)務(wù)的各項資源使用情況就會呈現(xiàn)出或強(qiáng)或弱的規(guī)律性特征。聲網(wǎng)的通用業(yè)務(wù)平臺提供了超融合基礎(chǔ)架構(gòu)(Hyper Converged Infrastructure),能夠從資源池中高效分配、回收資源。對服務(wù)未來資源的變更操作,依賴于對該服務(wù)未來資源需求情況的精準(zhǔn)預(yù)測。一旦確定了某個可調(diào)度范圍內(nèi)的未來資源需求情況,業(yè)務(wù)系統(tǒng)可以通過基于運(yùn)籌算法的調(diào)度策略實現(xiàn)資源高效利用,從而降本增效,因此時間序列預(yù)測是整個業(yè)務(wù)資源高效利用的核心,也是保障業(yè)務(wù)高可用的基石。
在處理時間序列數(shù)據(jù)時,常見算法是根據(jù)數(shù)據(jù)的時序特征,對數(shù)據(jù)本身進(jìn)行分解。進(jìn)行時間序列分解時,通常認(rèn)為時間序列是周期性成分、趨勢性成分和殘差成分疊加或相乘的產(chǎn)物,即y(t)=S(t)+T(t)+R(t)或y(t)=S(t)×T(t)×R(t),因此,一般會假定時間序列具有較強(qiáng)的周期性,從原數(shù)據(jù)中將時間序列的周期性和趨勢性進(jìn)行剝離,分別進(jìn)行預(yù)測,最后根據(jù)殘差來得到一個預(yù)測的時間序列未來的可能值范圍。聲網(wǎng)智能運(yùn)營算法團(tuán)隊在進(jìn)行時間序列的分解時經(jīng)常發(fā)現(xiàn),常見的按周期和趨勢分解時間序列進(jìn)行預(yù)測的方法會遇到周期固化,異常波動難以處理,不確定性預(yù)測難以實現(xiàn)等各種問題。

■計算機(jī)視覺和自然語言處理中常見的自編碼結(jié)構(gòu)
在特定的場景下,傳統(tǒng)的機(jī)器學(xué)習(xí)算法無法到達(dá)較好的預(yù)測效果,這時候深度學(xué)習(xí)便成為了最優(yōu)之選。深度學(xué)習(xí)的許多經(jīng)典場景集中在計算機(jī)視覺和自然語言處理上,核心目標(biāo)是提取出輸入部分的關(guān)鍵信息,制定合適的優(yōu)化目標(biāo),得到期望的目標(biāo)結(jié)果。既然圖像與文字均能夠通過合適的變換,提取出特征信息,帶有時間標(biāo)簽的數(shù)據(jù)也不應(yīng)當(dāng)例外。聲網(wǎng)智能運(yùn)營算法團(tuán)隊經(jīng)過探索后發(fā)現(xiàn),時間序列數(shù)據(jù)經(jīng)過合適的預(yù)處理方案,通過特定的模型結(jié)構(gòu)與特殊的預(yù)測方式,可以在各種業(yè)務(wù)的各個資源維度上均取得較好的預(yù)測結(jié)果,繼而提出了兩個通用解決方案:通用資源時序自編碼器 GRTAE(General Resource Timeseries Auto-Encoder)和通用資源時序變分自編碼器 GRTVAE(General Resource Timeseries Variational Auto-Encoder)。
02?時間序列分解預(yù)測算法
算法詳解
常見的時間序列分解方法一般會采用類似 STL(Seasonal and Trend decomposition using Loess)2?的思想,通過回歸、平滑、過濾等方式挖掘出時間序列的周期性,在處理周期、趨勢較為明顯的時間序列數(shù)據(jù)的時候,通過分解、分別預(yù)測、重組的方式來得到一個時間序列的預(yù)測結(jié)果相比 ARIMA(Autoregressive Integrated Moving Average)等單純通過回歸的方式來進(jìn)行預(yù)測,往往要來的更準(zhǔn)確一點(diǎn),同時也能夠通過分解后的殘差得到一個較為合理的置信區(qū)間。
算法潛在問題
時間序列的規(guī)律并非一成不變的,截止到哪部分的數(shù)據(jù)適合用來當(dāng)作預(yù)測數(shù)據(jù)往往會成為一個較大的難點(diǎn)。由于趨勢性的部分往往是通過分段并采取線性的方式進(jìn)行預(yù)測的,當(dāng)遇到趨勢性非線性的時候往往會和周期性難以區(qū)分,導(dǎo)致訓(xùn)練過擬合。而進(jìn)行相對較長的未來預(yù)測的時候由于模型魯棒性較差,一旦出現(xiàn)規(guī)律發(fā)生微小變化,就會產(chǎn)生一定誤差,而這部分誤差作為歷史數(shù)據(jù)進(jìn)行滾動預(yù)測的時候便會導(dǎo)致誤差被放大,最后整個預(yù)測趨勢會變得難以挽回。如下圖中使用Prophet3?進(jìn)行預(yù)測遇到的誤差放大就是常見的情況。

■時序分解中誤差放大的情況
03?通用資源時序自編碼
模型介紹
自編碼這一概念最早誕生于1986年1,隨著神經(jīng)網(wǎng)絡(luò)技術(shù)的發(fā)展,在計算機(jī)視覺與自然語言處理中都發(fā)揮著重要的作用。自編碼器的核心在于通過編碼層將輸入數(shù)據(jù)的高維特征進(jìn)行抽象化的提取,再通過解碼層將這些特征進(jìn)行表達(dá)。為了盡可能保證信息的還原,編碼器和解碼器的結(jié)構(gòu)往往是對稱或近似對稱的。
通用資源時序自編碼器 GRTAE 跟常規(guī)的自編碼器一樣,分為編碼器和解碼器兩個部分。模型會要求定義好輸入和輸出窗口大小,對時間序列數(shù)值及時間進(jìn)行窗口化的劃分,并在窗口中進(jìn)行預(yù)處理,作為訓(xùn)練時的特征和預(yù)測時的輸入值。異常值的過濾也會在預(yù)處理的過程中同步完成。
■GRTAE 編碼器部分結(jié)構(gòu)
模型的編碼器部分會同時接收時間序列的時間值及數(shù)據(jù)值,分別進(jìn)行特征的抽象化。模型中的中間層部分并不相同,但結(jié)構(gòu)相似,通常為由數(shù)個全連接層、激活函數(shù)層、池化層和隨機(jī)丟失層組合而成。數(shù)據(jù)值部分會先經(jīng)過中間層,再經(jīng)過一層循環(huán)神經(jīng)網(wǎng)絡(luò) GRU(gated recurrent unit),再經(jīng)過一次中間層;同時時間部分會經(jīng)過一次特征嵌入Embedding,再經(jīng)過一層中間層。兩部分分別處理過以后會分別得到形狀相同的兩部分張量,合并層會將兩部分張量連接,并再經(jīng)過一層全連接進(jìn)行變換,得到訓(xùn)練完成的隱信息部分。

■GRTAE 解碼器部分結(jié)構(gòu)
模型的解碼器部分和編碼器部分采取的各個子模塊都是相似的。首先將隱信息輸入到中間層,經(jīng)過 GRU 層備用,同時將要預(yù)測的部分的時間提取出來,經(jīng)過一次特征嵌入后輸入至中間層。再將這兩部分合并,最后輸出一次中間層得到預(yù)測窗口中的數(shù)值信息。
模型局部細(xì)節(jié)詳解
模型的中間層中會選擇性地加入一個或多個激活函數(shù)層、池化層和隨機(jī)丟失層。通常中間層都是以全連接層作為起始層和終止層,但在經(jīng)過循環(huán)神經(jīng)網(wǎng)絡(luò)后一般會直接使用激活函數(shù)層作為起始層。中間層一般起到增加模型表達(dá)力和魯棒性的作用,實踐表明,該網(wǎng)絡(luò)架構(gòu)具備較強(qiáng)的魯棒性和通用性,適用于多個業(yè)務(wù)場景,預(yù)測效果得到保證。
時序嵌入(Embedding)有多種方式,我們一開始參考了Transformer??中的positional encoding的思想,用正弦和余弦的三角函數(shù)變換后進(jìn)行交替編碼,并在原方法上做了簡化處理,得到了通用便捷的時間序列嵌入方案。同時經(jīng)過研究我們也發(fā)現(xiàn),如果采用適當(dāng)?shù)慕Y(jié)構(gòu)直接引入位置信息,也可以達(dá)到和三角函數(shù)相仿的效果,這也同時證明了時序部分的合理嵌入方式可以是多樣的。
模型優(yōu)勢
通用資源時序自編碼器 GRTAE 相比于其他編碼器模型較為輕量。在實踐中,如果需要預(yù)測未來十五分鐘的數(shù)據(jù),只需要兩周的歷史數(shù)據(jù)作為訓(xùn)練集,預(yù)測時使用四小時的歷史數(shù)據(jù),在模型前端增加合適的預(yù)處理方式,后端增加合適的平滑方式,就能夠?qū)㈩A(yù)測窗口內(nèi)的誤差控制在 5% 以內(nèi)。
由于整個窗口都是由單次預(yù)測直接完成,待預(yù)測位置上的點(diǎn)除了位置信息外,本身的預(yù)測結(jié)果沒有被作為中間值引入下一次預(yù)測。這種非自回歸式的預(yù)測方式能夠有效避免發(fā)生傳統(tǒng)時間預(yù)測算法的誤差放大現(xiàn)象。
模型效果展示

■GRTAE 在資源預(yù)測領(lǐng)域的效果展示
圖中展示的是 GRTAE 算法在資源預(yù)測領(lǐng)域的效果。黃色曲線是傳統(tǒng)機(jī)器學(xué)習(xí)算法的預(yù)測結(jié)果,綠色部分是 GRTAE 的預(yù)測結(jié)果,藍(lán)色部分是真實值。不難發(fā)現(xiàn),傳統(tǒng)機(jī)器學(xué)習(xí)方法在整體趨勢上基本能夠貼合真實數(shù)據(jù),然而一旦局部發(fā)生波動或者驟升驟降,算法就會產(chǎn)生較大的誤差。然而 GRTAE 則能在一定程度上提前感知到這種變化,及時修正預(yù)測結(jié)果,和真實值曲線貼合緊密。
04?通用資源時序變分自編碼
模型介紹
通用資源時序變分自編碼器 GRTVAE 則是在結(jié)構(gòu)上參考了變分自編碼器的結(jié)構(gòu)?。由于變分自編碼器的結(jié)構(gòu)是在自編碼器的結(jié)構(gòu)上修改而得到的,而自編碼器在上文已經(jīng)做過介紹,此處就不再贅述,將編碼器部分和解碼器部分作為整個整體直接說明,并著重介紹 GRTVAE 與 GRTAE 之間的不同點(diǎn)。首先,在 GRTVAE 中,時序數(shù)據(jù)不再通過位置嵌入的方式傳遞,而是通過固定的方式轉(zhuǎn)換成矩陣,和數(shù)值數(shù)據(jù)一起進(jìn)入編碼器。由于將時間特征直接引入,編碼器中采用了 Transformer 里經(jīng)典的自注意力機(jī)制(Self-Attention),用以建立關(guān)鍵特征之間的聯(lián)系。訓(xùn)練和預(yù)測過程采用重參數(shù)化技巧(reparameterization trick),對標(biāo)準(zhǔn)正態(tài)分布進(jìn)行采樣,將預(yù)測問題轉(zhuǎn)化為生成問題,得到數(shù)據(jù)分布,從而較為容易地計算預(yù)測結(jié)果置信區(qū)間,緩解異常波動帶來的預(yù)測誤差較大的問題。

■GRTVAE 整體結(jié)構(gòu)概括
模型局部細(xì)節(jié)詳解
通用資源時序變分自編碼器 GRTVAE 的編碼器部分引入了自注意力機(jī)制。自注意力機(jī)制在自然語言處理及計算機(jī)視覺中都有廣泛的使用,主要通過改變權(quán)重的方式讓模型自行學(xué)習(xí)輸入中比較重要的部分,比如句子中的關(guān)鍵詞或圖片中的關(guān)鍵部分,在時序相關(guān)數(shù)據(jù)中則是學(xué)習(xí)能夠決定未來走向的時間和對應(yīng)的數(shù)據(jù)。
解碼層除了使用長期信息以外,還會從原始數(shù)據(jù)中拉取一份短期數(shù)據(jù),并訓(xùn)練成為包含短期信息的張量,將長短期信息做融合后協(xié)同預(yù)測。充足的長期數(shù)據(jù)有助于發(fā)現(xiàn)時間序列中的規(guī)律,但在規(guī)律性上的過渡聚焦會導(dǎo)致算法在預(yù)測時只會機(jī)械化的參考最類似的場景,而現(xiàn)實生活中的時序數(shù)據(jù)除了和歷史的規(guī)律有關(guān)外,往往也和最新時刻的狀態(tài)有緊密關(guān)系。短期信息的重復(fù)引入有助于這種關(guān)系在模型中得到恰當(dāng)?shù)陌l(fā)揮。
GRTVAE 的解碼器部分在預(yù)測時獲取的短期數(shù)據(jù)與使用的長期數(shù)據(jù)均為歷史已知數(shù)據(jù),同樣不采用自回歸的方式以規(guī)避誤差放大的風(fēng)險。
數(shù)據(jù)的預(yù)處理階段,進(jìn)入解碼器前的數(shù)據(jù)還經(jīng)過了數(shù)據(jù)濾波平滑和一階差分預(yù)測的處理,這兩類處理方式也是時序預(yù)測中的常用技巧,和自注意力機(jī)制一樣,在幫助模型集中學(xué)習(xí)數(shù)據(jù)規(guī)律性部分上起到了較大的作用。數(shù)據(jù)濾波平滑可以幫助消除曲線中的隨機(jī)殘差成分,同時會保留數(shù)據(jù)中的高頻信號部分,即時間序列中的驟升驟降的成分,削弱了隨機(jī)誤差對模型訓(xùn)練及預(yù)測的干擾。另外,經(jīng)過測試發(fā)現(xiàn),在使用 GRTVAE 的過程中,比起訓(xùn)練數(shù)據(jù)本身,將濾波的數(shù)據(jù)經(jīng)過一階差分處理來訓(xùn)練數(shù)據(jù)的增量部分能夠得到更準(zhǔn)確的結(jié)果。
模型優(yōu)勢
通用資源時序變分自編碼器 GRTVAE 由于引入了概率模型,能夠直接通過統(tǒng)計學(xué)方式生成業(yè)務(wù)需要的置信區(qū)間,這在通用資源平臺中資源容量分配及其他很多需要用到預(yù)測算法的業(yè)務(wù)場景中都有廣泛的應(yīng)用場景。
通過注意力機(jī)制獲得隱向量的方法具有很高的魯棒性,也就意味著在相似業(yè)務(wù)上能夠進(jìn)行快速地遷移。模型可以通過遷移學(xué)習(xí)等方法在相似場景小以極小的訓(xùn)練代價進(jìn)行快速地復(fù)用。
模型效果展示

■GRTVAE 在資源預(yù)測領(lǐng)域的效果展示
圖中展示的是 GRTVAE 算法在資源預(yù)測領(lǐng)域的效果。黃色曲線是統(tǒng)計學(xué)算法的預(yù)測結(jié)果,紅色部分是 GRTVAE 的預(yù)測結(jié)果,藍(lán)色部分是真實值。圖中選取的時刻是曲線的規(guī)律性發(fā)生變化的時刻,平時原本會以凹陷形式下降的數(shù)值呈現(xiàn)了凸形的下降方式。統(tǒng)計學(xué)算法參考了過往同一時刻的值,采用了加權(quán)平均,局部回歸等思想,但這些方法無法對新的規(guī)律變化產(chǎn)生感知。而 GRTVAE 則敏銳地發(fā)現(xiàn)了曲線短期信息中包含的差異性,給出了合理的預(yù)測結(jié)果。同時統(tǒng)計學(xué)方法受歷史極端值影響較強(qiáng),故經(jīng)常呈現(xiàn)出數(shù)值的突升突降,而 GRTVAE 由于其依靠分布而生成的原理,得到的是平滑且穩(wěn)定的預(yù)測結(jié)果。
05?總結(jié) ? ? ?? ? ?
聲網(wǎng)智能運(yùn)營算法團(tuán)隊在時間序列數(shù)據(jù)預(yù)測任務(wù)的實踐過程中,嘗試了業(yè)界比較優(yōu)秀的算法,如 DeepAR、Uber 的基于 Dropout 的 Uncertain 和 confident 預(yù)測、NBeats、Transformer 系列如 autoformer 等,總體上這些算法在我們的場景里精度和復(fù)雜度都難以滿足需求,因此我們在借鑒業(yè)界優(yōu)秀成果的基礎(chǔ)上研發(fā)了適應(yīng)聲網(wǎng)場景的通用資源時序自編碼器 GRTAE 和通用資源時序變分自編碼器 GRTVAE 兩種時間序列預(yù)測通用解決方案。單維度的時間序列預(yù)測問題在業(yè)界一直是一個難以攻克的難關(guān),常見的時間序列預(yù)測模型往往在長期周期性與短期趨勢性之間難以找到平衡點(diǎn),同時又會受到滾動預(yù)測的思想的影響難以產(chǎn)生穩(wěn)定的預(yù)測結(jié)果。經(jīng)過算法團(tuán)隊的測試,只需要采取合適的預(yù)處理方式和輸出優(yōu)化方案,這兩套解決方案可以應(yīng)對各種規(guī)模、各種類型的單維度時間序列,也支持拓展到多維時間序列預(yù)測上,與一些其他深度學(xué)習(xí)解決方案相比,又有著魯棒性強(qiáng)、輕量化、需求樣本少等各種優(yōu)勢,能快速滿足大部分業(yè)務(wù)場景的需求。
聲網(wǎng)的資源預(yù)測場景采用了兩種新的編碼器方案作為預(yù)測模塊以后,真正做到了在各個服務(wù)各個粒度上,對未來短時間內(nèi)的資源使用情況有一個較為精準(zhǔn)的預(yù)測范圍,不管是強(qiáng)周期性的時間序列還是驟升驟降的時間序列,都能夠參考?xì)v史場景及實時趨勢,給出合理的預(yù)測值。通過將預(yù)測算法與以運(yùn)籌算法為核心的資源調(diào)度策略相結(jié)合,聲網(wǎng)真正意義上實現(xiàn)了隨用隨取的“資源自由”。
參考文獻(xiàn)
1.?D.E. Rumelhart, G.E. Hinton, and R.J. Williams, "Learning internal representations by error propagation." Parallel Distributed Processing. Vol 1: Foundations. MIT Press, Cambridge, MA, 1986
2.?Cleveland, Robert B., William S. Cleveland, and Irma Terpenning. "STL: A seasonal-trend decomposition procedure based on loess." Journal of Official Statistics 6.1, 1990
3.?Sean J. Taylor, Benjamin Letham (2018) Forecasting at?scale. The American Statistician
4.?Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin, ”Attention Is All You Need”, 2017
5.?Diederik P Kingma, Max , “Auto-Encoding Variational Bayes”, 2013
(正文完)
關(guān)于 Dev for Dev
Dev for Dev 專欄全稱為 Developer for Developer,該專欄是聲網(wǎng)與 RTC 開發(fā)者社區(qū)共同發(fā)起的開發(fā)者互動創(chuàng)新實踐活動。
透過工程師視角的技術(shù)分享、交流碰撞、項目共建等多種形式,匯聚開發(fā)者的力量,挖掘和傳遞最具價值的技術(shù)內(nèi)容和項目,全面釋放技術(shù)的創(chuàng)造力。