朱煒昕,王亞剛
(上海理工大學 光電信息與計算機工程學院,上海 200093)
隨著全球變暖,世界各國越來越重視能源大量消耗對環(huán)境帶來的負面影響。在2008年全球氣候峰會上,多國政府承諾逐步降低碳排放量,并推動能源效率提升。在用電方面,實時采集電器能耗信息有助于用戶和電廠合理安排用電時間,從而提高用電效率[1]。采集電器能耗信息的方法通常分為侵入式負載監(jiān)測和非侵入式負載監(jiān)測兩大類方法,其中:侵入式負載監(jiān)測方法是對每個電器安裝獨立分電表來獲取其能耗信息,而非侵入式負載監(jiān)測方法是從總電表數(shù)據(jù)提取電路中每個電器能耗信息[2]。雖然侵入式負載監(jiān)測在測量單個電器信息的準確度上有優(yōu)勢,但由于經(jīng)濟成本和可行性等因素,非侵入式負載監(jiān)測成為更受歡迎的方法[3-4]。非侵入式負載監(jiān)測的分解問題最先由Hart提出,主要圍繞聚類算法進行分解[5],隨后出現(xiàn)了組合優(yōu)化[6]、稀疏編碼[7-8],隱馬爾可夫模型[9-10]、動態(tài)時間規(guī)整[11],特征庫匹配[12]、深度神經(jīng)網(wǎng)絡[13-17]等方法。
非侵入式負載監(jiān)測(NILM)一般用于電器分類、狀態(tài)辨別、能耗分解等任務,其步驟一般分為數(shù)據(jù)采集、特征提取、信號分離等步驟。數(shù)據(jù)采集有高低頻之分,一般高頻可以達到100 MHz,低頻則低于1 kHz。特征提取包括電器自身運行時的瞬時特征和穩(wěn)態(tài)特征,比如電流、有功功率、無功功率等[4]。為了能夠有效量化和比較各個算法的效果,分析算法的有效性和通用性,REDD[18]、UK-DALE[19]等公開的數(shù)據(jù)集提供了不同天數(shù)的多種家用電器的用電數(shù)據(jù)。
在近幾年的研究中,主要針對低頻特征的神經(jīng)網(wǎng)絡方法被不斷地應用到NILM中。文獻[13]對比了3種人工神經(jīng)網(wǎng)絡的模型來實現(xiàn)NILM的效果:1)長短時記憶循環(huán)神經(jīng)網(wǎng)絡(LSTM),用來對單個電器的時序功率數(shù)據(jù)做序列到序列的估計;2)去噪自編碼器(dAE),用來對單個電器的時序功率數(shù)據(jù)做序列到序列的估計;3)卷積神經(jīng)網(wǎng)絡(CNN),又稱為Rectangle Net,用來對電器啟停時刻和平均運行功率做序列到點的估計。文獻[14]則進一步在文獻[13]提出的dAE網(wǎng)絡基礎上進行了大量的實驗,較為全面地挖掘了dAE在電能分解上的能力,驗證了卷積層數(shù)、池化層、采樣頻率等結(jié)構(gòu)性因素對dAE網(wǎng)絡分解效果的影響,并且對比了基于隱馬爾可夫模型的AFAMAP算法[11],說明了dAE方法在強噪音環(huán)境下的分解效果優(yōu)于AFAMAP算法,此外還使用了神經(jīng)網(wǎng)絡以外的輔助手段來提高負荷分解的準確度。文獻[15]提出了一種結(jié)合高頻特征的神經(jīng)網(wǎng)絡來對電器進行分類。文獻[16]提出了一種LSTM循環(huán)神經(jīng)網(wǎng)絡,結(jié)合非因果結(jié)構(gòu)與貝葉斯參數(shù)優(yōu)化框架對電器功率進行回歸估計。文獻[17]從電器狀態(tài)聚類出發(fā),將狀態(tài)和功率等信息輸入深度神經(jīng)網(wǎng)絡以估計下一時刻的電器狀態(tài)和功率。
在分解混合電器能耗的任務中,dAE作為一種序列到序列的信號重建的方法,在重建信息的分辨率上比序列到點估計方法有優(yōu)勢。并且dAE在文獻[13]中表現(xiàn)的準確度比LSTM循環(huán)神經(jīng)網(wǎng)絡和Rectangle Net更有潛力。雖然文獻[14]針對dAE方法已做了較為全面的研究,但是dAE的準確度仍然有較大的提升空間。因此,本文提出一種改進型dAE方法,對網(wǎng)絡結(jié)構(gòu)適當增加卷積層,結(jié)合批歸一化(batch normalization, BN)和修正線性單元(ReLU),并創(chuàng)新性地對半運行訓練樣本標簽做零值化預處理,以提高負荷分解的準確度。
自編碼器(AE)由編碼器(Encoder)和解碼器(Decoder)兩個部分組成。編碼器將輸入信息轉(zhuǎn)換成一個能夠表達輸入信息的表示向量。解碼器則把這個表示向量還原成輸入信息。圖1是卷積自編碼器結(jié)構(gòu),其中間部分是表示向量,其左邊部分至輸入層是編碼器,其右邊部分至輸出層是解碼器。為了使模型能夠更好地泛化,中間表示向量的維度會被設為低于輸入信息的維度,以促使表示向量只保留主要的信息。dAE在AE的基礎上通過對帶噪音的輸入數(shù)據(jù)訓練,使其能夠重建干凈信號,達到去除噪音的效果[20]。
圖1 卷積自編碼器結(jié)構(gòu)Fig.1 Convolutional dAE topology
如果將電器的時序用電功率視為干凈的信號,其他電器的用電功率視為噪音,則可以將dAE應用于電能分解,并可將分解問題表述為
式中:y(t) 為所有電器在t時刻的混合功率;yi(t)為目標電器i在t時刻的功率;是其他電器在t時刻的功率和。NILM的表述中一般會包含一個隨機誤差項[4],但由于其他電器的功率和本身是噪音且遠遠大于隨機誤差,因此可忽略此隨機誤差項。
由于不同電器用電模式的變化,會使其功率產(chǎn)生起伏變化,類似一維圖像,因此在dAE中采用卷積層來幫助模型提取圖像特征。圖1中的編碼器和解碼器分別包含3個卷積層和1個全連接層。網(wǎng)絡的輸入為固定長度的混合功率,輸出為目標電器的干凈運行功率。由于每種電器的典型運行長度不一,且太大或太小的輸入長度在實驗中顯示出降低網(wǎng)絡分解效果的問題,本文針對不同電器的典型運行時長選取不同的網(wǎng)絡輸入長度。此外,由于最終目的是從一段不固定長度的混合功率y(t) (圖1最左邊豎直放置的波形圖)中分離出單個電器的干凈功率yi(t) (圖1最右邊豎直放置的波形圖),而dAE網(wǎng)絡僅僅是對一小段固定長度的混合信號進行分解,所以要把網(wǎng)絡產(chǎn)生的局部估計值拼接起來,以得到最終的完整且干凈的單電器功率。
由于網(wǎng)絡的輸入樣本可能包含重疊的部分,因此輸出結(jié)果也有重疊,如圖2所示,窗口109 300~109 900的分解結(jié)果分別和窗口108 950~109 550與窗口109 650~110 250的分解結(jié)果有部分重疊。為了從重疊的估計中確定最終的估計值,文獻[13]使用了所有估計值的算數(shù)平均數(shù),但文獻[14]指出算數(shù)平均數(shù)不能有效解決估計值低估的問題,因此采用中位數(shù)。而本文針對本文的訓練方法提出并使用了修正中位數(shù)。文獻[13]、文獻[14]的訓練樣本是直接截取原始數(shù)據(jù)中的混合樣本和干凈樣本作為訓練數(shù)據(jù)的樣本和標簽,因此使用平均數(shù)和中位數(shù)是合理的。但本文提出將包含不完整運行區(qū)間的樣本作為負樣本,使其標簽值為零。這樣能夠提高模型(指本文提出的網(wǎng)絡結(jié)構(gòu))對非零值的估計準確度,但同時會人為地造成過多的零估計值,因此需要引入修正中位數(shù)來消除這些零估計值的影響。修正邏輯是剝離零估計值后,再取中位數(shù),因此修正中位數(shù)不再是0.5,而是位于0.5和1之間。中位數(shù)的表達式為
式中:r和w分別為目標電器的平均運行時長和窗口長度,且r<w。
圖2 3 個重疊的分解窗口Fig.2 Three overlapping disaggregation windows
本文采用文獻[14]使用的針對能量估計的Precision 指標(Pi),Recall指標(Ri),F(xiàn)1指標和 NEP(normalized error in assigned power)指標(Ei)。Precision指標反映了實際功率占分解出的功率的比例,其表達式為
式中:i為目標電器編號;y?i(t) 、yi(t) 分別為電器i在t時刻的估計功率和實際功率;T為測試數(shù)據(jù)的總時長,按采樣點個數(shù)計。
Recall指標反映了分解出的功率占實際功率的比例,其表達式為
F1指標是Precision指標和Recall指標的調(diào)和平均數(shù),其表達式為
NEP指標度量分解誤差占真實功率的比例,其表達式為
REDD數(shù)據(jù)集[18]包含了6個美國家庭且每個家庭大約20種電器的單獨數(shù)據(jù)和總電表的數(shù)據(jù),單個電器的采樣間隔為3 s。其中一個實驗是對某個家庭的用電情況進行了約為30 d的采樣,約70萬個采樣點,由于總電表的部分數(shù)據(jù)存在明顯異常,所以采用了所有電器數(shù)據(jù)的疊加來代替總電表數(shù)據(jù)。實驗在3種運行特征較為獨特的電器上進行,分別是洗碗機、微波爐、冰箱。冰箱的運行功率相對較低,功率變化單調(diào),運行時長相對固定,但經(jīng)常啟動。洗碗機是不常用電器,運行時功率起伏變化較為獨特,運行時長相對固定。微波爐經(jīng)常啟動,功率高但變化比較單調(diào),運行時長差異大。
首先,通過閾值的方法在原始時序數(shù)據(jù)上定位電器的運行區(qū)間。從零時刻開始掃描每個采樣點,如果連續(xù)多個采樣點的功率達到運行功率閾值以上,且個數(shù)達到運行時長閾值以上,則記為開始運行。如果出現(xiàn)多個連續(xù)采樣點的功率達到運行功率閾值以下,且個數(shù)達到停止時長閾值以上,則記為運行結(jié)束,并將運行開始到運行結(jié)束的這段采樣點記為一個運行區(qū)間。
然后,從下一個采樣點開始重復以上判定。運行區(qū)間的判定閾值見表1。各電器的運行區(qū)間統(tǒng)計信息見表2。表中原始數(shù)據(jù)是由電表按固定時間間隔采集的,因此時長和采樣點個數(shù)是等價的。
每個電器生成5 000個正樣本和5 000個負樣本并分別作為訓練集和驗證集。正樣本為包含完整運行區(qū)間的樣本,標簽為目標電器的單電器功率。負樣本為不包含完整運行區(qū)間的樣本。與已有方法不同的是,本方法要求所有負樣本的標簽被零值化,即不包含運行區(qū)間和只包含部分運行區(qū)間的樣本標簽均被置為零向量。訓練集和驗證集的比例為8∶2,其中真實樣本和合成樣本各占一半。訓練集和驗證集樣本產(chǎn)生于60萬個采樣點(約21 d),測試樣本產(chǎn)生于另外10萬個采樣點(約3.5 d)。樣本長度(即窗口長度),見表2。
表1 運行區(qū)間的判定閾值Tab.1 Criteria of the active segment
表2 電器運行區(qū)間的統(tǒng)計信息以及窗口長度Tab.2 Statistics of active sections and window length
此外,合成樣本和標簽的方法如下:
1)針對目標電器生成標簽,將目標電器的運行樣本放入一個窗口的隨機位置,但保證運行區(qū)間完整。
2)其他電器分別有25%的幾率被放入窗口中的任意位置作為噪聲,將標簽和噪聲疊加起來合成一個正樣本。同時,合成對應的負樣本,即生成噪聲部分,并使其對應的標簽為零向量。
3)對每個電器的輸入數(shù)據(jù)進行歸一化,使用的均值和方差來自于所有原始混合數(shù)據(jù)。對每個電器的標簽數(shù)據(jù)進行最小、最大規(guī)范化,其最小值設為0,其最大值設為表2中最高功率的最小值。
本文采用的網(wǎng)絡結(jié)構(gòu)如表3所示,由3層卷積(Conv),2層全連接(Fc),3層反卷積(Deconv)組成。第1層全連接的輸出維度固定為128。卷積層和反卷積層的卷積核維數(shù)為4,步長數(shù)為1,填充數(shù)為0。輸入輸出維數(shù)匹配各電器的窗口長度(N個采樣點)。此外,每個卷積層(除最后一層)和全連接層包含批歸一化層和修正線性單元激活層。表4為各個電器模型的參數(shù)量統(tǒng)計信息,可見本文采用的網(wǎng)絡比較輕型,有利于實時檢測。
表3 網(wǎng)絡結(jié)構(gòu)Tab.3 Network structure
表4 3 種電器的模型統(tǒng)計數(shù)據(jù)Tab.4 Statistics of models for three devices
網(wǎng)絡搭建在PyTorch平臺上,使用CPU(Intel i5-7200U 2.5 GHz)訓練,操作系統(tǒng)是Windows 10。用平均平方誤差作為網(wǎng)絡訓練的損失函數(shù),使用ADAM優(yōu)化器進行迷你批梯度下降。網(wǎng)絡的主要超參數(shù)設置見表5,其他設置采用PyTorch默認值。通過預實驗發(fā)現(xiàn),學習率小于0.01時對模型的收斂無明顯影響,因此固定學習率為0.01。預實驗還顯示,訓練集的損失值隨著訓練的進行會不斷減小,但驗證集的損失值在50個迭代期數(shù)(Epoch)內(nèi)會出現(xiàn)下降并反彈的情況,因此設置訓練的最大迭代期數(shù)為50,最后從50個迭代期數(shù)中選擇使驗證集損失最小的作為最終的模型參數(shù)。此外,采用端到端一次性訓練,不進行逐層預訓練,不綁定編碼器和解碼器的權重,因為這些操作沒用對模型的準確度產(chǎn)生明顯的影響。
表5 超參數(shù)Tab.5 Hyperparameters
采用滑動窗口方式,按時序截取固定長度的采樣點作為網(wǎng)絡輸入,窗口長度見表2。滑動步長統(tǒng)一采用10個采樣點,約合30 s。由于滑動步長小于窗口的長度,每個時刻會出現(xiàn)多個估計值,最終的估計值則由計算重復預測值中的修正中位數(shù)來得到。
本文方法是在文獻[13]和文獻[14]方法的基礎上對網(wǎng)絡進行了2點改進。1)表6和表7分別是文獻[13]和本文網(wǎng)絡結(jié)構(gòu),文獻[13]使用單層卷積和單層反卷積,中間使用了3個全連接層,而本文在使用相同卷積核和相同中間表示向量的情況下,去除了 一個全連接層,再增加了2對卷積層和反卷積層,并且對每層附加批歸一化和ReLU激活,使模型訓練更對稱,訓練更穩(wěn)定、快速,結(jié)果更準確。2)在滑動窗口分解結(jié)果集成上,文獻[13]使用了簡單的算術平均數(shù),文獻[14]將其改進為中位數(shù)以減少半運行窗口產(chǎn)生的低估值的影響,而本文在計算中位數(shù)時直接排除半運行窗口產(chǎn)生的低估值,并配合訓練標簽零值化預處理,同時減少低估值和高估值。
表7 本文中的網(wǎng)絡結(jié)構(gòu)Tab.7 Network structure in this paper
本文按文獻[13]的方法對本文的數(shù)據(jù)進行訓練和分解,由于文獻[14]是在文獻[13]的基礎上對卷積層數(shù)、表示層寬度、滑動步長等進行的組合實驗,并配合了中位數(shù)集成方法,雖然得到了更高的準確度,但沒有提供其具體網(wǎng)絡配置。因此,本文不是文獻[14]方法的復現(xiàn),而僅選取其提供的在REDD數(shù)據(jù)集上實驗結(jié)果來與本文結(jié)果相比較。
本文使用3層卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)配合以半運行樣本為負樣本的方法,能夠有效地確定目標電器的運行區(qū)間和功率。圖3是3種電器功率的分解結(jié)果,(a)、(b)分別為洗碗機和微波爐一個完整運行區(qū)間的分解結(jié)果,(c)為冰箱多個完整運行區(qū)間的分解結(jié)果。
圖3 3 種電器的功率分解結(jié)果Fig.3 Disaggregation results of three electric appliances
本方法的運行步驟如下:1)通過神經(jīng)網(wǎng)絡對每個滑動窗口進行局部預測;2)通過集成的方式對重疊窗口的預測值選取修正中位數(shù),從而得到原始混合數(shù)據(jù)的分解結(jié)果。表8顯示了每個電器在每個步驟上所需時間,數(shù)據(jù)長度為100 000個采樣點(約合3.5 d)。由于模型結(jié)構(gòu)簡單,運行時間非常短,按本實驗的設置,每隔1 s采集一次功率,每隔10個采樣點產(chǎn)生一個滑動窗口,按單次分解平均耗時3.54 ms計算,最多可以同時對2 824個電器進行功率分解,表明本文方法具有實時性。
表8 本文方法對測試數(shù)據(jù)的分解耗時Tab.8 Disaggregation time on test data using the method in this paper
表9顯示了本文模型和文獻[13]、文獻[14]模型在測試數(shù)據(jù)上的準確度。在本文的模型中,洗碗機的結(jié)果最好,F(xiàn)1指標可達到0.83,NEP指標可達到0.37,這是由于其完整運行包含的功率變化較復雜,使其模式較為明顯,而且其他未展示的運行區(qū)間差別不大。冰箱的分解效果也比較好,F(xiàn)1指標達到0.72,NEP指標達到0.52,模型可以準確辨識大多數(shù)噪音較小的運行區(qū)間,估計值和實際值幾乎重合。微波爐的F1和NEP指標比洗碗機和冰箱差,分別僅達到0.65和0.69??赡苡捎谖⒉t的每次工作時長差異太大,且分布較為分散,測試集中容易出現(xiàn)與訓練集差異較大的樣本,導致其分解準確度次于洗碗機和冰箱。
表9 算法準確度對比Tab.9 Accuracy comparison of algorithms
與文獻[13]、文獻[14]的方法相比,本文的方法在F1和NEP指標上對不同電器都有不同程度的提高??傮w上,本文方法的F1指標和NEP指標平均值比文獻[13]提高了35%和51%,比文獻[14]提高了13%和12%。
針對分解混合電器能耗的任務,提出了一種包含改進型去噪自編碼器的神經(jīng)網(wǎng)絡方法。本方法使用3層卷積、2層全連接和3層反卷積的網(wǎng)絡結(jié)構(gòu),搭配批標準化處理和ReLU激活,在減少參數(shù)個數(shù)并提高模型效率的同時,保證甚至加強了模型提取圖像信息的能力。此外,本文還采用了零值化所有半運行訓練樣本的創(chuàng)新方法,促使模型更有效地利用神經(jīng)網(wǎng)絡有限的容量,從而提高模型分解各種電器能耗的準確度。
由于本文模型僅限于單電器的分解,沒有綜合考慮各種電器單獨功率和混合功率的關系,所以還存在較多的不足。未來將開展更多的研究,如研究模型分解小功率電器的能力,在更多的數(shù)據(jù)集上進行驗證,并嘗試把不同電器的分解網(wǎng)絡統(tǒng)一到一個神經(jīng)網(wǎng)絡中。